From 9172e608a05b5e5cc0ae453e116b748938a0000f Mon Sep 17 00:00:00 2001 From: Florian Bogner <f.bogner@pcsg.de> Date: Mon, 15 May 2017 11:50:13 +0200 Subject: [PATCH] feat: Added storepageurl to the table, added more plugins from the store --- bin/backend/controls/UploadWindow.js | 10 +- bin/backend/controls/settings/Plugins.js | 112 +- locale.xml | 12 + .../Text2Speech/icons/icona-audio.png | Bin 0 -> 335 bytes plugins/ckeditor4/Text2Speech/plugin.js | 69 + .../ckeditor4/autocorrect/dialogs/options.js | 273 ++ .../autocorrect/icons/autocorrect--.png | Bin 0 -> 382 bytes .../autocorrect/icons/autocorrect.png | Bin 0 -> 420 bytes .../autocorrect/icons/hidpi/autocorrect-.png | Bin 0 -> 595 bytes .../autocorrect/icons/hidpi/autocorrect.png | Bin 0 -> 618 bytes plugins/ckeditor4/autocorrect/lang/en.js | 23 + plugins/ckeditor4/autocorrect/lang/ru.js | 22 + plugins/ckeditor4/autocorrect/plugin.js | 1002 ++++++ plugins/ckeditor4/base64image/LICENSE.md | 1244 +++++++ plugins/ckeditor4/base64image/README.md | 21 + .../base64image/dialogs/base64image.js | 503 +++ .../base64image/icons/base64image.png | Bin 0 -> 3175 bytes .../base64image/icons/hidpi/base64image.png | Bin 0 -> 4112 bytes plugins/ckeditor4/base64image/lang/af.js | 12 + plugins/ckeditor4/base64image/lang/ar.js | 12 + plugins/ckeditor4/base64image/lang/bg.js | 12 + plugins/ckeditor4/base64image/lang/bn.js | 12 + plugins/ckeditor4/base64image/lang/bs.js | 12 + plugins/ckeditor4/base64image/lang/ca.js | 12 + plugins/ckeditor4/base64image/lang/cs.js | 12 + plugins/ckeditor4/base64image/lang/cy.js | 12 + plugins/ckeditor4/base64image/lang/da.js | 12 + plugins/ckeditor4/base64image/lang/de.js | 12 + plugins/ckeditor4/base64image/lang/el.js | 12 + plugins/ckeditor4/base64image/lang/en-au.js | 12 + plugins/ckeditor4/base64image/lang/en-ca.js | 12 + plugins/ckeditor4/base64image/lang/en-gb.js | 12 + plugins/ckeditor4/base64image/lang/en.js | 12 + plugins/ckeditor4/base64image/lang/eo.js | 12 + plugins/ckeditor4/base64image/lang/es.js | 12 + plugins/ckeditor4/base64image/lang/et.js | 12 + plugins/ckeditor4/base64image/lang/eu.js | 12 + plugins/ckeditor4/base64image/lang/fa.js | 12 + plugins/ckeditor4/base64image/lang/fi.js | 12 + plugins/ckeditor4/base64image/lang/fo.js | 12 + plugins/ckeditor4/base64image/lang/fr-ca.js | 12 + plugins/ckeditor4/base64image/lang/fr.js | 12 + plugins/ckeditor4/base64image/lang/gl.js | 12 + plugins/ckeditor4/base64image/lang/gu.js | 12 + plugins/ckeditor4/base64image/lang/he.js | 12 + plugins/ckeditor4/base64image/lang/hi.js | 12 + plugins/ckeditor4/base64image/lang/hr.js | 12 + plugins/ckeditor4/base64image/lang/hu.js | 12 + plugins/ckeditor4/base64image/lang/id.js | 12 + plugins/ckeditor4/base64image/lang/is.js | 12 + plugins/ckeditor4/base64image/lang/it.js | 12 + plugins/ckeditor4/base64image/lang/ja.js | 12 + plugins/ckeditor4/base64image/lang/ka.js | 12 + plugins/ckeditor4/base64image/lang/km.js | 12 + plugins/ckeditor4/base64image/lang/ko.js | 12 + plugins/ckeditor4/base64image/lang/ku.js | 12 + plugins/ckeditor4/base64image/lang/lt.js | 12 + plugins/ckeditor4/base64image/lang/lv.js | 12 + plugins/ckeditor4/base64image/lang/mk.js | 12 + plugins/ckeditor4/base64image/lang/mn.js | 12 + plugins/ckeditor4/base64image/lang/ms.js | 12 + plugins/ckeditor4/base64image/lang/nb.js | 12 + plugins/ckeditor4/base64image/lang/nl.js | 12 + plugins/ckeditor4/base64image/lang/no.js | 12 + plugins/ckeditor4/base64image/lang/pl.js | 12 + plugins/ckeditor4/base64image/lang/pt-br.js | 12 + plugins/ckeditor4/base64image/lang/pt.js | 12 + plugins/ckeditor4/base64image/lang/ro.js | 12 + plugins/ckeditor4/base64image/lang/ru.js | 12 + plugins/ckeditor4/base64image/lang/si.js | 12 + plugins/ckeditor4/base64image/lang/sk.js | 12 + plugins/ckeditor4/base64image/lang/sl.js | 12 + plugins/ckeditor4/base64image/lang/sq.js | 12 + plugins/ckeditor4/base64image/lang/sr-latn.js | 12 + plugins/ckeditor4/base64image/lang/sr.js | 12 + plugins/ckeditor4/base64image/lang/sv.js | 12 + plugins/ckeditor4/base64image/lang/th.js | 12 + plugins/ckeditor4/base64image/lang/tr.js | 12 + plugins/ckeditor4/base64image/lang/ug.js | 12 + plugins/ckeditor4/base64image/lang/uk.js | 12 + plugins/ckeditor4/base64image/lang/vi.js | 12 + plugins/ckeditor4/base64image/lang/zh-cn.js | 12 + plugins/ckeditor4/base64image/lang/zh.js | 12 + plugins/ckeditor4/base64image/plugin.js | 57 + .../ckeditor4/ckawesome/dialogs/ckawesome.css | 5 + .../ckeditor4/ckawesome/dialogs/ckawesome.js | 149 + .../ckeditor4/ckawesome/icons/ckawesome.png | Bin 0 -> 1523 bytes plugins/ckeditor4/ckawesome/plugin.js | 33 + .../resources/select2/select2.full.min.css | 1 + .../resources/select2/select2.full.min.js | 3 + .../.gitattributes | 5 + .../ckeditortablecellsselection/.gitignore | 1 + .../ckeditortablecellsselection/LICENSE | 21 + .../ckeditortablecellsselection/README.md | 20 + .../ckeditortablecellsselection.gif | Bin 0 -> 508340 bytes .../js/tablecellsselection.js | 601 ++++ .../ckeditortablecellsselection/plugin.js | 456 +++ .../styles/tablecellsselection.css | 28 + .../ckwebspeech/dialogs/ckwebspeech.js | 1 + .../ckeditor4/ckwebspeech/icons/speech.gif | Bin 0 -> 418 bytes .../ckwebspeech/icons/webspeech-enable.gif | Bin 0 -> 1764 bytes .../ckwebspeech/icons/webspeech-settings.png | Bin 0 -> 406 bytes .../ckeditor4/ckwebspeech/icons/webspeech.png | Bin 0 -> 451 bytes plugins/ckeditor4/ckwebspeech/plugin.js | 1 + plugins/ckeditor4/codeTag | 1 + plugins/ckeditor4/crossreference/LICENSE.md | 1242 +++++++ plugins/ckeditor4/crossreference/README.md | 271 ++ .../dialogs/crossreference-anchor.js | 119 + .../dialogs/crossreference-link.js | 241 ++ .../icons/crossreference-anchor.png | Bin 0 -> 458 bytes .../icons/crossreference-link.png | Bin 0 -> 603 bytes .../icons/crossreference-update.png | Bin 0 -> 652 bytes .../crossreference/icons/crossreference.png | Bin 0 -> 469 bytes .../icons/hidpi/crossreference-anchor.png | Bin 0 -> 913 bytes .../icons/hidpi/crossreference-link.png | Bin 0 -> 1392 bytes .../icons/hidpi/crossreference-update.png | Bin 0 -> 1463 bytes .../icons/hidpi/crossreference.png | Bin 0 -> 898 bytes plugins/ckeditor4/crossreference/lang/en.js | 21 + plugins/ckeditor4/crossreference/lang/ru.js | 21 + plugins/ckeditor4/crossreference/plugin.js | 449 +++ plugins/ckeditor4/cssanim/css/cssanim.css | 2938 +++++++++++++++++ .../ckeditor4/cssanim/css/prefixfree.min.js | 18 + .../cssanim/dialogs/css3animation.png | Bin 0 -> 6029 bytes .../ckeditor4/cssanim/dialogs/cssaddanim.js | 472 +++ .../cssanim/dialogs/cssaddanim.min.js | 1 + plugins/ckeditor4/cssanim/dialogs/cssanim.js | 528 +++ .../ckeditor4/cssanim/dialogs/cssanim.min.js | 1 + plugins/ckeditor4/cssanim/icons/cssanim.png | Bin 0 -> 1776 bytes plugins/ckeditor4/cssanim/images/add.png | Bin 0 -> 8388 bytes plugins/ckeditor4/cssanim/images/del.png | Bin 0 -> 12056 bytes plugins/ckeditor4/cssanim/images/edit.png | Bin 0 -> 4046 bytes .../ckeditor4/cssanim/images/highlight.png | Bin 0 -> 18537 bytes plugins/ckeditor4/cssanim/images/lamp.png | Bin 0 -> 7547 bytes plugins/ckeditor4/cssanim/lang/en.js | 62 + plugins/ckeditor4/cssanim/lang/fr.js | 62 + .../cssanim/parseCSS3AnimationShorthand.js | 61 + .../parseCSS3AnimationShorthand.min.js | 1 + plugins/ckeditor4/cssanim/plugin.js | 1049 ++++++ .../ckeditor4/enhancedcolorbutton/CHANGES.md | 24 + .../ckeditor4/enhancedcolorbutton/LICENSE.md | 1643 +++++++++ .../ckeditor4/enhancedcolorbutton/README.md | 37 + .../enhancedcolorbutton/css/content.css | 34 + .../enhancedcolorbutton/icons/bgcolor.png | Bin 0 -> 906 bytes .../enhancedcolorbutton/icons/bgcolor2.png | Bin 0 -> 906 bytes .../icons/hidpi/bgcolor.png | Bin 0 -> 2169 bytes .../icons/hidpi/bgcolor2.png | Bin 0 -> 2169 bytes .../icons/hidpi/textcolor.png | Bin 0 -> 1725 bytes .../icons/hidpi/textcolor2.png | Bin 0 -> 1725 bytes .../enhancedcolorbutton/icons/textcolor.png | Bin 0 -> 813 bytes .../enhancedcolorbutton/icons/textcolor2.png | Bin 0 -> 813 bytes .../ckeditor4/enhancedcolorbutton/lang/af.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/ar.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/bg.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/bn.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/bs.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/ca.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/cs.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/cy.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/da.js | 53 + .../enhancedcolorbutton/lang/de-ch.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/de.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/el.js | 53 + .../enhancedcolorbutton/lang/en-au.js | 53 + .../enhancedcolorbutton/lang/en-ca.js | 53 + .../enhancedcolorbutton/lang/en-gb.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/en.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/eo.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/es.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/et.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/eu.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/fa.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/fi.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/fo.js | 53 + .../enhancedcolorbutton/lang/fr-ca.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/fr.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/gl.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/gu.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/he.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/hi.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/hr.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/hu.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/id.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/is.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/it.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/ja.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/ka.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/km.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/ko.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/ku.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/lt.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/lv.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/mk.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/mn.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/ms.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/nb.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/nl.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/no.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/pl.js | 53 + .../enhancedcolorbutton/lang/pt-br.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/pt.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/ro.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/ru.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/si.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/sk.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/sl.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/sq.js | 53 + .../enhancedcolorbutton/lang/sr-latn.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/sr.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/sv.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/th.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/tr.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/tt.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/ug.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/uk.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/vi.js | 53 + .../enhancedcolorbutton/lang/zh-cn.js | 53 + .../ckeditor4/enhancedcolorbutton/lang/zh.js | 53 + .../ckeditor4/enhancedcolorbutton/plugin.js | 408 +++ .../tests/enhancedcolorbutton.html | 1 + .../tests/enhancedcolorbutton.js | 174 + .../tests/manual/enableautomatic.html | 16 + .../tests/manual/enableautomatic.md | 17 + plugins/ckeditor4/eqneditor/_notes/dwsync.xml | 1 + .../eqneditor/dialogs/_notes/dwsync.xml | 1 + .../ckeditor4/eqneditor/dialogs/eqneditor.js | 87 + .../eqneditor/dialogs/lang/_notes/dwsync.xml | 1 + .../ckeditor4/eqneditor/dialogs/lang/en.js | 8 + .../eqneditor/icons/_notes/dwsync.xml | 1 + .../ckeditor4/eqneditor/icons/eqneditor.png | Bin 0 -> 1093 bytes .../eqneditor/lang/_notes/dwsync.xml | 1 + plugins/ckeditor4/eqneditor/lang/en.js | 8 + plugins/ckeditor4/eqneditor/plugin.js | 102 + plugins/ckeditor4/fixed/plugin.js | 47 + plugins/ckeditor4/floating-tools/README.md | 20 + plugins/ckeditor4/floating-tools/plugin.js | 582 ++++ .../ckeditor4/footnotes/dialogs/footnotes.js | 175 + .../ckeditor4/footnotes/icons/footnotes.png | Bin 0 -> 402 bytes plugins/ckeditor4/footnotes/plugin.js | 317 ++ plugins/ckeditor4/googlethisterm/LICENSE | 21 + plugins/ckeditor4/googlethisterm/README.md | 2 + plugins/ckeditor4/googlethisterm/plugin.js | 41 + .../html5audio/dialogs/html5audio.js | 117 + .../ckeditor4/html5audio/icons/html5audio.png | Bin 0 -> 560 bytes plugins/ckeditor4/html5audio/lang/de.js | 13 + plugins/ckeditor4/html5audio/lang/en.js | 13 + plugins/ckeditor4/html5audio/lang/es.js | 13 + plugins/ckeditor4/html5audio/lang/eu.js | 13 + plugins/ckeditor4/html5audio/lang/fr.js | 13 + plugins/ckeditor4/html5audio/lang/ru.js | 13 + plugins/ckeditor4/html5audio/lang/uk.js | 13 + plugins/ckeditor4/html5audio/lang/uz.js | 13 + plugins/ckeditor4/html5audio/plugin.js | 112 + .../html5video/dialogs/html5video.js | 161 + .../ckeditor4/html5video/icons/html5video.png | Bin 0 -> 14773 bytes plugins/ckeditor4/html5video/lang/de.js | 14 + plugins/ckeditor4/html5video/lang/en.js | 15 + plugins/ckeditor4/html5video/lang/es.js | 14 + plugins/ckeditor4/html5video/lang/eu.js | 14 + plugins/ckeditor4/html5video/lang/fr.js | 14 + plugins/ckeditor4/html5video/lang/ru.js | 15 + plugins/ckeditor4/html5video/lang/uk.js | 14 + plugins/ckeditor4/html5video/lang/uz.js | 14 + plugins/ckeditor4/html5video/plugin.js | 139 + plugins/ckeditor4/inserthtml4x | 1 + plugins/ckeditor4/lineheight/LICENSE | 22 + plugins/ckeditor4/lineheight/README.md | 2 + plugins/ckeditor4/lineheight/lang/LANG.js | 3 + plugins/ckeditor4/lineheight/lang/ar.js | 3 + plugins/ckeditor4/lineheight/lang/de.js | 3 + plugins/ckeditor4/lineheight/lang/en.js | 3 + plugins/ckeditor4/lineheight/lang/es.js | 3 + plugins/ckeditor4/lineheight/lang/fr.js | 3 + plugins/ckeditor4/lineheight/lang/ko.js | 3 + plugins/ckeditor4/lineheight/lang/pt.js | 3 + plugins/ckeditor4/lineheight/plugin.js | 81 + plugins/ckeditor4/lineheight/readme.txt | 30 + .../loremipsum/icons/hidpi/loremipsum.png | Bin 0 -> 401 bytes .../ckeditor4/loremipsum/icons/loremipsum.png | Bin 0 -> 293 bytes plugins/ckeditor4/loremipsum/lang/en.js | 8 + plugins/ckeditor4/loremipsum/lang/fr.js | 8 + plugins/ckeditor4/loremipsum/plugin.js | 131 + plugins/ckeditor4/markdown/.gitattributes | 22 + plugins/ckeditor4/markdown/.gitignore | 215 ++ plugins/ckeditor4/markdown/README.md | 60 + .../ckeditor4/markdown/css/codemirror.min.css | 1 + .../markdown/icons/hidpi/markdown.png | Bin 0 -> 3022 bytes plugins/ckeditor4/markdown/icons/markdown.png | Bin 0 -> 3026 bytes .../markdown/js/codemirror-gfm-min.js | 25 + plugins/ckeditor4/markdown/js/marked.js | 1272 +++++++ plugins/ckeditor4/markdown/js/to-markdown.js | 530 +++ plugins/ckeditor4/markdown/plugin.js | 194 ++ plugins/ckeditor4/markdown/theme/3024-day.css | 38 + .../ckeditor4/markdown/theme/3024-night.css | 37 + .../markdown/theme/ambiance-mobile.css | 5 + plugins/ckeditor4/markdown/theme/ambiance.css | 77 + .../ckeditor4/markdown/theme/base16-dark.css | 36 + .../ckeditor4/markdown/theme/base16-light.css | 36 + .../ckeditor4/markdown/theme/blackboard.css | 30 + plugins/ckeditor4/markdown/theme/cobalt.css | 23 + plugins/ckeditor4/markdown/theme/eclipse.css | 23 + plugins/ckeditor4/markdown/theme/elegant.css | 13 + .../ckeditor4/markdown/theme/erlang-dark.css | 32 + .../ckeditor4/markdown/theme/lesser-dark.css | 45 + plugins/ckeditor4/markdown/theme/mbo.css | 35 + plugins/ckeditor4/markdown/theme/mdn-like.css | 44 + plugins/ckeditor4/markdown/theme/midnight.css | 45 + plugins/ckeditor4/markdown/theme/monokai.css | 31 + plugins/ckeditor4/markdown/theme/neat.css | 12 + plugins/ckeditor4/markdown/theme/neo.css | 43 + plugins/ckeditor4/markdown/theme/night.css | 26 + .../ckeditor4/markdown/theme/paraiso-dark.css | 36 + .../markdown/theme/paraiso-light.css | 36 + .../markdown/theme/pastel-on-dark.css | 50 + plugins/ckeditor4/markdown/theme/rubyblue.css | 23 + .../ckeditor4/markdown/theme/solarized.css | 170 + .../ckeditor4/markdown/theme/the-matrix.css | 28 + .../theme/tomorrow-night-eighties.css | 36 + plugins/ckeditor4/markdown/theme/twilight.css | 30 + .../ckeditor4/markdown/theme/vibrant-ink.css | 32 + plugins/ckeditor4/markdown/theme/xq-dark.css | 51 + plugins/ckeditor4/markdown/theme/xq-light.css | 43 + .../page2images/icons/page2images.png | Bin 0 -> 7326 bytes plugins/ckeditor4/page2images/plugin.js | 94 + plugins/ckeditor4/pastebase64/plugin.js | 70 + plugins/ckeditor4/pbckcode/CHANGELOG.md | 44 + plugins/ckeditor4/pbckcode/LICENSE | 201 ++ plugins/ckeditor4/pbckcode/README.md | 179 + .../pbckcode/dialogs/PBSyntaxHighlighter.js | 102 + .../ckeditor4/pbckcode/dialogs/pbckcode.js | 205 ++ plugins/ckeditor4/pbckcode/dialogs/style.css | 38 + plugins/ckeditor4/pbckcode/icons/.DS_Store | Bin 0 -> 6148 bytes .../pbckcode/icons/hidpi/pbckcode.png | Bin 0 -> 2269 bytes plugins/ckeditor4/pbckcode/icons/pbckcode.png | Bin 0 -> 1632 bytes plugins/ckeditor4/pbckcode/lang/en.js | 13 + plugins/ckeditor4/pbckcode/lang/fr.js | 13 + plugins/ckeditor4/pbckcode/lang/ru.js | 13 + plugins/ckeditor4/pbckcode/lang/tr.js | 13 + plugins/ckeditor4/pbckcode/plugin.js | 109 + plugins/ckeditor4/pre/dialogs/pre.js | 142 + plugins/ckeditor4/pre/icons/pre.png | Bin 0 -> 1020 bytes plugins/ckeditor4/pre/lang/en.js | 19 + plugins/ckeditor4/pre/lang/ru.js | 18 + plugins/ckeditor4/pre/plugin.js | 202 ++ plugins/ckeditor4/prism/LICENSE.txt | 502 +++ plugins/ckeditor4/prism/README.md | 38 + .../prism/lib/prism/prism_patched.min.css | 1 + .../prism/lib/prism/prism_patched.min.js | 4 + plugins/ckeditor4/prism/plugin.js | 130 + .../icons/hidpi/selectall.png | Bin 0 -> 1093 bytes .../selectallcontextmenu/icons/selectall.png | Bin 0 -> 665 bytes .../ckeditor4/selectallcontextmenu/lang/af.js | 7 + .../ckeditor4/selectallcontextmenu/lang/ar.js | 7 + .../ckeditor4/selectallcontextmenu/lang/bg.js | 7 + .../ckeditor4/selectallcontextmenu/lang/bn.js | 7 + .../ckeditor4/selectallcontextmenu/lang/bs.js | 7 + .../ckeditor4/selectallcontextmenu/lang/ca.js | 7 + .../ckeditor4/selectallcontextmenu/lang/cs.js | 7 + .../ckeditor4/selectallcontextmenu/lang/cy.js | 7 + .../ckeditor4/selectallcontextmenu/lang/da.js | 7 + .../selectallcontextmenu/lang/de-ch.js | 7 + .../ckeditor4/selectallcontextmenu/lang/de.js | 7 + .../ckeditor4/selectallcontextmenu/lang/el.js | 7 + .../selectallcontextmenu/lang/en-au.js | 7 + .../selectallcontextmenu/lang/en-ca.js | 7 + .../selectallcontextmenu/lang/en-gb.js | 7 + .../ckeditor4/selectallcontextmenu/lang/en.js | 7 + .../ckeditor4/selectallcontextmenu/lang/eo.js | 7 + .../ckeditor4/selectallcontextmenu/lang/es.js | 7 + .../ckeditor4/selectallcontextmenu/lang/et.js | 7 + .../ckeditor4/selectallcontextmenu/lang/eu.js | 7 + .../ckeditor4/selectallcontextmenu/lang/fa.js | 7 + .../ckeditor4/selectallcontextmenu/lang/fi.js | 7 + .../ckeditor4/selectallcontextmenu/lang/fo.js | 7 + .../selectallcontextmenu/lang/fr-ca.js | 7 + .../ckeditor4/selectallcontextmenu/lang/fr.js | 7 + .../ckeditor4/selectallcontextmenu/lang/gl.js | 7 + .../ckeditor4/selectallcontextmenu/lang/gu.js | 7 + .../ckeditor4/selectallcontextmenu/lang/he.js | 7 + .../ckeditor4/selectallcontextmenu/lang/hi.js | 7 + .../ckeditor4/selectallcontextmenu/lang/hr.js | 7 + .../ckeditor4/selectallcontextmenu/lang/hu.js | 7 + .../ckeditor4/selectallcontextmenu/lang/id.js | 7 + .../ckeditor4/selectallcontextmenu/lang/is.js | 7 + .../ckeditor4/selectallcontextmenu/lang/it.js | 7 + .../ckeditor4/selectallcontextmenu/lang/ja.js | 7 + .../ckeditor4/selectallcontextmenu/lang/ka.js | 7 + .../ckeditor4/selectallcontextmenu/lang/km.js | 7 + .../ckeditor4/selectallcontextmenu/lang/ko.js | 7 + .../ckeditor4/selectallcontextmenu/lang/ku.js | 7 + .../ckeditor4/selectallcontextmenu/lang/lt.js | 7 + .../ckeditor4/selectallcontextmenu/lang/lv.js | 7 + .../ckeditor4/selectallcontextmenu/lang/mk.js | 7 + .../ckeditor4/selectallcontextmenu/lang/mn.js | 7 + .../ckeditor4/selectallcontextmenu/lang/ms.js | 7 + .../ckeditor4/selectallcontextmenu/lang/nb.js | 7 + .../ckeditor4/selectallcontextmenu/lang/nl.js | 7 + .../ckeditor4/selectallcontextmenu/lang/no.js | 7 + .../ckeditor4/selectallcontextmenu/lang/pl.js | 7 + .../selectallcontextmenu/lang/pt-br.js | 7 + .../ckeditor4/selectallcontextmenu/lang/pt.js | 7 + .../ckeditor4/selectallcontextmenu/lang/ro.js | 7 + .../ckeditor4/selectallcontextmenu/lang/ru.js | 7 + .../ckeditor4/selectallcontextmenu/lang/si.js | 7 + .../ckeditor4/selectallcontextmenu/lang/sk.js | 7 + .../ckeditor4/selectallcontextmenu/lang/sl.js | 7 + .../ckeditor4/selectallcontextmenu/lang/sq.js | 7 + .../selectallcontextmenu/lang/sr-latn.js | 7 + .../ckeditor4/selectallcontextmenu/lang/sr.js | 7 + .../ckeditor4/selectallcontextmenu/lang/sv.js | 7 + .../ckeditor4/selectallcontextmenu/lang/th.js | 7 + .../ckeditor4/selectallcontextmenu/lang/tr.js | 7 + .../ckeditor4/selectallcontextmenu/lang/tt.js | 7 + .../ckeditor4/selectallcontextmenu/lang/ug.js | 7 + .../ckeditor4/selectallcontextmenu/lang/uk.js | 7 + .../ckeditor4/selectallcontextmenu/lang/vi.js | 7 + .../selectallcontextmenu/lang/zh-cn.js | 7 + .../ckeditor4/selectallcontextmenu/lang/zh.js | 7 + .../ckeditor4/selectallcontextmenu/plugin.js | 76 + plugins/ckeditor4/smallerselection/plugin.js | 80 + plugins/ckeditor4/symbol/dialogs/lang/en.js | 181 + plugins/ckeditor4/symbol/dialogs/symbol.js | 18 + plugins/ckeditor4/symbol/icons/symbol.png | Bin 0 -> 212 bytes plugins/ckeditor4/symbol/lang/en.js | 1 + plugins/ckeditor4/symbol/plugin.js | 15 + plugins/ckeditor4/textselection/plugin.js | 423 +++ .../textselection/samples/textselection.html | 125 + plugins/ckeditor4/texttransform/LICENSE.md | 28 + plugins/ckeditor4/texttransform/README.md | 55 + .../images/transformCapitalize.png | Bin 0 -> 1410 bytes .../images/transformSwitcher.png | Bin 0 -> 1542 bytes .../texttransform/images/transformToLower.png | Bin 0 -> 1152 bytes .../texttransform/images/transformToUpper.png | Bin 0 -> 1211 bytes plugins/ckeditor4/texttransform/lang/en.js | 17 + plugins/ckeditor4/texttransform/lang/tr.js | 41 + plugins/ckeditor4/texttransform/plugin.js | 151 + plugins/ckeditor4/token/LICENSE | 340 ++ plugins/ckeditor4/token/ReadMe.md | 103 + plugins/ckeditor4/token/dialogs/token.js | 46 + plugins/ckeditor4/token/icons/hidpi/token.png | Bin 0 -> 14976 bytes plugins/ckeditor4/token/icons/token.png | Bin 0 -> 14658 bytes plugins/ckeditor4/token/lang/en.js | 6 + plugins/ckeditor4/token/lang/ru.js | 6 + plugins/ckeditor4/token/plugin.js | 115 + plugins/ckeditor4/tweetabletext/README.md | 58 + .../tweetabletext/css/tweetabletext.css | 7 + .../tweetabletext/dialogs/tweetabletext.js | 92 + .../tweetabletext/icons/tweetabletext.png | Bin 0 -> 1509 bytes plugins/ckeditor4/tweetabletext/plugin.js | 78 + .../videodetector/dialogs/videoDialog.js | 143 + .../videodetector/icons/icon_black.png | Bin 0 -> 656 bytes .../videodetector/icons/icon_white.png | Bin 0 -> 983 bytes .../videodetector/icons/videodetector.svg | 14 + plugins/ckeditor4/videodetector/plugin.js | 31 + .../ckeditor4/videodetector/videodetector.css | 48 + plugins/ckeditor4/wordcount/README.md | 92 + plugins/ckeditor4/wordcount/css/wordcount.css | 3 + plugins/ckeditor4/wordcount/lang/ar.js | 11 + plugins/ckeditor4/wordcount/lang/ca.js | 13 + plugins/ckeditor4/wordcount/lang/da.js | 13 + plugins/ckeditor4/wordcount/lang/de.js | 13 + plugins/ckeditor4/wordcount/lang/el.js | 13 + plugins/ckeditor4/wordcount/lang/en.js | 13 + plugins/ckeditor4/wordcount/lang/es.js | 13 + plugins/ckeditor4/wordcount/lang/eu.js | 13 + plugins/ckeditor4/wordcount/lang/fa.js | 12 + plugins/ckeditor4/wordcount/lang/fi.js | 14 + plugins/ckeditor4/wordcount/lang/fr.js | 11 + plugins/ckeditor4/wordcount/lang/he.js | 13 + plugins/ckeditor4/wordcount/lang/hr.js | 13 + plugins/ckeditor4/wordcount/lang/hu.js | 13 + plugins/ckeditor4/wordcount/lang/it.js | 14 + plugins/ckeditor4/wordcount/lang/ja.js | 13 + plugins/ckeditor4/wordcount/lang/nl.js | 13 + plugins/ckeditor4/wordcount/lang/no.js | 10 + plugins/ckeditor4/wordcount/lang/pl.js | 13 + plugins/ckeditor4/wordcount/lang/pt-br.js | 13 + plugins/ckeditor4/wordcount/lang/pt.js | 9 + plugins/ckeditor4/wordcount/lang/ru.js | 13 + plugins/ckeditor4/wordcount/lang/sk.js | 14 + plugins/ckeditor4/wordcount/lang/sv.js | 13 + plugins/ckeditor4/wordcount/lang/tr.js | 13 + plugins/ckeditor4/wordcount/lang/zh-cn.js | 13 + plugins/ckeditor4/wordcount/plugin.js | 430 +++ .../wordcount/samples/wordcount.html | 61 + .../samples/wordcountWithMaxCount.html | 110 + plugins/ckeditor4/youtube/LICENSE.md | 15 + plugins/ckeditor4/youtube/images/icon.png | Bin 0 -> 419 bytes plugins/ckeditor4/youtube/lang/ar.js | 24 + plugins/ckeditor4/youtube/lang/cs.js | 25 + plugins/ckeditor4/youtube/lang/de.js | 24 + plugins/ckeditor4/youtube/lang/el.js | 23 + plugins/ckeditor4/youtube/lang/en.js | 25 + plugins/ckeditor4/youtube/lang/es.js | 24 + plugins/ckeditor4/youtube/lang/et.js | 24 + plugins/ckeditor4/youtube/lang/fi.js | 24 + plugins/ckeditor4/youtube/lang/fr.js | 24 + plugins/ckeditor4/youtube/lang/he.js | 24 + plugins/ckeditor4/youtube/lang/hu.js | 24 + plugins/ckeditor4/youtube/lang/it.js | 24 + plugins/ckeditor4/youtube/lang/ja.js | 24 + plugins/ckeditor4/youtube/lang/ko.js | 25 + plugins/ckeditor4/youtube/lang/nb.js | 24 + plugins/ckeditor4/youtube/lang/nl.js | 25 + plugins/ckeditor4/youtube/lang/nn.js | 24 + plugins/ckeditor4/youtube/lang/pl.js | 24 + plugins/ckeditor4/youtube/lang/pt-br.js | 25 + plugins/ckeditor4/youtube/lang/pt.js | 25 + plugins/ckeditor4/youtube/lang/ru.js | 24 + plugins/ckeditor4/youtube/lang/sk.js | 24 + plugins/ckeditor4/youtube/lang/tr.js | 24 + plugins/ckeditor4/youtube/lang/vi.js | 24 + plugins/ckeditor4/youtube/lang/zh.js | 24 + plugins/ckeditor4/youtube/plugin.js | 448 +++ plugins/ckeditor4/zoom/plugin.js | 109 + plugins/dependencies.json | 47 + 515 files changed, 31995 insertions(+), 41 deletions(-) create mode 100644 plugins/ckeditor4/Text2Speech/icons/icona-audio.png create mode 100644 plugins/ckeditor4/Text2Speech/plugin.js create mode 100644 plugins/ckeditor4/autocorrect/dialogs/options.js create mode 100644 plugins/ckeditor4/autocorrect/icons/autocorrect--.png create mode 100644 plugins/ckeditor4/autocorrect/icons/autocorrect.png create mode 100644 plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect-.png create mode 100644 plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect.png create mode 100644 plugins/ckeditor4/autocorrect/lang/en.js create mode 100644 plugins/ckeditor4/autocorrect/lang/ru.js create mode 100644 plugins/ckeditor4/autocorrect/plugin.js create mode 100644 plugins/ckeditor4/base64image/LICENSE.md create mode 100644 plugins/ckeditor4/base64image/README.md create mode 100644 plugins/ckeditor4/base64image/dialogs/base64image.js create mode 100644 plugins/ckeditor4/base64image/icons/base64image.png create mode 100644 plugins/ckeditor4/base64image/icons/hidpi/base64image.png create mode 100644 plugins/ckeditor4/base64image/lang/af.js create mode 100644 plugins/ckeditor4/base64image/lang/ar.js create mode 100644 plugins/ckeditor4/base64image/lang/bg.js create mode 100644 plugins/ckeditor4/base64image/lang/bn.js create mode 100644 plugins/ckeditor4/base64image/lang/bs.js create mode 100644 plugins/ckeditor4/base64image/lang/ca.js create mode 100644 plugins/ckeditor4/base64image/lang/cs.js create mode 100644 plugins/ckeditor4/base64image/lang/cy.js create mode 100644 plugins/ckeditor4/base64image/lang/da.js create mode 100644 plugins/ckeditor4/base64image/lang/de.js create mode 100644 plugins/ckeditor4/base64image/lang/el.js create mode 100644 plugins/ckeditor4/base64image/lang/en-au.js create mode 100644 plugins/ckeditor4/base64image/lang/en-ca.js create mode 100644 plugins/ckeditor4/base64image/lang/en-gb.js create mode 100644 plugins/ckeditor4/base64image/lang/en.js create mode 100644 plugins/ckeditor4/base64image/lang/eo.js create mode 100644 plugins/ckeditor4/base64image/lang/es.js create mode 100644 plugins/ckeditor4/base64image/lang/et.js create mode 100644 plugins/ckeditor4/base64image/lang/eu.js create mode 100644 plugins/ckeditor4/base64image/lang/fa.js create mode 100644 plugins/ckeditor4/base64image/lang/fi.js create mode 100644 plugins/ckeditor4/base64image/lang/fo.js create mode 100644 plugins/ckeditor4/base64image/lang/fr-ca.js create mode 100644 plugins/ckeditor4/base64image/lang/fr.js create mode 100644 plugins/ckeditor4/base64image/lang/gl.js create mode 100644 plugins/ckeditor4/base64image/lang/gu.js create mode 100644 plugins/ckeditor4/base64image/lang/he.js create mode 100644 plugins/ckeditor4/base64image/lang/hi.js create mode 100644 plugins/ckeditor4/base64image/lang/hr.js create mode 100644 plugins/ckeditor4/base64image/lang/hu.js create mode 100644 plugins/ckeditor4/base64image/lang/id.js create mode 100644 plugins/ckeditor4/base64image/lang/is.js create mode 100644 plugins/ckeditor4/base64image/lang/it.js create mode 100644 plugins/ckeditor4/base64image/lang/ja.js create mode 100644 plugins/ckeditor4/base64image/lang/ka.js create mode 100644 plugins/ckeditor4/base64image/lang/km.js create mode 100644 plugins/ckeditor4/base64image/lang/ko.js create mode 100644 plugins/ckeditor4/base64image/lang/ku.js create mode 100644 plugins/ckeditor4/base64image/lang/lt.js create mode 100644 plugins/ckeditor4/base64image/lang/lv.js create mode 100644 plugins/ckeditor4/base64image/lang/mk.js create mode 100644 plugins/ckeditor4/base64image/lang/mn.js create mode 100644 plugins/ckeditor4/base64image/lang/ms.js create mode 100644 plugins/ckeditor4/base64image/lang/nb.js create mode 100644 plugins/ckeditor4/base64image/lang/nl.js create mode 100644 plugins/ckeditor4/base64image/lang/no.js create mode 100644 plugins/ckeditor4/base64image/lang/pl.js create mode 100644 plugins/ckeditor4/base64image/lang/pt-br.js create mode 100644 plugins/ckeditor4/base64image/lang/pt.js create mode 100644 plugins/ckeditor4/base64image/lang/ro.js create mode 100644 plugins/ckeditor4/base64image/lang/ru.js create mode 100644 plugins/ckeditor4/base64image/lang/si.js create mode 100644 plugins/ckeditor4/base64image/lang/sk.js create mode 100644 plugins/ckeditor4/base64image/lang/sl.js create mode 100644 plugins/ckeditor4/base64image/lang/sq.js create mode 100644 plugins/ckeditor4/base64image/lang/sr-latn.js create mode 100644 plugins/ckeditor4/base64image/lang/sr.js create mode 100644 plugins/ckeditor4/base64image/lang/sv.js create mode 100644 plugins/ckeditor4/base64image/lang/th.js create mode 100644 plugins/ckeditor4/base64image/lang/tr.js create mode 100644 plugins/ckeditor4/base64image/lang/ug.js create mode 100644 plugins/ckeditor4/base64image/lang/uk.js create mode 100644 plugins/ckeditor4/base64image/lang/vi.js create mode 100644 plugins/ckeditor4/base64image/lang/zh-cn.js create mode 100644 plugins/ckeditor4/base64image/lang/zh.js create mode 100644 plugins/ckeditor4/base64image/plugin.js create mode 100644 plugins/ckeditor4/ckawesome/dialogs/ckawesome.css create mode 100644 plugins/ckeditor4/ckawesome/dialogs/ckawesome.js create mode 100644 plugins/ckeditor4/ckawesome/icons/ckawesome.png create mode 100644 plugins/ckeditor4/ckawesome/plugin.js create mode 100644 plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.css create mode 100644 plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.js create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/.gitattributes create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/.gitignore create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/LICENSE create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/README.md create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/ckeditortablecellsselection.gif create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/js/tablecellsselection.js create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/plugin.js create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/styles/tablecellsselection.css create mode 100644 plugins/ckeditor4/ckwebspeech/dialogs/ckwebspeech.js create mode 100644 plugins/ckeditor4/ckwebspeech/icons/speech.gif create mode 100644 plugins/ckeditor4/ckwebspeech/icons/webspeech-enable.gif create mode 100644 plugins/ckeditor4/ckwebspeech/icons/webspeech-settings.png create mode 100644 plugins/ckeditor4/ckwebspeech/icons/webspeech.png create mode 100644 plugins/ckeditor4/ckwebspeech/plugin.js create mode 160000 plugins/ckeditor4/codeTag create mode 100644 plugins/ckeditor4/crossreference/LICENSE.md create mode 100644 plugins/ckeditor4/crossreference/README.md create mode 100644 plugins/ckeditor4/crossreference/dialogs/crossreference-anchor.js create mode 100644 plugins/ckeditor4/crossreference/dialogs/crossreference-link.js create mode 100644 plugins/ckeditor4/crossreference/icons/crossreference-anchor.png create mode 100644 plugins/ckeditor4/crossreference/icons/crossreference-link.png create mode 100644 plugins/ckeditor4/crossreference/icons/crossreference-update.png create mode 100644 plugins/ckeditor4/crossreference/icons/crossreference.png create mode 100644 plugins/ckeditor4/crossreference/icons/hidpi/crossreference-anchor.png create mode 100644 plugins/ckeditor4/crossreference/icons/hidpi/crossreference-link.png create mode 100644 plugins/ckeditor4/crossreference/icons/hidpi/crossreference-update.png create mode 100644 plugins/ckeditor4/crossreference/icons/hidpi/crossreference.png create mode 100644 plugins/ckeditor4/crossreference/lang/en.js create mode 100644 plugins/ckeditor4/crossreference/lang/ru.js create mode 100644 plugins/ckeditor4/crossreference/plugin.js create mode 100644 plugins/ckeditor4/cssanim/css/cssanim.css create mode 100644 plugins/ckeditor4/cssanim/css/prefixfree.min.js create mode 100644 plugins/ckeditor4/cssanim/dialogs/css3animation.png create mode 100644 plugins/ckeditor4/cssanim/dialogs/cssaddanim.js create mode 100644 plugins/ckeditor4/cssanim/dialogs/cssaddanim.min.js create mode 100644 plugins/ckeditor4/cssanim/dialogs/cssanim.js create mode 100644 plugins/ckeditor4/cssanim/dialogs/cssanim.min.js create mode 100644 plugins/ckeditor4/cssanim/icons/cssanim.png create mode 100644 plugins/ckeditor4/cssanim/images/add.png create mode 100644 plugins/ckeditor4/cssanim/images/del.png create mode 100644 plugins/ckeditor4/cssanim/images/edit.png create mode 100644 plugins/ckeditor4/cssanim/images/highlight.png create mode 100644 plugins/ckeditor4/cssanim/images/lamp.png create mode 100644 plugins/ckeditor4/cssanim/lang/en.js create mode 100644 plugins/ckeditor4/cssanim/lang/fr.js create mode 100644 plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.js create mode 100644 plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.min.js create mode 100644 plugins/ckeditor4/cssanim/plugin.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/CHANGES.md create mode 100644 plugins/ckeditor4/enhancedcolorbutton/LICENSE.md create mode 100644 plugins/ckeditor4/enhancedcolorbutton/README.md create mode 100644 plugins/ckeditor4/enhancedcolorbutton/css/content.css create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor.png create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor2.png create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor.png create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor2.png create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor.png create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor2.png create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/textcolor.png create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/textcolor2.png create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/af.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ar.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/bg.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/bn.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/bs.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ca.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/cs.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/cy.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/da.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/de-ch.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/de.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/el.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/en-au.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/en-ca.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/en-gb.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/en.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/eo.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/es.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/et.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/eu.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/fa.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/fi.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/fo.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/fr-ca.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/fr.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/gl.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/gu.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/he.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/hi.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/hr.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/hu.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/id.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/is.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/it.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ja.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ka.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/km.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ko.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ku.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/lt.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/lv.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/mk.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/mn.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ms.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/nb.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/nl.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/no.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/pl.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/pt-br.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/pt.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ro.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ru.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/si.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sk.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sl.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sq.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sr-latn.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sr.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sv.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/th.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/tr.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/tt.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ug.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/uk.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/vi.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/zh-cn.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/zh.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/plugin.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.html create mode 100644 plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.js create mode 100644 plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.html create mode 100644 plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.md create mode 100755 plugins/ckeditor4/eqneditor/_notes/dwsync.xml create mode 100755 plugins/ckeditor4/eqneditor/dialogs/_notes/dwsync.xml create mode 100755 plugins/ckeditor4/eqneditor/dialogs/eqneditor.js create mode 100755 plugins/ckeditor4/eqneditor/dialogs/lang/_notes/dwsync.xml create mode 100755 plugins/ckeditor4/eqneditor/dialogs/lang/en.js create mode 100755 plugins/ckeditor4/eqneditor/icons/_notes/dwsync.xml create mode 100755 plugins/ckeditor4/eqneditor/icons/eqneditor.png create mode 100755 plugins/ckeditor4/eqneditor/lang/_notes/dwsync.xml create mode 100755 plugins/ckeditor4/eqneditor/lang/en.js create mode 100755 plugins/ckeditor4/eqneditor/plugin.js create mode 100644 plugins/ckeditor4/fixed/plugin.js create mode 100644 plugins/ckeditor4/floating-tools/README.md create mode 100644 plugins/ckeditor4/floating-tools/plugin.js create mode 100644 plugins/ckeditor4/footnotes/dialogs/footnotes.js create mode 100644 plugins/ckeditor4/footnotes/icons/footnotes.png create mode 100644 plugins/ckeditor4/footnotes/plugin.js create mode 100644 plugins/ckeditor4/googlethisterm/LICENSE create mode 100644 plugins/ckeditor4/googlethisterm/README.md create mode 100644 plugins/ckeditor4/googlethisterm/plugin.js create mode 100755 plugins/ckeditor4/html5audio/dialogs/html5audio.js create mode 100755 plugins/ckeditor4/html5audio/icons/html5audio.png create mode 100644 plugins/ckeditor4/html5audio/lang/de.js create mode 100755 plugins/ckeditor4/html5audio/lang/en.js create mode 100644 plugins/ckeditor4/html5audio/lang/es.js create mode 100755 plugins/ckeditor4/html5audio/lang/eu.js create mode 100644 plugins/ckeditor4/html5audio/lang/fr.js create mode 100644 plugins/ckeditor4/html5audio/lang/ru.js create mode 100644 plugins/ckeditor4/html5audio/lang/uk.js create mode 100644 plugins/ckeditor4/html5audio/lang/uz.js create mode 100755 plugins/ckeditor4/html5audio/plugin.js create mode 100644 plugins/ckeditor4/html5video/dialogs/html5video.js create mode 100644 plugins/ckeditor4/html5video/icons/html5video.png create mode 100644 plugins/ckeditor4/html5video/lang/de.js create mode 100644 plugins/ckeditor4/html5video/lang/en.js create mode 100644 plugins/ckeditor4/html5video/lang/es.js create mode 100644 plugins/ckeditor4/html5video/lang/eu.js create mode 100644 plugins/ckeditor4/html5video/lang/fr.js create mode 100644 plugins/ckeditor4/html5video/lang/ru.js create mode 100644 plugins/ckeditor4/html5video/lang/uk.js create mode 100644 plugins/ckeditor4/html5video/lang/uz.js create mode 100644 plugins/ckeditor4/html5video/plugin.js create mode 160000 plugins/ckeditor4/inserthtml4x create mode 100644 plugins/ckeditor4/lineheight/LICENSE create mode 100644 plugins/ckeditor4/lineheight/README.md create mode 100644 plugins/ckeditor4/lineheight/lang/LANG.js create mode 100644 plugins/ckeditor4/lineheight/lang/ar.js create mode 100644 plugins/ckeditor4/lineheight/lang/de.js create mode 100644 plugins/ckeditor4/lineheight/lang/en.js create mode 100644 plugins/ckeditor4/lineheight/lang/es.js create mode 100644 plugins/ckeditor4/lineheight/lang/fr.js create mode 100644 plugins/ckeditor4/lineheight/lang/ko.js create mode 100644 plugins/ckeditor4/lineheight/lang/pt.js create mode 100644 plugins/ckeditor4/lineheight/plugin.js create mode 100644 plugins/ckeditor4/lineheight/readme.txt create mode 100644 plugins/ckeditor4/loremipsum/icons/hidpi/loremipsum.png create mode 100644 plugins/ckeditor4/loremipsum/icons/loremipsum.png create mode 100644 plugins/ckeditor4/loremipsum/lang/en.js create mode 100644 plugins/ckeditor4/loremipsum/lang/fr.js create mode 100644 plugins/ckeditor4/loremipsum/plugin.js create mode 100755 plugins/ckeditor4/markdown/.gitattributes create mode 100755 plugins/ckeditor4/markdown/.gitignore create mode 100755 plugins/ckeditor4/markdown/README.md create mode 100755 plugins/ckeditor4/markdown/css/codemirror.min.css create mode 100755 plugins/ckeditor4/markdown/icons/hidpi/markdown.png create mode 100755 plugins/ckeditor4/markdown/icons/markdown.png create mode 100755 plugins/ckeditor4/markdown/js/codemirror-gfm-min.js create mode 100755 plugins/ckeditor4/markdown/js/marked.js create mode 100755 plugins/ckeditor4/markdown/js/to-markdown.js create mode 100755 plugins/ckeditor4/markdown/plugin.js create mode 100755 plugins/ckeditor4/markdown/theme/3024-day.css create mode 100755 plugins/ckeditor4/markdown/theme/3024-night.css create mode 100755 plugins/ckeditor4/markdown/theme/ambiance-mobile.css create mode 100755 plugins/ckeditor4/markdown/theme/ambiance.css create mode 100755 plugins/ckeditor4/markdown/theme/base16-dark.css create mode 100755 plugins/ckeditor4/markdown/theme/base16-light.css create mode 100755 plugins/ckeditor4/markdown/theme/blackboard.css create mode 100755 plugins/ckeditor4/markdown/theme/cobalt.css create mode 100755 plugins/ckeditor4/markdown/theme/eclipse.css create mode 100755 plugins/ckeditor4/markdown/theme/elegant.css create mode 100755 plugins/ckeditor4/markdown/theme/erlang-dark.css create mode 100755 plugins/ckeditor4/markdown/theme/lesser-dark.css create mode 100755 plugins/ckeditor4/markdown/theme/mbo.css create mode 100755 plugins/ckeditor4/markdown/theme/mdn-like.css create mode 100755 plugins/ckeditor4/markdown/theme/midnight.css create mode 100755 plugins/ckeditor4/markdown/theme/monokai.css create mode 100755 plugins/ckeditor4/markdown/theme/neat.css create mode 100755 plugins/ckeditor4/markdown/theme/neo.css create mode 100755 plugins/ckeditor4/markdown/theme/night.css create mode 100755 plugins/ckeditor4/markdown/theme/paraiso-dark.css create mode 100755 plugins/ckeditor4/markdown/theme/paraiso-light.css create mode 100755 plugins/ckeditor4/markdown/theme/pastel-on-dark.css create mode 100755 plugins/ckeditor4/markdown/theme/rubyblue.css create mode 100755 plugins/ckeditor4/markdown/theme/solarized.css create mode 100755 plugins/ckeditor4/markdown/theme/the-matrix.css create mode 100755 plugins/ckeditor4/markdown/theme/tomorrow-night-eighties.css create mode 100755 plugins/ckeditor4/markdown/theme/twilight.css create mode 100755 plugins/ckeditor4/markdown/theme/vibrant-ink.css create mode 100755 plugins/ckeditor4/markdown/theme/xq-dark.css create mode 100755 plugins/ckeditor4/markdown/theme/xq-light.css create mode 100644 plugins/ckeditor4/page2images/icons/page2images.png create mode 100644 plugins/ckeditor4/page2images/plugin.js create mode 100755 plugins/ckeditor4/pastebase64/plugin.js create mode 100644 plugins/ckeditor4/pbckcode/CHANGELOG.md create mode 100644 plugins/ckeditor4/pbckcode/LICENSE create mode 100755 plugins/ckeditor4/pbckcode/README.md create mode 100755 plugins/ckeditor4/pbckcode/dialogs/PBSyntaxHighlighter.js create mode 100755 plugins/ckeditor4/pbckcode/dialogs/pbckcode.js create mode 100755 plugins/ckeditor4/pbckcode/dialogs/style.css create mode 100644 plugins/ckeditor4/pbckcode/icons/.DS_Store create mode 100644 plugins/ckeditor4/pbckcode/icons/hidpi/pbckcode.png create mode 100644 plugins/ckeditor4/pbckcode/icons/pbckcode.png create mode 100755 plugins/ckeditor4/pbckcode/lang/en.js create mode 100755 plugins/ckeditor4/pbckcode/lang/fr.js create mode 100644 plugins/ckeditor4/pbckcode/lang/ru.js create mode 100644 plugins/ckeditor4/pbckcode/lang/tr.js create mode 100755 plugins/ckeditor4/pbckcode/plugin.js create mode 100644 plugins/ckeditor4/pre/dialogs/pre.js create mode 100644 plugins/ckeditor4/pre/icons/pre.png create mode 100644 plugins/ckeditor4/pre/lang/en.js create mode 100644 plugins/ckeditor4/pre/lang/ru.js create mode 100644 plugins/ckeditor4/pre/plugin.js create mode 100644 plugins/ckeditor4/prism/LICENSE.txt create mode 100644 plugins/ckeditor4/prism/README.md create mode 100644 plugins/ckeditor4/prism/lib/prism/prism_patched.min.css create mode 100644 plugins/ckeditor4/prism/lib/prism/prism_patched.min.js create mode 100644 plugins/ckeditor4/prism/plugin.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/icons/hidpi/selectall.png create mode 100644 plugins/ckeditor4/selectallcontextmenu/icons/selectall.png create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/af.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ar.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/bg.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/bn.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/bs.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ca.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/cs.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/cy.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/da.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/de-ch.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/de.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/el.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/en-au.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/en-ca.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/en-gb.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/en.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/eo.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/es.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/et.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/eu.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/fa.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/fi.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/fo.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/fr-ca.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/fr.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/gl.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/gu.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/he.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/hi.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/hr.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/hu.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/id.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/is.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/it.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ja.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ka.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/km.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ko.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ku.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/lt.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/lv.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/mk.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/mn.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ms.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/nb.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/nl.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/no.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/pl.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/pt-br.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/pt.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ro.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ru.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/si.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sk.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sl.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sq.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sr-latn.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sr.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sv.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/th.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/tr.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/tt.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ug.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/uk.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/vi.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/zh-cn.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/zh.js create mode 100644 plugins/ckeditor4/selectallcontextmenu/plugin.js create mode 100644 plugins/ckeditor4/smallerselection/plugin.js create mode 100644 plugins/ckeditor4/symbol/dialogs/lang/en.js create mode 100644 plugins/ckeditor4/symbol/dialogs/symbol.js create mode 100644 plugins/ckeditor4/symbol/icons/symbol.png create mode 100644 plugins/ckeditor4/symbol/lang/en.js create mode 100644 plugins/ckeditor4/symbol/plugin.js create mode 100644 plugins/ckeditor4/textselection/plugin.js create mode 100644 plugins/ckeditor4/textselection/samples/textselection.html create mode 100644 plugins/ckeditor4/texttransform/LICENSE.md create mode 100644 plugins/ckeditor4/texttransform/README.md create mode 100644 plugins/ckeditor4/texttransform/images/transformCapitalize.png create mode 100644 plugins/ckeditor4/texttransform/images/transformSwitcher.png create mode 100644 plugins/ckeditor4/texttransform/images/transformToLower.png create mode 100644 plugins/ckeditor4/texttransform/images/transformToUpper.png create mode 100644 plugins/ckeditor4/texttransform/lang/en.js create mode 100644 plugins/ckeditor4/texttransform/lang/tr.js create mode 100644 plugins/ckeditor4/texttransform/plugin.js create mode 100644 plugins/ckeditor4/token/LICENSE create mode 100644 plugins/ckeditor4/token/ReadMe.md create mode 100644 plugins/ckeditor4/token/dialogs/token.js create mode 100644 plugins/ckeditor4/token/icons/hidpi/token.png create mode 100644 plugins/ckeditor4/token/icons/token.png create mode 100644 plugins/ckeditor4/token/lang/en.js create mode 100644 plugins/ckeditor4/token/lang/ru.js create mode 100644 plugins/ckeditor4/token/plugin.js create mode 100644 plugins/ckeditor4/tweetabletext/README.md create mode 100755 plugins/ckeditor4/tweetabletext/css/tweetabletext.css create mode 100755 plugins/ckeditor4/tweetabletext/dialogs/tweetabletext.js create mode 100755 plugins/ckeditor4/tweetabletext/icons/tweetabletext.png create mode 100755 plugins/ckeditor4/tweetabletext/plugin.js create mode 100644 plugins/ckeditor4/videodetector/dialogs/videoDialog.js create mode 100644 plugins/ckeditor4/videodetector/icons/icon_black.png create mode 100644 plugins/ckeditor4/videodetector/icons/icon_white.png create mode 100644 plugins/ckeditor4/videodetector/icons/videodetector.svg create mode 100644 plugins/ckeditor4/videodetector/plugin.js create mode 100644 plugins/ckeditor4/videodetector/videodetector.css create mode 100644 plugins/ckeditor4/wordcount/README.md create mode 100644 plugins/ckeditor4/wordcount/css/wordcount.css create mode 100644 plugins/ckeditor4/wordcount/lang/ar.js create mode 100644 plugins/ckeditor4/wordcount/lang/ca.js create mode 100644 plugins/ckeditor4/wordcount/lang/da.js create mode 100644 plugins/ckeditor4/wordcount/lang/de.js create mode 100644 plugins/ckeditor4/wordcount/lang/el.js create mode 100644 plugins/ckeditor4/wordcount/lang/en.js create mode 100644 plugins/ckeditor4/wordcount/lang/es.js create mode 100644 plugins/ckeditor4/wordcount/lang/eu.js create mode 100644 plugins/ckeditor4/wordcount/lang/fa.js create mode 100644 plugins/ckeditor4/wordcount/lang/fi.js create mode 100644 plugins/ckeditor4/wordcount/lang/fr.js create mode 100644 plugins/ckeditor4/wordcount/lang/he.js create mode 100644 plugins/ckeditor4/wordcount/lang/hr.js create mode 100644 plugins/ckeditor4/wordcount/lang/hu.js create mode 100644 plugins/ckeditor4/wordcount/lang/it.js create mode 100644 plugins/ckeditor4/wordcount/lang/ja.js create mode 100644 plugins/ckeditor4/wordcount/lang/nl.js create mode 100644 plugins/ckeditor4/wordcount/lang/no.js create mode 100644 plugins/ckeditor4/wordcount/lang/pl.js create mode 100644 plugins/ckeditor4/wordcount/lang/pt-br.js create mode 100644 plugins/ckeditor4/wordcount/lang/pt.js create mode 100644 plugins/ckeditor4/wordcount/lang/ru.js create mode 100644 plugins/ckeditor4/wordcount/lang/sk.js create mode 100644 plugins/ckeditor4/wordcount/lang/sv.js create mode 100644 plugins/ckeditor4/wordcount/lang/tr.js create mode 100644 plugins/ckeditor4/wordcount/lang/zh-cn.js create mode 100644 plugins/ckeditor4/wordcount/plugin.js create mode 100644 plugins/ckeditor4/wordcount/samples/wordcount.html create mode 100644 plugins/ckeditor4/wordcount/samples/wordcountWithMaxCount.html create mode 100644 plugins/ckeditor4/youtube/LICENSE.md create mode 100644 plugins/ckeditor4/youtube/images/icon.png create mode 100644 plugins/ckeditor4/youtube/lang/ar.js create mode 100644 plugins/ckeditor4/youtube/lang/cs.js create mode 100644 plugins/ckeditor4/youtube/lang/de.js create mode 100644 plugins/ckeditor4/youtube/lang/el.js create mode 100644 plugins/ckeditor4/youtube/lang/en.js create mode 100644 plugins/ckeditor4/youtube/lang/es.js create mode 100644 plugins/ckeditor4/youtube/lang/et.js create mode 100644 plugins/ckeditor4/youtube/lang/fi.js create mode 100644 plugins/ckeditor4/youtube/lang/fr.js create mode 100644 plugins/ckeditor4/youtube/lang/he.js create mode 100644 plugins/ckeditor4/youtube/lang/hu.js create mode 100644 plugins/ckeditor4/youtube/lang/it.js create mode 100644 plugins/ckeditor4/youtube/lang/ja.js create mode 100644 plugins/ckeditor4/youtube/lang/ko.js create mode 100644 plugins/ckeditor4/youtube/lang/nb.js create mode 100644 plugins/ckeditor4/youtube/lang/nl.js create mode 100644 plugins/ckeditor4/youtube/lang/nn.js create mode 100644 plugins/ckeditor4/youtube/lang/pl.js create mode 100644 plugins/ckeditor4/youtube/lang/pt-br.js create mode 100644 plugins/ckeditor4/youtube/lang/pt.js create mode 100644 plugins/ckeditor4/youtube/lang/ru.js create mode 100644 plugins/ckeditor4/youtube/lang/sk.js create mode 100644 plugins/ckeditor4/youtube/lang/tr.js create mode 100644 plugins/ckeditor4/youtube/lang/vi.js create mode 100644 plugins/ckeditor4/youtube/lang/zh.js create mode 100644 plugins/ckeditor4/youtube/plugin.js create mode 100644 plugins/ckeditor4/zoom/plugin.js diff --git a/bin/backend/controls/UploadWindow.js b/bin/backend/controls/UploadWindow.js index d742e4d..62bb4dc 100644 --- a/bin/backend/controls/UploadWindow.js +++ b/bin/backend/controls/UploadWindow.js @@ -64,7 +64,7 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/UploadWindow', [ onComplete: self.$onComplete }, styles : { - height: '95%' + height: '80%' } }); @@ -72,6 +72,14 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/UploadWindow', [ this.$Upload.setParam('extract', 0); this.$Upload.inject(Content); + + var description = new Element("div", { + "html" : QUILocale.get("quiqqer/ckeditor4", "message.settings.upload.warning.external"), + "class": "content-message-attention", + "style": "margin-top: 10px;" + }); + description.inject(Content); + }, diff --git a/bin/backend/controls/settings/Plugins.js b/bin/backend/controls/settings/Plugins.js index fd6c47f..559a8c9 100644 --- a/bin/backend/controls/settings/Plugins.js +++ b/bin/backend/controls/settings/Plugins.js @@ -16,7 +16,10 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [ '$onImport', '$onResize', '$onRefresh', - '$toggleState' + '$toggleState', + '$onTblClick', + '$onTblDblClick', + '$openStorePage' ], options: {}, @@ -54,7 +57,7 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [ this.$Grid = new Grid(Container, { - buttons : [{ + buttons: [{ name : 'state', text : QUILocale.get( "quiqqer/ckeditor4", @@ -74,6 +77,7 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [ onClick: this.$displayUpload } }], + height : "500", columnModel: [ { @@ -93,49 +97,22 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [ dataIndex: 'name', dataType : 'string', width : 400 + }, + { + header : QUILocale.get( + "quiqqer/ckeditor4", + "editors.settings.plugins.table.header.url" + ), + dataIndex: 'url', + dataType : 'string', + width : 400 } ] }); this.$Grid.addEvents({ - - onDblClick: function () { - this.$openStorePage(); - // this.$toggleState(); - }.bind(this), - - onClick: function () { - - var TableButtons = self.$Grid.getAttribute('buttons'); - - var StateBtn = TableButtons.state; - - var data = self.$Grid.getSelectedData()[0]; - - if (!data) { - return; - } - - - if (data.state === 0) { - StateBtn.setAttribute("text", QUILocale.get( - "quiqqer/ckeditor4", - "editors.settings.plugins.table.button.activate" - )); - } - - if (data.state === 1) { - StateBtn.setAttribute("text", QUILocale.get( - "quiqqer/ckeditor4", - "editors.settings.plugins.table.button.deactivate" - )); - } - - if (StateBtn && self.$canToggle) { - StateBtn.enable(); - } - } - + onDblClick: self.$onTblDblClick, + onClick : self.$onTblClick }); @@ -199,6 +176,8 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [ for (var i = 0, len = result.length; i < len; i++) { + result[i].url = '<a target="_blank" href="' + self.$getStorePageUrl(result[i].name) + '">' + self.$getStorePageUrl(result[i].name) + '</a>'; + if (result[i].state === 0) { result[i].icon = new Element("span", { 'class': 'fa fa-times fa-2x' @@ -286,6 +265,17 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [ window.open(url, '_blank'); }, + /** + * Gets the store page url of the given plugin + */ + $getStorePageUrl: function (pluginName) { + + var url = "http://ckeditor.com/addon/"; + + url = url + pluginName; + return url; + }, + /** * Returns the currently selected name * @@ -356,6 +346,48 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [ }).open(); }); + }, + + /** + * event: onClick table row + */ + $onTblClick: function () { + var self = this; + + var TableButtons = self.$Grid.getAttribute('buttons'); + var StateBtn = TableButtons.state; + var data = self.$Grid.getSelectedData()[0]; + + if (!data) { + return; + } + + if (data.state === 0) { + StateBtn.setAttribute("text", QUILocale.get( + "quiqqer/ckeditor4", + "editors.settings.plugins.table.button.activate" + )); + } + + if (data.state === 1) { + StateBtn.setAttribute("text", QUILocale.get( + "quiqqer/ckeditor4", + "editors.settings.plugins.table.button.deactivate" + )); + } + + if (StateBtn && self.$canToggle) { + StateBtn.enable(); + } + + }, + + /** + * event: onCoubleClick table row + */ + $onTblDblClick: function () { + //this.$openStorePage(); + this.$toggleState(); } }); }); \ No newline at end of file diff --git a/locale.xml b/locale.xml index 807885a..902e9c4 100644 --- a/locale.xml +++ b/locale.xml @@ -65,6 +65,10 @@ <de><![CDATA[Name]]></de> <en><![CDATA[Name]]></en> </locale> + <locale name="editors.settings.plugins.table.header.url"> + <de><![CDATA[Storeseite]]></de> + <en><![CDATA[Storepage]]></en> + </locale> <locale name="editors.settings.plugins.table.button.activate"> <de><![CDATA[Aktivieren]]></de> <en><![CDATA[Activate]]></en> @@ -85,6 +89,14 @@ <de><![CDATA[Plugin erfolgreich deaktiviert]]></de> <en><![CDATA[Plugin disabled successfully]]></en> </locale> + <locale name="message.settings.upload.warning.external"> + <de> + <![CDATA[Achtung: Sie sind dabei Software von externen Quellen zu installieren. Dies kann Ihr System beschädigen.]]> + </de> + <en> + <![CDATA[Attention: You are installing software by third party authors. These can damage your system.]]> + </en> + </locale> <!-- Permissions --> <locale name="permission.quiqqer.editors.ckeditor._header"> diff --git a/plugins/ckeditor4/Text2Speech/icons/icona-audio.png b/plugins/ckeditor4/Text2Speech/icons/icona-audio.png new file mode 100644 index 0000000000000000000000000000000000000000..eb713f498f203087bb7183e31638369951d53ab8 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G`DAk4@xYmNj^@S~@TV~EA+wU=%E4m$|6Jv^?a<leDB*)eaYqo2c3(-)eW8k#<? z&ax+EWAz#`G%^J}tpwaRh%la&SSw_$Fmt8b`*Y{dZQndISG%B7@l`@^eXF?jnnS#7 zy6Mdpt9MPBZ}4%quTt6S&+(HkD~Uca{A?|z+o*l!@O|$eN<~~Vww~D|?>N7Lr>tu? zuWwqV#vVS4qtP05Ejm9ecF87-<n$)avk{&1K;e(hL+?3{rP4Xq7u&9tT)6SM0Q){6 zyJNa~1@k}57nBl|FOYBz_nerT^FZ59Nbq%9>FGY{GTX%`G^_M4?O$6|HM!_`x|X?h ddhPzt=Kt!<h4$JCR02KE;OXk;vd$@?2>`1xda?ij literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/Text2Speech/plugin.js b/plugins/ckeditor4/Text2Speech/plugin.js new file mode 100644 index 0000000..3564858 --- /dev/null +++ b/plugins/ckeditor4/Text2Speech/plugin.js @@ -0,0 +1,69 @@ +/* + Text2Speech + Version 0.1 + + This plugin allows read the selected text + + Copyright OrionsSoftware.org 2015 + Written by Umberto Boria. +*/ + +CKEDITOR.plugins.add('Text2Speech', +{ + //icons: "icona-audio", + init: function (editor) { + var pluginName = 'Text2Speech'; + var cmd = editor.addCommand('t2s', { exec: Text2Speech }); + editor.ui.addButton('t2s_button', + { + label: 'Leggimi', + icon: this.path + 'icons/icona-audio.png', + command: 't2s' + }); + + } +}); + +function Text2Speech(e) { + //Verifico cosa c'è nella prima text_1 + var text2speech=''; + var url=''; + my_instance(); + text2speech = my_instance().document.getBody().getText(); + url = 'https://translate.google.com/translate_tts?tl=it&q='+text2speech; + if (text2speech>'') {winopen('https://translate.google.com/translate_tts?tl=it&q='+text2speech,100,100);text2speech='';} + +} + +function winopen (url,l,h) { + //Apertura di una finestra per poi toglierle il fuoco + sleep (50); + winunder = window.open(url,'height=' + h + ',width=' + l + ',menubar=no,location=no,status=no,toolbar=no,top=10,left=10'); +} + +function my_instance() { + for (var ID in CKEDITOR.instances) + { + if (CKEDITOR.instances[ID].focusManager.hasFocus) {return CKEDITOR.instances[ID]; } + } +} + +//Function for read automatic from selection +function selected_text(obj) { +//In test + if (document.selection) { // Internet Explorer + obj.focus(); + return document.selection.createRange().text; + } else if (obj.selectionStart || obj.selectionStart == '0') { // Others + return obj.value.substring(obj.selectionStart, obj.selectionEnd); + } else { + return obj.value; // Fallback + } +} + +//Function for pause +function sleep(milliseconds) { + var currentTime = new Date().getTime(); + while (currentTime + milliseconds >= new Date().getTime()) { + } + } \ No newline at end of file diff --git a/plugins/ckeditor4/autocorrect/dialogs/options.js b/plugins/ckeditor4/autocorrect/dialogs/options.js new file mode 100644 index 0000000..a376bac --- /dev/null +++ b/plugins/ckeditor4/autocorrect/dialogs/options.js @@ -0,0 +1,273 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +( function() { + var plugin = CKEDITOR.plugins.autocorrect; + + function setupOption() { + this.setValue(plugin.getOption(this.option)); + } + + function commitOption() { + plugin.setOption(this.option, this.getValue()); + } + + CKEDITOR.dialog.add( 'autocorrectOptions', function( editor ) { + var lang = editor.lang.autocorrect; + return { + title: lang.autocorrect, + resizable: CKEDITOR.DIALOG_RESIZE_NONE, + minWidth: 350, + minHeight: 170, + onOk: function() { + this.commitContent(); + }, + contents: [ + { + id: 'autocorrect', + label: lang.autocorrect, + title: lang.autocorrect, + accessKey: '', + elements: [ + { + type: 'vbox', + padding: 0, + children: [ + { + type: 'checkbox', + id: 'useReplacementTableCheckbox', + option: 'useReplacementTable', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.replaceTextAsYouType + }, + { + type: 'html', + html: '<div style="height: 150px;overflow-y: scroll;border: 1px solid #afafaf"></div>', + setup: function() { + this.getElement().setHtml(''); + var option = plugin.getOption('replacementTable'); + var table = document.createElement('table'); + table.style.width = '100%'; + table.style.tableLayout = 'fixed'; + var tbody = table.appendChild(document.createElement('tbody')); + for (var prop in option) { + var row = document.createElement('tr'); + var cell1 = document.createElement('td'); + cell1.appendChild(document.createTextNode(prop)); + cell1.style.borderBottom = '1px solid #afafaf'; + cell1.style.padding = '0 5px'; + var cell2 = document.createElement('td'); + row.appendChild(cell1); + cell2.appendChild(document.createTextNode(option[prop])); + cell2.style.borderBottom = '1px solid #afafaf'; + cell2.style.padding = '0 5px'; + row.appendChild(cell2); + tbody.appendChild(row); + } + this.getElement().append(new CKEDITOR.dom.element(table)); + } + }] + } + ] + }, + { + id: 'autoformatAsYouType', + label: lang.autoformatAsYouType, + title: lang.autoformatAsYouType, + accessKey: '', + elements: [ + { + type: 'fieldset', + label: CKEDITOR.tools.htmlEncode( lang.replaceAsYouType ), + children: [ + { + type: 'vbox', + padding: 0, + children: [ + { + type: 'checkbox', + id: 'smartQuotesCheckbox', + option: 'smartQuotesAsYouType', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.smartQuotesOption + }, + { + type: 'checkbox', + id: 'formatOrdinalsCheckbox', + option: 'formatOrdinalsAsYouType', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.formatOrdinalsOption + }, + { + type: 'checkbox', + id: 'replaceHyphensCheckbox', + option: 'replaceHyphensAsYouType', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.replaceHyphensOption + }, + { + type: 'checkbox', + id: 'recognizeUrlsCheckbox', + option: 'recognizeUrlsAsYouType', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.recognizeUrlsOption + } + ] + } + ] + }, + { + type: 'fieldset', + label: CKEDITOR.tools.htmlEncode( lang.applyAsYouType ), + children: [ + { + type: 'vbox', + padding: 0, + children: [ + { + type: 'checkbox', + id: 'formatBulletedListsCheckbox', + option: 'formatBulletedListsAsYouType', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.formatBulletedListsOption + }, + { + type: 'checkbox', + id: 'formatNumberedListsCheckbox', + option: 'formatNumberedListsAsYouType', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.formatNumberedListsOption + }, + { + type: 'checkbox', + id: 'createHorizontalRulesCheckbox', + option: 'createHorizontalRulesAsYouType', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.createHorizontalRulesOption + } + ] + } + ] + } + ] + }, + { + id: 'replace', + label: lang.autoformat, + accessKey: '', + elements: [ + { + type: 'fieldset', + label: CKEDITOR.tools.htmlEncode( lang.replace ), + children: [ + { + type: 'vbox', + padding: 0, + children: [ + { + type: 'checkbox', + id: 'smartQuotesCheckbox', + option: 'smartQuotes', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.smartQuotesOption + }, + { + type: 'checkbox', + id: 'formatOrdinalsCheckbox', + option: 'formatOrdinals', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.formatOrdinalsOption + }, + { + type: 'checkbox', + id: 'replaceHyphensCheckbox', + option: 'replaceHyphens', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.replaceHyphensOption + }, + { + type: 'checkbox', + id: 'recognizeUrlsCheckbox', + option: 'recognizeUrls', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.recognizeUrlsOption + } + ] + } + ] + }, + { + type: 'fieldset', + label: CKEDITOR.tools.htmlEncode( lang.apply ), + children: [ + { + type: 'vbox', + padding: 0, + children: [ + { + type: 'checkbox', + id: 'formatBulletedListsCheckbox', + option: 'formatBulletedLists', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.formatBulletedListsOption + }, + { + type: 'checkbox', + id: 'formatNumberedListsCheckbox', + option: 'formatNumberedLists', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.formatNumberedListsOption + }, + { + type: 'checkbox', + id: 'createHorizontalRulesCheckbox', + option: 'createHorizontalRules', + setup: setupOption, + commit: commitOption, + isChanged: false, + label: lang.createHorizontalRulesOption + } + ] + } + ] + } + ] + } + ], + onShow: function() { + this.setupContent(); + } + }; + } ); + +} )(); diff --git a/plugins/ckeditor4/autocorrect/icons/autocorrect--.png b/plugins/ckeditor4/autocorrect/icons/autocorrect--.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5313b3853fa42180a84d6ccbe8f5c4433c5309 GIT binary patch literal 382 zcmV-^0fGLBP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000ie z000ie0hKEb8vp<RAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-1W80eRCwB?lQFVHKoEw1JE~*?Vh0e23B(cv0wt77RJnkVLrAy)*N_rOWKN){ z5-4S}dDPpt?Awldx@W%ryQ_!U_Z{CD3jmJed`v0JlA(ZO;Eo*&KK>*7Sd4u|rAd~B z=Xn^%5p`YDxG0K9lH{j_EBR3rQ8*z4rfK4K3wfUJ^E}hDqA1XHow*HYnuhv<ARq{W zliJ5s^=X=@bjz}S-FXXW+m`y<wxK8r#BqEYHgmO!!!Yb=nqpm7@H~$&3?WI<{TWnM zg>_xQaU5LNJw3h!==&ao5EzC5RaKdfW{_pszAOtgO@nRQFL&iFpzAuwvJBt%|6DZY c+wc4w0Mi&<zs~V}&;S4c07*qoM6N<$g5MUI-T(jq literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/autocorrect/icons/autocorrect.png b/plugins/ckeditor4/autocorrect/icons/autocorrect.png new file mode 100644 index 0000000000000000000000000000000000000000..75513f60d30782b2d93e7f9f1c8dcbb64994c91e GIT binary patch literal 420 zcmV;V0bBlwP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id z000id0mpBsWB>pFAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-DoI2^RCwByk+EvSFcd`}ye*5t!d^W4ClVn{A(Nm(#zLV(r_is-V#p7K(5;K7 zPTjkd4qg&6^aBbd;Gvu@Rq8lSnmo855clZ5D**%$5%H=@kcd2nyHna7j4^dE$8pSN zvw5=CuAFl?=djk^90iETxc&Naxdcdn6@YUN@BMZ(8r}8+j4^M)Jef=YD9e(vECIwh z2k_~=-wubvyFGx2Tm`c+hTjqXM#36Fdw?WKUfc0imFaW}AoKaW3p)e=&rQ>iWf`hU zQ54-2dpq|5WH1=qt15Y(vtF-REEc;C+Byn|<M<<rBI>&4pE(4G$hE3cRn=F!{j(FK zY5G2!&Ax$gx3IGk058CUwYCA|;sibIUYwx!dyeTO;9T_rxNLU5p8){5imsEK*VoAa O0000<MNUMnLSTaX)~<;F literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect-.png b/plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect-.png new file mode 100644 index 0000000000000000000000000000000000000000..efa1aa555dfde3fc8cb3f87ff09b0b6879a1237f GIT binary patch literal 595 zcmV-Z0<8UsP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000id z000id0mpBsWB>pFAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-*-1n}RCwC#m$9poQ5ePz?!6Eg5e@Mz4PP`0W*px04yH{G;*f)ZgK$TsQI}6> zY71OloE@BMwLicJU2?EFp&?9fVA3V~el6E9u_5Ao7Tg2RaHi*X;63mAyfGklNX0Gz zwlBqEktp=<1GqZ>6@Zh1ixeOTg6qv@^TxL3^Es>4idwC9?5qfZSR#?|MC6;Qva3?5 zgfS-W6hK6t?lZU6o>wZB3~>CrM)cRm^SmQf{jd+9*Xsei1LDpAMC8#v^G2gV7=~Yg zdrn)iwf5Dnd7)5Xu~+~+aXJf<$>d!T33mZTqY=Oh;EGcK5ozt3cRC$_DR9&2H1vJ{ zs;ZuCn^&t<*6Z~ec;I{-i^%Ej>$BM`>2!J}BJ&HioB^ona9{OrBq9Uf_fK5b!0F~I zj>qF)%=7vD_t|WA2DDrPyx9N*LGaT&lgTidOaKPJiStO7N~LaFYu6X8mwvy$`31Kk z$%Mw3=bP8J+iid^!2L)<sWB$5s-IPrdc95<h9U4cvQ#W0bycNYF0))N0iHz`%RSFK zvev%O<#OS4It6&Suk|_uFvgTrbv+yo0p0@FB3(?ZwXeI~?kC_QaOV)4Q3*H)9v*5n h8vxbI<@8VWV*n`xS^d0!GDiRa002ovPDHLkV1nzf2l4;_ literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect.png b/plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect.png new file mode 100644 index 0000000000000000000000000000000000000000..e4097d9ce7bf6edd28780ac5df89c6ce4d3c7ad6 GIT binary patch literal 618 zcmV-w0+s!VP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!3`s;mRCwC#mc2^@F&M_vk3}k?gQ!p( z1pfdLK^G?nDYT&2Nf!k{3xXCW2N4IyE|%^E72LFif`TXx>gM3$pi?UjLdB1Qpfx_P z<Vw8e(t2&Jh!6a@UN5;k$@Av!82hRY@CvwsOVG$F5a+xIvz9Fee*rzLLa7Y6rR(&2 z+M@3wIQRSgTsJ^IpPxvjQk!-Sj#$ioC!5W-!R-y#h|C3p!AGCZH*PnAeZ}Bu(29n8 zyoAU=I-S;<&>83k@20`uz#tke@iIgPNW#Q}%7n^*Q(T(`4paM8;c)dkIeNWb7Kucf zJRVO>7l$Dlv;o|J7U};ZFhq4_nn8aw8a;73odvU@Q0Vg*2n1LnktnpyWHKxq4nO8{ zxsXwqs%=M_RAm1QvJw$=_JZ3|5y&#fVYLls6{b7_(pfwnrx*@EyKXsY6%=Z6xm+7K zZi&eiMIfsmoJ!{z&<CgMu~=+Ob$26zQpS?Wq{Au#S=&+!InawvE4)G(4=~*>Aa#OK zqu#(28gz-rbIl|_isz*BH4J`*<1v=rVfW_c#AArwa`$59yHp!g#Joz<MPST$1~h{U zFo6#5?1$tQ(DL7j7t)j501>cSM&K5ONBesiTvw8#9nmgW0Q2CG)j_lZ1G)x35kb|q zlHCaEs*)@4AHjbFe?EfWTLTu~cU4ze-)Vn3f)4=(0KMdBFJd%cHUIzs07*qoM6N<$ Eg5&E62LJ#7 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/autocorrect/lang/en.js b/plugins/ckeditor4/autocorrect/lang/en.js new file mode 100644 index 0000000..394de11 --- /dev/null +++ b/plugins/ckeditor4/autocorrect/lang/en.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang( 'autocorrect', 'en', { + toolbar: 'AutoCorrect', + autocorrect: 'AutoCorrect', + disable: 'Disable AutoCorrect', + enable: 'Enable AutoCorrect', + autocorrectNow: 'AutoCorrect Now', + options: 'AutoCorrect Options', + autoformat: 'AutoFormat', + autoformatAsYouType: 'AutoFormat As You Type', + replaceTextAsYouType: 'Replace text as you type', + replaceAsYouType: 'Replace as you type', + applyAsYouType: 'Apply as you type', + apply: 'Apply', + replace: 'Replace', + smartQuotesOption: '"Straight quotes" with “smart quotesâ€', + formatOrdinalsOption: 'Ordinals (1st) with superscript', + replaceHyphensOption: 'Hyphens (--) with dash(—)', + recognizeUrlsOption: 'Internet and network paths with hyperlinks', + formatBulletedListsOption: 'Automatic bulleted lists', + formatNumberedListsOption: 'Automatic numbered lists', + createHorizontalRulesOption: 'Horizontal rules', + replaceFractionsOption: 'Fractions (1/2) with fraction character (½)' +}); diff --git a/plugins/ckeditor4/autocorrect/lang/ru.js b/plugins/ckeditor4/autocorrect/lang/ru.js new file mode 100644 index 0000000..175b461 --- /dev/null +++ b/plugins/ckeditor4/autocorrect/lang/ru.js @@ -0,0 +1,22 @@ +CKEDITOR.plugins.setLang( 'autocorrect', 'ru', { + toolbar: 'Ðвтозамена', + autocorrect: 'Ðвтозамена', + disable: 'Отключить автозамену', + enable: 'Включить автозамену', + autocorrectNow: 'ПроизвеÑти автозамену', + options: 'Параметры автозамены', + autoformat: 'Ðвтоформат', + autoformatAsYouType: 'Ðвтоформат при вводе', + replaceTextAsYouType: 'ЗаменÑÑ‚ÑŒ текÑÑ‚ при вводе', + replaceAsYouType: 'ЗаменÑÑ‚ÑŒ при вводе', + applyAsYouType: 'ПрименÑÑ‚ÑŒ при вводе', + apply: 'ПрименÑÑ‚ÑŒ', + replace: 'ЗаменÑÑ‚ÑŒ', + smartQuotesOption: '"ПрÑмые" кавычки «парными»', + formatOrdinalsOption: 'ÐнглийÑкие порÑдковые (1st) надÑтрочными знаками', + replaceHyphensOption: 'ДефиÑÑ‹ (--) на тире (—)', + recognizeUrlsOption: 'ÐдреÑа Интернета и Ñетевые пути гиперÑÑылками', + formatBulletedListsOption: 'Стили маркированных ÑпиÑков', + formatNumberedListsOption: 'Стили нумерованных ÑпиÑков', + createHorizontalRulesOption: 'Горизонтальные линии' +}); diff --git a/plugins/ckeditor4/autocorrect/plugin.js b/plugins/ckeditor4/autocorrect/plugin.js new file mode 100644 index 0000000..91f57d7 --- /dev/null +++ b/plugins/ckeditor4/autocorrect/plugin.js @@ -0,0 +1,1002 @@ +/** + * @license TODO + */ + +/** + * @fileOverview TODO + */ + +(function() { + var localStorage = window.localStorage; + if (!localStorage) { + localStorage = { + getItem: function(key) { + return null; + }, + setItem: function(key, value) { + } + }; + } + var dynamicOptions = [ + 'useReplacementTable', + 'recognizeUrlsAsYouType', + 'recognizeUrls', + 'replaceHyphensAsYouType', + 'replaceHyphens', + 'formatOrdinalsAsYouType', + 'formatOrdinals', + 'smartQuotesAsYouType', + 'smartQuotes', + 'createHorizontalRulesAsYouType', + 'createHorizontalRules', + 'formatBulletedListsAsYouType', + 'formatBulletedLists', + 'formatNumberedListsAsYouType', + 'formatNumberedLists' + ]; + var autocorrect = CKEDITOR.plugins.autocorrect = { + getOption: function(key) { + return CKEDITOR.config['autocorrect_' + key]; + }, + setOption: function(key, value) { + localStorage.setItem('autocorrect_' + key, value); + CKEDITOR.config['autocorrect_' + key] = value; + } + }; + + var isBookmark = CKEDITOR.dom.walker.bookmark(); + + function arrayToMap(array) { + var map = {}; + for (var i = 0; i < array.length; i++) + map[array[i]] = true; + return map; + } + + function loadOptions() { + for (var i = 0; i < dynamicOptions.length; i++) { + var key = dynamicOptions[i]; + var localValue = null; + try { + localValue = JSON.parse(localStorage.getItem('autocorrect_' + key)); + } catch (e) {} + if (localValue !== null) { + CKEDITOR.config['autocorrect_' + key] = localValue; + } + } + } + + function CharacterIterator(range) { + var walker = new CKEDITOR.dom.walker( range ); + walker.evaluator = function( node ) { return (node.type === CKEDITOR.NODE_TEXT && !isBookmark(node)) || (node.type === CKEDITOR.NODE_ELEMENT && node.getName() == 'br'); }; + walker.current = range.startContainer; + this.walker = walker; + this.referenceNode = range.startContainer; + this.referenceCharacter = null; + this.referenceCharacterOffset = range.startOffset; + } + + CharacterIterator.prototype.nextCharacter = function() { + // TODO + return null; + }; + + CharacterIterator.prototype.previousCharacter = function() { + while (this.referenceCharacterOffset === 0) { + this.walker.current = this.referenceNode; + this.referenceNode = this.walker.previous(); + if (!this.referenceNode) + return null; + if (this.referenceNode.type === CKEDITOR.NODE_ELEMENT && this.referenceNode.getName() == 'br') + return null; + this.referenceCharacterOffset = this.referenceNode.getText().length; + } + if (this.referenceCharacterOffset === 0) + return null; + this.referenceCharacter = this.referenceNode.getText()[--this.referenceCharacterOffset]; + // Sometimes Chrome inserts U+200B Zero Width Space + // if (this.referenceCharacter == String.fromCharCode(8203)) + // return this.previousCharacter(); + return this.referenceCharacter; + }; + + CKEDITOR.plugins.add( 'autocorrect', { + requires: 'menubutton', + lang: 'en,ru', + icons: 'autocorrect', // %REMOVE_LINE_CORE% + hidpi: true, // %REMOVE_LINE_CORE% + init: function( editor ) { + var config = editor.config; + var lang = editor.lang.autocorrect; + loadOptions(); + editor.addCommand( 'autocorrect', { + exec: function(editor) { + editor.fire( 'saveSnapshot' ); + var selectedRange = editor.getSelection().getRanges().shift(); + var bookmark = selectedRange.createBookmark(); + + var walkerRange; + if (selectedRange.collapsed) { + walkerRange = new CKEDITOR.dom.range(editor.editable()); + walkerRange.selectNodeContents(editor.editable()); + } else { + walkerRange = selectedRange.clone(); + } + + var walker = new CKEDITOR.dom.walker( walkerRange ); + editor.editable().$.normalize(); + walker.evaluator = function( node ) { return node.type === CKEDITOR.NODE_TEXT && !isBookmark(node); }; + var node; + while (node = walker.next()) { + var next = getNext(node); + var parent = getBlockParent(node); + walker.current = correctTextNode(node, (parent.isBlockBoundary() && !next) || next && next.type === CKEDITOR.NODE_ELEMENT && next.getName() === 'br'); + if (parent.getName() === 'p' && !skipBreaks(next)) { + correctParagraph(parent); + } + } + + editor.getSelection().selectBookmarks([bookmark]); + editor.fire( 'saveSnapshot' ); + } + } ); + + var command = editor.addCommand('toggleAutocorrect', { + preserveState: true, + canUndo: false, + + exec: function( editor ) { + this.setState(isEnabled() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_ON); + } + }); + + var isEnabled = function() { + return command.state === CKEDITOR.TRISTATE_ON; + }; + + var optionsCommand = editor.addCommand( 'autocorrectOptions', new CKEDITOR.dialogCommand( 'autocorrectOptions' ) ); + optionsCommand.canUndo = false; + optionsCommand.readOnly = 1; + + CKEDITOR.dialog.add( 'autocorrectOptions', this.path + 'dialogs/options.js' ); + + var menuGroup = 'autocorrectButton'; + editor.addMenuGroup( menuGroup ); + + // combine menu items to render + var uiMenuItems = {}; + + // always added + uiMenuItems.autoCorrectWhileTyping = { + label: lang.disable, + group: menuGroup, + command: 'toggleAutocorrect' + }; + + uiMenuItems.autoCorrectNow = { + label: lang.autocorrectNow, + command: 'autocorrect', + group: menuGroup + }; + + uiMenuItems.autocorrectOptions = { + label: lang.options, + command: 'autocorrectOptions', + group: menuGroup + }; + + editor.addMenuItems( uiMenuItems ); + + editor.ui.add( 'AutoCorrect', CKEDITOR.UI_MENUBUTTON, { + label: lang.toolbar, + modes: { wysiwyg: 1 }, + toolbar: 'spellchecker,20', + onRender: function() { + command.on( 'state', function() { + this.setState( command.state ); + }, this ); + }, + onMenu: function() { + editor.getMenuItem( 'autoCorrectWhileTyping' ).label = isEnabled() ? lang.disable : lang.enable; + + return { + autoCorrectWhileTyping: CKEDITOR.TRISTATE_OFF, + autoCorrectNow: CKEDITOR.TRISTATE_OFF, + autocorrectOptions: CKEDITOR.TRISTATE_OFF + }; + } + }); + + var showInitialState = function( evt ) { + evt.removeListener(); + command.setState( config.autocorrect_enabled ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); + }; + + editor.on( 'instanceReady', showInitialState ); + + var isTyping = false; + + function getOption(key) { + return autocorrect.getOption(isTyping ? key + 'AsYouType' : key); + } + + function skipBreaks(node, isBackwards) { + while (node && ((node.type == CKEDITOR.NODE_ELEMENT && node.getName() == 'br') || isBookmark(node))) { + node = isBackwards ? node.getPrevious() : node.getNext(); + } + return node; + } + + function isWhitespace(ch) { + return ch === ' ' || ch === ' '; + } + + function isPunctuation(ch) { + return ch === '.' || ch === ',' || ch === '!' || ch === '?' || ch === '/'; + } + + function isWordPart(ch) { + return ch >= 'A' && ch <= 'Z' + || ch >= 'a' && ch <= 'z' + || ch >= 'а' && ch <= 'Ñ' + || ch >= 'Ð' && ch <= 'Я' + || ch == 'Ñ‘' || ch == 'Ð' + || ch >= '0' && ch <= '9'; + } + + function isPairOpenCharacter(ch) { + return ch == '"' || ch == '\'' || ch == '«' || ch == '‘' || ch == '“' || ch == '„' || ch == '(' || ch == '[' || ch == '{'; + } + + function isPairClosingCharacter(ch) { + return ch == '"' || ch == '\'' || ch == '»' || ch == '’' || ch == 'â€' || ch == '“' || ch == ')' || ch == ']' || ch == '}'; + } + + var hyperlinkExcludedTail = arrayToMap(['.', ',', '?', '!', ':', '(', ')', '[', ']', '{', '}', '"', '\'', '‘', '’', '“', 'â€', '«', '»', '<', '>']); + function isHyperlinkExcludedTail(ch) { + return ch in hyperlinkExcludedTail; + } + + function moveCursorIntoTextNode(cursor) { + if (cursor.startContainer.type == CKEDITOR.NODE_ELEMENT) { + var rawStartNode = cursor.startContainer.getChild(cursor.startOffset); + var startOffset = 0; + // Skip ending <br>'s in Firefox, skip bookmark + var startNode = skipBreaks(rawStartNode, true); + if (startNode) { + if (startNode != rawStartNode) { + // We moved outside bookmark to the end of previous text node + startOffset = startNode.getText().length; + } + while (startNode.type == CKEDITOR.NODE_ELEMENT) { + startNode = startNode.getFirst(); + } + } else { + startNode = new CKEDITOR.dom.text(''); + cursor.insertNode(startNode); + } + cursor.setStart(startNode, startOffset); + cursor.collapse(true); + } + } + + function correctOnInput(cursor) { + moveCursorIntoTextNode(cursor); + var input = cursor.startContainer.getText().substring(cursor.startOffset-1, cursor.startOffset); + + if (getOption('replaceHyphens') && isPairOpenCharacter(input)) + replaceHyphenPairInWord(cursor, input); + + if (getOption('smartQuotes') && replaceDoubleQuote(cursor, input)) + return; + + if (getOption('smartQuotes') && replaceSingleQuote(cursor, input)) + return; + + if (isWhitespace(input)) + autoCorrectOnWhitespace(cursor, input); + + if (isPunctuation(input) || isWhitespace(input)) + autoCorrectOnDelimiter(cursor, input); + } + + function correctOnEnter(cursor) { + moveCursorIntoTextNode(cursor); + + if (getOption('replaceHyphens')) + replaceHyphens(cursor, ''); + + autoCorrectOnDelimiter(cursor, ''); + } + + function correctTextNode(node, isBlockEnding) { + var cursor = new CKEDITOR.dom.range(editor.editable()); + cursor.setStart(node, 0); + cursor.collapse(true); + while (cursor.startOffset < cursor.startContainer.getText().length) { + cursor.setStart(cursor.startContainer, cursor.startOffset + 1); + cursor.setEnd(cursor.startContainer, cursor.startOffset); + correctOnInput(cursor); + if (isBlockEnding && cursor.endOffset == cursor.startContainer.getText().length) { + // "Emulate" Enter key + correctOnEnter(cursor); + } + } + return cursor.startContainer; + + } + + function correctParagraph(p) { + if (!p) + return; + + // FIXME this way is wrong + var content = p.getText(); + + if (getOption('createHorizontalRules')) + insertHorizontalRule(p, content); + } + + function getNext(node) { + var next = node.getNext(); + while (next && isBookmark(next)) { + next = next.getNext(); + } + return next; + } + + function replaceRangeContent(range, data) { + var walker = new CKEDITOR.dom.walker( range ); + walker.evaluator = function( node ) { return node.type === CKEDITOR.NODE_ELEMENT && isBookmark(node); }; + var bm; + var bookmarks = []; + while (bm = walker.next()) { + bookmarks.push(bm); + } + range.deleteContents(); + for (var i = 0; i < bookmarks.length; i++) { + range.insertNode(bookmarks[i]); + } + range.insertNode(new CKEDITOR.dom.text(data)); + } + + function replaceHyphenPairInWord(cursor, input) { + var iteratorRange = new CKEDITOR.dom.range(editor.editable()); + iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer)); + var iterator = new CharacterIterator(iteratorRange); + iterator.referenceNode = cursor.startContainer; + iterator.referenceCharacterOffset = cursor.startOffset; + + if (input && !iterator.previousCharacter()) + return; + + var hypenPairRange = new CKEDITOR.dom.range(editor.editable()); + + var needle = '--'; + var charAfterHypens = input; + + var ch; + var i = needle.length - 1; + while ((ch = iterator.previousCharacter()) && !isWhitespace(ch)) { + if (ch == needle[i]) { + if (i == needle.length - 1) + hypenPairRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset + 1); + i--; + if (i < 0) + break; + } else { + charAfterHypens = ch; + i = needle.length - 1; + } + } + if (i >= 0) + return false; + + if (charAfterHypens && !(isWhitespace(charAfterHypens) || isWordPart(charAfterHypens) || isPairOpenCharacter(charAfterHypens))) + return false; + + hypenPairRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset); + + var charBeforeHypens = iterator.previousCharacter(); + + if (!charBeforeHypens || !(isWordPart(charBeforeHypens) || isPairClosingCharacter(charBeforeHypens))) + return false; + + beforeReplace(); + var bookmark = cursor.createBookmark(); + replaceRangeContent(hypenPairRange, '—'); + cursor.moveToBookmark(bookmark); + moveCursorIntoTextNode(cursor); + afterReplace(); + } + + function replaceHyphens(cursor, input) { + var iteratorRange = new CKEDITOR.dom.range(editor.editable()); + iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer)); + var iterator = new CharacterIterator(iteratorRange); + iterator.referenceNode = cursor.startContainer; + iterator.referenceCharacterOffset = cursor.startOffset; + + if (input && !iterator.previousCharacter()) + return; + + var hypensRange = new CKEDITOR.dom.range(editor.editable()); + hypensRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset); + + var leftChar = iterator.previousCharacter(); + if (leftChar !== '-') + return false; + + hypensRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset); + var charBeforeHyphen = iterator.previousCharacter(); + if (charBeforeHyphen == '-') { + hypensRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset); + charBeforeHyphen = iterator.previousCharacter(); + } + + if (!isWhitespace(charBeforeHyphen)) + return false; + + var dash = config.autocorrect_dash; + beforeReplace(); + var bookmark = cursor.createBookmark(); + replaceRangeContent(hypensRange, dash); + cursor.moveToBookmark(bookmark); + moveCursorIntoTextNode(cursor); + afterReplace(); + } + + function autoCorrectOnWhitespace(cursor, inputChar) { + if (getOption('formatBulletedLists') && formatBulletedList(cursor, inputChar)) + return; + + if (getOption('formatNumberedLists') && formatNumberedList(cursor, inputChar)) + return; + + if (getOption('replaceHyphens')) + replaceHyphens(cursor, inputChar); + } + + function autoCorrectOnDelimiter(cursor, delimiter) { + if (getOption('recognizeUrls') && formatHyperlink(cursor, delimiter)) + return; + + if (config.autocorrect_useReplacementTable) + replaceSequence(cursor, delimiter); + + if (getOption('formatOrdinals')) + formatOrdinals(cursor, delimiter); + + if (getOption('replaceHyphens')) + replaceHyphenPairInWord(cursor, delimiter); + } + + var bookmark; + function beforeReplace() { + if (!isTyping) + return; + editor.fire( 'saveSnapshot' ); + bookmark = editor.getSelection().getRanges().shift().createBookmark(); + } + + function afterReplace() { + if (!isTyping) + return; + editor.getSelection().selectBookmarks([bookmark]); + editor.fire( 'saveSnapshot' ); + } + + var replacementTable = config.autocorrect_replacementTable; + function replaceSequence(cursor, input) { + var iteratorRange = new CKEDITOR.dom.range(editor.editable()); + iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer)); + var iterator = new CharacterIterator(iteratorRange); + iterator.referenceNode = cursor.startContainer; + iterator.referenceCharacterOffset = cursor.startOffset; + + if (input && !iterator.previousCharacter()) + return; + + var replacement; + var match; + var matchRange = new CKEDITOR.dom.range(editor.editable()); + matchRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset); + var sequence = ''; + var ch; + while ((ch = iterator.previousCharacter()) && !isWhitespace(ch)) { + sequence = ch + sequence; + if (sequence in replacementTable) { + match = sequence; + replacement = replacementTable[match]; + matchRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset); + } + } + + if (!replacement) + return false; + + beforeReplace(); + var bookmark = cursor.createBookmark(); + replaceRangeContent(matchRange, replacement); + cursor.moveToBookmark(bookmark); + moveCursorIntoTextNode(cursor); + afterReplace(); + + return true; + } + + var urlRe = /^(http:|https:|ftp:|mailto:|tel:|skype:|www\.).+$/i; + function formatHyperlink(cursor, input) { + if (isPunctuation(input)) + return; + var iteratorRange = new CKEDITOR.dom.range(editor.editable()); + iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer)); + var iterator = new CharacterIterator(iteratorRange); + iterator.referenceNode = cursor.startContainer; + iterator.referenceCharacterOffset = cursor.startOffset; + + if (input && !iterator.previousCharacter()) + return; + + var matchRange = new CKEDITOR.dom.range(editor.editable()); + matchRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset); + var tail = true; + var match = ''; + var ch; + while ((ch = iterator.previousCharacter()) && ch != ' ' && ch != ' ') { + // exclude trailing punctuation + if (tail && isHyperlinkExcludedTail(ch)) { + matchRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset); + continue; + } + match = ch + match; + tail = false; + matchRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset); + } + + match = match.match(urlRe); + + if (!match) + return false; + + var url = match[0]; + var href = match[1].toLowerCase() === 'www.' ? 'http://' + url : url; + + beforeReplace(); + var bookmark = cursor.createBookmark(); + var attributes = {'data-cke-saved-href': href, href: href}; + var style = new CKEDITOR.style({ element: 'a', attributes: attributes } ); + style.type = CKEDITOR.STYLE_INLINE; // need to override... dunno why. + style.applyToRange( matchRange ); + cursor.moveToBookmark(bookmark); + moveCursorIntoTextNode(cursor); + afterReplace(); + + return true; + } + + var suffixes = {'st': true, 'nd': true, 'rd': true, 'th': true}; + function formatOrdinals(cursor, delimiter) { + var iteratorRange = new CKEDITOR.dom.range(editor.editable()); + iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer)); + var iterator = new CharacterIterator(iteratorRange); + iterator.referenceNode = cursor.startContainer; + iterator.referenceCharacterOffset = cursor.startOffset; + + if (delimiter && !iterator.previousCharacter()) + return; + + var suffixRange = new CKEDITOR.dom.range(editor.editable()); + suffixRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset); + var suffix = ''; + var ch; + for (var i = 0; i < 2; i++) { + ch = iterator.previousCharacter(); + if (!ch) + break; + suffix = ch + suffix; + } + if (!(suffix in suffixes)) + return false; + suffixRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset); + + var number = ''; + while (ch = iterator.previousCharacter()) { + if (ch >= '0' && ch <= '9') + number = ch + number; + else if (isWordPart(ch)) + return false; + else + break; + } + + var n = number % 100; + if (n > 9 && n < 20) { + if (suffix !== 'th') + return false; + } else { + n = number % 10; + if (n == 1) { + if (suffix !== 'st') + return false; + } else if (n == 2) { + if (suffix !== 'nd') + return false; + } else if (n == 3) { + if (suffix !== 'rd') + return false; + } else if (suffix !== 'th') + return false; + } + + beforeReplace(); + var bookmark = cursor.createBookmark(); + var style = new CKEDITOR.style({ element: 'sup' } ); + style.applyToRange( suffixRange ); + cursor.moveToBookmark(bookmark); + moveCursorIntoTextNode(cursor); + afterReplace(); + + return true; + } + + var horizontalRuleRe = /^(-{3,}|_{3,})$/; + function insertHorizontalRule(parent, content) { + var match = content.match(horizontalRuleRe); + if (!match) + return false; + + var hr = editor.document.createElement( 'hr' ); + hr.replace(parent); + + return true; + } + + var bulletedListMarkers = arrayToMap(['*', '+', '•']); + function formatBulletedList(cursor, input) { + var parent = getBlockParent(cursor.startContainer); + + if (parent.getName() !== 'p') + return; + + var iteratorRange = new CKEDITOR.dom.range(editor.editable()); + iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer)); + var iterator = new CharacterIterator(iteratorRange); + iterator.referenceNode = cursor.startContainer; + iterator.referenceCharacterOffset = cursor.startOffset; + + var markerRange = new CKEDITOR.dom.range(editor.editable()); + markerRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset); + + if (input && !iterator.previousCharacter()) + return; + + var marker = iterator.previousCharacter(); + + if (!marker || !(marker in bulletedListMarkers)) + return false; + + markerRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset); + + if (iterator.previousCharacter()) + return false; + + var previous = parent.getPrevious(); + + beforeReplace(); + var bookmark = cursor.createBookmark(); + markerRange.deleteContents(); + if (!isTyping && previous && previous.type == CKEDITOR.NODE_ELEMENT && previous.getName() == 'ul') { + appendContentsToList(parent, previous); + } else { + replaceContentsWithList([parent], 'ul', null); + } + cursor.moveToBookmark(bookmark); + moveCursorIntoTextNode(cursor); + afterReplace(); + + return true; + } + + function formatNumberedList(cursor, input) { + var parent = getBlockParent(cursor.startContainer); + + if (parent.getName() !== 'p') + return; + + var iteratorRange = new CKEDITOR.dom.range(editor.editable()); + iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer)); + var iterator = new CharacterIterator(iteratorRange); + iterator.referenceNode = cursor.startContainer; + iterator.referenceCharacterOffset = cursor.startOffset; + + var markerRange = new CKEDITOR.dom.range(editor.editable()); + markerRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset); + + if (input && !iterator.previousCharacter()) + return; + + var delimiter = iterator.previousCharacter(); + if (!(delimiter in {'.': true, ')': true})) + return false; + + var start = ''; + var ch; + while ((ch = iterator.previousCharacter()) && ch != ' ' && ch != ' ') { + start = ch + start; + markerRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset); + } + + var type; + if (start.match(/^[0-9]+$/)) + type = '1'; + else if (start.match(/^[ivxlcdm]+$/)) + type = 'i'; + else if (start.match(/^[IVXLCDM]+$/)) + type = 'I'; + else if (start.match(/^[a-z]$/)) + type = 'a'; + else if (start.match(/^[A-Z]$/)) + type = 'A'; + else + return false; + + if (iterator.previousCharacter()) + return false; + + var startNumber = toNumber(start, type); + + parent = getBlockParent(cursor.startContainer); + var previous = parent.getPrevious(); + + beforeReplace(); + var bookmark = cursor.createBookmark(); + markerRange.deleteContents(); + if (!isTyping && previous && previous.type == CKEDITOR.NODE_ELEMENT && previous.getName() == 'ol' && previous.getAttribute('type') == type && getLastNumber(previous) == startNumber - 1) { + appendContentsToList(parent, previous); + } else { + var attributes = startNumber === 1 ? {type: type} : {type: type, start: startNumber}; + replaceContentsWithList([parent], 'ol', attributes); + } + cursor.moveToBookmark(bookmark); + moveCursorIntoTextNode(cursor); + afterReplace(); + + return true; + } + + var doubleQuotes = config.autocorrect_doubleQuotes; + function replaceDoubleQuote(cursor, input) { + if (input !== '"') + return false; + + replaceQuote(cursor, doubleQuotes); + return true; + } + + var singleQuotes = config.autocorrect_singleQuotes; + function replaceSingleQuote(cursor, input) { + if (input !== '\'') + return false; + + replaceQuote(cursor, singleQuotes); + return true; + } + + function replaceQuote(cursor, quotes) { + var iteratorRange = new CKEDITOR.dom.range(editor.editable()); + iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer)); + var iterator = new CharacterIterator(iteratorRange); + iterator.referenceNode = cursor.startContainer; + iterator.referenceCharacterOffset = cursor.startOffset; + + var quoteRange = new CKEDITOR.dom.range(editor.editable()); + quoteRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset); + iterator.previousCharacter(); + quoteRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset); + + var leftChar = iterator.previousCharacter(); + + var isClosingQuote = leftChar ? '  –—([{'.indexOf(leftChar) < 0 : false; + var replacement = quotes[Number(isClosingQuote)]; + + beforeReplace(); + var bookmark = cursor.createBookmark(); + replaceRangeContent(quoteRange, replacement); + cursor.moveToBookmark(bookmark); + moveCursorIntoTextNode(cursor); + afterReplace(); + } + + function getBlockParent(node) { + while (node && (node.type !== CKEDITOR.NODE_ELEMENT || (node.getName() in CKEDITOR.dtd.$inline || node.getName() in CKEDITOR.dtd.$empty ))) { + node = node.getParent(); + } + return node; + } + + function getLastNumber(list) { + return list.$.start + list.getChildCount() - 1; + } + + function replaceContentsWithList(listContents, type, attributes) { + // Insert the list to the DOM tree. + var insertAnchor = listContents[ listContents.length - 1 ].getNext(), + listNode = editor.document.createElement( type ); + + var commonParent = listContents[0].getParent(); + + var contentBlock; + + while ( listContents.length ) { + contentBlock = listContents.shift(); + appendContentsToList(contentBlock, listNode); + } + + // Apply list root dir only if it has been explicitly declared. + // if ( listDir && explicitDirection ) + // listNode.setAttribute( 'dir', listDir ); + + if (attributes) + listNode.setAttributes(attributes); + + if ( insertAnchor ) + listNode.insertBefore( insertAnchor ); + else + listNode.appendTo( commonParent ); + } + + function appendContentsToList(contentBlock, listNode) { + var listItem = editor.document.createElement( 'li' ); + + // If current block should be preserved, append it to list item instead of + // transforming it to <li> element. + if ( false /*shouldPreserveBlock( contentBlock )*/ ) + contentBlock.appendTo( listItem ); + else { + contentBlock.copyAttributes( listItem ); + // Remove direction attribute after it was merged into list root. (#7657) + /*if ( listDir && contentBlock.getDirection() ) { + listItem.removeStyle( 'direction' ); + listItem.removeAttribute( 'dir' ); + }*/ + contentBlock.moveChildren( listItem ); + contentBlock.remove(); + } + + listItem.appendTo( listNode ); + } + + function characterPosition(character) { + var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + return alpha.indexOf(character) + 1; + } + + function toArabic(number) { + if (!number) return 0; + if (number.substring(0, 1) == "M") return 1000 + toArabic(number.substring(1)); + if (number.substring(0, 2) == "CM") return 900 + toArabic(number.substring(2)); + if (number.substring(0, 1) == "D") return 500 + toArabic(number.substring(1)); + if (number.substring(0, 2) == "CD") return 400 + toArabic(number.substring(2)); + if (number.substring(0, 1) == "C") return 100 + toArabic(number.substring(1)); + if (number.substring(0, 2) == "XC") return 90 + toArabic(number.substring(2)); + if (number.substring(0, 1) == "L") return 50 + toArabic(number.substring(1)); + if (number.substring(0, 2) == "XL") return 40 + toArabic(number.substring(2)); + if (number.substring(0, 1) == "X") return 10 + toArabic(number.substring(1)); + if (number.substring(0, 2) == "IX") return 9 + toArabic(number.substring(2)); + if (number.substring(0, 1) == "V") return 5 + toArabic(number.substring(1)); + if (number.substring(0, 2) == "IV") return 4 + toArabic(number.substring(2)); + if (number.substring(0, 1) == "I") return 1 + toArabic(number.substring(1)); + } + + function toNumber(start, type) { + switch (type) { + case '1': + return start|0; + case 'i': + return toArabic(start.toUpperCase()); + case 'I': + return toArabic(start); + case 'a': + return characterPosition(start.toUpperCase()); + case 'A': + return characterPosition(start); + } + } + + editor.on( 'key', function( event ) { + if (event.data.keyCode != 2228237 && event.data.keyCode != 13) + return; + if (!isEnabled()) + return; + if (editor.mode !== 'wysiwyg') + return; + + var cursor = editor.getSelection().getRanges().shift(); + var paragraph = null; + + if (event.data.keyCode === 13) { + var parent = getBlockParent(cursor.startContainer); + if (parent.getName() === 'p') { + paragraph = parent; + } + } + + setTimeout(function() { + isTyping = true; + correctOnEnter(cursor); + correctParagraph(paragraph); + isTyping = false; + }); + }); + + editor.on( 'contentDom', function() { + editor.editable().on( 'keypress', function( event ) { + if ( event.data.$.charCode === 0 ) + return; + if (!isEnabled()) + return; + + setTimeout(function() { + isTyping = true; + var cursor = editor.getSelection().getRanges().shift(); + correctOnInput(cursor); + isTyping = false; + }); + }); + }); + } + }); + +})(); + + +/** + * + * + * @cfg + * @member CKEDITOR.config + */ +CKEDITOR.config.autocorrect_enabled = true; +// language specific +CKEDITOR.config.autocorrect_replacementTable = {"-->": "→", "-+": "∓", "->": "→", "...": "…", "(c)": "©", "(e)": "€", "(r)": "®", "(tm)": "â„¢", "(o)": "Ëš", "+-": "±", "<-": "â†", "<--": "â†", "<-->": "↔", "<->": "↔", "<<": "«", ">>": "»", "~=": "≈", "1/2": "½", "1/4": "¼", "3/4": "¾"}; + +CKEDITOR.config.autocorrect_useReplacementTable = true; + +CKEDITOR.config.autocorrect_recognizeUrlsAsYouType = true; + +CKEDITOR.config.autocorrect_recognizeUrls = true; +// language specific +CKEDITOR.config.autocorrect_dash = '–'; + +CKEDITOR.config.autocorrect_replaceHyphensAsYouType = true; + +CKEDITOR.config.autocorrect_replaceHyphens = true; + +CKEDITOR.config.autocorrect_formatOrdinalsAsYouType = true; + +CKEDITOR.config.autocorrect_formatOrdinals = true; + +// language specific +CKEDITOR.config.autocorrect_singleQuotes = "‘’"; + +CKEDITOR.config.autocorrect_smartQuotesAsYouType = true; + +CKEDITOR.config.autocorrect_smartQuotes = true; +// language specific +CKEDITOR.config.autocorrect_doubleQuotes = "“â€"; + +CKEDITOR.config.autocorrect_createHorizontalRulesAsYouType = true; + +CKEDITOR.config.autocorrect_createHorizontalRules = true; + +CKEDITOR.config.autocorrect_formatBulletedListsAsYouType = true; + +CKEDITOR.config.autocorrect_formatBulletedLists = true; + +CKEDITOR.config.autocorrect_formatNumberedListsAsYouType = true; + +CKEDITOR.config.autocorrect_formatNumberedLists = true; + +// XXX table autocreation? +// XXX upper first word of a sentense? \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/LICENSE.md b/plugins/ckeditor4/base64image/LICENSE.md new file mode 100644 index 0000000..921d325 --- /dev/null +++ b/plugins/ckeditor4/base64image/LICENSE.md @@ -0,0 +1,1244 @@ +Software License Agreement +========================== + +Base64Image Plugin for CKEditor - Adds images from local client as base64 +string into the source without server side processing. You can also add +external image urls into the source. + +Created by ALL-INKL.COM - Neue Medien Münnich - 04. Feb 2014 + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + + +Appendix A: The GPL License +--------------------------- + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix B: The LGPL License +---------------------------- + +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix C: The MPL License +--------------------------- + +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + diff --git a/plugins/ckeditor4/base64image/README.md b/plugins/ckeditor4/base64image/README.md new file mode 100644 index 0000000..413d40c --- /dev/null +++ b/plugins/ckeditor4/base64image/README.md @@ -0,0 +1,21 @@ +Base64Image Plugin for CKEditor 4 +================================= + +Created by ALL-INKL.COM - Neue Medien Münnich - 04. Feb 2014 + +Adds images from local client as base64 string into the source without server +side processing. You can also add external image urls into the source. + +## Requirements +The Browser must support the JavaScript File API. + +## Installation + + 1. Download the plugin from http://github.com/nmmf/base64image + + 2. Extract (decompress) the downloaded file into the plugins folder of your + CKEditor installation. + Example: http://example.com/ckeditor/plugins/base64image + + 3. Enable the plugin by using the extraPlugins configuration setting. + Example: CKEDITOR.config.extraPlugins = "base64image"; diff --git a/plugins/ckeditor4/base64image/dialogs/base64image.js b/plugins/ckeditor4/base64image/dialogs/base64image.js new file mode 100644 index 0000000..65d860c --- /dev/null +++ b/plugins/ckeditor4/base64image/dialogs/base64image.js @@ -0,0 +1,503 @@ +/* + * Created by ALL-INKL.COM - Neue Medien Muennich - 04. Feb 2014 + * Licensed under the terms of GPL, LGPL and MPL licenses. + */ +CKEDITOR.dialog.add("base64imageDialog", function(editor){ + + var t = null, + selectedImg = null, + orgWidth = null, orgHeight = null, + imgPreview = null, urlCB = null, urlI = null, fileCB = null, imgScal = 1, lock = true; + + /* Check File Reader Support */ + function fileSupport() { + var r = false, n = null; + try { + if(FileReader) { + var n = document.createElement("input"); + if(n && "files" in n) r = true; + } + } catch(e) { r = false; } + n = null; + return r; + } + var fsupport = fileSupport(); + + /* Load preview image */ + function imagePreviewLoad(s) { + + /* no preview */ + if(typeof(s) != "string" || !s) { + imgPreview.getElement().setHtml(""); + return; + } + + /* Create image */ + var i = new Image(); + + /* Display loading text in preview element */ + imgPreview.getElement().setHtml("Loading..."); + + /* When image is loaded */ + i.onload = function() { + + /* Remove preview */ + imgPreview.getElement().setHtml(""); + + /* Set attributes */ + if(orgWidth == null || orgHeight == null) { + t.setValueOf("tab-properties", "width", this.width); + t.setValueOf("tab-properties", "height", this.height); + imgScal = 1; + if(this.height > 0 && this.width > 0) imgScal = this.width / this.height; + if(imgScal <= 0) imgScal = 1; + } else { + orgWidth = null; + orgHeight = null; + } + this.id = editor.id+"previewimage"; + this.setAttribute("style", "max-width:400px;max-height:100px;"); + this.setAttribute("alt", ""); + + /* Insert preview image */ + try { + var p = imgPreview.getElement().$; + if(p) p.appendChild(this); + } catch(e) {} + + }; + + /* Error Function */ + i.onerror = function(){ imgPreview.getElement().setHtml(""); }; + i.onabort = function(){ imgPreview.getElement().setHtml(""); }; + + /* Load image */ + i.src = s; + } + + /* Change input values and preview image */ + function imagePreview(src){ + + /* Remove preview */ + imgPreview.getElement().setHtml(""); + + if(src == "base64") { + + /* Disable Checkboxes */ + if(urlCB) urlCB.setValue(false, true); + if(fileCB) fileCB.setValue(false, true); + + } else if(src == "url") { + + /* Ensable Image URL Checkbox */ + if(urlCB) urlCB.setValue(true, true); + if(fileCB) fileCB.setValue(false, true); + + /* Load preview image */ + if(urlI) imagePreviewLoad(urlI.getValue()); + + } else if(fsupport) { + + /* Ensable Image File Checkbox */ + if(urlCB) urlCB.setValue(false, true); + if(fileCB) fileCB.setValue(true, true); + + /* Read file and load preview */ + var fileI = t.getContentElement("tab-source", "file"); + var n = null; + try { n = fileI.getInputElement().$; } catch(e) { n = null; } + if(n && "files" in n && n.files && n.files.length > 0 && n.files[0]) { + if("type" in n.files[0] && !n.files[0].type.match("image.*")) return; + if(!FileReader) return; + imgPreview.getElement().setHtml("Loading..."); + var fr = new FileReader(); + fr.onload = (function(f) { return function(e) { + imgPreview.getElement().setHtml(""); + imagePreviewLoad(e.target.result); + }; })(n.files[0]); + fr.onerror = function(){ imgPreview.getElement().setHtml(""); }; + fr.onabort = function(){ imgPreview.getElement().setHtml(""); }; + fr.readAsDataURL(n.files[0]); + } + } + }; + + /* Calculate image dimensions */ + function getImageDimensions() { + var o = { + "w" : t.getContentElement("tab-properties", "width").getValue(), + "h" : t.getContentElement("tab-properties", "height").getValue(), + "uw" : "px", + "uh" : "px" + }; + if(o.w.indexOf("%") >= 0) o.uw = "%"; + if(o.h.indexOf("%") >= 0) o.uh = "%"; + o.w = parseInt(o.w, 10); + o.h = parseInt(o.h, 10); + if(isNaN(o.w)) o.w = 0; + if(isNaN(o.h)) o.h = 0; + return o; + } + + /* Set image dimensions */ + function imageDimensions(src) { + var o = getImageDimensions(); + var u = "px"; + if(src == "width") { + if(o.uw == "%") u = "%"; + o.h = Math.round(o.w / imgScal); + } else { + if(o.uh == "%") u = "%"; + o.w = Math.round(o.h * imgScal); + } + if(u == "%") { + o.w += "%"; + o.h += "%"; + } + t.getContentElement("tab-properties", "width").setValue(o.w), + t.getContentElement("tab-properties", "height").setValue(o.h) + } + + /* Set integer Value */ + function integerValue(elem) { + var v = elem.getValue(), u = ""; + if(v.indexOf("%") >= 0) u = "%"; + v = parseInt(v, 10); + if(isNaN(v)) v = 0; + elem.setValue(v+u); + } + + if(fsupport) { + + /* Dialog with file and url image source */ + var sourceElements = [ + { + type: "hbox", + widths: ["70px"], + children: [ + { + type: "checkbox", + id: "urlcheckbox", + style: "margin-top:5px", + label: editor.lang.common.url+":" + }, + { + type: "text", + id: "url", + label: "", + onChange: function(){ imagePreview("url"); } + } + ] + }, + { + type: "hbox", + widths: ["70px"], + children: [ + { + type: "checkbox", + id: "filecheckbox", + style: "margin-top:5px", + label: editor.lang.common.upload+":" + }, + { + type: "file", + id: "file", + label: "", + onChange: function(){ imagePreview("file"); } + } + ] + }, + { + type: "html", + id: "preview", + html: new CKEDITOR.template("<div style=\"text-align:center;\"></div>").output() + } + ]; + + } else { + + /* Dialog with url image source */ + var sourceElements = [ + { + type: "text", + id: "url", + label: editor.lang.common.url, + onChange: function(){ imagePreview("url"); } + }, + { + type: "html", + id: "preview", + html: new CKEDITOR.template("<div style=\"text-align:center;\"></div>").output() + } + ]; + } + + /* Dialog */ + return { + title: editor.lang.common.image, + minWidth: 450, + minHeight: 180, + onLoad: function(){ + + if(fsupport) { + + /* Get checkboxes */ + urlCB = this.getContentElement("tab-source", "urlcheckbox"); + fileCB = this.getContentElement("tab-source", "filecheckbox"); + + /* Checkbox Events */ + urlCB.getInputElement().on("click", function(){ imagePreview("url"); }); + fileCB.getInputElement().on("click", function(){ imagePreview("file"); }); + + } + + /* Get url input element */ + urlI = this.getContentElement("tab-source", "url"); + + /* Get image preview element */ + imgPreview = this.getContentElement("tab-source", "preview"); + + /* Constrain proportions or not */ + this.getContentElement("tab-properties", "lock").getInputElement().on("click", function(){ + if(this.getValue()) lock = true; else lock = false; + if(lock) imageDimensions("width"); + }, this.getContentElement("tab-properties", "lock")); + + /* Change Attributes Events */ + this.getContentElement("tab-properties", "width").getInputElement().on("keyup", function(){ if(lock) imageDimensions("width"); }); + this.getContentElement("tab-properties", "height").getInputElement().on("keyup", function(){ if(lock) imageDimensions("height"); }); + this.getContentElement("tab-properties", "vmargin").getInputElement().on("keyup", function(){ integerValue(this); }, this.getContentElement("tab-properties", "vmargin")); + this.getContentElement("tab-properties", "hmargin").getInputElement().on("keyup", function(){ integerValue(this); }, this.getContentElement("tab-properties", "hmargin")); + this.getContentElement("tab-properties", "border").getInputElement().on("keyup", function(){ integerValue(this); }, this.getContentElement("tab-properties", "border")); + + }, + onShow: function(){ + + /* Remove preview */ + imgPreview.getElement().setHtml(""); + + t = this, orgWidth = null, orgHeight = null, imgScal = 1, lock = true; + + /* selected image or null */ + selectedImg = editor.getSelection(); + if(selectedImg) selectedImg = selectedImg.getSelectedElement(); + if(!selectedImg || selectedImg.getName() !== "img") selectedImg = null; + + /* Set input values */ + t.setValueOf("tab-properties", "lock", lock); + t.setValueOf("tab-properties", "vmargin", "0"); + t.setValueOf("tab-properties", "hmargin", "0"); + t.setValueOf("tab-properties", "border", "0"); + t.setValueOf("tab-properties", "align", "none"); + if(selectedImg) { + + /* Set input values from selected image */ + if(typeof(selectedImg.getAttribute("width")) == "string") orgWidth = selectedImg.getAttribute("width"); + if(typeof(selectedImg.getAttribute("height")) == "string") orgHeight = selectedImg.getAttribute("height"); + if((orgWidth == null || orgHeight == null) && selectedImg.$) { + orgWidth = selectedImg.$.width; + orgHeight = selectedImg.$.height; + } + if(orgWidth != null && orgHeight != null) { + t.setValueOf("tab-properties", "width", orgWidth); + t.setValueOf("tab-properties", "height", orgHeight); + orgWidth = parseInt(orgWidth, 10); + orgHeight = parseInt(orgHeight, 10); + imgScal = 1; + if(!isNaN(orgWidth) && !isNaN(orgHeight) && orgHeight > 0 && orgWidth > 0) imgScal = orgWidth / orgHeight; + if(imgScal <= 0) imgScal = 1; + } + + if(typeof(selectedImg.getAttribute("src")) == "string") { + if(selectedImg.getAttribute("src").indexOf("data:") === 0) { + imagePreview("base64"); + imagePreviewLoad(selectedImg.getAttribute("src")); + } else { + t.setValueOf("tab-source", "url", selectedImg.getAttribute("src")); + } + } + if(typeof(selectedImg.getAttribute("alt")) == "string") t.setValueOf("tab-properties", "alt", selectedImg.getAttribute("alt")); + if(typeof(selectedImg.getAttribute("hspace")) == "string") t.setValueOf("tab-properties", "hmargin", selectedImg.getAttribute("hspace")); + if(typeof(selectedImg.getAttribute("vspace")) == "string") t.setValueOf("tab-properties", "vmargin", selectedImg.getAttribute("vspace")); + if(typeof(selectedImg.getAttribute("border")) == "string") t.setValueOf("tab-properties", "border", selectedImg.getAttribute("border")); + if(typeof(selectedImg.getAttribute("align")) == "string") { + switch(selectedImg.getAttribute("align")) { + case "top": + case "text-top": + t.setValueOf("tab-properties", "align", "top"); + break; + case "baseline": + case "bottom": + case "text-bottom": + t.setValueOf("tab-properties", "align", "bottom"); + break; + case "left": + t.setValueOf("tab-properties", "align", "left"); + break; + case "right": + t.setValueOf("tab-properties", "align", "right"); + break; + } + } + t.selectPage("tab-properties"); + } + + }, + onOk : function(){ + + /* Get image source */ + var src = ""; + try { src = CKEDITOR.document.getById(editor.id+"previewimage").$.src; } catch(e) { src = ""; } + if(typeof(src) != "string" || src == null || src === "") return; + + /* selected image or new image */ + if(selectedImg) var newImg = selectedImg; else var newImg = editor.document.createElement("img"); + newImg.setAttribute("src", src); + src = null; + + /* Set attributes */ + newImg.setAttribute("alt", t.getValueOf("tab-properties", "alt").replace(/^\s+/, "").replace(/\s+$/, "")); + var attr = { + "width" : ["width", "width:#;", "integer", 1], + "height" : ["height", "height:#;", "integer", 1], + "vmargin" : ["vspace", "margin-top:#;margin-bottom:#;", "integer", 0], + "hmargin" : ["hspace", "margin-left:#;margin-right:#;", "integer", 0], + "align" : ["align", ""], + "border" : ["border", "border:# solid black;", "integer", 0] + }, css = [], value, cssvalue, attrvalue, k; + for(k in attr) { + + value = t.getValueOf("tab-properties", k); + attrvalue = value; + cssvalue = value; + unit = "px"; + + if(k == "align") { + switch(value) { + case "top": + case "bottom": + attr[k][1] = "vertical-align:#;"; + break; + case "left": + case "right": + attr[k][1] = "float:#;"; + break; + default: + value = null; + break; + } + } + + if(attr[k][2] == "integer") { + if(value.indexOf("%") >= 0) unit = "%"; + value = parseInt(value, 10); + if(isNaN(value)) value = null; else if(value < attr[k][3]) value = null; + if(value != null) { + if(unit == "%") { + attrvalue = value+"%"; + cssvalue = value+"%"; + } else { + attrvalue = value; + cssvalue = value+"px"; + } + } + } + + if(value != null) { + newImg.setAttribute(attr[k][0], attrvalue); + css.push(attr[k][1].replace(/#/g, cssvalue)); + } + + } + if(css.length > 0) newImg.setAttribute("style", css.join("")); + + /* Insert new image */ + if(!selectedImg) editor.insertElement(newImg); + + /* Resize image */ + if(editor.plugins.imageresize) editor.plugins.imageresize.resize(editor, newImg, 800, 800); + + }, + + /* Dialog form */ + contents: [ + { + id: "tab-source", + label: editor.lang.common.generalTab, + elements: sourceElements + }, + { + id: "tab-properties", + label: editor.lang.common.advancedTab, + elements: [ + { + type: "text", + id: "alt", + label: editor.lang.base64image.alt + }, + { + type: 'hbox', + widths: ["15%", "15%", "70%"], + children: [ + { + type: "text", + width: "45px", + id: "width", + label: editor.lang.common.width + }, + { + type: "text", + width: "45px", + id: "height", + label: editor.lang.common.height + }, + { + type: "checkbox", + id: "lock", + label: editor.lang.base64image.lockRatio, + style: "margin-top:18px;" + } + ] + }, + { + type: 'hbox', + widths: ["23%", "30%", "30%", "17%"], + style: "margin-top:10px;", + children: [ + { + type: "select", + id: "align", + label: editor.lang.common.align, + items: [ + [editor.lang.common.notSet, "none"], + [editor.lang.common.alignTop, "top"], + [editor.lang.common.alignBottom, "bottom"], + [editor.lang.common.alignLeft, "left"], + [editor.lang.common.alignRight, "right"] + ] + }, + { + type: "text", + width: "45px", + id: "vmargin", + label: editor.lang.base64image.vSpace + }, + { + type: "text", + width: "45px", + id: "hmargin", + label: editor.lang.base64image.hSpace + }, + { + type: "text", + width: "45px", + id: "border", + label: editor.lang.base64image.border + } + ] + } + ] + } + ] + }; +}); diff --git a/plugins/ckeditor4/base64image/icons/base64image.png b/plugins/ckeditor4/base64image/icons/base64image.png new file mode 100644 index 0000000000000000000000000000000000000000..81bea2d28eee2d994eaf92b37189fc8fd993f481 GIT binary patch literal 3175 zcmV-t44CtYP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)XH-+^7Crag z^g>IBfRsybQWXdwQbLP>6p<z>Aqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uh<iVD~V z<RPMtgQJLw%KPDaqifc@_vX$1wbwr9tn;0-&j-K=43<bUQ8j=JsX`tR;Dg7+#^K~H zK!FM*Z~zbpvt%K2{UZSY_<lS*D<Z%Lz5oGu(+dayz)hRLFdT>f59&ghTmgWD0l;*T zI7<kC6aYYajzXpYKt=(8otP$50H6c_V9R4-;{Z@C0AMG7=F<Rxo%or10RUT+Ar%3j zkpLhQWr#!oXgdI`&sK^>09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-<?i z0%4j!F2Z@488U%158(66005wo6%pWr^Zj_v4zAA5HjcIqUoGmt2LB>rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_<lS*MWK+n+1cgf z<k(8YLR(?VSAG6x!e78w{cQPuJpA|d;J)G{fihizM+Erb!p!tcr5w+a34~(Y=8s4G zw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@r6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@u zU1J0GOD7Ombim^G008p4Z^6_k2m^p<gW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm z2mk;?pn)o|K^yeJ7%adB9Ki+L!3+FgHiSYX#KJ-lLJDMn9CBbOtb#%)hRv`YDqt_v zKpix|QD}yfa1JiQRk#j4a1Z)n2%f<xynzV>LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifq<Ex{*7`05XF7hP+2Hl!3BQJ=6@fL%FCo z8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ<AYmRsNLWl*PS{AOARHt#5!wki2?K;t z!Y3k=s7tgax)J%r7-BLphge7~Bi0g+6E6^Zh(p9TBoc{3GAFr^0!gu?RMHaCM$&Fl zBk3%un>0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 z<uv66WtcKSRim0x-Ke2d5jBrmLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_ zbh;7Ul^#x)&{xvS=|||7=mYe33=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vF<Q0r40Q)j6=sE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*SAPZv|vv@2aYYnT0 zb%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5cP6_8Ir<e17iry6O zDdH&`rZh~sF=bq9s+O0QSgS~@QL9Jmy*94xr=6y~MY~!1fet~(N+(<=M`w@D1)b+p z*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a<fJbF^|4I#xQ~n$Dc= zKYhjYmgz5NSkDm8*fZm{6U!;YX`NG>(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-k<Mujg;0Lz*3buG=3$G&ehepthlN*$KaOySSQ^nWmo<0M+(UEUMEXRQ zMBbZcF;6+KElM>iKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BK<z=<L*0kfKU@CX*zeqbYQT4(^U>T#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot<a{81DF0~rvGr5Xr~8u`lav1h z1DNytV>2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0004kNkl<Zc-o|szls`B6o<bv3{L!m6Hpna8Lcb^1_FX$ zBU4yzkzy+=A7b0hTP%5ilqo{qVj&M8+F2|_0tsGFbh$Gph0e+@VI}Ji4%}0m!}q)A z98py+k;8>@0Yv0Y7^*4`K$0Y=>f`@J9LFaMo6QEm7m-^L`7I*1fd5(;W1cXGqNuR& zFdmN;csPe21c9pRfndMi12COV@8|RR&&gzRf3AVG_C(<Oz8>E<s`^V+Z~jqp1$-)! zX0xfPdT3Cq)y_?!+iJD`^m;u7J_1Bhbh7Y5Q{XGmJm&8_&-<39>HB`aPZ)+@fVf(% zo~Gb=UQrx}VR$zj4zJ7Q@(j2xl}dMMntsT#jNNX>U@)jvDwXdd0)VJ0-ELQx%Vo7* zum2d0MzQO<SZkThW;7ZN+U+*hT2vLsaaga{tX3-)i-owwM*^RdB#F1%EqR_JB6K<( z0E{u@dH!qy$K5#)6ssHr0a=#u+JUJm)>@1)sOl5J<3-1GT+cV@?*N&0)}+j2JVpQj N002ovPDHLkV1iU+<4yno literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/base64image/icons/hidpi/base64image.png b/plugins/ckeditor4/base64image/icons/hidpi/base64image.png new file mode 100644 index 0000000000000000000000000000000000000000..00a962bc5c775fa7d99fab1836928bd32fa22610 GIT binary patch literal 4112 zcmV+r5by7aP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000fw z000fw0YWI7cmMzjPiaF#P*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)XH-+^7Crag z^g>IBfRsybQWXdwQbLP>6p<z>Aqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uh<iVD~V z<RPMtgQJLw%KPDaqifc@_vX$1wbwr9tn;0-&j-K=43<bUQ8j=JsX`tR;Dg7+#^K~H zK!FM*Z~zbpvt%K2{UZSY_<lS*D<Z%Lz5oGu(+dayz)hRLFdT>f59&ghTmgWD0l;*T zI7<kC6aYYajzXpYKt=(8otP$50H6c_V9R4-;{Z@C0AMG7=F<Rxo%or10RUT+Ar%3j zkpLhQWr#!oXgdI`&sK^>09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-<?i z0%4j!F2Z@488U%158(66005wo6%pWr^Zj_v4zAA5HjcIqUoGmt2LB>rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_<lS*MWK+n+1cgf z<k(8YLR(?VSAG6x!e78w{cQPuJpA|d;J)G{fihizM+Erb!p!tcr5w+a34~(Y=8s4G zw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@r6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@u zU1J0GOD7Ombim^G008p4Z^6_k2m^p<gW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm z2mk;?pn)o|K^yeJ7%adB9Ki+L!3+FgHiSYX#KJ-lLJDMn9CBbOtb#%)hRv`YDqt_v zKpix|QD}yfa1JiQRk#j4a1Z)n2%f<xynzV>LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifq<Ex{*7`05XF7hP+2Hl!3BQJ=6@fL%FCo z8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ<AYmRsNLWl*PS{AOARHt#5!wki2?K;t z!Y3k=s7tgax)J%r7-BLphge7~Bi0g+6E6^Zh(p9TBoc{3GAFr^0!gu?RMHaCM$&Fl zBk3%un>0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 z<uv66WtcKSRim0x-Ke2d5jBrmLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_ zbh;7Ul^#x)&{xvS=|||7=mYe33=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vF<Q0r40Q)j6=sE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*SAPZv|vv@2aYYnT0 zb%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5cP6_8Ir<e17iry6O zDdH&`rZh~sF=bq9s+O0QSgS~@QL9Jmy*94xr=6y~MY~!1fet~(N+(<=M`w@D1)b+p z*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a<fJbF^|4I#xQ~n$Dc= zKYhjYmgz5NSkDm8*fZm{6U!;YX`NG>(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-k<Mujg;0Lz*3buG=3$G&ehepthlN*$KaOySSQ^nWmo<0M+(UEUMEXRQ zMBbZcF;6+KElM>iKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BK<z=<L*0kfKU@CX*zeqbYQT4(^U>T#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot<a{81DF0~rvGr5Xr~8u`lav1h z1DNytV>2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000FmNkl<Zc-rh&OKej|6g_ul-n0Ge=O6xHW77nI2yT<$ zqzwgvLkST`bO#G0Dv-K!)dkCJBB8SDvI447QBXxIBGd&7Dj{{-B_A14A=ECADz}Xw ziR}=7-e<b-vt`E#B}hP}_HM?K=gpjZ=ALtBNJ@z}84PbY{s$mhKZwYBof}Ijc^7~q z$B!f6a$&hrLA6?iZQHAV*uBa>??lw3nlWe|4>Vmzsb248V0mc?wfTAcbnDhDJ(h!q z4%xP<_5v_13r4N>%Bg==t3lzs7l38kfDkC%xIwmMA$;_x0^kIIyffuX0N?$2?V9n& z{5%ZP#EUuz0Z<hM$w&lJ2+Qg?UeS5BObB@VeyA=N0G!ymefy=IgM$EodxgTKUmra} zIFYzgCPK|H)|I&`1YEifCPWwTHUQhQ03s0Q0AnDZFQ41D59AbDE|<e^#bTZqyTXJ3 zTc?9E&Ow~_6u0P*MSC>rb%euVR4NrHqB+GdO@zZ?)arHEFJs?CAR?@^{&vM%mIcc+ zVOti;<uda5{NrM=h{c5kEG{gdSS%u+&p)n|%djkKjXemQF{na76#|?w5D}<jj%8V0 z-?L5zq?E8M3#C#CXQ!w84^B<pEEEb43WdUhgHuyC&rVPGFP2KH0w5v?&f)iZk&Hx; zj6~q~dLcM(djWOq)2jk!Q7I*st5pEFaAs!an=>;rtto>5KCV`)P!t7>v7XI?J|AMS z7-(eVeE`Sh?c1mSnwvxU*)tFkK-2@irv^X-G<AB_`RfyBya3=TIBzc25u7pjy<Wr; z3DEFx)E|w`_V@RvXms>}ymRMknwvwlR$H|Ox_v-O5MvM?5AIyNXxN5vnSjfJb1=q0 zLcpbIz>4e@ArK7)LBqpL@p`{MJUN+CRTcA3o_s+gBfrSIcYj`d`V@+zf>mWG9eEIA z;EDp5u7fiMpWBU~uEVV;sGBBA%gb1*)nGbQDxAZwY2d*i0DQK8eEfi53`V1Yy}Nd) zKbFhaDVrUW_wWA>hlNflvQ7pp+XguxR8>VN5I`!OhCVrYO3CGBeFqLilgT8)x(>Ih z!lft(`h1AQ<DeZoj%0?0rbEFXYPA{~^*T($z+^5LS2XPh8XR;Z5C9`;dd^xZfFmVc z(-7ad5i~lQNp0D3ZhT_m825PY)5yrNNIH$T;&E(>L=a6TK|6Q$N0Z5K-yRqs(=eJe zJBkvV<AYr8T>xJp7=-3>b=44CsZT}(RS0Yd1VGuW=JESy-^*sTL@b664<C-E`ub)m zlbIEJ_C(!Vw}OU-+-_aJzGrMKXcz`e(`>J0nkE{J27H=^(Xp|QC>A@dscKgn?@|E) z5JJH3^+E}S0O0)i?%f&KHX5c0BEs0{C^n~3$L<vh6V%uDsY}xiP3+y9WsbyFT5XGs z&8Za1i;JIkcEX-sAcO$-`Jf8{%4ANxlg*y=xLjx$2Bd8_UClHR-LL_Z`}ap5K72SE z3WeZtyJ0xguNAg!W81cE+;A9L?Meop+YQ9yphP0GF`YiwpH9QFtag1!Dcf2mBJ3C# zX!Z`n=yAB!07xm@V=n*zy2k@bB(zW@GMgP7)J&&0tleJ->v>nS3UgHkASF~Gp!@yj zM}~(ptz&s!X02*o4+vYzw&!#Ks8*|3s#K8LwCSW_nyA<7&pp$Zjk;-~+UzyWBwFan z?Y07%28Hux)-QVNU1ylKjdHaLS*!6b04s0YuOaB)^)hN9`p>-${~iFFu1_@lK;FUt O0000<MNUMnLSTZZfR@() literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/base64image/lang/af.js b/plugins/ckeditor4/base64image/lang/af.js new file mode 100644 index 0000000..2c5aa9a --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/af.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","af",{ + "alt":"Alternatiewe teks", + "lockRatio":"Vaste proporsie", + "vSpace":"VSpasie", + "hSpace":"HSpasie", + "border":"Rand" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/ar.js b/plugins/ckeditor4/base64image/lang/ar.js new file mode 100644 index 0000000..474ce1e --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/ar.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","ar",{ + "alt":"عنوان الصورة", + "lockRatio":"تناسق الØجم", + "vSpace":"تباعد عمودي", + "hSpace":"تباعد Ø£Ùقي", + "border":"سمك الØدود" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/bg.js b/plugins/ckeditor4/base64image/lang/bg.js new file mode 100644 index 0000000..c0e2324 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/bg.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","bg",{ + "alt":"Ðлтернативен текÑÑ‚", + "lockRatio":"Заключване на Ñъотношението", + "vSpace":"Вертикален отÑтъп", + "hSpace":"Хоризонтален отÑтъп", + "border":"Рамка" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/bn.js b/plugins/ckeditor4/base64image/lang/bn.js new file mode 100644 index 0000000..faf767a --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/bn.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","bn",{ + "alt":"বিকলà§à¦ª টেকà§à¦¸à¦Ÿ", + "lockRatio":"অনà§à¦ªà¦¾à¦¤ লক কর", + "vSpace":"à¦à¦¾à¦°à§à¦Ÿà¦¿à¦•à§‡à¦² সà§à¦ªà§‡à¦¸", + "hSpace":"হরাইজনà§à¦Ÿà¦¾à¦² সà§à¦ªà§‡à¦¸", + "border":"বরà§à¦¡à¦¾à¦°" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/bs.js b/plugins/ckeditor4/base64image/lang/bs.js new file mode 100644 index 0000000..ee37a1d --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/bs.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","bs",{ + "alt":"Tekst na slici", + "lockRatio":"Zakljuèaj odnos", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Okvir" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/ca.js b/plugins/ckeditor4/base64image/lang/ca.js new file mode 100644 index 0000000..9d3cf9d --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/ca.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","ca",{ + "alt":"Text alternatiu", + "lockRatio":"Bloqueja les proporcions", + "vSpace":"Espaiat vert.", + "hSpace":"Espaiat horit.", + "border":"Vora" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/cs.js b/plugins/ckeditor4/base64image/lang/cs.js new file mode 100644 index 0000000..c0838dd --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/cs.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","cs",{ + "alt":"Alternativnà text", + "lockRatio":"Zámek", + "vSpace":"Vertikálnà mezera", + "hSpace":"Horizontálnà mezera", + "border":"Okraje" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/cy.js b/plugins/ckeditor4/base64image/lang/cy.js new file mode 100644 index 0000000..0d93168 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/cy.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","cy",{ + "alt":"Testun Amgen", + "lockRatio":"Cloi Cymhareb", + "vSpace":"BwlchF", + "hSpace":"BwlchLl", + "border":"Ymyl" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/da.js b/plugins/ckeditor4/base64image/lang/da.js new file mode 100644 index 0000000..42190f7 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/da.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","da",{ + "alt":"Alternativ tekst", + "lockRatio":"LÃ¥s størrelsesforhold", + "vSpace":"Lodret margen", + "hSpace":"Vandret margen", + "border":"Ramme" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/de.js b/plugins/ckeditor4/base64image/lang/de.js new file mode 100644 index 0000000..807539e --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/de.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","de",{ + "alt":"Alternativer Text", + "lockRatio":"Größenverhältnis beibehalten", + "vSpace":"Vertikal-Abstand", + "hSpace":"Horizontal-Abstand", + "border":"Rahmen" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/el.js b/plugins/ckeditor4/base64image/lang/el.js new file mode 100644 index 0000000..d34e372 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/el.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","el",{ + "alt":"Εναλλακτικό Κείμενο", + "lockRatio":"Κλείδωμα Αναλογίας", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"ΠεÏίγÏαμμα" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/en-au.js b/plugins/ckeditor4/base64image/lang/en-au.js new file mode 100644 index 0000000..af9334a --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/en-au.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","en-au",{ + "alt":"Alternative Text", + "lockRatio":"Lock Ratio", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Border" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/en-ca.js b/plugins/ckeditor4/base64image/lang/en-ca.js new file mode 100644 index 0000000..186508e --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/en-ca.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","en-ca",{ + "alt":"Alternative Text", + "lockRatio":"Lock Ratio", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Border" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/en-gb.js b/plugins/ckeditor4/base64image/lang/en-gb.js new file mode 100644 index 0000000..b913639 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/en-gb.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","en-gb",{ + "alt":"Alternative Text", + "lockRatio":"Lock Ratio", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Border" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/en.js b/plugins/ckeditor4/base64image/lang/en.js new file mode 100644 index 0000000..85e2991 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/en.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","en",{ + "alt":"Alternative Text", + "lockRatio":"Lock Ratio", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Border" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/eo.js b/plugins/ckeditor4/base64image/lang/eo.js new file mode 100644 index 0000000..d33444b --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/eo.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","eo",{ + "alt":"AnstataÅiga Teksto", + "lockRatio":"Konservi Proporcion", + "vSpace":"Vertikala Spaco", + "hSpace":"Horizontala Spaco", + "border":"Bordero" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/es.js b/plugins/ckeditor4/base64image/lang/es.js new file mode 100644 index 0000000..0d45ced --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/es.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","es",{ + "alt":"Texto Alternativo", + "lockRatio":"Proporcional", + "vSpace":"Esp.Vert", + "hSpace":"Esp.Horiz", + "border":"Borde" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/et.js b/plugins/ckeditor4/base64image/lang/et.js new file mode 100644 index 0000000..ceee085 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/et.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","et",{ + "alt":"Alternatiivne tekst", + "lockRatio":"Lukusta kuvasuhe", + "vSpace":"V. vaheruum", + "hSpace":"H. vaheruum", + "border":"Joon" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/eu.js b/plugins/ckeditor4/base64image/lang/eu.js new file mode 100644 index 0000000..d12abc2 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/eu.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","eu",{ + "alt":"Ordezko Testua", + "lockRatio":"Erlazioa Blokeatu", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Ertza" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/fa.js b/plugins/ckeditor4/base64image/lang/fa.js new file mode 100644 index 0000000..d414603 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/fa.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","fa",{ + "alt":"متن جایگزین", + "lockRatio":"Ù‚ÙÙ„ کردن نسبت", + "vSpace":"Ùاصلهٴ عمودی", + "hSpace":"Ùاصلهٴ اÙÙ‚ÛŒ", + "border":"لبه" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/fi.js b/plugins/ckeditor4/base64image/lang/fi.js new file mode 100644 index 0000000..d5f8086 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/fi.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","fi",{ + "alt":"Vaihtoehtoinen teksti", + "lockRatio":"Lukitse suhteet", + "vSpace":"Pystytila", + "hSpace":"Vaakatila", + "border":"Kehys" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/fo.js b/plugins/ckeditor4/base64image/lang/fo.js new file mode 100644 index 0000000..6fa49c6 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/fo.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","fo",{ + "alt":"Alternativur tekstur", + "lockRatio":"Læs lutfallið", + "vSpace":"Vinstri breddi", + "hSpace":"Høgri breddi", + "border":"Bordi" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/fr-ca.js b/plugins/ckeditor4/base64image/lang/fr-ca.js new file mode 100644 index 0000000..b5d9209 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/fr-ca.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","fr-ca",{ + "alt":"Texte alternatif", + "lockRatio":"Verrouiller les proportions", + "vSpace":"Espacement vertical", + "hSpace":"Espacement horizontal", + "border":"Bordure" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/fr.js b/plugins/ckeditor4/base64image/lang/fr.js new file mode 100644 index 0000000..68c9cfa --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/fr.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","fr",{ + "alt":"Texte de remplacement", + "lockRatio":"Conserver les proportions", + "vSpace":"Espacement vertical", + "hSpace":"Espacement horizontal", + "border":"Bordure" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/gl.js b/plugins/ckeditor4/base64image/lang/gl.js new file mode 100644 index 0000000..67e5aec --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/gl.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","gl",{ + "alt":"Texto alternativo", + "lockRatio":"Proporcional", + "vSpace":"Esp.Vert.", + "hSpace":"Esp.Horiz.", + "border":"Bordo" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/gu.js b/plugins/ckeditor4/base64image/lang/gu.js new file mode 100644 index 0000000..deb1b9e --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/gu.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","gu",{ + "alt":"ઑલà«àªŸàª°à«àª¨àªŸ ટેકà«àª¸à«àªŸ", + "lockRatio":"લૉક ગà«àª£à«‹àª¤à«àª¤àª°", + "vSpace":"લંબરૂપ જગà«àª¯àª¾", + "hSpace":"સમસà«àª¤àª°à«€àª¯ જગà«àª¯àª¾", + "border":"બોરà«àª¡àª°" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/he.js b/plugins/ckeditor4/base64image/lang/he.js new file mode 100644 index 0000000..af2fc43 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/he.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","he",{ + "alt":"טקסט חלופי", + "lockRatio":"× ×¢×™×œ×ª היחס", + "vSpace":"מרווח ×× ×›×™", + "hSpace":"מרווח ×ופקי", + "border":"מסגרת" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/hi.js b/plugins/ckeditor4/base64image/lang/hi.js new file mode 100644 index 0000000..fd6900f --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/hi.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","hi",{ + "alt":"वैकलà¥à¤ªà¤¿à¤• टेकà¥à¤¸à¥à¤Ÿ", + "lockRatio":"लॉक अनà¥à¤ªà¤¾à¤¤", + "vSpace":"वरà¥à¤Ÿà¤¿à¤•à¤² सà¥à¤ªà¥‡à¤¸", + "hSpace":"हॉरिज़ॉनà¥à¤Ÿà¤² सà¥à¤ªà¥‡à¤¸", + "border":"बॉरà¥à¤¡à¤°" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/hr.js b/plugins/ckeditor4/base64image/lang/hr.js new file mode 100644 index 0000000..3e434f8 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/hr.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","hr",{ + "alt":"Alternativni tekst", + "lockRatio":"ZakljuÄaj odnos", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Okvir" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/hu.js b/plugins/ckeditor4/base64image/lang/hu.js new file mode 100644 index 0000000..18a16d0 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/hu.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","hu",{ + "alt":"Buborék szöveg", + "lockRatio":"Arány megtartása", + "vSpace":"Függ. táv", + "hSpace":"VÃzsz. táv", + "border":"Keret" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/id.js b/plugins/ckeditor4/base64image/lang/id.js new file mode 100644 index 0000000..596180e --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/id.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","id",{ + "alt":"Teks alternatif", + "lockRatio":"Lock Ratio", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Batas" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/is.js b/plugins/ckeditor4/base64image/lang/is.js new file mode 100644 index 0000000..b87b08a --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/is.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","is",{ + "alt":"Baklægur texti", + "lockRatio":"Festa stærðarhlutfall", + "vSpace":"Hægri bil", + "hSpace":"Vinstri bil", + "border":"Rammi" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/it.js b/plugins/ckeditor4/base64image/lang/it.js new file mode 100644 index 0000000..505e080 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/it.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","it",{ + "alt":"Testo alternativo", + "lockRatio":"Blocca rapporto", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Bordo" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/ja.js b/plugins/ckeditor4/base64image/lang/ja.js new file mode 100644 index 0000000..35d6cd1 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/ja.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","ja",{ + "alt":"代替テã‚スト", + "lockRatio":"比率を固定", + "vSpace":"åž‚ç›´é–“éš”", + "hSpace":"水平間隔", + "border":"æž ç·šã®å¹…" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/ka.js b/plugins/ckeditor4/base64image/lang/ka.js new file mode 100644 index 0000000..9d9a7fd --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/ka.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","ka",{ + "alt":"სáƒáƒœáƒáƒªáƒ•áƒšáƒ ტექსტი", + "lockRatio":"პრáƒáƒžáƒáƒ ციის შენáƒáƒ ჩუნებáƒ", + "vSpace":"ჰáƒáƒ იზáƒáƒœáƒ¢áƒáƒšáƒ£áƒ ი სივრცე", + "hSpace":"ვერტიკáƒáƒšáƒ£áƒ ი სივრცე", + "border":"ჩáƒáƒ ჩáƒ" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/km.js b/plugins/ckeditor4/base64image/lang/km.js new file mode 100644 index 0000000..77f329d --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/km.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","km",{ + "alt":"អážáŸ’ážáž”ទជំនួស", + "lockRatio":"អážáŸ’រាឡុក", + "vSpace":"VSpace", + "hSpace":"គំលាážáž‘ទឹង", + "border":"ស៊ុម" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/ko.js b/plugins/ckeditor4/base64image/lang/ko.js new file mode 100644 index 0000000..7518cbd --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/ko.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","ko",{ + "alt":"ì´ë¯¸ì§€ 설명", + "lockRatio":"비율 ìœ ì§€", + "vSpace":"수ì§ì—¬ë°±", + "hSpace":"수í‰ì—¬ë°±", + "border":"í…Œë‘리" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/ku.js b/plugins/ckeditor4/base64image/lang/ku.js new file mode 100644 index 0000000..1eb91af --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/ku.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","ku",{ + "alt":"جێگرەوەی دەق", + "lockRatio":"داخستنی Ú•ÛŽÚ˜Ù‡", + "vSpace":"بۆشایی ئەستونی", + "hSpace":"بۆشایی ئاسۆیی", + "border":"پەراوێز" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/lt.js b/plugins/ckeditor4/base64image/lang/lt.js new file mode 100644 index 0000000..db7c073 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/lt.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","lt",{ + "alt":"Alternatyvus Tekstas", + "lockRatio":"IÅ¡laikyti proporcijÄ…", + "vSpace":"Vert.ErdvÄ—", + "hSpace":"Hor.ErdvÄ—", + "border":"RÄ—melis" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/lv.js b/plugins/ckeditor4/base64image/lang/lv.js new file mode 100644 index 0000000..800e637 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/lv.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","lv",{ + "alt":"AlternatÄ«vais teksts", + "lockRatio":"NemainÄ«ga Augstuma/Platuma attiecÄ«ba", + "vSpace":"HorizontÄlÄ telpa", + "hSpace":"VertikÄlÄ telpa", + "border":"RÄmis" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/mk.js b/plugins/ckeditor4/base64image/lang/mk.js new file mode 100644 index 0000000..2697468 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/mk.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","mk",{ + "alt":"Alternative Text", + "lockRatio":"Lock Ratio", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Border" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/mn.js b/plugins/ckeditor4/base64image/lang/mn.js new file mode 100644 index 0000000..b69b4b6 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/mn.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","mn",{ + "alt":"Зургийг орлох бичвÑÑ€", + "lockRatio":"Радио түгжих", + "vSpace":"БоÑоо зай", + "hSpace":"Хөндлөн зай", + "border":"ХүрÑÑ" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/ms.js b/plugins/ckeditor4/base64image/lang/ms.js new file mode 100644 index 0000000..9e2143b --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/ms.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","ms",{ + "alt":"Text Alternatif", + "lockRatio":"Tetapkan Nisbah", + "vSpace":"Ruang Menegak", + "hSpace":"Ruang Melintang", + "border":"Border" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/nb.js b/plugins/ckeditor4/base64image/lang/nb.js new file mode 100644 index 0000000..8c4511d --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/nb.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","nb",{ + "alt":"Alternativ tekst", + "lockRatio":"LÃ¥s forhold", + "vSpace":"VMarg", + "hSpace":"HMarg", + "border":"Ramme" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/nl.js b/plugins/ckeditor4/base64image/lang/nl.js new file mode 100644 index 0000000..1e3bae1 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/nl.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","nl",{ + "alt":"Alternatieve tekst", + "lockRatio":"Afmetingen vergrendelen", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Rand" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/no.js b/plugins/ckeditor4/base64image/lang/no.js new file mode 100644 index 0000000..8124e6f --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/no.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","no",{ + "alt":"Alternativ tekst", + "lockRatio":"LÃ¥s forhold", + "vSpace":"VMarg", + "hSpace":"HMarg", + "border":"Ramme" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/pl.js b/plugins/ckeditor4/base64image/lang/pl.js new file mode 100644 index 0000000..6752acb --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/pl.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","pl",{ + "alt":"Tekst zastÄ™pczy", + "lockRatio":"Zablokuj proporcje", + "vSpace":"OdstÄ™p pionowy", + "hSpace":"OdstÄ™p poziomy", + "border":"Obramowanie" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/pt-br.js b/plugins/ckeditor4/base64image/lang/pt-br.js new file mode 100644 index 0000000..43addff --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/pt-br.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","pt-br",{ + "alt":"Texto Alternativo", + "lockRatio":"Travar Proporções", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Borda" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/pt.js b/plugins/ckeditor4/base64image/lang/pt.js new file mode 100644 index 0000000..2c829b6 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/pt.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","pt",{ + "alt":"Texto Alternativo", + "lockRatio":"Proporcional", + "vSpace":"Esp.Vert", + "hSpace":"Esp.Horiz", + "border":"Limite" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/ro.js b/plugins/ckeditor4/base64image/lang/ro.js new file mode 100644 index 0000000..4c1172d --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/ro.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","ro",{ + "alt":"Text alternativ", + "lockRatio":"Păstrează proporÅ£iile", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Margine" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/ru.js b/plugins/ckeditor4/base64image/lang/ru.js new file mode 100644 index 0000000..33bdb6c --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/ru.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","ru",{ + "alt":"Ðльтернативный текÑÑ‚", + "lockRatio":"СохранÑÑ‚ÑŒ пропорции", + "vSpace":"Вертик. отÑтуп", + "hSpace":"Гориз. отÑтуп", + "border":"Граница" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/si.js b/plugins/ckeditor4/base64image/lang/si.js new file mode 100644 index 0000000..b354d4e --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/si.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","si",{ + "alt":"විකල්ප ", + "lockRatio":"නවà¶à¶± අනුපà·à¶à¶º ", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"සීමà·à·€à·€à¶½ " +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/sk.js b/plugins/ckeditor4/base64image/lang/sk.js new file mode 100644 index 0000000..04da313 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/sk.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","sk",{ + "alt":"AlternatÃvny text", + "lockRatio":"Pomer zámky", + "vSpace":"V-medzera", + "hSpace":"H-medzera", + "border":"Rám (border)" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/sl.js b/plugins/ckeditor4/base64image/lang/sl.js new file mode 100644 index 0000000..649168e --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/sl.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","sl",{ + "alt":"Nadomestno besedilo", + "lockRatio":"Zakleni razmerje", + "vSpace":"NavpiÄni razmik", + "hSpace":"Vodoravni razmik", + "border":"Obroba" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/sq.js b/plugins/ckeditor4/base64image/lang/sq.js new file mode 100644 index 0000000..71e2e34 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/sq.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","sq",{ + "alt":"Tekst Alternativ", + "lockRatio":"Mbyll Racionin", + "vSpace":"Hapësira Vertikale", + "hSpace":"HSpace", + "border":"Korniza" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/sr-latn.js b/plugins/ckeditor4/base64image/lang/sr-latn.js new file mode 100644 index 0000000..5a62e28 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/sr-latn.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","sr-latn",{ + "alt":"Alternativni tekst", + "lockRatio":"ZakljuÄaj odnos", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Okvir" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/sr.js b/plugins/ckeditor4/base64image/lang/sr.js new file mode 100644 index 0000000..461ff07 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/sr.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","sr",{ + "alt":"Ðлтернативни текÑÑ‚", + "lockRatio":"Закључај одноÑ", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"Оквир" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/sv.js b/plugins/ckeditor4/base64image/lang/sv.js new file mode 100644 index 0000000..d619fe7 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/sv.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","sv",{ + "alt":"Alternativ text", + "lockRatio":"LÃ¥s höjd/bredd förhÃ¥llanden", + "vSpace":"Vert. marginal", + "hSpace":"Horis. marginal", + "border":"Kant" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/th.js b/plugins/ckeditor4/base64image/lang/th.js new file mode 100644 index 0000000..d78d78d --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/th.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","th",{ + "alt":"คำประà¸à¸à¸šà¸£à¸¹à¸›à¸ าพ", + "lockRatio":"à¸à¸³à¸«à¸™à¸”à¸à¸±à¸•à¸£à¸²à¸ªà¹ˆà¸§à¸™ à¸à¸§à¹‰à¸²à¸‡-สูง à¹à¸šà¸šà¸„งที่", + "vSpace":"ระยะà¹à¸™à¸§à¸•à¸±à¹‰à¸‡", + "hSpace":"ระยะà¹à¸™à¸§à¸™à¸à¸™", + "border":"ขนาดขà¸à¸šà¸£à¸¹à¸›" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/tr.js b/plugins/ckeditor4/base64image/lang/tr.js new file mode 100644 index 0000000..e9b665b --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/tr.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","tr",{ + "alt":"Alternatif Yazı", + "lockRatio":"Oranı Kilitle", + "vSpace":"Dikey BoÅŸluk", + "hSpace":"Yatay BoÅŸluk", + "border":"Kenar" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/ug.js b/plugins/ckeditor4/base64image/lang/ug.js new file mode 100644 index 0000000..000ce1c --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/ug.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","ug",{ + "alt":"تÛكىست ئالماشتۇر", + "lockRatio":"نىسبەتنى قۇلۇپلا", + "vSpace":"بويىغا ئارىلىقى", + "hSpace":"توغرىسىغا ئارىلىقى", + "border":"گىرۋەك Ú†ÙˆÚلۇقى" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/uk.js b/plugins/ckeditor4/base64image/lang/uk.js new file mode 100644 index 0000000..a43cbbc --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/uk.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","uk",{ + "alt":"Ðльтернативний текÑÑ‚", + "lockRatio":"Зберегти пропорції", + "vSpace":"Верт. відÑтуп", + "hSpace":"Гориз. відÑтуп", + "border":"Рамка" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/vi.js b/plugins/ckeditor4/base64image/lang/vi.js new file mode 100644 index 0000000..4e5ec38 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/vi.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","vi",{ + "alt":"Chú thÃch ảnh", + "lockRatio":"Giữ nguyên tá»· lệ", + "vSpace":"Khoảng đệm dá»c", + "hSpace":"Khoảng đệm ngang", + "border":"ÄÆ°á»ng viá»n" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/zh-cn.js b/plugins/ckeditor4/base64image/lang/zh-cn.js new file mode 100644 index 0000000..2d09c52 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/zh-cn.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","zh-cn",{ + "alt":"替æ¢æ–‡æœ¬", + "lockRatio":"é”定比例", + "vSpace":"åž‚ç›´é—´è·", + "hSpace":"水平间è·", + "border":"边框大å°" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/lang/zh.js b/plugins/ckeditor4/base64image/lang/zh.js new file mode 100644 index 0000000..72c3f24 --- /dev/null +++ b/plugins/ckeditor4/base64image/lang/zh.js @@ -0,0 +1,12 @@ +/* +Translation from original CKEDITOR language files: +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("base64image","zh",{ + "alt":"替代文å—", + "lockRatio":"固定比例", + "vSpace":"VSpace", + "hSpace":"HSpace", + "border":"框線" +}); \ No newline at end of file diff --git a/plugins/ckeditor4/base64image/plugin.js b/plugins/ckeditor4/base64image/plugin.js new file mode 100644 index 0000000..1e3c989 --- /dev/null +++ b/plugins/ckeditor4/base64image/plugin.js @@ -0,0 +1,57 @@ +/* + * Base64Image Plugin for CKEditor (http://github.com/nmmf/base64image) + * Created by ALL-INKL.COM - Neue Medien M�nnich - 04. Feb 2014 + * Licensed under the terms of GPL, LGPL and MPL licenses. + */ +CKEDITOR.plugins.add("base64image", { + lang : ["af","ar","bg","bn","bs","ca","cs","cy","da","de","el","en","en-au","en-ca","en-gb","eo","es","et","eu","fa","fi","fo","fr","fr-ca","gl","gu","he","hi","hr","hu","id","is","it","ja","ka","km","ko","ku","lt","lv","mk","mn","ms","nb","nl","no","pl","pt","pt-br","ro","ru","si","sk","sl","sq","sr","sr-latn","sv","th","tr","ug","uk","vi","zh","zh-cn"], + requires: "dialog", + icons : "base64image", + hidpi : true, + init : function(editor){ + var pluginName = 'base64imageDialog'; + + editor.ui.addButton("base64image", { + label: editor.lang.common.image, + command: pluginName, + toolbar: "insert" + }); + CKEDITOR.dialog.add(pluginName, this.path+"dialogs/base64image.js"); + + var allowed = 'img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}', + required = 'img[alt,src]'; + + editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName, { + allowedContent: allowed, + requiredContent: required, + contentTransformations: [ + [ 'img{width}: sizeToStyle', 'img[width]: sizeToAttribute' ], + [ 'img{float}: alignmentToStyle', 'img[align]: alignmentToAttribute' ] + ] + } ) ); + editor.on("doubleclick", function(evt){ + if(evt.data.element && !evt.data.element.isReadOnly() && evt.data.element.getName() === "img") { + evt.data.dialog = pluginName; + editor.getSelection().selectElement(evt.data.element); + } + }); + if(editor.addMenuItem) { + editor.addMenuGroup("base64imageGroup"); + editor.addMenuItem("base64imageItem", { + label: editor.lang.common.image, + icon: this.path+"icons/base64image.png", + command: pluginName, + group: "base64imageGroup" + }); + } + if(editor.contextMenu) { + editor.contextMenu.addListener(function(element, selection) { + if(element && element.getName() === "img") { + editor.getSelection().selectElement(element); + return { base64imageItem: CKEDITOR.TRISTATE_ON }; + } + return null; + }); + } + } +}); diff --git a/plugins/ckeditor4/ckawesome/dialogs/ckawesome.css b/plugins/ckeditor4/ckawesome/dialogs/ckawesome.css new file mode 100644 index 0000000..3ccc7e8 --- /dev/null +++ b/plugins/ckeditor4/ckawesome/dialogs/ckawesome.css @@ -0,0 +1,5 @@ +div.cke_dialog_ui_input_select, .cke_dialog_ui_input_select{ width: 100%; } +.select2-drop, .select2-dropdown, .select2-container{ z-index: 100000 !important; } +.select2-dropdown{ margin-left: 8px; } +.select2-chosen{ margin-top: 7px; } +.select2-results__option span{ color: #000; font-size: 12px !important; font-family: Arial; display:block; white-space: nowrap; overflow:hidden; } \ No newline at end of file diff --git a/plugins/ckeditor4/ckawesome/dialogs/ckawesome.js b/plugins/ckeditor4/ckawesome/dialogs/ckawesome.js new file mode 100644 index 0000000..f7065a1 --- /dev/null +++ b/plugins/ckeditor4/ckawesome/dialogs/ckawesome.js @@ -0,0 +1,149 @@ + +CKEDITOR.dialog.add('ckawesomeDialog', function( editor ) { + function getCKAwesomeIcons(selectList ){ + var result = []; + var scriptUrl = editor.fontawesomePath; + + $.ajax({ + url: scriptUrl, + type: 'get', + dataType: 'html', + async: false, + success: function(response) { + var excludeStyles = [".fa.",".fa",".fa-lg",".fa-2x",".fa-3x",".fa-4x",".fa-5x",".fa-fw",".fa-ul",".fa-ul>",".fa-li",".fa-border",".fa-pull-left",".fa-pull-right",".fa-spin",".fa-pulse",".fa-rotate-90",".fa-rotate-180",".fa-rotate-270",".fa-flip-horizontal",".fa-flip-vertical",".fa-stack",".fa-stack-1x",".fa-stack-2x",".fa-inverse"]; + var regxstyles = new RegExp(/\.[a-zA-Z_][\w-_]*[^\.\s\{#:\,;]/,"g" ); + var styles = response.match(regxstyles); + styles.sort(); + $.each(styles, function( index, value ) { + var xstart=value.substring(0, 3).substring(1); + if (xstart != 'fa' || excludeStyles.indexOf(value) > 0){ return; } + value = value.substring(1); + selectList.add(value, value); + }) + + }, + error: function (jqXHR, exception) { + alert("Error loading Font Awesome css: \n" + scriptUrl); + }, + }); + } + + function getSelectionOptions(selectList, start, inc, many){ + var result = []; + var val = start; + + result.push(start); + + many = many > 0 ? many : 5; + for(var i = 0; i < many; i++){ + val += inc; + result.push(val); + } + + $.each(result, function( index, value ) { + selectList.add(value, value); + }) + } + + function formatCKAwesome (icon) { + if (!icon.id) { return icon.text; } + var text = icon.text.replace(/fa-|\.|\-/gi, " "); + var icon = $('<span class="ckawesome_options"><i class="fa ' + icon.element.value + ' fa-fw"></i> ' + text + "</span>"); + return icon; + }; + + return { + title: 'Insert CKAwesome', + minWidth: 200, + minHeight: 200, + + contents: [ + { + id: 'options', + label: 'Basic Settings', + elements: [ + { + type: 'select', + id: 'ckawesomebox', + label: 'Select font Awesome', + validate: CKEDITOR.dialog.validate.notEmpty( "Font Awesome field cannot be empty." ), + items: [[ editor.lang.common.notSet, '' ]], + onLoad: function () { + getCKAwesomeIcons(this); + var selectbx = $('#' + this.getInputElement().getAttribute('id')); + $(selectbx).select2({ width: "100%", templateResult: formatCKAwesome, templateSelection: formatCKAwesome}); + }, + onShow: function(){ + var selectbx = $('#' + this.getInputElement().getAttribute('id')); + $(selectbx).val('').trigger('change') ; + } + }, + { + type: 'select', + id: 'textsize', + label: 'Select size', + items: [[ editor.lang.common.notSet, '' ]], + onLoad: function (widget) { + getSelectionOptions(this, 8, 1, 42); + } + }, + { + type: "hbox", + padding: 0, + widths: ["80%", "20%"], + children: [ + { + id: 'fontcolor', + type: 'text', + label: 'Select color', + onChange: function( element ) { + var idEl = $('#' +this.getInputElement().getAttribute('id')); + idEl.css("background-color", idEl.val()); + }, + onKeyUp: function( element ) { + var idEl = $('#' + this.getInputElement().getAttribute('id')); + idEl.css("background-color", idEl.val()); + }, + onShow: function(){ + var idEl = $('#' + this.getInputElement().getAttribute('id')); + idEl.css("background-color", ""); + } + }, + { + type: "button", + id: "fontcolorChooser", + "class": "colorChooser", + label: "Color", + style: "margin-left: 8px", + onLoad: function () { + this.getElement().getParent().setStyle("vertical-align", "bottom") + }, + onClick: function () { + editor.getColorFromDialog(function (color) { + color && this.getDialog().getContentElement("options", "fontcolor").setValue( color ); + this.focus() + }, this) + } + } + ] + } + ] + }, + ], + onOk: function() { + var dialog = this; + + var cka = editor.document.createElement( 'span' ); + var cka_size = dialog.getValueOf( 'options', 'textsize' ); + var cka_color = dialog.getValueOf( 'options', 'fontcolor' ); + var cka_class = "fa fa-fw " + dialog.getValueOf( 'options', 'ckawesomebox' ); + var cka_style = ( cka_size != '' ? 'font-size: '+cka_size+'px;' : '' ) + ( cka_color != '' ? 'color: '+cka_color+';' : '' ) ; + + cka.setAttribute( 'class', cka_class ); + if ( cka_style ) cka.setAttribute( 'style', cka_style ); + + editor.insertElement( cka ); + } + }; +}); + diff --git a/plugins/ckeditor4/ckawesome/icons/ckawesome.png b/plugins/ckeditor4/ckawesome/icons/ckawesome.png new file mode 100644 index 0000000000000000000000000000000000000000..479af143bf2dcdfb595df72fc6a1834744f94bc0 GIT binary patch literal 1523 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m?bhpB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#Ms10N5ROz&_Lh7P~Xr%*U-Ysz|6|TSOE%@fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD<cE0=g99h1>$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;Np<V zf>iyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|eDOi=Sua#$B zaY<rca;m3`trAe5US?*Bm64OFxw(slrJIqHiJ_sZnT4~lv#X1XrK5?ln}La;B}}hN zesXDUYF-IUZwf-MBTl`b1dv+*wAm%KD6=dz#jPkmR{`u%t4!Q(F~?~hRBsAyw^-oR zs}FRHJ}5eoq8BCvOfw)RJh1{f@Z_GF2TbEdz{Jcs?b|d42Btz!7srr_TXTYZJwgH{ zY`@<#e}DF~y7301jX@WAxP&gX2y$%<a}?m%7PLfuMMiL5(Zxls3TvaLsOs{>iYT%= zPTVY*wKO8?NlHS~GlN-X^;Yk{-+MPZoO$zv4g7rlzxRHhTYaulKDz76<ZZ7Owf$6m zUASP&t4}+lnd5I)zt`PT7U%B$TXn}r)tH@y(psgCt-bqZ-}P_{wzz8D(s|u~!5UpP zzWr6d|Gs;3$}L;5JNe7c2Zt|daB3C^J-fm&<*N$E(i>|u+S4>!B%L@a0=T^^9Sb`n zWNKTUo-`Mj!q}4Iw_)=-o1%}eK7RI{di4H{b#5hdEN?~%%lb`{f4pju_{u3pi&#qo zjy<@T5ydbipjBYf)TJA8c|vo~UcB(($e%OMect+1Y<PY6$#FX|og42mZ+Waargp#e zc-Zvh`7wG&et-1HwVC|Ri060T9QnW$y$wsf+zpakmK$ta7RSvJQrR8C*ZAbT#v%Q7 zKkZdq$3*r>$WBj`T48v`Hj-7r$*x8~szJ^E%x4Yb3tyV<MDnjH;5n^azUh5xo<P0j zwvf6_BLAbG@H0MVlKb;ajHAU~<v(9z`<oBba(-;TxTmckQA%=U$McX|eawfqY_{d^ zOFnGmE4d@z@#NX!>4JNY*j250`7b8rm$%l;6~&hRSHs@+PM!KfJ?)v;Ygxa_i+!I` z7A|XR){;K0EYK%epzXZ*Y`XrJC30VGe7q_;W1Yj{g;gf9H*7Eb*IAf<gX^1o&X!f* zLnF9@Jm<0IXSz59&+}XExkg7Ne99?N!3{a=l9#6>Rm|d^S0;0MlaI2v#n(5#rk#{& r?)dMuw)<<B*aT(Sn?C<S_p?ecgeyqdpN}@S1r@`du6{1-oD!M<X9PXb literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/ckawesome/plugin.js b/plugins/ckeditor4/ckawesome/plugin.js new file mode 100644 index 0000000..dabb9ef --- /dev/null +++ b/plugins/ckeditor4/ckawesome/plugin.js @@ -0,0 +1,33 @@ +/** + * CKAwesome + * ========= + * http://blackdevelop.com/io/ckawesome/ + * + * Copyright (C) 2017 by Blackdevelop.com + * Licence under GNU GPL v3. + */ + +CKEDITOR.on('instanceReady',function () { CKEDITOR.document.appendStyleSheet(CKEDITOR.plugins.getPath('ckawesome') + 'resources/select2/select2.full.min.css'); }); +CKEDITOR.on('instanceReady',function () { CKEDITOR.document.appendStyleSheet(CKEDITOR.plugins.getPath('ckawesome') + 'dialogs/ckawesome.css'); }); +CKEDITOR.scriptLoader.load(CKEDITOR.plugins.getPath('ckawesome') + 'resources/select2/select2.full.min.js'); +CKEDITOR.dtd.$removeEmpty.span = 0; +CKEDITOR.plugins.add('ckawesome', { + requires: 'colordialog', + icons: 'ckawesome', + + init: function(editor) { + var config = editor.config; + editor.fontawesomePath = config.fontawesomePath ? config.fontawesomePath : CKEDITOR.plugins.getPath('ckawesome') + 'fontawesome/css/font-awesome.min.css'; + + CKEDITOR.document.appendStyleSheet(editor.fontawesomePath); + editor.addContentsCss(editor.fontawesomePath); + + CKEDITOR.dialog.add('ckawesomeDialog', this.path + 'dialogs/ckawesome.js'); + editor.addCommand( 'ckawesome', new CKEDITOR.dialogCommand( 'ckawesomeDialog', { allowedContent: 'span[class,style]{color,font-size}(*);' })); + editor.ui.addButton( 'ckawesome', { + label: 'Insert CKAwesome', + command: 'ckawesome', + toolbar: 'insert', + }); + } +}); \ No newline at end of file diff --git a/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.css b/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.css new file mode 100644 index 0000000..76de04d --- /dev/null +++ b/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.js b/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.js new file mode 100644 index 0000000..684edf3 --- /dev/null +++ b/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[a],u):void 0,a&&(h&&h.exports!==b&&h.exports!==q[a]?q[a]=h.exports:l===b&&s||(q[a]=l))}else a&&(q[a]=d)},a=c=n=function(a,c,d,e,f){if("string"==typeof a)return p[a]?p[a](c):j(o(a,c).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?m(b,a,c,d):setTimeout(function(){m(b,a,c,d)},4),n},n.config=function(a){return n(a)},a._defined=q,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){var e=b[d];"function"==typeof e&&"constructor"!==d&&c.push(d)}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){var a=Array.prototype.unshift;return a.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice,c=b.call(arguments,1);this.listeners=this.listeners||{},null==c&&(c=[]),0===c.length&&c.push({}),c[0]._type=a,a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return e!==f||"hidden"!==f&&"visible"!==f?"scroll"===e||"scroll"===f?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},c.escapeMarkup=function(a){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.highlightFirstItem=function(){var a=this.$results.find(".select2-results__option[aria-selected]"),b=a.filter("[aria-selected=true]");b.length>0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">×</span></li>');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.prop("title",e.title||e.text),f.data("data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e<d.length;e++){var f={data:d[e]};if(this.trigger("unselect",f),f.prevented)return}this.$element.val(this.placeholder.id).trigger("change"),this.trigger("toggle",{})}}},c.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||(c.which==b.DELETE||c.which==b.BACKSPACE)&&this._handleClear(c)},c.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">×</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"â’¶":"A","A":"A","À":"A","Ã":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ä€":"A","Ä‚":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ç ":"A","Ä":"A","Çž":"A","Ả":"A","Ã…":"A","Ǻ":"A","Ç":"A","È€":"A","È‚":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ä„":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ç¢":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","â’·":"B","ï¼¢":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Æ‚":"B","Æ":"B","â’¸":"C","ï¼£":"C","Ć":"C","Ĉ":"C","ÄŠ":"C","ÄŒ":"C","Ç":"C","Ḉ":"C","Ƈ":"C","È»":"C","Ꜿ":"C","â’¹":"D","D":"D","Ḋ":"D","ÄŽ":"D","Ḍ":"D","á¸":"D","Ḓ":"D","Ḏ":"D","Ä":"D","Æ‹":"D","ÆŠ":"D","Ɖ":"D","ê¹":"D","DZ":"DZ","Ç„":"DZ","Dz":"Dz","Ç…":"Dz","â’º":"E","ï¼¥":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ä’":"E","Ḕ":"E","Ḗ":"E","Ä”":"E","Ä–":"E","Ë":"E","Ẻ":"E","Äš":"E","È„":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Æ":"E","ÆŽ":"E","â’»":"F","F":"F","Ḟ":"F","Æ‘":"F","ê»":"F","â’¼":"G","G":"G","Ç´":"G","Äœ":"G","Ḡ":"G","Äž":"G","Ä ":"G","Ǧ":"G","Ä¢":"G","Ǥ":"G","Æ“":"G","êž ":"G","ê½":"G","ê¾":"G","â’½":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Èž":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","â±µ":"H","êž":"H","â’¾":"I","I":"I","ÃŒ":"I","Ã":"I","ÃŽ":"I","Ĩ":"I","Ī":"I","Ĭ":"I","Ä°":"I","Ã":"I","Ḯ":"I","Ỉ":"I","Ç":"I","Ȉ":"I","ÈŠ":"I","Ị":"I","Ä®":"I","Ḭ":"I","Æ—":"I","â’¿":"J","J":"J","Ä´":"J","Ɉ":"J","â“€":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","ê€":"K","ê‚":"K","ê„":"K","Ꞣ":"K","â“":"L","L":"L","Ä¿":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ä»":"L","Ḽ":"L","Ḻ":"L","Å":"L","Ƚ":"L","â±¢":"L","â± ":"L","êˆ":"L","ê†":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","â“‚":"M","ï¼":"M","Ḿ":"M","á¹€":"M","Ṃ":"M","â±®":"M","Æœ":"M","Ⓝ":"N","ï¼®":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Å…":"N","Ṋ":"N","Ṉ":"N","È ":"N","Æ":"N","êž":"N","Ꞥ":"N","ÇŠ":"NJ","Ç‹":"Nj","â“„":"O","O":"O","Ã’":"O","Ó":"O","Ô":"O","á»’":"O","á»":"O","á»–":"O","á»”":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","ÅŒ":"O","á¹":"O","á¹’":"O","ÅŽ":"O","È®":"O","È°":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Å":"O","Ç‘":"O","ÈŒ":"O","ÈŽ":"O","Æ ":"O","Ờ":"O","Ớ":"O","á» ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","ÆŸ":"O","êŠ":"O","êŒ":"O","Æ¢":"OI","êŽ":"OO","È¢":"OU","â“…":"P","ï¼°":"P","á¹”":"P","á¹–":"P","Ƥ":"P","â±£":"P","ê":"P","ê’":"P","ê”":"P","Ⓠ":"Q","ï¼±":"Q","ê–":"Q","ê˜":"Q","ÉŠ":"Q","Ⓡ":"R","ï¼²":"R","Å”":"R","Ṙ":"R","Ř":"R","È":"R","È’":"R","Ṛ":"R","Ṝ":"R","Å–":"R","Ṟ":"R","ÉŒ":"R","Ɽ":"R","êš":"R","Ꞧ":"R","êž‚":"R","Ⓢ":"S","ï¼³":"S","ẞ":"S","Åš":"S","Ṥ":"S","Åœ":"S","á¹ ":"S","Å ":"S","Ṧ":"S","á¹¢":"S","Ṩ":"S","Ș":"S","Åž":"S","â±¾":"S","Ꞩ":"S","êž„":"S","Ⓣ":"T","ï¼´":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Èš":"T","Å¢":"T","á¹°":"T","á¹®":"T","Ŧ":"T","Ƭ":"T","Æ®":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","â“Š":"U","ï¼µ":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ãœ":"U","Ç›":"U","Ç—":"U","Ç•":"U","Ç™":"U","Ủ":"U","Å®":"U","Å°":"U","Ç“":"U","È”":"U","È–":"U","Ư":"U","Ừ":"U","Ứ":"U","á»®":"U","Ử":"U","á»°":"U","Ụ":"U","á¹²":"U","Ų":"U","Ṷ":"U","á¹´":"U","É„":"U","â“‹":"V","V":"V","á¹¼":"V","á¹¾":"V","Ʋ":"V","êž":"V","É…":"V","ê ":"VY","â“Œ":"W","ï¼·":"W","Ẁ":"W","Ẃ":"W","Å´":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","â±²":"W","â“":"X","X":"X","Ẋ":"X","Ẍ":"X","â“Ž":"Y","ï¼¹":"Y","Ỳ":"Y","Ã":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","á»´":"Y","Ƴ":"Y","ÉŽ":"Y","Ỿ":"Y","â“":"Z","Z":"Z","Ź":"Z","áº":"Z","Å»":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","ê¢":"Z","â“":"a","ï½":"a","ẚ":"a","à ":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","Ä":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","Ç¡":"a","ä":"a","ÇŸ":"a","ả":"a","Ã¥":"a","Ç»":"a","ÇŽ":"a","È":"a","ȃ":"a","ạ":"a","áº":"a","ặ":"a","á¸":"a","Ä…":"a","â±¥":"a","É":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","Ç£":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","â“‘":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","Æ€":"b","ƃ":"b","É“":"b","â“’":"c","c":"c","ć":"c","ĉ":"c","Ä‹":"c","Ä":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","â““":"d","d":"d","ḋ":"d","Ä":"d","á¸":"d","ḑ":"d","ḓ":"d","á¸":"d","Ä‘":"d","ÆŒ":"d","É–":"d","É—":"d","êº":"d","dz":"dz","dž":"dz","â“”":"e","ï½…":"e","è":"e","é":"e","ê":"e","á»":"e","ế":"e","á»…":"e","ể":"e","ẽ":"e","Ä“":"e","ḕ":"e","ḗ":"e","Ä•":"e","Ä—":"e","ë":"e","ẻ":"e","Ä›":"e","È…":"e","ȇ":"e","ẹ":"e","ệ":"e","È©":"e","á¸":"e","Ä™":"e","ḙ":"e","ḛ":"e","ɇ":"e","É›":"e","Ç":"e","â“•":"f","f":"f","ḟ":"f","Æ’":"f","ê¼":"f","â“–":"g","g":"g","ǵ":"g","Ä":"g","ḡ":"g","ÄŸ":"g","Ä¡":"g","ǧ":"g","Ä£":"g","Ç¥":"g","É ":"g","êž¡":"g","áµ¹":"g","ê¿":"g","â“—":"h","h":"h","Ä¥":"h","ḣ":"h","ḧ":"h","ÈŸ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","É¥":"h","Æ•":"hv","ⓘ":"i","i":"i","ì":"i","Ã":"i","î":"i","Ä©":"i","Ä«":"i","Ä":"i","ï":"i","ḯ":"i","ỉ":"i","Ç":"i","ȉ":"i","È‹":"i","ị":"i","į":"i","á¸":"i","ɨ":"i","ı":"i","â“™":"j","j":"j","ĵ":"j","Ç°":"j","ɉ":"j","â“š":"k","k":"k","ḱ":"k","Ç©":"k","ḳ":"k","Ä·":"k","ḵ":"k","Æ™":"k","ⱪ":"k","ê":"k","êƒ":"k","ê…":"k","ꞣ":"k","â“›":"l","l":"l","Å€":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","Å¿":"l","Å‚":"l","Æš":"l","É«":"l","ⱡ":"l","ê‰":"l","êž":"l","ê‡":"l","lj":"lj","â“œ":"m","ï½":"m","ḿ":"m","á¹":"m","ṃ":"m","ɱ":"m","ɯ":"m","â“":"n","n":"n","ǹ":"n","Å„":"n","ñ":"n","á¹…":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","Æž":"n","ɲ":"n","ʼn":"n","êž‘":"n","ꞥ":"n","ÇŒ":"nj","â“ž":"o","ï½":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","á»—":"o","ổ":"o","õ":"o","á¹":"o","È":"o","á¹":"o","Å":"o","ṑ":"o","ṓ":"o","Å":"o","ȯ":"o","ȱ":"o","ö":"o","È«":"o","á»":"o","Å‘":"o","Ç’":"o","È":"o","È":"o","Æ¡":"o","á»":"o","á»›":"o","ỡ":"o","ở":"o","ợ":"o","á»":"o","á»™":"o","Ç«":"o","Ç":"o","ø":"o","Ç¿":"o","É”":"o","ê‹":"o","ê":"o","ɵ":"o","Æ£":"oi","È£":"ou","ê":"oo","â“Ÿ":"p","ï½":"p","ṕ":"p","á¹—":"p","Æ¥":"p","áµ½":"p","ê‘":"p","ê“":"p","ê•":"p","â“ ":"q","q":"q","É‹":"q","ê—":"q","ê™":"q","â“¡":"r","ï½’":"r","Å•":"r","á¹™":"r","Å™":"r","È‘":"r","È“":"r","á¹›":"r","á¹":"r","Å—":"r","ṟ":"r","É":"r","ɽ":"r","ê›":"r","ꞧ":"r","ꞃ":"r","â“¢":"s","s":"s","ß":"s","Å›":"s","á¹¥":"s","Å":"s","ṡ":"s","Å¡":"s","ṧ":"s","á¹£":"s","ṩ":"s","È™":"s","ÅŸ":"s","È¿":"s","êž©":"s","êž…":"s","ẛ":"s","â“£":"t","ï½”":"t","ṫ":"t","ẗ":"t","Å¥":"t","á¹":"t","È›":"t","Å£":"t","á¹±":"t","ṯ":"t","ŧ":"t","Æ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","Å©":"u","á¹¹":"u","Å«":"u","á¹»":"u","Å":"u","ü":"u","Çœ":"u","ǘ":"u","Ç–":"u","Çš":"u","ủ":"u","ů":"u","ű":"u","Ç”":"u","È•":"u","È—":"u","Æ°":"u","ừ":"u","ứ":"u","ữ":"u","á»":"u","á»±":"u","ụ":"u","á¹³":"u","ų":"u","á¹·":"u","á¹µ":"u","ʉ":"u","â“¥":"v","ï½–":"v","á¹½":"v","ṿ":"v","Ê‹":"v","êŸ":"v","ÊŒ":"v","ê¡":"vy","ⓦ":"w","ï½—":"w","áº":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","â±³":"w","ⓧ":"x","x":"x","ẋ":"x","áº":"x","ⓨ":"y","ï½™":"y","ỳ":"y","ý":"y","Å·":"y","ỹ":"y","ȳ":"y","áº":"y","ÿ":"y","á»·":"y","ẙ":"y","ỵ":"y","Æ´":"y","É":"y","ỿ":"y","â“©":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","È¥":"z","É€":"z","ⱬ":"z","ê£":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","ÎŒ":"Ο","ÎŽ":"Î¥","Ϋ":"Î¥","Î":"Ω","ά":"α","Î":"ε","ή":"η","ί":"ι","ÏŠ":"ι","Î":"ι","ÏŒ":"ο","Ï":"Ï…","Ï‹":"Ï…","ΰ":"Ï…","ω":"ω","Ï‚":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change"); +if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple"))return a.selected=!1,c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this,f=this.$element.children();f.each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(b=c.data(a[0],"data"),null!=b)return b;if(a.is("option"))b={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){var c=this.options.get("matcher");return c(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){d.status&&"0"===d.status||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions([m]),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||null!=b.page?void a.call(this,b,c):void a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){var c=(this._lastTag,this.$element.find("option[data-select2-tag]"));c.each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(b,c,d){function e(b){var c=g._normalizeItem(b),d=g.$element.find("option").filter(function(){return a(this).val()===c.id});if(!d.length){var e=g.option(c);e.attr("data-select2-tag",!0),g._removeOldTags(),g.addOptions([e])}f(c)}function f(a){g.trigger("select",{data:a})}var g=this;c.term=c.term||"";var h=this.tokenizer(c,this.options,e);h.term!==c.term&&(this.$search.length&&(this.$search.val(h.term),this.$search.focus()),c.term=h.term),b.call(this,c,d)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("focus",function(){c.isOpen()&&e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return a(c.data.results)<this.minimumResultsForSearch?!1:b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(a){d._handleSelectOnClose(a)})},a.prototype._handleSelectOnClose=function(a,b){if(b&&null!=b.originalSelect2Event){var c=b.originalSelect2Event;if("select"===c._type||"unselect"===c._type)return}var d=this.getHighlightedResults();if(!(d.length<1)){var e=d.data("data");null!=e.element&&e.element.selected||null==e.element&&e.selected||this.trigger("select",{data:e})}},a}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{originalEvent:c,originalSelect2Event:b})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(O){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(P){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var Q=k.loadPath(this.defaults.amdLanguageBase+"en"),R=new k(l.language);R.extend(Q),l.translations=R}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e<b.addedNodes.length;e++){var f=b.addedNodes[e];f.selected&&(c=!0)}else b.removedNodes&&b.removedNodes.length>0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null; +},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&(f=d(this),null!=f&&g.push(f))})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;return this._isInitialized?void b.call(this,c):void this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery"],function(a){function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead."),a.call(this,b,c)}return b.prototype.current=function(b,c){function d(b,c){var e=[];return b.selected||-1!==a.inArray(b.id,c)?(b.selected=!0,e.push(b)):b.selected=!1,b.children&&e.push.apply(e,d(b.children,c)),e}for(var e=[],f=0;f<this._currentData.length;f++){var g=this._currentData[f];e.push.apply(e,d(g,this.$element.val().split(this._valueSeparator)))}c(e)},b.prototype.select=function(b,c){if(this.options.get("multiple")){var d=this.$element.val();d+=this._valueSeparator+c.id,this.$element.val(d),this.$element.trigger("change")}else this.current(function(b){a.map(b,function(a){a.selected=!1})}),this.$element.val(c.id),this.$element.trigger("change")},b.prototype.unselect=function(a,b){var c=this;b.selected=!1,this.current(function(a){for(var d=[],e=0;e<a.length;e++){var f=a[e];b.id!=f.id&&d.push(f.id)}c.$element.val(d.join(c._valueSeparator)),c.$element.trigger("change")})},b.prototype.query=function(a,b,c){for(var d=[],e=0;e<this._currentData.length;e++){var f=this._currentData[e],g=this.matches(b,f);null!==g&&d.push(g)}c({results:d})},b.prototype.addOptions=function(b,c){var d=a.map(c,function(b){return a.data(b[0],"data")});this._currentData.push.apply(this._currentData,d)},b}),b.define("select2/compat/matcher",["jquery"],function(a){function b(b){function c(c,d){var e=a.extend(!0,{},d);if(null==c.term||""===a.trim(c.term))return e;if(d.children){for(var f=d.children.length-1;f>=0;f--){var g=d.children[f],h=b(c.term,g.text,g);h||e.children.splice(f,1)}if(e.children.length>0)return e}return b(c.term,d.text,d)?e:null}return c}return b}),b.define("select2/compat/query",[],function(){function a(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2."),a.call(this,b,c)}return a.prototype.query=function(a,b,c){b.callback=c;var d=this.options.get("query");d.call(null,b)},a}),b.define("select2/dropdown/attachContainer",[],function(){function a(a,b,c){a.call(this,b,c)}return a.prototype.position=function(a,b,c){var d=c.find(".dropdown-wrapper");d.append(b),b.addClass("select2-dropdown--below"),c.addClass("select2-container--below")},a}),b.define("select2/dropdown/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$dropdown.on(d.join(" "),function(a){a.stopPropagation()})},a}),b.define("select2/selection/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$selection.on(d.join(" "),function(a){a.stopPropagation()})},a}),function(c){"function"==typeof b.define&&b.define.amd?b.define("jquery-mousewheel",["jquery"],c):"object"==typeof exports?module.exports=c:c(a)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,f=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=c[b].apply(c,f)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); \ No newline at end of file diff --git a/plugins/ckeditor4/ckeditortablecellsselection/.gitattributes b/plugins/ckeditor4/ckeditortablecellsselection/.gitattributes new file mode 100644 index 0000000..a8df6a3 --- /dev/null +++ b/plugins/ckeditor4/ckeditortablecellsselection/.gitattributes @@ -0,0 +1,5 @@ +/.gitattributes export-ignore +/.gitignore export-ignore +/LICENSE export-ignore +/README.md export-ignore +/ckeditortablecellsselection.gif export-ignore diff --git a/plugins/ckeditor4/ckeditortablecellsselection/.gitignore b/plugins/ckeditor4/ckeditortablecellsselection/.gitignore new file mode 100644 index 0000000..1da8522 --- /dev/null +++ b/plugins/ckeditor4/ckeditortablecellsselection/.gitignore @@ -0,0 +1 @@ +.idea diff --git a/plugins/ckeditor4/ckeditortablecellsselection/LICENSE b/plugins/ckeditor4/ckeditortablecellsselection/LICENSE new file mode 100644 index 0000000..f12904d --- /dev/null +++ b/plugins/ckeditor4/ckeditortablecellsselection/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Valerij Ivashchenko + +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. diff --git a/plugins/ckeditor4/ckeditortablecellsselection/README.md b/plugins/ckeditor4/ckeditortablecellsselection/README.md new file mode 100644 index 0000000..af167e0 --- /dev/null +++ b/plugins/ckeditor4/ckeditortablecellsselection/README.md @@ -0,0 +1,20 @@ +# CKEditorTableCellsSelection +CKEditor plugin for intuitive table cells selection (like MS Excel or Google Docs). +This is wrapper for CKEditor about [tablecellsselection jQuery plugin](https://github.com/likemusic/tablecellsselection) + + + +#Usage example +```javascript +CKEDITOR.replace( 'editor1',{ + extraPlugins:'ckeditortablecellsselection' +}); +``` + +For more info see ["Installing Plugins" official documentation](http://docs.ckeditor.com/#!/guide/dev_plugins) + +# TODO +Integrate with CKEditor Selection API. + +# Licence +The MIT License (MIT). diff --git a/plugins/ckeditor4/ckeditortablecellsselection/ckeditortablecellsselection.gif b/plugins/ckeditor4/ckeditortablecellsselection/ckeditortablecellsselection.gif new file mode 100644 index 0000000000000000000000000000000000000000..7681ef334b70bab8ab2f9ebe81346899cf2b73a8 GIT binary patch literal 508340 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%0AqZ)5ubjYk=)bm6$x10&ZFA0H4dTED@#P@XDXo zX^YSgU~Oq;zks&sZ96u%c%XDQ<ZHF>3NnnSWY=#iqp~bE7AkvuB)w%PVv}rAFWO*L zxKRUty<*!0;Tt{9yIuH3CJ}zZ5^jGt`(}H;K{eqUW6K5GfEf)!&$rN{JC+zbJn!N? zf%82Kb6hDvW`j1m&7SPu-^`b2HedRxWSO(nS+YgOGV;+A6&2k4_xy%f?W&V6q8@W9 z!c3Lq{HL;At8=Lw&XqWogPM%EOU<YpHSW4rVIk>@gFhZ(GO!FjFUjO<lR4}PWZEdd z$oe`WGir003yU*U7l~oj=a|Mdi|1Aa#P%C_6Saz{O9aN|##Og?;{)Y2?8mf+39Q^t zxWJ#7Dh$#89{={>77^)dfsBU1t==07YrJRByAb>&9Bu2Cd1JJ-{QC359X2AWmAFsg z{r3B23U-1oJ`F0C{is%qemJ*NWRo@f1iS5>Vd(1M0??@3^ZizBsAYu~@=&L~af&`h z*u~a`JEs(Vmv*KTT@2)zLgl+R#PL32Fyr>oy?h`TdOi3a`aDyL@?d)8)d%?XP;1>W zrJ_${F!;kbjMO`+n9L&uTb`C;VU;8E{j=S9OAjttk8oQV??K`E^_rW%jECRnSbH~` zFAg<`-nc2nhUk5o{J70VJQ%k^=xYZMw>g2<sxQ_3FuUCFC=&ZZzHy1i;;xAQh;1-2 zzu53u5fg_H2VJI2tV41J3BKPJcl*pW>zQ*aP3!?gyUsI%JC}=0tyKT6FOPG+R4;E@ zYW=wx9Oby4q0OquD#`M0T>OWUVe0*EMtqU=F7R(F#*&?<O?&$1V}!SW%jD6oIe6m> zbxTfH*HQ}KWC`CA4wv;5KL>c%%OM&T4x5Z7aqU81PoU=x7K(|48P3OmmumsiQu7f5 z1Ql$(!J}`5qGrTg0Zh07WA^BAtO2DI9zsnZ5~@HlH%t}{ISK@mV0-SZ-`X9`fs8F^ zFhktYgSN23W_s)a;6`zmJ==&!iv>ylw;>v=W5oh;p9gb)y=5P)-!4@y{;z+7&D?zS zsf<sWL$s)@be<sIFi(nx$1ct-)(5U3cBP>hrN6M2y)5AcF8}JgnumUn3RyMx*Dm$- zb+hp*b+)qzjcp0zUi8a&4F1#-%n=audBGFrukE5_gd-`BB|7KEqHQBZM0r?X(Qv@* ztcALiLur#>K5pb^avozLeVD&Ng~LJ9{Xv*1kwv8rFp`eV>JjtizBiJ7MF>vOTz-Y6 z;m;{y4n|Rl7T(Fn!GmETQ%^n{rGDEM-ZRTlr_IrC&A~WNVS}aC+fUBBQW0A%K0C*u zbHjeq<}n+~F%MkP;Vr(prGDvLq0>@6<L04m!*1nN`oml{6qJHfSiuEu!M6i(nifGh zrP|Xt9++T=poe69hJ+(SOHl4{oRzVo#Bn^TyWSU7f4H)QDAh>xaIN2|F;9+(hvs3_ z6tO(O#HkXSiDTb?%ZC18-rR^jV$|OJ)K2@ui9W}P^G~q}!_LCoaZ)2<64D0m!&XP7 zHi%M5oxo%U*Tgr3#H*v^AdRHikkCmgCDL%M>ZkaX<%sE_1iG}y^ks`Gi};phTOqT^ zYN@C{7Lm@HQ32Gc*x{+lCyIG)sXyJdbWUPcsG`NdQAsDs=I)6rR59r%Ny=s6+0<z# zxap~uX>c0p#nkC(mg#@P(sSI?l2+2HPSR$JlYf8{n@3U;%VK9Oyh8r{UR0O!a@TuO ziT}b4Np!LF9yBNI=8jT7PKlt%s-=#2>dVB`Ov%+qEzyiv<j#7xunob@Rs{RlXlA#J z`0e3^rb@&aT4ZZkW}H|iUxsI&{mT}{%X!p{dn!vh3U_^#&c3G31|VhMo#Y6PWYxH* z1Hd^2+%_wCnVU_PwacDW;M7m$SvW{(`1q-f7Eur69%GhyJ6QHl?3o*uVX<j>q@(%t zr}>OX1<W)BtTF}cRt2091>8IZAg$O7>I}i>sC4cWq1OCDw@8P75p<=gQ__x@mQlkR zQC;qZ-Bg)v|1zsAy&}qfebp)&C`)KRNpHg|hJ>ftg3~Iva}6SjZ_A3Yt%|RYi&0l0 zxnexUeE1oNRwYJS8DP9Z2bm1l(*neZv=#2iB+V2u_&m+>Ox))}iB(&z(YP;GdC}OB z@~!zZCxyB+WmGh!)2>;zt7VSQIo1&+XHO-$JjEH{40oDh^U)H6*783dCAIkFbv)&y zttA2J>Gd)t<wzCzR#E*mrP<}6Ui^Z=@&cyv{4}0?bfi2Et+ElT3O1Q?My)Cak1G1~ zD!SIH7MiL?q=F5Zs?O)C!BWJ2zv?3yP?}%$F%PIew|d~T`Woral}GheI-+tB;$wRC z-E(#S^&be*pWD_y_p8+ptJNRZsv)D*0M9=NFEyy1HLtBTcdga;_%%3VfADA_wV=pa zM9*5F=buxg8e-bI&(<{vFMp28Yf#o|;0fv&BC8pZ>v3M{ShVZ8BJ0_$>n~dC;VbG{ z$Ld8q>qRo^C0^>8#;U~$>SQ7tB*yAx&*~MC8~)Q*CC3`rcpI5z8x=Adm8=`Jv>Ww3 z8+1Gy_1YSZ2pZJJnzVTvmDlR+tQ!q^8yvM8$#7Agg#t(rP+q2+-Orjo)}j$3v@n)7 zGijhPA+&f@pat=^MDw=9$_7~V1$wMCdt0|eAcKkBT0A0~y()rI*IMG*ntjij<Ilhu zvaJaO;9`P+%$L@LGjPdROX=BviBNL^azN`^b4y!GNJUVICpeckAeGm&y-&Nn-?P2H zqP^F%bwt)|@T`5tI$*Y~efp(+>7{+5qGSH7V>J@I&f76=-LXc{xpmflWZgL**}fLp zxzW~nGS+^@+qs$1u~*S~u-5sg-8m82bw<$n!rOJU);T-Ybxzxb0HN#Vvj{M8K_}&E z^IYrxMA(i(7=TI`h}qtTKHh`P7l2mTjJDoQOx6315KIgTAeZZ@@a)B252ObLC`+MZ z5w??`_fiuEP}uYY@b-O?GgDmd6VT~BwGQ|O>i=TXcNf_sd)~=4-oG%`&tuaiP1m1F zJ3xWZuO8KlD%Y<ag)TtYPa)T@x;~%^8Zfl!*|8qvwHYvY9S~mc_HG+Q;Tsxg8`PB> z(gO_{R1P?24k?`v`qTC6RSpE$3<v&~OjQm?jt@tl566N=;^{^b<wlZiMpB|i(ke$X z+J`dFM{+=;d32)%a-&5yqa{(JWtF29<D*sQqklkSwRB_k;c{b*He=0EW8liMw(+r! z^RX__cn{rppWOI>&G=B%_(<jW*!cLw`S=uQVuo&FPHtksW@0I7Vx@9oZG2+md}0eU zxkER(CpURuGkFv>c~UufHa>ZAK6wS2x}lr8lbd?5nfe<w^{;a3Wqj)Gd<p`ZhM}K^ zm7o4-I}IN_jaW5}JTZ-OG0lO7GV_Uk219-Z%XS7QdIqm*hG1fb=wgN#W%eumEUEk~ zx$P`v^elDNEbYWB{lzRJ%G?qmI^gR+IK(f2R{$O0zh?VE4yO5k9RMo;U<LrB0RZCw z00ck_0MN1mXw3k$X#m=B04)Td1^}qB0@Ta^YH0wqaex{G;0FNsu>$<e0Dfrzzj1&c z1W*nDl(PcL%>d<TfbwxbIRvl(04%Tq7R&$(X@G@szyjpIy#Wwb0K^OcNdrK}0g(R& z|DDas3NT{@q_G0V|C?i_1+dbxveKHd(x$P}j<eE2Sk(ZmYOJhkW~^#ytZL(|Y7kaG z0IMG>tDhOGUmC05IIACowH&}&&dOSD##)}nT0YKN4q;sYur9E&E|{?{q_HlHvo1hb zApj_Glm>wkM^NGjN*qCnBMQwfd8OrxDoB=Iy!Y6%3WW!b-IIhHK^h{IID!&KB63dE zDEbwJ3UnoPz5jN8rPO@t6Tgxa;dLy@MZoHV8Cp^N7tG4}N<j6-W5p9MZA+yxx+7fv zquGD^EaGGQ1c$LZ2P1xv19R>OO1b8Qj!0m*z&N#VKr34QU~W2}FwGvq2i5fcZUAk| zDN??b*s@o?yNvj-YFT<*?XGHA^*_Yt>QZstriCgg@(O<ub*0S7hDtXqYdz%86MB!g zK;TCT-~7J<;BWUe4)Qd@UL(tcJc}vA%x3~_C+Z?vO(_w{v})`~esr7L)`}+Dx(Kd) z{(Q+Pz<<^Ze{eer<2VE>bjzhU-PJoFt4&QUSVq>{Ea_0<2ud75i6ba+1SO83#1WJ@ zf)Yni;s{C{L5U+MaReofpu`cBID!&KP~r$m96^aAC~*WOj-bR5lsJMCM^NGjN*qCn zBPekMC61uP5tKNB5=T(t2ud75i6ba+1SO83#1WJ@f)Yni;s{C{L5U+MaReofpu`cB zID!&KP~r$m96^aAC~*WOj-bR5lsJMCM^NGjN*qCnBPekMC61uP5tKNB5=T(t2ud75 zi6ba+1SO83#1WJ@f)Yni;s{C{L5U+MaReofpu`cBID!&KP~r$m96^aAC~*WOj-bR5 zlsJMCM^NGjN*qCnBPekMC61uP5tKNB5=T(th&2sj1|^Ol5GZj3C61uP5tKLz4dw4g z0YE~e#F)n^!X#e}KZhd#$e+=}o_eBT!jAi?zSV}R5E@}6YH-u?I7F)7e?#vH%NW2i z4K|e9#m!splQu97zQ8a>>yeV=D87jp9bUrt&(E3Ln2B+2HzMf@BVfxl{2VGr_Kosu z2s_f}I2R|<6sIRi_NH0}-OBwhi2sHa9B&g{UcczBI^hWXlVm)e%fXdHz%;^*_i6Yi zkAY|eU;`++xC8>3jcU*UVK690=z%bgwE^{DMBmo^B1T{85Q@R>)b0^|7Ee4_=5-Qa zI~|2{{x6QXo&?{Pdu@mjxa$fp*ngJL9OkQfA;TnN=I9JDcQowxpM#9Q<ul;`H7Ag< zxCP^sd2V9++b5B_gIO*)xl$4Hw8>lQ{ZtfZl+M#fA^%eJtPd;ZATPuWv)el#GBPS8 z*79j}RQqi7<eXoZh?B4(^G@FqR~3ts`U1Cs85{c}NFm&k0o&%k;dYKGP<mT%r}u$N z?G%i8%(8?3l1L;rB$bWr<+ItazKRz~gFrO_Rn^_){1+3H>FVeu0$3G@%+{aN>U(l> ze}>l=ev|fZ{jm~+8e`pPsr5Hvu@hS?tsCwTC3RTkO6<zpT=!UH$|}x)=dm^pg~D;Z zHC7+E7?=977%g08-s}TOB<E8))=G%<=5}a#7h9Nt`^bRYr)swkhV-iXCsJJy$HgYo z16plu*pwO7a5;gI+~?d+<G2lF=}lzHiK^mD{!9(htQYdu>DqBeKyk2Mo}FURiv;_F z^4G<WF%~5s$iGqV0jE*M6el%ka=fbARSXG|tVWYP`kjd@ZNKR*@nUUqDM&1-V7#<w zC*g@Nb#sx`6rT4N{n_lU^*1g4RHE7hlkv+oSRR4#6CqWZ)?FVOYAw5HWzm!JBgr|x zabj5QcWo`Ff|#>Uf0zHZRT-#&DjVh5Yez71`%|g9XtP~l;&d)&_t0lbLj`^-A(PO7 zIq#)z6LQ)Usc7BtR5wGDOWHwHvUp><KbYBkUQ^B_2FKS?h>fQrjs3lzAdRBQ2UZ-i zM_(@Y!9W;4`|MFJKK16w;te~IdqP_O%!_{ez0*(M<uqSYCpZ)?GF{Uoi571Y8vByy zb2M9emBp_@7%B3<hU3D@95s@-lcljF)z-BKvlo1cv2lRa+G(r#OxZ5hhoqBfKKNO( zY#HuRHL&BD>~cRP8bCoh6L)SP07nV5=MZN3I-Yqsm}$o!#t6f-yn9`r=I&YLNFAMd zl>GxVvm7cgTV*FIM!Ip^0)q~$vkRJkA^FQ8)rp*sh8>ZRG^2L4=Z1_~NXRkq^u~n$ zWnAn0vW!!R-qMSleD5meqbKa3opSZ4{&KfEn8PyPR0oSf*F&dc8Y0xkQdCiV*3{m` zF-jU*M8Fg99weDM_y?Q*-9c1yJ|xW4ou9&g)Bik)gflm53?78?0|QR~JL8|{>iZ2V zf#uq-dgVDHNJn@l&1tZ~&K`XQmaVhNDX4$kL=R;hPJs2t>xNHzGNqfx6Q#%a6Nt^` zn)kQwZN;2hC_~M%h0bTjpqboIftI*%_cKwv$haQd+}bdMApq(<f+)x_&dsp<D`lHs zA0PVnSVMcCdui0clTVCMcw)w**jY%w&*Gn!h~2<Nwc&da^|_UM8ZNnJIx2vgo72wQ z1#*ga1z^Q=sa@-o^oqqDDUrn{Ao(9+w0{S1wzZxHHY4EeU|^SHtmRfTbm4d?#a@VB zMvz1L=%t^rk~32q!FiQdIA)?K+)ZBjDzHTFo>0G@#jKA}KT+CU%}eURg_y%yQklc% zul`yxV$mW=e>0J*k%LjQe?O*00Xa|d3_6#vk>8!mD2YNi24?A=DsS_zF=pGh0Y1T5 zv7sNDf-r!P6g!ziyBBniyKR#fMP!E>v|gs4!njDMg9tg4pv)up7j%?1bokH|yHZKC zuoAQ=dk+%;N|QZO*Nmx5iJbvO$g_}VNrC}H%|UmU!?`*Sq@j*=%4*<&LohFHLiN{= z^B7+=gbJV2YqH2zW7mF^+!3G3g3UzFQ%Phj$eDRs&7{d-dcg_f0Z}86on=U$cHi|v z7^A*Wu4Yh?U)Z0y`y=Nx0;iMhLvDz5zCJ=v1ZYv8PnfHRG!kx6_m0x2rPQ)jQct%T z(+P_-%@62m#*;|y>+TlyfmzPdoGhY9(RRp%S4mz%OhJqinBU0J>&%G<Pb@&Dl81|V zA50`KrlbEih-TYVYtSQX3H9zbNcY;Kz7|1>3+<`}?T!RE){UyHf!0IfVRG$pXYXM- z9r#lS_?Qap%LST*nVPbOC^eZH{0M<GN}?e*k$xOhF#1L$O%7zeb;K+4+7fpTT8#G& z!0<3j=;#;g5L2*$cj!z_P!$Wa<RGJ<cKiBIca)MKtzNz)Pz#yL2v8$zV`1j15`G-Y z8T&gvJdm_3NHOO)Kx`hf+6k6n(7<e-!mOV};y{!9!F#5VkM|P`Ss-JD3#YjwulTH( zuBm(vhY^6px$y_)=cmxM0+5b4mk>FdD6?#)1*ZCg8VLg73tK9IT56zlU`@P&YLWM- zu+E}WKs$_^ZhZ34KF+yt!g)}#Ux8XO7Hpk{8tt{m3AX980m5`Qg6LD=^E4{=G)4g! z?Y0F3BaKnyj#QcEmf+`ZXb%fvv4_n}K{JU1nZ%(L;sCkOk-k%Ksy~{brI}!)xxFxj z*pIll-&5<}c=LwHvvE^PeoCbLt2-+CeRe=`-c(<rmLy3e+n35E^cXwnI6}_UA%k15 zi5b(@(zyo+*ux?oiML96%F$ru9PZ<o5$F4bWA`#I&n?F5R}gI|Y{tcmnBJtO=&Z5b zXP~eYg03MFhp2+KEM~9H@ul%YxrkQ!u*;s5lfc(#;C3?4uI~4*-V;(*OEZ+!A!?yg zG9CV^O3u2Gnnu&zxf<?-?1kc^x#If5)YL6PyJ;9eA^&J6o9wbE846QfbVREfyK@7$ z$6<HVFpOuC*k>lRY8({E->}SHbXYEQpaYY~2WB(~mq#x;l06cNy-a3-rsuN|*C%dI zerD5#rOYwBc-Uf3!OuAT_VRy%fXhi-DWAg@u*euS(`;u_ywenE-6hz#!+b2tI^d#l ztP<RZBd$+$8L^1crq${WLKal9`Qt<Mj0ryCy7{{$Ut#EuiW9WX8%-%;rNY@`iW6W` zSv|9fWuNFOJNyzDWE4%5Tn3gUB&2X52^d<C?iORpH^?#pjkqKNgFkr(4ElQ^hQF4f zGaOZj258NGjX+Amgiz?K-^h64XcLHIDDhxjNMbBlVR=wQC}Y7UOv}nMdm2W->RH4J z`I$!61aVKB*8WGo+vlPs__@LD1X}r-!dMm?Z5OEzd)T9welLyoT`jRK!O)?IS9*-P z3U-|6FXag_zITn!;3+E-31h%f*|W%Qnn{t4Fq2%(Vv9`0`6qFemJsZo=;c5z7XHia zH{!8)lBN=8D-Mg0Lp-umJeiox%dE`$ZylLi3B?=Zgt7u;VHH#Vv>!X{OHYjt3m8F9 z<weXY*r&M~Gh#E32G;Jdg~P^(g92ta)lwM-YM#z@*m6dOcz^5EFgSR1t#OTi<i^&y zaspDd*fk8)weB9254p|sv675%Fz-o#86+XMOg|su+!OwK7)Atz;{bK8Vf87{mBKt; zm_U}fwRd4|5c~9?5}|lDVYIaEIO#<SO4+)JlQ!GG#_}w(^Jf1+@pbfI>>v%ypPD$o zchdU8$|%Fh{@{9t!zNtek!1&9ac*->nuyV)lmXNY!)|=;Il1f{<9TlKdBNfS$KTUO zn%eM_=oZT<etX)(+9z4Y|8#VS+~GWDW%*}hP~Dos!-I>B?GJM#`#V%sWx>{QIi42K zJUSFk7)6pnBkBJe+ZDIa?y=AnTdTg_sR=(q-_e+x1APTC`bx_>Bp@{{7cG4|vi`4! zZd2T8lP2#?->6VL+)bQKyj_hsA$3OGcZ&EKO~ZkgBA%Pf^SjLb17j?AjD-f-IW9z? z5Gbk~6T;=>$${Ju9N{Qb`=Rofe3PbLZLEP457Qhp6fWz<a)J?-R%xBloiE~`Eu2My zpnu?8?QlYhx9_;vprRU16_5!=q$_j_2+>?m7_I5#h_@2JW(gqF^&|{4mjEGVM$3H! z@D2=?+KiUlbV$u&^zD;!@OA*Vhi(o+#?7QgT*lHLhW8I-&3;vGaUzc9e!nW0Eg&4C zwUXCc!z2!I(TEQSBX{N@82Evm)5ROFP-{|BQPR)bUiM_7INOH_2HgWtdOc0mD%}js zT-SNyeL(gAbJ8?~vaKOonLI~BP?P`eNJR3W7&RfwsMxAHjeS~#VxuA~$`Au(9|HXZ zgqhMF)w`)!xVv4h@Aka+nHD{2wHyv*=IL2tz{^uM!^m|R`zew=5j4b|HrN1~;II9I znv6c%-p(3PHY?X8D2DSTYmh}IUu!^YHj49(m$yhvo?swec1MZefGkhS0o}u#m1lDN zWTM)=?qS;Whs%Tt%8)TvscICKhAsyhqS=saDZkR9Dc5Z5OB7uaJC^(yi~Llwmc1o; z*R{<w=jkx{s~>{l$aLGlu6AAO_+nP3!9Sj<U=N#-gQ<Y3Xq<`322lCc_%aSXo2NH* z2;Uqx+b9x|OOoS~z->M%^Xxh;FtJ9eG)u|`WvSE*T^W8Q&i02_78Ykb3)|o#1j&CQ z!PacS%T#Nz#E+*=W!;o*r-aMMw1;<nfLA~8l+^ay)VbH(Iq3#k)S4Cl%529{Apc5I z<%%DnimQgohIdww?q)*OhAV6{x6_6J_j17btQqyv{KUrn#*8Tc)&c(tJ>S&4`xcLX zMJmXt({z)G1)Dc$39hqD#xvCTSHM;(#z&N?3Y4u8lyzN>1+7O@okf=+*#)1<wHd@o zJfC)(jWzD|65|Qe&PdYzOg9M16gBBo5WmVhN;AUd)=kv-=|l&=(w2|T3em<Ej}OMu z!|((BDDUJLFnWpoa%(FqB3HMnabrJsVxMDjJyupm%I;upW10W`Ku7NYg7vnata~WS zjCjX;U@*C<dbuYZGj7H(h01Uwi+cF?ZGUQFkL&ZEl##1$%$}j%ICa4UH|qYo{P77W zD<t~}^~)h}WA|QYF`V*5343o@cel};G>V~)b8|oC{NyA2smA-B$9s7&!>PySu|xGy zjNP$=!YO6TX%^pUhQhQ!?S8%q={wwUviC`H$C;Y7MEhh1^U`7C<*{}4;i>mg!{iqE z{b97;v1oS0xZbHe>e)X3`8fZ+U+4Ku^z3Z)DJ$wZrQ2>S{L$3#IfnGf*!Ai3<i+v( z;>*Qpzrcy*1!mgVdL8Nx>*k^3m#b2Riy?)p$jwup&2zZeQv|eYh`f4ZozE5;(J!Ab zh3}JlXpBeTOXGL>>*K8JvFc4VpCyRiq1WZM#rw_Z=E;;dMv1`bObltc-UZ{Ii<`^q zMZ2oe?3>-rJDr%jQ=;~G)T`R;Q?<y&xa`Y}&2##nceMf_lZi{3_e^8k)2tXDPK85Q z;?pm&7a#vzxiOrwpk0$r-Gi>qfKzvhhL7&=dzBIw%;w?t0vl}E`-mXtnJ*O|V{a=4 z?~#1((6euu(JtmtF5RMiOy7@aAX}t=u0@F+Yu}GVV{W4^|5iTgaRvM}{d1vLzt_Kg z9}EA_SWrK4bH_AmH>vYdiTFfT;#oPzEmsIsvGr_BWGbrv0x|q_wur&>QuhMe_tLrb z(tX9)$@to%|JvodI{4>h#P@Y<>$My5I{uSsT<~pz_-$VBZG39JvFdg4>a`QC!*lYj z<NIqn<J*Go`x4sQQ4XWL>lWGF%Sh}yXzuMq@D)Dr^;sFR!1#K-bq&a?{L<jx&mzy0 z%Jfwv1eujP^WHM2E`01>a~|%~PEQB{uZtIgqq1o9S8)+BcSn<A!x_5HLY(N$x>RQB z&CFDl?FkRApURcZXsex>B7sQc=}!97d14tfrsWM5DiIQisQl0KCqF9Szzp82Y;@{> ze#Czxa(l2?XfUt%L65I)JzH+nrA&_0Y^z)6luXkmtq38RDNs+zmS4lZQY{grL=`w+ zw4X1ue#s_}`c1o4Z`^D~ZnI=L?GNj2bTN+Uq_>zw-rSV2%(`A&!Tn3`T+PO?%2XU4 z3xVEkZAtz?9NB}f?lzM31o3y8D)EfPGZiC+fVckm#muAb>*d=EOHnERujWf{k9+U) zc$FMf6})i^L3kdVbKDxG>=M^ioa&Nn04!Zs7LZJl2~PIqig^wd^HQ)I?sbX{8S(s2 zFCtndlaMK2AyZfOhba4RNDs)>eK4QM;(D++_pfV*o`0baVu`C>_ra5{*GLfg+Sm&c ze4GpK$JK^o>Dgg3xfz0ozrPVjb-h&_#!xvQ5hH?-7ETMJ2RHl_r9zClmHgyd?$A#f zIFH`VuBn<Rf-O&0H^IV~?<jEe+rOA1GC&(xBXrX9Spx3}Lv=X)a8B|&zv*YEVgXpS zL2gr$H`Zx7-a_d#3D@WP25HJF>EaZx&(7oB66;9{Fo>TON@m3#q-8bm#F8Z_e+D}* z@YI`JD`rugs{PRYDXu2W`2EaL+RWV)OG_^W<g)a`TZ?_E2u{X%%<7Lb^9r)R=$w|R z|ERr2W;xNNx}_!i;xdo!Lz6CYJbSdBdS20QefsbYPJJ52DD`!B?jrM?l*$(s3JYx1 z25=~1a+%Q)UG<fKinRysR785k!)&B%Rv9>bz$6QoB8>X*NlnSJF10ukKR9jL-{Lt@ zLGTQ7oWjGhFl9sD()O{3Ev4T<+S_^IRvhQ!nVKa9?Kqk#0;f37wqv*emrhj);hi>m zd?UL}X@RZlwoi}u;=z{(-lP?@1?*JmkJ4Tq$JBFtp4<8luuFX{CrQsIj)A}1PC6US z)-<g8GNpDE&OA|%5*!{|Huz;X5N9K@+iLc=$xN>u6RffS&C0+QEzPIFS6%7T;#H+N zFEEyX!OOfkmiLM<whfeg=4KG5zRrqw#39e6m<5@-9ya_D)*>}t$zBz@y0v#VGc1pT zX1SRa{OBlxO&j7so(sGg*ESp7A+mN)SQwzA`}4rmv*a_He4{&EqECW-gfrJs5wcv6 zc22~&S~cH5nfh&Hb{e3W_T2fHvQv334^A{OeB(lmvvwq(LA4g`q1rL%b~e%oNR;7z zs_K@YTExP^9I0#njdESN<kGk;(_cEM=5!v}SxNw}8uf>#<BmMj5YK)x1qRT4STq-R zfJz}gLbYKRtJZCR+Ds`@2W}6i?P-8MfjP3DD~F|BV}PlyHrh1l8{yKE7-vF!jLZEl z;Stp!=b=*M4>E}@Do4l=&u5mHP&TqJ7f+I69}?nYy}sc$7fWzse~t;~GyXaxHDGA+ zjWnB$l(OJygbGy@!^b0wn*HB^LLFREHX(34!Yw{K%r11;I;)7{19d3k&#(`9ga-!A zrLi|7zZ>rGO7#A#QiX`$YZXHnMJ)1GKjzYx`pq~R!SZ%8;?b1lLzH1N@{YgfGLOW} zdBD<9LL5@*r$Od?jfg1HUt}_G`^^PP%A!<U?D6_=&H2bJc~C!;y5fr(A?S;ghhzQB zE2TBdVR<B#ioaCC)FwiT{7a0g72_y@uS9Xrt(-8bf|r*1TS~T7`FE33#`JK1qw1-0 zx*aRVbcUt8vzELEq`x7Ie}Gbs)mh~E*iu;nOH=gg0!A`>NkNdZMUkUPBJ;?QVU|el zhXwY0{(n;<+#8k}va6F={%V!x;?|tTG~eor8;ifut7~tZ&Sosan>+F!F%g=UD_y85 zi`nMo2;7%oIy*Ttt!L4N9*L9!%k#c(pr0}<mn9+Ad?6nHtbq)hJnF>3niDN&u>;ne zQci3rX*4sGl1<7$lB+N3D7G@BT`ib@tZzCvXX9+s-WdErQ+Gjc5lEo5O><CeV0C6C z&bzj5gwfK%Zu={RcS0KTw6Wjx(!Q1;ZI{NiwO+i+;p~PmW81l9bE3aDh)t}=$36v! z@@>NY3HM)^9mF{|A<2U?SR-RN<-1&COlan68`zM(xHtIH;%D3T1p{XfD1`nem|$c0 z>0T&t_%ew7d>v%1(mQ}<7bZ<=gj&MU-^o9&HHKt(9e~|TY*ri2NvH=T4z9#VFLMoi zF*-@dXyyBD=cc5Um)0rSSMh*q$0|%EwoqqGNd7a~>SWsNgN7{$rlvPwVQc<VOD<<V zrb><|ImH-DVD|I2f+`LE%)B_eZuqDkXb+#KEriP^L|(tw9gh#^h?bLlG1M%bK;W17 zq%JjEK32!!*fe;;1UzXrAAo(wWtyqcbC>6Qm+alZ!4#zsU4XG+t{f=ATp-bCU5?CT zVX!>o0QoPxcYw97+1H%kLHy32TJYtefs#7$7*Sum+*-9+oL5Ww&%VnnZ_hTO`R6xk z_>xzQiqEHAexHco(PY{ryf3?YXO3Zg3pYjHLS=cBPk!lUPV5SN9M*KNQTNj^&WCf_ zynD1!q@&9<Bu(86EkpTb%Da2G%C(iJ`8Ti&S+~l@g<&tq!Lsixxv>eM@2Tmc1H%7v z-iB`n{YPEWY!)7R#mjJ)ZB6%*?f$~*Z@x7{TX@=o)AcXnAZCCN$ihzhnlA18n9p)- z<^)Rt>gf?I&qBVRQ=g<bl9Hk^OMaMLKh7JwQ4G>9BBe)OqQWyB7rfB2F$pj?HJF2n zQXWFl+xd9*4cNf+kr!Y`0#pbk&&^&5#a--l1x)KQNOM;Q3hACmc)HLP-PD^++MRG0 zcu@srv+0}MVZkhT^n|5^RWW<x%)(_-EwEo_;{39n*xtCWiEhl2?s`(lpiYk#<TFy% zCzv`vq&4M?asB*AluuPcwW1`GkWxu0fRe#Ks2PG}=l6e4DVzv0&R%b4QNWFq_<*K` z0+ddY2t<jv-A!-L5>`WnpJJMf9tZo8wrhscg`Fc&xYN_Ghg$%E|NWSShUllZupY=n ztpD3flom#`w1)rDFM-U&=1f40M+L~80Et~W<R3=hsTOSz0rU4ZL?Pa&-fnO%B#gIq zjctsC-YCo;7oik=91K$#AzKg1Mc`^divBGM?kkP>ZV_3!4T8^%1T}CHh?R}IMPwM! zPLOcr;{qkZVDP4c$c%-?soJO-dQb}+KGloR5He2@)Ygv)p~Uw9;UX)!;Px%J=+3)K zsCa2q`Tmf`_Da?LUFP4-4NEBq+i0Wi_29p7<IXS^U?TxSkOSGKV{)Z%y(?lv$}>^& z@NRxp;&5Z+w;_=BU}CJ&eq~0duH_&c<?$UAD|_JpxySqPisq;CcD;!HE2tvLC?;s} zx6+EH%?vvtZS$}eS7?inovW^`5DzDa7)ng=+l?$|0=Ue9WVDfB0YaFN#E48S`gnXw za}!cv13zaZj?ir-c4lvrB5$VkfZlu?R!bLq15*$Bz_MS6OE-+-Q;fJ@;PGs&<*E2g zUF3WLsO6Y$^tj<ti4<uKRT=^INH&l|jz8fA<VwJB*4@Z+-f<FGbz<LVA;KfVEO3z< zb{gg{B!>h+77A8EJ;{KRMdT@+Wf`R@#pX%ONfj$#P5O{0M#S<3UisU<&oS#gtv&hD zk9*jd(#>w;h|zKp%JYKn7+73$(b6qoR-5jR4Uy%zylhWZALWu2NVzpukc?8>be-x$ ztm$ERs8v*u03=9QAfb0yE)dxOIMP24UADa&F|58_n>!M=t(XnMhFm2?I(ItI>n2!= ziv$scWef9%WflGhJAS}Zja47PHXkY;7Fd`IFXI;??$(Ln706tQYB=mKyAnK-<gb_- z%1nYV&Q?cB$J>9_KAF*5<tMxnNg-C2lqeFj#2o`Lmh{H$n^KkZh#My)iFH5zAh#Sa z9u?xg{DG7UbvGz*XFY%*4n|R9d?d<$v=CwD6_ryJH&r|J)Gb`gIJSE&RvJC_Kr!`S z0sO@<+)+Kk5Fbc>J6>xyQJ6X(=7eYz21NgYc`utUApMzHCF_3Wd!|#XnBga55BaBc zmM^uR@KpP}sRlw@WY+IEy~e{U+9QWGggi65Gv>HG#Uj9vWq6(W$o%Urf^Mc3gGfrg zYFKx{c{$`7F=m8*AyZu5*2*5!^J!APKJ%#jcmL+PI1!I$Me6)fIuMd)!Dta~8|2rh zcW(EmXdz%F7rQon0ImYFn`l{Su;Oy4I|*zW0xSzjgzogLw?UAFR0zXFsK~Vc%{71f z+4P8kJo1J}Hz}q$0Z?ZQbY%cf@`O6J9%>K<>x~dN2m%rvCo(ApS{Q^9mMXJrMCf+I zaOJ`?Pb(Wv!`uwddJl&(6ooR1qh2WvZ=5xL<VO`Di^$fBtENr9C*e4qW<RVDk1U1P zJNsC8f*Iu@AJ44#be<LP%uQd<fhbHYF8mqJ9V7)Yq}z!@`;52<quGxKPX7P{0*{AN z76}5lx-~0B3UX!Uh1$I}U_K{{d>$Xe%M7dN2Y2hFP!kp+l8)uJ$bk7~WK@_xoHS3s z3N!7GQ5N!#z0je_M`|Hbag&F2oU={+s;vt{9_sG$qFoxA>zd~J{@lg|G#xk$tnSMs zi2s(hygthiMsx;<9cT{}2nHGs!wG(zzp4pV9EKm;50;Y(l>G_{Vv}#N>E@ILEy@Tv zs7>7`@GP?}G)UnZT1a|Wz(rWVlcd5kT*r9Xue#^XU*)QL<HAZKe6+9#lCl^oL=Rym zK}*<BX5m^%O77ffQ`pc(VmW6!#_WGgUGRn&eBb}Za1tr7J*~(#-Pl6EpiqEmQ!!<V zoTNaFzE&Gvq207Z*tKL+N-dp)=U&P3OJ4HRwAjBSlu<R!-ne2-rJwvuhZ%xLuznE> z(f*#w@AjPwAdN0XluAY6PHo{lRU{lb_2M|CBjnNkh6v0Jp~V`IbRQz|#NhhDBCsEk zoerT~PLv}+ie5{%T?3hlB@C^ogf@M&54WWGsUy)!VCAh3T=9d_5kKA|cAq4chJUM{ zD~4_%lyzg?L<)8veQu9Rg<)gf958pe9piu^iV)PSRe(@YDYVG7wIkbaNQI)PyXL*D zlE)Ne5f)<L7wB%Fs=F6pDg_*)`z{L62yvH!HCzsIR}7RwP}PeYAhwVAy#fDJ6w2JK ze_fM$TBsZ(S9{pT6~BR+V_dh?hV_FeB6XTqvk>*Xa+17Hr<bUbxjs`Txiz-{lX4JU z?5mE+MJ$nm4t*OM9!<S??XE3sl(<P9wpBtR&BWY;bpEv<U^zC6Naj5YZhb+|WkPUQ zV-SKNvS6XU^{^qA+odEo(NG^R?Wc6XKCx9XR_Mj*Bfp<lIO;EMQpSg*1lK~VBku_+ zZQEziD{IV(iYgxt!Vqim<`PcU(zDE3Jmx~ZT;_KXGiBiVsH+{sJKb3EAXm2$svBqO zZJ~)axQbn!dQ2;3e9yP)x&IB~EOXI_+JUbVj)`W3tQ}b@KV}m8-^#7_q~a=6h89e3 zd(#)SK-pzDL_2ti4S07ZRgKQT+d@-)y@<{t<-3C)iyxYliI8rm;XdRg$%Rd{JS?YV z$lc20UQV;$wup8If9<6&1<zo<wJ$7XvdqQPjIzgl5JorssN*$w#QaO1evXBVxfMl3 zG3Bdiex_WvvA6-;_WZn_MGJRVpfE?s*utw~mym3s+e!Pd9?bcO5_W{9D$o{7Ce<n- zzDc-7RJoHtc1s*(ofHTwBpiS)yIXWjNpGStGZUJ+KSyqIkUUC_WIC6G&>v}eG<H(- zWYU_^UX8g93mb797UKdzhm}u7a3PG<T@HE_pWlH~F-2F&GYGQ64kTQjeOlOhlroLs zo6t^cuYBkKQxj&<Qdas>qFNTCDUWN)Way_F%VaU63;1wAXNW1FVqpMByAjM42fsNl z-%}kUK0WJ>04wmYtuJtX42ZawO09{W*tn#gNkfGD5^=0}aMJ=dG+syxmq!l#v5==T z_HQj0B`L<t4wN@VLHolCHT%Ov{P|`akL__5j1HVB2Yc;O1_Lkib^rkYgc0SBHLd$6 zZsQ5tG%N6@Wm2?caag8kAZ05U95|B)B4gs)%!CEN)OHE7`2qg?l-><z<eT*d$f6}1 z-%W;Nz?oX-+Z)XeuS{s;2+5wK_|{jwPov#LW;9uC1PdDh044j$xVRGHb{%3TJlD&o zJD|W?>mk!=_RpKBGHOS|<8qP9rZUkX^3jO8k@7^05zagIFV$D?Covw1hx1C)JW(+z z_3}5Rq7p4IoAaU4$w3TDHz^zNGy5O8rs4GvU<nmNn1|){EP9J4wDdPWa@8P6AOw3{ z%d3<&-X|^44%vbSjuUSqNGTCkRFOo@yR(gr<dxRRVvNk{nh-4MGSbR>9x%z`7cY@@ zC?ey!f)|gnb-H!UG9iXWj37~G2Z0xiwr;u&Em1ydIrSG=D-Gh=A~T^9VB1Io&IZwm zMr>pif>99=6(w_VkvzJQ_q0QHObK+FpDkA^aY`90^xAfniC$)N)nKu1g<i604w{XQ z>v1OHxT6ZQ&+M(m=*CQ;$pCkcDLk~OegBh++JZ2(=?PZpn9O{-OYOcOLvz|ome8J( z$V;$kqIgPFvMM_^5L^(vnHJsnjCSb<K9GtrE1q3Pt?~cwzKXVIO65xS-JqRlL;e4; zcUMnw1#h3gCy?L}0tuSnL1ys52@oW>6FdQeySux)yXy?@PH+vuHE7To+<i9h{@%UV z_b=G0rLWGZQ`LRb)fdm{=lk(F@I%qcl}Y^mUC47zp*TH*KKeq8^6hKNYNVt;W^Hbj zRGrMu<)sm~tP%R5fyvo@bD5<4?`1Dzl?c&Z^V=f69{&g%(PGmnC=_CAcJ^yH#*l#J z?j3XLoaCw3{IFBv^Zw~Mtm(wty>8o||JqHD<ri{>3Yk|5<ygGOg|0i~xOQ3U8-vb0 z^PVSd=*uGw*QzA%l(eOdm`sYaA8d}%zg_Vl^1f^GAeMIwC2mHhVe^x^?DdwB-C6Fg z!OTCyg5Kapo}!O)JBH@j4K!JKmzYE+&hpb#Ybbj~kD(*c#iZ<bcDTm^u;&2%j=6(w zN%i!5&cC{>ZX;*~<z7#)B%iMP#3}g2nSH<ekw;tHwTL}9TIO<AI_6zgbsVRo?%Kyo z{M~QeDW8G(S__|_2ejH@bN5SmC0|$0!e@#e5%}(19RiLT>OKKGR8do;U^BgkG2ri2 zumAMF4?QF`J<aQmz=QKfn#StX%U&chkhWNAbeP^H@5@Lj<O>HdrZBbhDC%;g;Hh_B zG{2@9@M8QR?s3buJCei8N#@0?!Z0NJQHoh5xlBhnm)mThT&fx>?Ei&ZD-c+}-JfqB zCGs6+YowfJ+Lf-#A4#)nl-8~jILeL!;IQ($OOlS?sEr%R-}o?$Th&=M0ujuPOo14- zzao|4DoX`+KoW#R@Bf_G>yL)zX^wl6oEywxRV@{2C)f=BX|Ry_H1w9%b_FTvuo%-> z|Fjn6^{R$<0GDW3ux3I#hUaZ(xUNG20-I!R^E6nn_js99<=W-%N`k{NNmfUHpkt8D zWrmZLl3XfONPz4ujjyEL$5^$?>aTCrf4&-;Qxaopo^vw!wKcDB*C8JB^^N?^T%hQN zdaeZXM#!w9pc@+1chaj_N(EkGwXafX56<75@p`uP+={<*#Y^=`(Q28yV()62-K$<{ zsZ!)QlQ>m2G^WSWaJmu4BP+Qr#(7K<X1NNxq34Jmor-7sytyOPb?MgJSGC!H=ct;v zv%!^}=7h1klRB?7vnt{gKS-Bm?yipeWp}oCF4?Su22U!F0UQ~8b;-S;A^0klG{38+ z+3XwF)CEPDB5`mUZGe>Het3y@GZ5j+$~y$pz^;`1p`L(*MrS-XyHpkqb4rqm?>?F@ zHRt1Np{dD~k}4_~(?XHc7xpID`ca^2k#2^?8BwI_dq-Ss^UeJoLE5^r8MAe;eSLB3 z1TMa5N`IV*h7mCYQ_b2X7<%NilW#H6_E@_EOK;i8FcCF=(oXPfSRrNhP!3aD`6B0p zwk}K5M3i2LH8p59@WswFvFiY@bgpe`Wawivr9=vmf4|wmSvO-q88cM$12^pJ#O$Z@ z0p{~|YSW7Eyx&ywDT_5?B(*Y@`cxQb(`%#)ivRX~HSxMg+DT%xZpX|iW^KbIZLeB< zm+@hB{zmZ6_Qa*@A#1lT^t%J%mt#Z<x5Re3XVWid)TgV(AKGTz1yyg5oj07|k5%34 z_U{h|ES&bZN6}!t4yx*A-ltkdJ}=L=yag7_+kQZpTWu0j$m~tGJGjy^e{{)RvG(A| zI7&&KMK{!T<6|36rpj3z#APY*vc<G@aV@VSVOsMq&8&HMEW{zaO!66Jl8jOUkvku+ zJVVHtw~!;MSeCczavuNw1=G09sAZWvEtzqzDh}qLKKkfGB*-J#MqDDNbViLEDHi<3 zopO-1kfr87zZAw5bqkwZ7$4;7!Ioo>SyY<|brIgMVq%dqSV}5(`e=SgXF=~7e^M$I z>APX&zNY^j<yC0!1>2D|qEdS0aqg;;p1~maW;z$A`%3h28016jnS=6*P>7z7*)~66 z8MlNBi=;9t<l6t6tey$)^lg=>yQsE#aA-OuS)bJ_-tWZkhz8l!#{Dp9{=%Qs#W;b% zQJ)?4CHC^dC<TkX|46GD1Ce`vbNtp)_x~~NpVGc+gyLEmwndp27bYv~pOAe(LoakY zEN{=An7~>@FPb)@nqQk#?zv5`8z!wGSo^8Ay$GaTCas*!p4`&6&BQ%Cs)}@;GJsVK z<a|Rs8c9Pl#8}MgMJ#7Ja+X>-78r!f`%6=6I$`2~mZ!sQ><4SHMbX0!Fey!BoJct^ z#!(KPe39CK_;;*|HiE3yQSA5PmooX2Q<Li_bQYmE^`Mb3+|;-1!@X#Uxu^p2_P+Q^ zp%{g^s<Nh^_y0~r%A?B=J(^0?BTvQIbHs{UBx+0YDMjGa7m<EI^Cx*#2#|slqw=j7 z`xA0nO4YKRI!=AUzAZ3NiZE|CpcSON9WP>UD3kXBel56@=ag<J!>j<R)wO<wm^VOm zwqa_w`>Lh>PUXg`$%?-rb9Kp16>?6y)vUy-@A!_hIt?I-aMVv;o#zniN01&e=|W?$ zYIU%HrS2Q(LV56shWW<>eQ2vf)!DmjscpLRRo+ERrpo}h7|4KsdB#PN!OiNUp_x=I z4^?(B)LYK70ih4&S%f$@K5W6-fOSiv`B$-Z{P83K9vmW9YEel)B(1%)#k}VNsx@hX z=N6<?CEoNZWykG*P2Py^Z69ro`MM>w@@C~AJ|&*;LDosCc10Y!#`{;2l`(@``zED5 zWJj*B?y7Eit=3s%(CF~{@N&W7U1ipFd4>6I+R`>kS)ij8P=MT1S&X^f+wA*>c8#;% zJ%pfT=mWEkvo`V6YI0l5Tjn<b_e6MI^Sx+f`r1yQxrHm|fo3mRJGn?bV!`6U8m~kD zG>pGb{+Asi6l^nwsVR)|#pSV1=BmNvT9bv`=JYy85m_`M%~J(!{moMjWmHCt3B<J% z0w=g#-w?)I;l>^Bb?V&fzU`D1VvQ;=qdR`=ouvuU81s^y!=3jq$@Whxi_ARvme9JG zr*l>6<qV9a1}*R(YYc(C8P$H38?qCsO$BwF84Z+cFtqW`IL*R>oHB@{J<=<JxGtfH zbQ5`y=r8?&h>8qG6G$UrHx1dDq++B#Fhi`l8;8xETyCq_+<iJL*r}+1$;y~td+~R$ zRdEgm3}2fR@|nxNq|GBudGIcdkoG{ZsiSb8tM$)}x5L*AuRVx$#%$_bWAqfJ(ePaB zQgkC@JE_%=>G~F^5w<gJXq+wexNR_|!cEVI)ss*a&rR&E=03J@+bCVn7-EFj0QvZ- z%bH#LCN;O)5EJuRWZlCCnGo-=I@xJlm*)<vL`$EE^?94Aegp>H0EGz}MlOEu?icdg z{w7n$$gcK{ULwPZgwDZGmd8Dp7M__b?~4eQPsHGhTLKTk-dx=eaBLgCg*Y7h5{VD+ zABdKLwWq5nhxUC#8~!O$=Bsvx%mXp*O$t!-b&a;?k<Z}GGUvu+387bvjKa+dqVl5m z^%=8_$-`De=XIuq7m=v0>o)rDvoP+g6HYz>m`c^%Y+dJNrH{aY0n7d3bmvuLm%x!j z)&0tO=XEDS;3R<MVFSPGre;7$@GPO~VH@0aJMJTRQNZ%JuhMll*ClvWSM_-4&~?9x z5WM++i8w+qlapXkz9GnaLq>^5n}^3tiO-dXFG%@TJnyYM<vX>!cRG{=#(4zRl!VTC zgx-`yczHy&>ohO(h_fk=hykb=;#l>0q@9%S2lC#JQ+}As`>;w$Hn4$xAWC+XNB%@f z@w7pPLPbfCPkFULL6%R&yh%k%Mg5OBqM{<N+@QhGBOdq((9x$=%l~Mv4=~?ENzNm| zpdiK3V~EeELt1CZr=qo92O{OtTW`{PZwii4F)dLs&QX1A)CY8KB5v~$FAP|VH(Brs zUis^@kWeGg|FQ!Oz-RjGBGf4Cf1fA~n57F4ntwU*a=CQ$82_!0W59EjqZdid3(IH7 zFF?ssE_iY>K(tUJx(z<@8E{S&ysR~N+Ms^g|ND4qAhcv4h(z;p#DE{8@bQh|6Q!XD z$(At0043RgFa7V6FbxkL#g|$tVs@HGhOI|CLs5MLF7qw%@GYb}gU2+Q$GokFvMuTO z!iVo$qOCL!ZibJOTax};{3Bbku&ozMhBDHHPu+%WNJff$g}}4I7qx~Dw}lUE+saf% z_q^LGn+Td$-Ub}S)T#tVYUV{>NVZ=Ax8<!rK1prg#~Epge7sLHQqC{BLoebHH&n+n z`W(Lfxz^~e%t&kL<K2dl&Xkdad(o@bZQi?WDcJU{-^T~aoqLAj7iUFxygT1Xif@ID z4e^ZSq<2`uUy#W5;M(sPJJXta7n{1%ngtu1MHibD)0$WAm^BugXYUC90a$d>T8$T5 zweDEW(OMtv;0_pDKhfGCm007H*j5(X5SZA~(%Av&?B|Rv+36gaOB}gO9FUA(VW5y0 zmpHd(8?oyVBfW5i2)jnp;f9*H#h17h)45mfx;2)#x6*lZmUs@(c^x5p_0V~bn|QC5 zcwZste4b1^&VFE(f2JWQ_3O#=#oO~^rl+a=Ndcq}5HF?Tqc_ejASvya)!UOc-D9^c z4e=KX_TLK*Hw}s33lSF$&EE@!n1<Evh1tKtJ?IT$4*qQ0ue@LyMbH-oGmW02uRqy~ zxucIp*^kCxh{a)uC)<yM2nR)z8yyunjT^Wy=h7_fvVVOQE{|gHjiFx8Y|3(<-Em*v zbKfv<KPkE_Ik_y=*enFHpH|C|TFH=Rzn|f4HnmWa#Qrj~wJfEWA?wO4<B1_11(Jqj zo;g>R^Y0oY86+>+jH9pg+mk`z)8E8S!$f&Kl7-!15=r?9`tUhZY1>zF-xy+?OS6L! zz|wqE;YeU~I;4bI6cP?mtT!*&=_?VDDXn~&K0uFaNnf5%AG#x!YHu#h(O1GgP>vBK ziw6Ik3N*+C*2bHwqP?oagV&KkWg}s=B$9PYkQy$rNHuc}dxHc%vlfCP5=Z*v=(4ov z{bXkb152~y0Z>*e-0&w{-*mq<-?S}%uT96S9cIya2CA<HrMA*1Ao;c893;UYU8|s< zJMf+<i!Kyk=Lo!W4&F;({!^Z@jexPsdOsE86-OXQ&AF(VcBf@WHwnov3C*GrXi*A; zmlJ>>IG{#6c(t@e6N%)Qaxg?5p0spOvdLI35>Xjn?w4v733*ZPTbhl8VANNHm&L;j zXAWYt4y(wR%F}_B-oU6<Sm_*WsuDO?3zKfQEM2t_=%dH7)E{Bq8S!6Bc+xE{hE`93 zh8ivML@?_g;OWI?gU*&+(fg|emTTz@>)B>`NS2!zVm;AjHTip^XI3e975zX+J5Kp} zD?=}t_0+e@O_B0cuF6(_#*%@(7e9*_2R?p8deIj=FiH`s_`a{M2O>LhAluwGaV1gt z1baZMIK-<s=ou>|2!&*a%$<R%fbhd$lxhs<BG=2KBV@og8-Z^u0JI=ctO{8`|2Rg_ zfxG#^5b$#RXq4tlL@>(9j>YnL#r15(Et~Pzo~p+N%U~e$-y=j>tFmSOxJ5?oevf?l z(^6TEAY<2)&C~)sxe_9H0vn$K0b;BXJr*HIzOA%JYcS{&i8TtQWiHjp6CcD}(Yiml zY&o0pPd+2+DpQw#>6cKT><6nEAo}$H=t4evzDG7{pxiZ)e%u~<iV`|IWt}kqX=67d z8H3^ml*R*Wy6r(JfX`!l2aq|)!4uPkz0}3gQF5i2&w;IUA>^%4(6IAn;S%}dju8nr z#Z&%%c_%}ONICS*qHP>FFy6N|wZEia9xZP9(t{y_<Us#3OP0T>@CmF5#Xcq8aw-r; zrpt;Na4>6skXn1(wOab|x@J?HsaLxEmFOt3ZV`q7q7XDfFWYT5N5DuX%BU}9zb$=G zC4E51UupD*o^sxFFCDlB0nOCz>(eljk)Q4BGtfwk%5uDX=YS3kFQ-O5k@Y;mp*t$a zV4lDGHv`LMZ6Cdj0ld<dUdt?n#D+zpss^K`8fJSz5*jU!!cPiH>5QzE1`V7*@9qv7 z!iPHDVfRSFKk<UnYL7n!*m3Ata_Cie<3LN2&941RMPx#gNhH4!In;?WaZpRvPk{=P z*%{Qg7zRtDxDMv{7%31|GkA==688KGj3sIZ|8DVDu^((f7$Er!1}8v8nv(@J%jERK zdSEX*VJ(HnKKV4f7Kc*`|8kJbZjKf>9*jUq7_hppIK3OTxz%(6L%Nw9th$0B@nhvV zcUCeUC-^o85Pj<pgv<?7WxOGbq1H|ufA@o!tI<Qm>wpz)Py51fi-{-O8a!Ajm31-| z$_x0}UNB_n$dtpvj2n@o>dawiu<qh+k>_7?er1E+B}*PqMfqB?DY!z+!|Yn^d{=`5 zj9Q_;3#C%AYH~0C8$6&cWTAL|(Ry|y9dn9B$T9G6sv<U;yi=c|#XiiwznorcH=X~L zFjub-J|7S6@aFuad-cKOge=9WZycxvwvcLaqysbJ+FYuQUUs3FPq`mTVb;*pmHry( z)6KBev#>Ua*nfAwuT^*G`wgB7K``?a)WE&#_m;p$ww8c4dk1Zl7?Seu_|9{*4#?_f zj+ke<_Yh~Iih|Fq*Ic!^S2q2@=<huC$zrY{SGLFF)%Ubj+D&_{l?@-yEgU(nSZTTM zl`ajIj*W`pe(+j!gVUO9j=sjTp0h@DM8m7U&7kWG1>{3!m+G#O%T+<U-&#_>GS|Wg z;61F25?=f2Zy;(&1tW3|0s}5;z;F*l4=-l*Id(DhDe@wNQT&F8RzX?*^^}Z5bVDz` zr??J<Iv!2c`f}TTAPvR0DGPEq*$F=Qcf8eY0^h+wj1q?z!I0AEnzSjmf7{1~&T(Of zXH1M!g8XBo`el){-e@wyuEhAnK>|u<VvEXM>5;>l7kxcoZdG%4v8r4xz|GW7>slzp zBt2agjr3UtwUx5hYzO0DhoE{d_~dn$lek5lH+fS@-3f{@WOV$j@ZL$M4r(F+rXuGh z(!NqKaBLFg4Rf!?4Y6`NXKkZp41jZD=`!5-*Q7A>B}*{sN0!#3IG2ksRXH5K)8_C6 zAH5NR3BKjFPp}|eqd|>!2RN|5N}!jbW0f|z8xUvjr>YE&IT-JOX5+atr!WHfEjVmS z`E@-rw2m*C1FpnRq(B~n(dRF<t6d@>ynlJZl1n3U40@WjN}7yHC35wAO-M3#|Ftzu z=Il;3?YiPTPI4mza9IVWBm`#oJ4lGSXHs@wm+wx*l(@=!O}3SI;XQf)J0^X+rue-) zti9$X1ZEAqmUTNwJRjX40<NuIo`So$#eOtfkE;cKtLFmi_g-s=j&)SQ4f3aTy3P%d z_XfA%CQIkK3B)*@cH6^v8$WN`L~zH(+f>JU*Wzi{p>x+m&?H%qT%67+zZ0flVwUdx zdwSD(p!2|F5Kg}Bt^as<U-IYo?opM=afE>H9o<45-HMQaTfEl^ozTf{=h>jZf(-oy z3l+JD>4kb1IbZ&zi4PghCcG!{8Z)p$D^M#`NHW%k<LAsxfX{7-*qx~89bx?)H8gzO zNBn(jvO1#AZwB!g@PIe?^0U}<6XTMg5fVCySo7;8cCX1qHb*q2&EC+rq*~>ncANdt zq}0Y+X!dK8p-6rQ;OZD7nG}{E1Btu|#&Q|ly3$L8$R-LoLVizTbzoDa0tpX!<*-CE zl@iG$B+61tV7C!!ie|rgl0|(vF4X-{`dzt3onaZ*mh=^5vD|#N_3(}pn(p<vJ^VXC z6Vq~sV=s~*e+p==CU6^v`F^%)$xBn^%#$z8{ujr+-q*SI#iFUCOkowWRw_rcY3>k+ zlG<x3xY0%XoCTUk+QEE<Nz;||GS|Uuo5AjrR~whGy9c>MyZOYAIls|(FgZ~i#AcD9 zh%C4SCku8y_$x!j#p?Tw>z}5O1iH%Xj-!hst9kwffitsvVJEWYuC-mo;fEK6!(9OM zKeBY~ORW${^TJYi_s>QkRJecQ&H~!i+%o~a#W0Ws)f^ygQbGyps{62&E?E1~)<#D9 z2!sNa%27=UBfgYt6ab6HFb?91MxV}WJ{S4FW&cbSg^;Z+9rX?U4LYvXmmk^AgvPgl za?YcH`{jY`>F$xp)(ye#5r^&XHR}%97QCB5Ab8|5<`@flJWKlD&QC+~pHAx?6nOs@ z;-~Y*kiMPZ?@q8ETe25bki$Brl9mFXW+p02F|F8?{$@Y?T8!LbZVKI}X~!$y<ub%6 z-|BN8uX)*xuS!|_?H=ByV)Zo%LQsQYNAY&CHcFI4+YuY|{uWPdtjyf$ShUML5NGaq zO5ZW<?vsFA302*ziYaRuQM_-qDs32JoGKOU62`wFNn`z{y(8RE(|d~*`m%HuUJt(t z&QZ~-HqZ(S>WaDaLNr*ik#`LlTq)93dk*?Ejj&(PT0PscUorAY(#T2V`QTDFDng(M z{w;e&FrCO`WG|+q9;r5eW5{&1!nALXXHx#QM`ejXv;Vfg=BE~IpX-lTqim*h<*fZ~ zIf3s~ft;3%W;*AI5iF2{&E)Ok#z(EX$-c^i<=UuEiUUiIb#slM=jWz{Ut^+hF@}~P zSqK{ZI$$0FHp$?V94tlS>_#o;H_Ly9doP1_%H7+Pw(*MCb(rNYwRy!*qfoT#Gm!8u zO8P!zF(k@e+m$AI_iCHHR&{ziS-!&cRk5iqnMkgY`&wJG-0W9IIqv*6+^J>%C9_%A z1!MELaEddbcxsVaoZ84N20{LB6&7IEQ5=Gg)HAn_93faVr8v34+x>pXZoVd4@ChyJ z2xOBJGHv_VPYzAvKUk{mTzrsKXHgz^CIiQMp&x6q<zo-58gw1^;kaQY%tnt9CXSxa z2M7s&NA*(X!_78!s)Nqyl1#-Cx6qnrjK<}o(N_GrHTM4sCpWOH1M>c&`$|AHiGDa$ z+}=_eVyC(A7vhLlQBQB)pY|bdD=|ewKmiovHYT-j1|^^B2mK-aA=h*DB{NYWlAY3k z_*dg=&I?7YEcmo`I9(1CB#7U>8)Ns|1>sU5Zn*Uug0Lm^%<&3io);>js#^uD?8E!Q zGi(u_4}}CdMYyiYpN8ztXluUYp(P+tl#<@#7Y}wUd=WBzJ24_loB%G4|443VWR!oF z(WHv4*d0NV)03DK^xd92ZWJv{=PwmX61vH_fnwB|as}?<QMByX$VWI0LEsAqv!A>v z*@c%Sxqj%Pz;f)zi!(kh9VLlWHzQdw7x~ms#VkfmBmM~G%6!eibm`1@Ofs(sNxy*7 z@KlC!lnvkYmO>Qu^64y;?Ip?l(bF?C5+0-X`9G3DO?&e*>g6|S<bY#&3+>ajjay%w zV1<T<f8KujekPxY@kP($PyWAMO!Y+ylk4EGI{h2TA<FS69shXhbUoS{$~#su$Mo5X zg()sHzBu)RUL|}lk`@5aR9KA<5%*YJl-Zr9oVEXrfq%K|?NoU^gEa3}UiA5A8oZb8 z?B*nYH&dv>9np0$;`F$U=#zbrETLvU^~s!gaQiReG_SnMvT9Q)Od+gHF%f#RBX5U@ zR%^(p1Wbt3A<8P*iRH4IA8H63M4-*THSx<Qy7PJ7$EbxeD^g8Uk>YXOUXIAEO`=(d zHgp*(n-+6BL>&@27Y#~Av-LJ)J#2n0@pK!{1YH89yCLIy&dEg~g_^8EZAFJe3Yy(# z#$cBQNcangNlzb$bW%$}{NshwH@h_!XmIIrpuKrb!zx&Jm#5#`tdg#r*h*F-`F&h` zIp2%VCL#8EwdTpKoM9L>2w3CVH^Grkb>)ckhdH4L^h7pJ_wlEnU|g@B&=B!9%<bay z4}9?{Ks>0DYePZ-9Sl8e)pC6M?b|#;e~I+RgS>3U`;pxqht?`X+W?bzlEHL3d#i*3 zydO^LZNY?H=rB1v?6&1B*cTbKzGBK-bkL3TP|c^O?~^^sOm1)Jz9(YiTM%o$dnnqc zAR1#-pLH{2YsDL8d?gb0VQbU;7tRm;)_i|h3w<;#eVVFqa^Aq(q4zzKV?N!{uJ4!L zzr)|<jdELlcgvwZbr;r~El#Og(nkpB#g-5@Hj2~jNPP9T<u`X&IEk;X#rItjv<`XX zDwh?DZ`bMb{ZE{gK62Fu`maeBTAutWqpINs`20&FYK<h>zu;!aTJtVHxN5o{k$=Rr zEiM>eRo8V`8bvHG{GD@ZZ8@}bq9*<GS<<<szaxh9U;2gVdQ;al1v*FJ3+#A`n=Vvl zTYu6&Ymf3bKQX;+Lr~vuVoC7y6EfTRf<A3xuetVfKG}xDmp5=EZieNu?R^S7w}IC; zqnbDlDTA3iU>Ba@H`Zqfy_viG*Dd2dooCs|S$iU{TPI}X5pb<}LwXsPyXm}D;i@kJ zw5ZBW?IBrCx(V8F^<($i1{|BpnC}NV<ot6UUW9d39dIk5w&lgAtGa;iM_07h^7^qZ z9miS6Uf1_)FUVcHUuU0q4c@P+=U(^idY!VFKK$zeb{mjcJxvUG*kaSY9n;l0&$9WX z@bu(1Nu7O>c>J(0VRJWQLUvhXBA_5G?c@k~L-L;Zjg<a9&2kJ)Bh_iBxIKA%%!N0V z)z{F_n3&7}3L#3=mPiuw*Q9GQFRy!>1W&5EJT?q+?pqNZS7lWm_ztl{zaAk|1_Dlt zZDLlTn6e?!MytKwlJf6gV!cTVQRqHc3mHqoXiG+At3-$c3<3f8y-$2JFJ4zeuBbjr zqZb8lzMxc`JCc2z`<-=!q*`xKtc<0bYf#x^P~5!bi-jtajNI8w<KkRepn)6i*)Qq~ z(;wgZv}B;9UyTwbWiryIq!WQ^6ru#ge3V6>Qw~E5iA7>zrOl^O+%sY3F%*@we1T1! zD~|Q6l+Kve&?@`mS3Hd9RT~SP$eh{}%ohO~J3Hcd23Xy(jNh1&E)F7AZ38za_SGbi zXM<1@N^<`cyyRzn=`zq*Zdir;s{bh%S1#86f##$4&p?hyT&W4<0&3hx+Ltd-af3#K zY3*Jz*-7J;N+0+?EbV&?h5zo6Mw?f#A~5Ki!;NJ{&{UO6x8d2Ey&Tau#Zs0p^`)mT zAW@9c4>W5QY1HVKevk-ZG@R}!P<4G(CTqki4<{%Yd@*bufIIefGPEw<_A2+ai-;`B zqBy^QF9Ecam=LA1@+IJ1pDKn@J4Aodo*vCF*I{l~7A9_LzN3-&<^uz&y7y_Iq7k0a z8)C|SZ^_X<#)(8$%+}JH$VkO2HHn0+h>}=zQ2V|MtjLOj9rM11S22(vVGvUk6QjvI zYWy_K-HtUCU5;m8lx#$5eGi=+rWh(}Ph(tWY$AMsRTMl{h^HL6W4r&kU#qyMxwR&F zZ>(nlMYI^jBNy$vZ*3=;d4t*nwWyqyh@nFdB5($)=(SM1dE#Jxc#Vcm2zM#!`vM~( zC-ded+d5}FoO$~|f_PY}Sm|Ajcyw5pzlravcr_q?>_Flt1-4QuHHbQRkY?%&PQKi@ z^j8X+F?)=U_$D6^#%1#CZu0alJT!QkwRx7cO#G5>f3sYT50g}}(H&7W9-PYQQ_B`l zDQFaaJwRc7Cx-jZq}1|2cpWLe@l>W7x!F3H!Adk@3z*=K7eo^rPhS@rU29?<n7Jjb z8;)s`-_86vA*s-A4&w~1DuMEN(+Wp2j9%*LDgP_qgtKYyD7#rdnQ_m7%w&G(FAf@c zk$6Aa@ZP1M0ZZHo<+_k>$Td^_S_4zO7KpMp`&%sW_8vUo0G!%~+PX;h+PVBqQbJTE z9kh%q41>Aie1Zbg{GE;i8&JAg*Iap!qX~C+Aw3%wTHciTo){zB))*FshB6p$e+!-E zrFcu3UNDI7^^B)I`)}tNPf0tD>paT1?Jsk<;@V;rXknbmkm5{}60z9noze76)3!oW z!q;K(^rKi{NKi1ePfMvU8c#oTl3N7ysbY(}tWSULgmz;X{KlS7vrPE@;IsHxapK=7 zy}IZNc!<uyM7k6*DU&h4z#2=m?@CPKbW@zWocFy-w54pAenB3rU$TpVXFj0I-;6oU zJP$A^J5@{K<LJ5P=()-c%T}01OZ(bWf5GWu6vB$imB*?&gydr?{c88kjCcfb96I~V z5O2Q>mengx3kY9sxv64xKW#1Nd#Rd<3u(&&JFUJ@W^|IQ(Fa;vVK+SVpts0x0w<M0 zyyIV5@*xhZU|^Kf`*#M_z>48yP-<m;@mLXM>Prld66er>7u}o+76*ClQnIm<RrTTH z)uB=Cb@rVJEuZZQ#ou|#Uq+B2uJ&hk)ThFy8beEnWIAz+J~xe_*nolWzG!@AYI+dQ z#2t|{mu9Rtx3WzP7liOb^M(7Ilr{}p))^@x{^F?{<U|K3iZnzriz01EafCGfD1+Z# zFf_qJv&q;5PkvYGy`y(BCg1g!^-}tx^#=F#=BuP&8~MbbRn=%d+2}C`^TJXc^B5_w z{elStmL~`!y+0XSp#{d6sS2IGFq)0mlw5UKTIs}>2{wApbCCup<1zt{nw1H-qQZIC z2#Vqx`o_<ogkpNPlnmZj({mmbwhsBY8$D!=dB|f%qdEmOGF%Br$DYAgK=$v0!D? zzoaPHnT)2_9YS}}VP_3O3@b>##4>Xb8m7s!MtONkpN^ptKXFmuikv=!T8Y&-kvz$h zCFMpqD7%04K%mxoFz0wNC#<CAMk|*?!#&|zrpS58O%Ku9*$%%;tRd@{3SfwnWM^Iy z176^FwMRfQou|gOMW|-uxDL3mU)fK|c8WFntmOBR{WWP)HFdIgnq_y&v36P?|1(mt z>R+*N5WU=Y_=ouhK47&x6SXq*3k`;iQ_nO%L%(c$hzdDesmBS5s0hfC!<N1AFR}Wg z(Y#oWJ-@o{@9--y;8(CkYDl;I8qxS>;>~*U!diOs-`tz9qSUamg)k^jcvW-Qy&OXi z#a|tqzqziPJmZ^v2%@b{*GN&E$l;s6?KhhfH`{ki>&&89hLzg~&C#dLJ4YHZ=L<Vm z3)_vUYmF{Nj``Zyx3O<-87MTaxad*ze#TMW#$C$CGZ4p9FUEhojc0R9;B1L!x{d!= zb~vw$CvQo-JwiEQP6QJta=Im6M<;S?CVl5k{?d}5d7HpX9Iw=J;@Xnpb(`YjMkn|> zHLN8y>h_pMGd0F7?cYG<)mCUiD!6^1;jzhSd3b-5nMjqPYnCAqr|ndm&R_bKG%{1g zguZrusG2jAA0#P?pBcm<+@PN6cah#-?D1<b^LQ@1Ej&k4JVydGS6CufxI|(tE&Dz) zcXS}PY&u6pS3GZ2JlpGSUffugW>_K2Iqn)O`*)b(Qrf?3F!^1<c`9Lr)XjA?ce(g( z<jQyXAC?TYTG4cu48`s&PKbwPNuumYOikRsnWr1IyQRM-mUm*$+I7roP%mhjEj5rU zL*yNm$kCR*iO+~h&;QU^;za^=OD|K<O7FOX=JCcEknndcLarCfRZL3WDMS0|O--Vp zU*1&`zb*W}RJI*k$zogXlwKk5rGhfK>Yk*Uf4g{8vzjTWlsFl(GEx0HqlWGkM24h{ zf2k&+uWBW}7NlLPs#Sh1T!XD#_g$;9X|_@rttP>}h>0{%xh+7AKLD-GLyJFv;=XRu z-BDIM%fcg<ZCTRT<C_ktQ-NKRml$MJp}t?T>I-Mn8+H`w=&0U>mU)e>Z0*(p?WpOS zsFj7tx{UQZEAk$S-Q4@uhPKG%)b^6)*59t}z4wtV9`vmm8!vG-;%_##JT~^0H_~@9 zHeqe+N6X>2+Fhs1oiF}$ZIDJkTG7okZ@&HZ6VcW^=-U0^eGhqNH{GWmhHpLiN9@*m zKd)W)A}jY|k9xm+>XT~kjT!G#!Ks?B+E;7s|NhYbL!@Ox3M;*3!0I7|&?eQ!bI>L8 z-1TA5@6%9F`+$SzP}HBaAD@PkJcrZThqE4r^FECfd5)B|k5oL2)O;Fk@EmPvAMMb8 z814Qv*6%qs+&=c}VQli#uUXGui|xNw9)4|n8sGLD-)|p3d>B9d^!w8D_ig*{$A{l9 z1SVd2O`vy7U_Va05tw}EHA&p@KZzqYfoV>!Y2J=$fyZeXVS$-1UNcf1GjfkJN&>U0 zUbC7Vv)><Qe+bMOdCi%1%vn9o*$K=$dCj|Z%zHh~`w1)rc`bx>EJQsn#0e}Wc`c@O zEM`3}<_RnzioBM}I+iLPmudu-8@!fVI+i;gm%9c2^n3jo?)c-BMU+U1Kb1u!=tndo zfd9v9Wldmp!)x{M`|4@O>Uq}c?c?g@<J!NP<D<a(3-5Joo%J`J>-gF0#82z*o;FCm zH$Dh%QhIMP>1?ufZi2Hnd7m~ppZ@ZD{}mA2687Gb)7et$+)~Nj()8Y3eq5RUP8{0( z$4pR#N`&j`#co*urDOJPUUz~>{%*k2t_zvF@9J*M>RyD-UYz%S*lI!|87xf@79zM` z@&wE2gk`P5>N@v}I^kuj@P;RNOXoq;)4?#=;h^_nf9GNE(_zi(!L;|$BH2;5;L+^r z;c4~};_~U}QRfKmeT<AaK3_e0(RKWK?F3Wkh;Sf*kv>kX_tZw`(_551c-|R<&>0wU z#=UmNMt;sqej%WH{-x_&uIoZc_gqx>Qo`qwckNOr=TbrUN(FJLjkq#dyK)e^a_YKr zLtIPcTm^Mqhmha=5V{Eyx{V^g_9FjxI9+E6-NpFarFGpDb=@T)?(%Z(n#k{S5a;AR zDbY`RE}aj<h=*T7kCQ%+vt5sih{qM7rwyN{?XIVN#M7Y=;?xIm*@bwapTq9=5|xB8 z^dz?@5Q~t{674jvFZ3<lzl!N;{y^k=ZubMUvx1@E%iP&%jWfgUL=4SJjzzp3nIsg% z_qjy3gyPQ`{B~C}WsxR|Iih|T0@82GCJSX#_@ZtdX=lomp*w}{voM8n?FNGFyIH7m zwLw4EM~^wnnR3gvM(q1W%RluF^Q|42F0?B-9_M#S5rijeo&K2kf|f3}`n?fv3aqeh zYYZC_;A%Mk{(%{fX0S;dmEYK#LOE16IlS;L&6>;9>0Y)@Qy%2jT68t8;9X0vaJmh4 zVt;ZuS?Tp4L@<5gwc8#@qt?agaJ$%@f~s`M-@7{RE|<78J$<-8IPL7spsV^I;BvXT z7~n!q+8|cMD)*Yx6mQAPkM(@|$Y;vy<D{{oAKi=6NZ-3x^s#;;6r~h?*j%o9OF`&3 zp+Efbb#8Kl-msTahT!Tq>xJS(H|vGHQeOBGL7qND6^_(HpC3XaZJHm%+R>~Z#k`8P z8OBu{S`aIQM{F1=I==ANN5*)eF!}|OR6&9SdrMvtzcR5=gf^9CQ6i!LVo{``F#~Ok zsXOn-xVQ0An^L0_$iFggheN(uFeVKwW$|Y1(CHSv(t4ZAwV}C}8-f>ZS`aDNYFZd9 z51}veQ48NMO2=q5%g^EiniXe8!x+kPwakHqrO6|(viwE}3|i?;0;<ScYK4`TiH{KE zq3nZAI4&3wy&Dm?*bcq4BLK`_)xX3G#;Qk|sj+bSkoc|YC-^`Wg1tY5e>aYDM3mRE zeysaKZ=hwC>%BG=P)@ta<-t_5Ar6woL1!+AVRs%ci>!XSlBuA5G3{{j^JxnGgcSu- zwxWT#llZuKWr_c|e@WcJu7lJ8e%e7{0<s^ZG5MESL+2oSJVI@tZ9mEi{RAE*8T17I zB3jO5|IM87?R=CU^O0>rl=OT3m;@-xaa<5Jiep>=pXu_qtUC7PEFZT3=Ll2N6;&5< zM91%pgGPq{TGotD?EH6?E6i3%EJ%Zs=YIegKPShiQRwYF7AOQFf98#?!1TY{bfQN* z9*+iaBPwmH8K<#XyLudzHlwk}@ds$NggWY{zuH9c%&SF^aqdF`tlj5IeFXX7MZY`U z4;o9DJr0}KaPE&fuW=sWJqiN#&7)U5mS+={D`%1EgwdiTKh`N&+NUGlVD$9-VGX9a zV?PV{98uWKQiDu|g-tzO@&cO$4obixG?les707C05x<D-Y8k@T2e8Eu$@+UgkPKYb zmSE|uf5wU@3ScLA5$Me%g6$-dlS#AJMV>2%weVM?tGNN~eITWO`$^8V|3{|q4FLA- z^h*vd`e4}PfKwl)4t9u3D=CaM<Wu2~*P>0L<QQ*4g)Be32{G-XnPPU4-THtN*DOZ2 zI)QMdMo!I4R~24LwA3=Ln_xdG4)$u6BksjTet(tMd=n%>-Z0cnXao>CpgeGmhlU6e zyb1BbGQjcxQxo-@Rv2DXeBcQk_<(+06}4z*doMYF)?dnkyi=n!%Bn|y^(Kt?APO^Y zeR(6$iRm@FJsA%VbzR{{W-nHIBA(_#CVRz_mz);#4)%sbL2M|BxMz_M#EQ5vXtEz+ z<H27dH;=Q4WDW4}!+XVwSu<S6bOlwy`z?z(qRhaiSuZsn{paS}1KIc*!al!%rF_IB z3{c#X(a2ox<15?#Y|7Y^Rh^k|8(tLI9TY(pkK2na@?)4qSs^xkfsF8husi5osQhb0 zB(gyK<VXmuMb^c-wy*;Q<2S)j>)RfJkWkJho>(?47)I<u^W|sTjaqq<qNvRL?J9t= zLUHs(X1%d#Rc52CmUerZyqh~mblgD+FH^eW1{Zs_GMk~;J9C9J7`TY<9YhKnqEKM2 z3aMp+iuOa4s<dXS%$-WUeSxX<FU?j9a#omphiVRo&ov<>S@3%)DkYe(1!0U8()PTO z?M!7ft;Tyx@;#UW9m--F$wtzC<45x|i4}2>U_DZrOnXp*uG|_Mn_Epz@9H;Miymkv zl7(+Hx!uH$H|H0O-TPrclF5rHfY5AWSKXLbqE%S57#)v@7oVfqls=j)@nQ-w7=Nm8 zvjKQJG_u@UoJdU`r}9PE|0p?In~|W#B6GrN!nsD92JTEKJ)6YrQm4&G>etl1W`yT4 z3t!!9Oldz0V)5#*(1p!iOTbr-o&HAXJ|Ste-9B3RB9>PssTe<B3#YEWAFDQF(h%C0 z!+j8!{N{BUWt+RgM2OXh=A}C0^KoVVeb}pSJTnDaJ%^<Bvx<wK2Vx!4Kc~<FL#nNc zn#ouy%R_sA{?O3+O58S~&aqYV*-0~%i{i_|I&AXK*6nEJUIFR~P+Gu<gH;$;{Iq)F z)!$Kcu3-MDc-KkzccfmaE^54!^pm!owZ_{n8?`!*#d00K(fRSMez4CaB6H_r;C5{O zRlW1A>~|qTzHSeKi>&QT6LD1c))?B0v|o(6CT8%yyOxx&mdH(p0IT7Tlv@Dm)+W|1 z7LA^vwdBEf`WWOkBlohoMBaMadoLD!r+T|-@7|%fHMAyTyT=A)aW1o(;-Z#}>u|(( zqaFDv6HTA%)Ni4Wt`aSGH$M4MCuLITWi99)A@{H^)cnMk*G!&r-@smF?MS1Y|01JP zTW+Lj<1v4~dVl27d0KJoL(0F7*x~L%$2sx8*WN(Wb?rH~vh{oYrw6s9xtB%fG(_S3 zCZUb%05^_(jLfG^Bs$(+CY`hBe>KzhCM|uBv-?gKlcUZ{>LvZ+Fa$z_ha`UmwcGva zJexX_EXcN0;9cvMQE2k6fQkF!ooY-iwpji9UU*HC4p+(jH_?12+uzre75Ts8L|Hz} zO?8hOVy5)Ll@WYBxt&`-%sMi(O>8~C!KUuk1vuSy+t#itue<IAPCSl1HeM;XcKdue z4KVq%{$cH=S4ih9F63d8!N+Zg?&%~$qJ8@^&~3t}^E`q4aTl!MHkBhNSof_dfZ^MW zf<s%6)UMgoId-+DItY7$?`ph=@w8^NeYNNJ?P$!?*-NXKnEY(l(;w31b3#J5dE%WX zO7G2)I3KpjZQRZ{#~+W|K0R!{z8xC1c}h&_x(BLv-7I!Jo>w8rA5X};9@Z2P55IFB z@S5})2|cX{l0E8+y#@#<=GC28gB){dDUHC^m^WtNCKj!)KNe7bytdaTH1)tj`#P16 zhg0f{@y-i%&wb%qi7?avquCGN70-dgagkf6{#u8<R2Riqw_ZYz!!+PsupSS6Kr}%> z>{Y-9XW;d_00C1yUef?h*Fa%<Gx-Hw{?I@LjX>F<07c0_el$HfjX+Tz-zGX=W;8#1 zZeMzF|I4eO-VhH_7Y~CJuTDB&#MQsnr(nBK?=^K#8?=x;Li5_IAjjqq7y8fu$<QFv z(2&s3u+q?oq0p$k&=|C^I1Nt|R~7tb2N6}@Z)zdVM8WBZ&@gvXmh?R%^ALsXQZM7Z zFnu0h0~eK*kKsAa3aQP$gw571gn`^a{*-7TE%g4xM1C!(k)5HA-8T_El99cpk;591 zqoI*wu93e>BY)9HP3%QZN=8kaMlEVYEr&+^agACljas3PUf+w_xQTQg(zBrtwxhFs zePh#-5|Z2;(d-i9I~1)~8tgKp-f9{;of3*g5cYy07FjCxm02umSS)&3EX!^TMyeM9 zk0;<Z*rYiOdq3E3&!be*^MEJ(a>%NjK9n#_A*na)V^|E}HvGah2F)~@Ni&*-H=3C^ zfmJFRY?i<omcX8tz)_YUFq|OdmLSL*l||&aSrS5oSd1GE@dcuLA%(<aONCJI2H%uM z+wpi1F@#v5g`A|?BuR#U*YrATjx~@<HZn^#2}?HH51rmk(rSqdmBezUk4MK#3DHQ| z=1vJ%h>d7Yab8UEDogfb_!niG8f2Cl;hHFI_9LAYtM4;b`g&^Qerg(ST67s!^kQlh zdRnYhTHiXW;Z|ziep(E1T2xqC>Tv1^Ag!<^Jr6ytSSl@&A+1mfD{C<=i8noFpS6B5 zJ&QM^-YuggEdxrN(WaS}UY1s=nO=yVG18JYw4avAkX|2_G0c$O-I6{>oW9_eUcsA| zpO!Uqn>E6lzN(qAzL+&VoV8t+y*Hdazn{H?;LV<8$ljI8J~PX?Fw2IA<veKSJhkMU z-sT{Y<X-dU{_F9(Tg*ml&BegT!Me-EY0Y{GOFvsoOJhjCk;<%3bGlo1kTsDsLdGU1 zVZQ(AKncquYkf`K`ub8&k_GZwb~lglE}xd9z{o%X1alxKDFA8}@B{PtNAmMI^BLUp zfvp7skOE=z0{#(4YWG5kyF7(!M@sX2dA<S>pcdJP1EW^q=cPh+^8$KEfw*)LHD95w zdx2JZu@tb_RJzdGy;w%8SY@Qx&b-)#q|hzB$ZDj74_4y5RN@LO^_4EQ;4AgeDz$}_ zhMJc~-4#1RisML1qen`e%**0|CGM2rWr^;k*%)OGT4lLQW%+ky#Uv1|)*`;ULUoLS zPu!)F2na-%4$6b!s9WNsTLNu^K$TpI+A+$zrAzL8of<L9JD2k1uAP*2^M=C9doU`D zRLa{)uzAzVe?pw(ck>6rq4^CJ^Gg*xBaXk_oi|4+M$9YM!z-EiD%&6xhY;wod*${> z<$1c(Dn`|YRuxRTYE8QGI=vEc2fYVYpN&)jWU7zCtFHK}pCHvQ?yJ#Bt1vyPu`{aR zuxfk{XC(gW52Hm*Bo)n&*K4iit0WcU=Czd2+THNli`H5=M#X#5+7|cnc3>S#L>(`* zj(@aH0A44ASuYH#7nQ010;=bR*8PUmcbM19!Rr+;8<ao|Dl!eK77gkV4Vusf?bOkR z@9+j)%*G#}Mgy5fBa23ph(<GLqs3^W6}-^~v&jzB<RH`JWYOdj(c}hg@)&LMf;ahK zHv55^17w<mESf_in!}*Y5u?pf@a7oImN-yLf=o-2MN3LVOB%E#W3(j;-jajang?nv zkZCQlXf26oErYf~M_Vi4tyP$9HK4XSnYIRtwx)=-7HC`BXj=!otqZfAvm4ajE7RU@ z(LNZ_J`8Oi9c}*wZ~u+iF$wCJmg$(a=$Mb_ScG;gk9MrUJJv8eH%L2QyZ}(%zC<Sj zJOCI0|ArNk?2D%VdH{d{0Am0k4FDJe01yBW00065K*j)28UQo~03iUX0DvkOplS?I zO#`To0aOtHUjV=t4DdAu_@)7T#{j+v00aPlfB_I=03;0n83RBNfLQ=w77Um*2F#`b zX2$@th<|ef5MThp7=TCvAjSZQe=q;m27>{{U_creF!t{o7z6-=z+jLu7?cJEje$W3 zuqpto3I?khgH_YOs$*bP1lSh<_637|jlsTYVBayYF9Hk!fFWQo#25@o14G8Z5CnJ@ z0G<VdXN|$LY2ev0@a!{n^Gw~OArNEF)Q#2pGj;P!-8@q_&(zH`b@NQ!JX1H%)Xg(> z^Gw}5Q#a4l%`<iLOx-+FH_z0~Gj;P!-8@q_&(zH`b@NQ!JX1H%)Xg(>^Gw}5Q#a4l z%`<iLOx-+FH_z0~Gj;P!-8@q_&(zH`b@NQ!JX1H%)Xg(>^Gw}5Q#a4l%`<iLOx-+F zH_z0~Gj;P!-8@q_&(zH`b@NQ!JX1ISA5u5U72h6!m;X?dNSJitOa1o9LmV{!8_UBU z*=Sm{OLKT#x+UE}#r;3zX8iE~AUFRpZm#|txq18#a&z>5AvcI<>!(`i3u@b`2bO>F zUXSApFV?CGASl~cpr+Qt;U1<D`}LJGP^ea5Y0u20ctt!~|CY${mTSc=fn{yDMA#-{ z6N!zl2Ge1qS$Qicp}4#Kh&2?5ezJ5@Zw%EUvM}|u8p5(zs07M7p?A?TjRjU{m%^nZ z&7;y8vRiF*<ROpU$3zYkkN;D+d5Mzo-@*;@{}67D?EXu*`E$B2Zk5Y!0dP5O*Reu~ z9}u3iP!%u)OCQY7(ckNAqy2B;#`K+u*_TKNo(Z%5jNP_0<CXQ1>_b)T-6^4HIW<4z zw2~>Aw){QnKi<ZyRFEm76`JjQG=+17&wpg<$=asO_P3U`4WpvepFzg)jH{6uJtRNL zx$N|;q7@i+4XpGV`)}Tc_aATLZ}STC)xftJ!Yb&svHi~_^W`Oz|Ke?egBv^98OUw& zq$NpXY&e=uYLy30N1#`=5Sr_g9c56c2#n6d{!6fZ<dSKxbww}ibWNP8+uGqn%6Xr? zd4Hw(kbLle+cx^O?Eh?=xBqM#Mg||tCu6%ll!~+-Q0UcJEzAPP;A98}%CLsDCew2g z77$${KDN+0@j?8I{y+wTA>4E}JI>G)q&h`irhVy(jY?3%l-b3<_%^}IFVkYvDCej` zY`ijTUB;ytd#Kc-&;mtE+TDveXD8X8Y(y@VlkrYCLXZdN993zKAOC@EoNLa-Pf|L^ zJ|KUoKe1@OsPdz!-{OLoKb;=cf>KIBv&L4PcxNUNjx_v7m^o&EbpYE~{dKhEW%9m? zV+9_6V5_tu;WYi_xcMAxPoA(}={2=VlaU_gm2F93<dWURsw2T~g^4Lg;bj)QlzMB2 z103yg$pCQg4y$GYXZAS#V0!&TYfzj1zTnHxmgXWhKHP&^_1{BaF6!)A@f>I#h?5Kv z7O^IlmUz1#Fm7aw;8Fj}FDfkUS1f%fr+D+gpOA)(aY(N@Cp5d3)uyb<JY<p&1G)Ev z64TsjFtL_7faG6zsHq6PL6rx$t7gds=pLxea=0c^feflH!-3npHb&R2LrMP8dPa|P zZC}yKBOzM;9@CQS+P<dJ<s+f1P{<p;Ha5k33m1e%RCF0dfQzI=FUHIewyFQ?l6^w( zja*6@6&*GWp_4IpW#ydn+W5_<v+IX{P*s{8A5wST)oJ;WqY^R{XBV2{!uBEOyg~d_ zcB`__o7F(Os+#OHd0_ALCs#g}v%$H&_H-BL8PQOa8{cE5T50<wbEsH7qHM8}6;gZR zTWTBi&kyovhpbVNEYmgNK^3OqX47ox$WDLp-1}j6JM4{f1n`n$rkA>Q(?GjM!NXu= z_W5LPn2}qYcH>uSG<L+XFFE5{ay>i$NzUdztoTj|#pSNM1z-&GA#{uNhq(&X*|gVE zu-JvmSm=z}PH2Ul8go?o+vd*m`m>1kAXQVE*l9?x0CLHSEPB?WUFO{Ra12VPXdQA9 z)<klL6Fcw^O^$XJIT<Nydg^s3jh3H7ZhsDX<iZ;qLKw-XYwaDt@7tW~df==!&5SAK zk#o|)BJEvwj0+G*A)UuaIZ*LagJPF`;{1g>Y6p<Ii6!H*&jgX9H^l?5Ebu}S{*Qh$ zle0VXPrng-oH6N`RuPzwpqq2?awF-UmwEh$-%Q8+FZS-~yAJT*_k9{WY0@~28qC;@ zZM!iV%-CscvoU6D8;xz7jcr?V_qWGhW1Ne%&l&6XjQkJJ#pn56ykA9&DqeG~rn3P> z^XhLaRc{`U-JM12EQErnV_u6@?SJ#$7EIe$lTA0vx;LSOmgBu#2MWpayU`iEcUbxH zIlXs9I(F6h_w?U)Oy74cJN6v^fj9hzF7Nw}`}}5wW|<wPx%{6C`A@1kPC^Qgd%aIa z-%kd;PaP@GZ+<!{ADlnDJ0$_n9X%L=Nz}F>oUN#?UotOocDxb2Z(gW2CQWav4sJ!- zefWJmzqh+(zTIJVc&vLKQ;R?l^831Xdd3Od7j?QJ76<+TlU|bswtzcdUvj=pbiN&I zk#sP~o^=W?(Fh8b!O`QloBfBn(YQ2dH$%puae}ue=?}p|q4|qr4dVYz#4ddD$gDLK zODS|70Bf9;8i=FMP|jILDg^Ojw?Eg+7))vQk{~wQcxpP8BbIljO_>0g$`{HYidvZi zs1-`y)dbeWTdG&-cL!tfB%O9h@s1X%wI)?)u$lcGNaVpe)r4}o+Mgf2r;8~Vd1uhY zb^;mn_<wdp)?u;#IS~Do2X;(@e0w+mi?&jS%W-#Lbnf(~b%|A?CxnZ!%q5$aFa0iI zi{!rf#(XG@ah9Q-fO!<x!w(MpeBWrdGk8X%PV{;fzBic@J?K>?4(dH7L@C7vd2QB4 zu5}t6z<1<}T<kO^<5am*w-*K^T0ryG8*M!bo{S3Udzp;hz6|rA3FaC^Q2JKp;=xmy z7!HvOyavw{Gd(A`qgTJ|2QZ4fk@a2hm<b!vw|rid{@sT;N`~5xwdNnuj}s6t$~G&D z6j?W_7#~^ROVrC;H|$G}Sl1IMS}uw2*gDPBFAPN{G-MSKIXHUDrAW1?hY1hBW8=c8 z{z^Ujd4$+ryS92RX&P~W-BCGK?)xOoxg73JI(T;C&kTA6&kdmdq6cX!O>xTPGQe(1 zn6+F%sQ|-Df%m;0bE<`J{sgtyPea<Mx&ZMsK@b4}WrXwrd6l{(Rww=<cp1=+s(eGK z8{G<qv{Ivn_iBw7<M<^OyQnASdBR{2_9iV(6~s%|LnML{$v=B(M91HMSZ1{%Bo=qU zd=pq6Q)9}Gd^$Fix(oO#KG=6UI)2=YK;?D3ERp2}TiVDC%bruCIo^}#Ecuq*&%DAI z@r9a=E5fUCA~5eI@#h}4cgofgY*~onC!wz+EuBqjwyRN#-{`(|*J3&t3Cu@L8k09; z4Ywdh8%jk<b74;!`U$t&Qq$TS7Oz9^ser{n1muyIh6pmwc(rkhWlypZ(JjlQNumjl zoIfk{Ci=>w98*qsZlHVejPJ(nH`MDYrc4SxVU^G4aXEy~MGR)#w@3=DA=kKTKnnL{ z`_E~w`k&OW=%pj)N(2)acIDXPkyK5ul0wyaY<R!ODc6c8B3PGI1w`Q9wx<$gaN)>h z-7ML!-McDG?DJ#PL24F7I(OkXUWgAsa44t}6zHIRFY-2%+PLS$Vh1R*u50QgB09+h z%d+%_ehXF=L9;yzlGPG~6bJ&f$K?*Q-?g>z3ouO2CtIG}|MZL~IB{B38aDex2XH$( z*_$&i;1NraGEorTz+WuqE#T-66$i78N5q|$?%}#?P^&_8eNx0tAnu2j)`h84$QSOX zj}nrRO~4GB8H4M*J2TRtiIjQPNg<o-zZ5l{o-@qf7l`VXcQ!W4SSK2yBYzX~Dg2yc zs{F0A;Y<SfYLTQ|3ngZ8b|HA93=0uT8t~J}*gX_a8XAeBI0~WCYRvHOC`1D<`?MWB zld+M;`h$3FwZiYoSpCnR@)|M8#7P!C(2Jz~i=o3rO_4t(PB1v<oePSSjK07>Lgx*2 z48s`<Z?9cJBxk3I2H<{z52rL#L^mlH^pS$bJ0EhXAp?q1a}pSn{rWPDR%jmlt6YZO znu}0pzn0c!m*OZ=J^#n=5g%x9?V3r?ZqWpCNrLF{`mPQh&(-*NSgjKp^C*t&Pa1{9 z<)3?xsG?|4P6$k#ONLg($?bxgNKB~AlSA-%<eHgu_V$)k=e4!brEfE|9lHnoufvm^ z@0grk&GIf5$r2HA1BTJ$^CDPAjHlxjJR(<l9vCZMRlUQNw@9~*54+=t0pZL$G)GrM zMV}$)pdy$^2R<F<ARG3PXfD<o*9N-PgivC9Po%}TRyNPD^8THzgK)@rq@kKls8(Wa z71qRSfu0jg0}>uHI+Mi(U84_BPirfSeAXiHUaR0=Rt<pGFR4jypcmfn{seI?)@n8c zWHLOAle7PahGN)BN<|ujMLx|-;>#u4wvrzTriC{Yo(GmhB<94|ev3PS2}=VY<*B|E zu{{_70tLDCEZQC@MBFfS+gS}a5^nS27ba5`@Z&sip;18Fz8M{Lr4(>xfY&)>5Fs?R zlJeowzzR!=G+%@xVOerrI+o}2H~KY;xG4(ixq!fFbrLu+QtLgmoVf90_!pWwfrY_D zRj<^U?>N-IhbU3XAae|Co!P|i=2|$nzf3H_;9iK8Rl{pr*++1%a?^Zoc8%4yaJik8 z7$~)d^2l|GbZgvTre!H9LH6o!OG&jTsvg4M{v;!vWlyi5_^DT&w#K5C?C8NA#sMpj zw@hAO<UmVE)5rk^OeX<Byig7E1F2sRZj0*Oypd=QV2nLHCTG1=?_x=-W`3|%6pK?G zJv{e=fPL&(t|nS-{Y#T1rrafctdenrZ4^3<Dz+)yFa<(v^yGFWWT)5!=Xp)^=nM`t z(!Ks-8WtUGVAhBRjmQl<CIWq%aWZLDboow-f$t2tnqC7-)89P9%IAr(Lk3@_f$>N@ zk<v$oxmo#=-)=~bjj<-Ponh^Dg8FZxggeW{-EDL313N9aDwP3^+)<`<^wjFpl5<Na z#x|*^Uv`%tOPb22il>a2=LMy$MYtU<Y3@tHU`KeV6HOWc$<m~nbAdq=rFKT+qndS} zYwG1AURgBH!OvP4x%u>)g;qa^g#9m<2u}4=uv?C5A(JFWx4&2rXmv{8M3B@v6+|2@ zkj87NudI*nvJ+F2riYdD60)fm>1ek7AmCVQwsP^6IX|zw6+;m;dm7b6g$5Oo?lUF3 zjhYZSX3Vzju}wBlXuk)foxJXgUp`Ig+XSY8Ar3^~AZINzZ<3MPDdeM{=YCeg7WWb! z%U^I$)S*IW*}fgK;BYTh{C57vrh8(Q+%o#$2gN1}iQ-t*x^^P}(6*s_;rigQ@oCbf z`y%7ghq!GEiP*Jg){B^9s&)G_vD=Ws`(=WH=N_|<TMtL(d30y%1`@IRRCLEhE+gNO zK=kuu7IfyFn*z9b1P{q$c{1}J`m5X7udw?Jp08*62X7aC-p-pZIuD#w{Ff2YuQ?F| zdp&S1*IC4G+dKkK9m)K+QB|*%7f`Uwm+ueV#NJoYS+9E>;HT*<@2eZ~SK7ypmv%HT z?oihIMWfH_g#h?<kr@28*a?2R07EOjdk4J2UqW=FeY#PAz*GG6R`m&!2@+@OQ+srf z9pj`Z6nUk;QhqLtJPd7lPp;@C-*<GHY(r{pJ1C_XLBk$*vRq0)u7D1ijVKv~MGQHc z4UOO>m9QOkp+B{6b)q*DOjryI0t}p*A^GoWN4<+E=hLiA^aYy>NK0$B%MiB5L;X-_ zxxnIpA#yN?CO~qCyuSlIj5k2>Ik-x3WZK;flrCBBZPuqq!?B6J;d{V35oF;R*>zeT zbZUiIqDb|7PtyQNX`oE8dQ><#(gu02`<)VjXIBAVteP`w8Uub?ltznbM3JR%2cYzq z<_gmfh|!H$+*X<(Un98PtHK!=kkI3}S&opQh`l@x3B^p;17t4DXZ~)Xt2~YpAmQjV z&4Lfr?R@q9wlI;rB9s?^Br{}{BqcR;SeiYJ(`~GhKZZ;FtqI$5&1{Ik2%d1w8XW-; zqG;d4DaS`-FVb@uoqEvCZ~vK#HuBb}5kAirep-Rj#F{QBpkC(l-)VFxdYvBlP7E8L z`&e+1?A4|jbFlpH!PlvpTqg8As<G<5fb^*7{HQ=rnr{kFK5UiF*wj(jk_Lx%Ka!^F z0zb=f%IjK1Y>=3kRE~J`1>q%{)@s4_z>dynkdf)4po66d)k4v1?e|y|BPk`6X2d1h z1~(xJt;>TP2$9naPOMUcGTK4|?j?Z}Lz&0lhL}!zocanYFEz6<s7a5_t@4VH533ex z`B5pc{ge@}tjJ1Y46SxDA48U2={`48O|e*0PY&=79ZIH9)sY367bBtEL5DyDNK{+k z>tC<@Kr!N_bO|=|doInH!(cA8rf#~Tx{?KKg|K;@YDmV0=9dY(j{ELMv2I(o_|kxt zn2a$fLZ_v7)UwU-diDjH5C!|nM}aETrqncvV$y=w0T|aVOBC!$6iU$B15?%vCKaS# zXSmns6^eUh9?6xVQ9N@gi%25tkZavu_olo*Tl9%qNLtn2Qh7WV&dpKaQy-N6pi~qG z2EIe**w9Du%Gni)@d*HU$OD;dDcPhZsM3x}17@%zYO{cS8B3H&_tvHSl(MCzf!>Jy z04X2D!&0kjlnV+ZltMqNn;1fB4{ouqMKsiFtkTNT`fVp$I>Y=fgI2X-EYFr`HI4v} zFW#rukjY3cW05i5gZ!FI-%*r3a)Erm$^MR93aIYKRv(yh77D)vP?V2{VKad3phZ?! zXm)7G!&fN7p@ZDyM~3NS7{{+RZmYZe6Pmp1y<{CH$m*Mq9Ua7Lj9q1Lu#9ZBqjD%s zjnR+dU?u%JB5`T+q-<D}ZsV1{pU6H)NU%vb2!0`;m0j5tcc43BDXfveJzQ<Em!B_^ zp9~SQRTBS$=`0xwtc~Sl1S&x1hf1EA0e^Wg<t_2j`r0H47*NPS-OBK(wM^x6G43nt zi0{yeQ|AK}I0ifNi;Ide%r1L*x1oe05Y=Kwgus_Von%(>w?@cDCN$Ga8npi?q87WE z);`k~`CxrWaSeKEHgRd&nX5Ty7G`xRWKxyYq5Vbgd@Xx=i5W2s6s&x0gb`I0iJx** z@|Mwt<R>ON4jU6Ne@~f)-a|E~nQ6~veZPxS_h16r#Bx`q@KVh*yR9|a^Fz|>m{^2; z@?qPd$t|D(pi*|jjp;eM0ofN3Rk3)95|y>4d2JYGVaA4Oi~O|J&;93v9gug-5Q&;5 z-@}+H^6w?3g9DY^s04ZBeO8pV*+Lz1>2OD7>wP6Wx6M~X=S<?2bI`F7rS4RBzW*Ww zC*9XORv83r;?hXiLiOYC(Yg&ah${)wE(BcLOO4Y4p-f^@&1UGnQP1A}g~cH?mTFY4 zAhsWLaUT*!sVy%@s;f265?2#S3<pTCn=xK?4T#mEj>Mdo5jxKGQ(AI1_TuR_5Q4W6 zX`_r^=N$x%h{Z?h?~Sk;Ogr$yN*#Kc^2b}461V0Me1FR=-}fpYecKEL<nKE>9Xn$y zsmr%E-v90=JSentkqHe9=gS#2SFC9+j`$^0s(IL(3mAd_$ttrpEQ_s<^z=hVdO;CY zxM+k%`7mI!CC^Sp&OHRuIPpl5K$=^@g{{uTNjBN+A%{Z-K98thX>3}8CNhr_9D?dc zP8DM6hq=RKlpvXH&62vSGc)7+B}MbDf`=Hs(^t+tiiv#w$fQ}!eSE-%|J?dWnc;-R zKT%q3)c#A<6b+R6oLPZNHw~X?g`~+WExokdvWPZ3ETC`HBhpN#w;BgTT`i7cm*1F6 z7{K&IV+d~On*uryAcvO4J1NQk#!L!TnmA2mIG$lR{>|{>eDPFX^%Qe{)^q;oje6>B za0b78Xd};-z;IeSxj!cuTPGjuc7B$L7F%I+ntC4BU=u@u7cauKkB@dSBZx6Yf-)tD zp}L%)q?xD*x|HWiRBukavq}27oOFVkY^j-~-<+%qN;2X~u?HnS2qCk96|PwnK=I4h zDNi7*$(!HJpyXvxMRRHmD3!hHW`E+hTcm$CS9-rD=V22dtoNmbF~cbPWuZA^4V2NT zkg<dJy40LG{giq1lsUhgdGM66wwwia%dqvOx^K?dTF%<z$~n-?`P7ng^OS?4m35_= z^W>I2f04_~oyV?~=jIQ=@th~boj+NXC)ScLx02ufly%)_Ds}F$At|nt8fD-fYSe;l ziGOb_>g4mi`Fgid*Q|hasYo~UXIg2Iky25Ft63UNQAktzlevGGbK#k4@z!85(pYIx zYT=+;iL#bq=(A-<s%4K>dFx8qXlk-AzI?O7KQ6CyKDAWlrrc2_tmN!V$-&a#bzjL& zQ%Pfs|6Ys6pX6Xjp5RsPW>_9VaLaGR7r(maQp_}s0d7mwziVXLh7<k;b!u7iDs@Im zRYBO5SMC)jsS?a-*)uIQ^DA{=#+XW!ml_X~+AY%>@MwcaL9Gu$SrMk$FONng?Q|0! zArXT5Nw`MGw2HyyKUBegE=0vuwQCaHg|b?m^8RWoXp<%Wl@Dz#uKFt<llIeqU{a&C zDgLA}BD{@NyJ@nh)tb6Bv9tvzqCEn!LkYDV$GKH)s0~crCect&kkGmHr};!u`(mbJ zS+rwoq0$Yx`y{19PNE&kv*jkOYq77}FQ|uBr)P1u)$MQ1DnSb#p%a6483%8=i72cF zS5nARk`GtEi(CIMu0-9{<e;a1H&Fji&jAzO<cISFx9x;q=_!7i{q}@I)@=jkyaQpc zL-wnKXO&ms&HXvA0|lN*5k-WFWxOLLyrUI5qcxtR?QNquo=F~r7nPc6Ib3Ozt7Caj z^fta@>Wp_<7vp=cm$GORXPy%$gp**@o(L9&=jZ=WH?7;fi8RR1Px=3cy7`*FHJL}i zH$&kyL;aRV+&;ssn-B9})Xo1@x-tBpQ#b$b(#`nW>NMZlyw}=t``X&u+7{os%%0c! zQTzJY+xivX#+}#3Q~So-+r}sUO&IS@gpN&=_s!4zTUg#(cpY0`-?vElw<)~0sXMmm z-?y3hci6pmxH@+D-gkufcg4JS!BQQ&a__rJ{CjHNdzu}4y6<~G`S(q{_su)@t>5<v zGXKNuIA{Kc*>UB^^zAqZ@IDOcIE>9aOng5~UO&v>Kl%sVWOW?ncpn#Z9M@zXH@qJ= zt{=DapEUEIc6OX}d!P1qoK9z+&cB~7uAi>)pDpvBZ*-h(d7tlfod1Jv{y8@f>*sGB zr#}Dgpn8RN9hZJ$-@b?nnIV&kCSBp^Ul9;riwIxm6amOKuBnJ`X!VU*vu-%RSL_>C zj2r)<ZiKRKsXK24d~Ovw?=-=8a>V!Q0{7-V_tyG%_5ydm1a4i3@BUFYUILH0o%fE! zk0IcD5Ab7z{-cS{6F5=eDUJ9!O#eA{<1ugJnWs}v^p76?k@6qnE9&8w-cD{#0lgug z*Kz&V*?+r#<Mprp>wM?yR@U1d_;rW)?F9UGmi2!1zpa~EcSr;p+R)3*u0RBo?_VAj zbA&>WXvNz!Vz)&@@wjXfhN{0wMvyUkv*BGE4=2)S7kWy~n8>E!o4eO@)$WgFaC@xp zKFyj=WQ&I2i@8-3u@&5<&;$-KAJ6`yZj{?C*l8Ckv|1hBj@jv!Y79r?_$<HEuQXWv zt@S$j&am3-a5B?w$#J1sr1vDP!#!^+)J22<uE1HkH261ciRDjSnRkbys0At`pK5`_ zATC>?Vq7P%@pKYj8s!?^ooRQeLY?<l{Cl(I0`0$r8Tb#!OKqkPl@)*QE>?S8UieYl zT#fc}L2#XCyxb1kvr$x441_#RXOpcmov4}at|!~0@d8<1p6)j%)3)m1OfSy|@2{-v zp2YUvucdc4$=q5(>M)#BzOaz41_lW3_1U5*h@l37h|)tOL8w~rTY>mLnzn+z0*8Kv z5{1KWhf*em8v5auK9WX|x44o;Qe#N&1hA}Y?1XduY1)b48+gp~eX^z?FnI7QoKl`5 zp++~5#y%uBl%!G17XCqoUBIHkKwTiHP7}YEq~?A^kp#4mGD+2n3!_Xi4PV|%wGIYR zCOdfdNl_&`YiSmydH1-PX1U4Z9j4nZaP4Q9Lc#*Fg5Sf;(p`y4O>^UgwMz2+m8FaG z6dg(niz1})%yY5~SE$p9ShPxuy=zlTO7e2?%E|(QOOMN=_Md4=5|cD7GeYS_(AfHD zxQv6}xlHtZhKPbU>LSFnv+Bo}O|5Geg(IvR)|HWL8n+x|&g-``wa@?T7nWJKE_b}p zx13Cr*|eVzj54(C%y?XM+#l0kbUt1q*>yl6o!WMOqAdsMFVN(p)l5&-fo0QtX}HEv z(g2vuY+pPGqgcK;wnZ{=suD5}lZCuq4Lu`6!ST^C?${3yKqZY~=S;aDC(885Dh#BK zoidMLjndUJahWwo@{bV8l(S$8oH-4rO3I-vs0!#>&GqW={TikMBa~0EwR*Bmn^n<W zFN@c$UH_FFthipaS*-Z8>bA4yJncD~QM=|1*TJ#nRYlLa9aQAiv>pZaYTWW=<>y+B zRq<}#3oz<v-VYaGaN7^#(R(_Kaj|hfEM`3CI&ynC`-jY^@V)SN-LFodq(Xahtew)0 zw@$*yx5E>rOgcgVlq6WAakJsUg~_)}kRdEX7wIk2(w2NYbG|AU;I{>g2VKuOIi%U3 zj7WDb1>Cf9RPKYU<O%otiY)%l!@G-rANJA%G=b;4NpI-gEC{sX&QJJEe(=a7P{fB_ z@Q`-?`FX2jocn-qb0*`q8-kn#Q$E6cQe;kCttm-Bu%fXXE(dM^dD1{AF}(3-b2F{} z;skaxCjUTlUsy)h;z(n=PblPV_<XAeBFv#oo?TjfD18utZhZzAVpc0mip9bvmymFV zF@3lRHSi>y)}JkyexQc14^X|6xEM<Q{F}Z|E4E33Y`EKxsSl`$O+<k+Q_Q8z?iOcG zsTKs6WkaJ#3B8g!#D-fLlYXTZ5a)M@iw(>N(?|`=Sk(F=f=`X1FhNrC-Wahs`Py^A zd(5oZLpJ2CYoH`QUiQ-+ml51x+|BCfGX&-@&&6V>2Gjv0g-n*Xg!+89HKClRMz}@> z>-0ukqwy5IZf9LWY%!XA#WiOsbAKgR4mn2)bd^Aq+5=c3HPMn|zHU13VmH+s%n9u^ zX*XS;7<j(df{yaidb>VxTgO5fnGYLflP++WP)9QR=B74TVI-1=4Tst|_=VKx14!Ye z!}RKNbMno^sg9*0g}>zI)fY=hxKH;6Av1q=)EY8)D6PjDRac9Po1HLk#|;!V$F$s_ zbk(Y56gK)SfC8woF=IASQ~=(_1mfDDhdcJv2F}hwgOQpqMVTGOrTZa`2oGbCef-so zcnc(M%2NZvD89({t7wg^s4{Q&=Oq1H0wn+!S(pasat5?4{emfKi=>o-0^ast#Knj5 zs26O%8BuIw|J4|4sIZAqE8n9e;B8_5li*NxYW(%@@}Tv7UCw;DF){7RY|<Z>(gG_B z#t5z19_NNgYipn;kM`mSc701fy{)bG-&IJC+6p7O6uPqRI_qB+F6}D05KuBvLU~!) z8Ye7;nrj6@0ZG%F{b=N$Su6O$O8QlThuQ2!<>qdp=b`&Q3w1}-ugH_ErP0-lq}3fP z*S6@l+2EcFj>gej<F!flDocqd8e*g22h7jRS%6C^j>U{TZUF~nn@PyUu%F?whf=Ox z#c9O&N((*WR6{jk3?uGJOxaMbk~Pu|Wipofb6BoIwaX17zS0bQ54JCIZ`&b`SQ=y} za)^m|-Ts!mG!(PV9Ir&TOU}VHLi>XyumITvXO_cKSy*`?>0z%jHgZ&ErY6Z>auAWR z!fif+F`(J5L5yy^T%n$JHdM0)zBh-6GOhZCr5yG~S|#ReR&;{xXGeLB?BpFpz1sm{ z@OQY|@{y(fnOssdhV#=gm~hL5Vs$h$%S-dYaZ<i;(*+Eg-Uuy3$4u&^I>9{K7JuWp zQegTHjyjiyOyO*TTcWX^$kL)B?0u!r>IwKOj>phorG0H$o0aZ~#!{2GeZBhXDTct` z6)oU>eJr1qiHr6MIjl>Az1In;kCln59>&c1>M?ITw{!XrY4#GpkNqH_FbvFK3{5#! zu4KG`d|)Yd|7Czm1k;Q<At~zjt$HTp@s0aijFgF2X2_7AQJh_kh<UNd;`L0KJtSL5 zV&CU{xevGX`5)0bn$79OkS7&hNYRtJQ5m*l=b*mgk=S0sVqpB}_1R`Cg5y`rBVId{ zG;Ntp%)BiSdD~VFai2}oyDQdyJJO!yUTmnmEmO!iHXU$Z?)>ds7m#uKQ=)Zoe&W8V z)9chQ%YCiY+qt!s@50m8V`K20&E*E{nOMb-J-f=+>Mn9LHl1?8U%Kx)#KUiS3+Pji zZc&qGH0p?Q@jS3TVDlI3cea*c7~rsNofPnvyLqeKd0=K4#jKO_Ex<kaxpBlw+kcnu z<Fz0>X&zp(UQl*X8}t6G{*6>$VA!<dCb{bMfJfkY)Ykj1K*8%MUi@YDfdBU2{yg!~ zf8Bxu-w*qEUz&oSPX;@ll7qY-J3HTYvcNC13f|8f`jXIlPsyWJnwJX>z(TjE0yk+K zc4<=<b95HmLD#(R&UGBF;#7X&aIPtEu3A09<7~FZ>VAG|%x@2VcmP{mfS((st=jf4 zUpN=<WIxM6f5t}_W<Y?0gbSG6EWlkofWFCv8xX+T<j>I*zzHA73J4UC43y#wWaD%$ zB3IN2b}&uyg(>pKp`xJDaQ91eyZTP~N5oMZ-ZpTMt;`q*zy%uko0^*W>fmaA>&4Y8 z4${W*S3mRtz^j|4m}xZy8-?QbiMmls8bQMw`!^Y@I~zl5m;{=I0+UQa0ihe%p<DN% zEZ@T<u|uO=O~TAVgIvR6Ic+izjUz(CvNXcdheER@!y<4^GBm>CIfLK;LEiAe#vDOz z;vwP>;h3Sm2`;{M$^NK-AjJni=g^4m&;UjazfSl_PJk`cLwH|P<RBnwRx)bdENU?{ zYPmS-?@-j*VblivZ}66eUt_3-(U5DrT2RH0$N}7l<IvwDu58DT7A?uD=f(bi4u98j z2GxaVFi=Kc2CE)61(^;xBH)IF28GzeM<P&%nBxW`z{jG3+&(|WU`WMcn#ba4#u9|Z z61v3_m&AUhjw3mWC6$W%W*$ea8AlryN9PvDSQ1B19nW+W$NUsKuw>E+i0J0{r4RoL zAtiFZDF)s(a%w2Px;SERNe9t9>RU>bF7|IF>O>W(L^bn7^{_<El0@Hw1g#W*Ag7<= zQ$%CaZ{4Ga=|kT~Nk3k$Xt8C7S3s00NOiyW_ph)7#iwXdw*(EdcrVR(AFg<BycA!l z_yF^ips*BwPzpG(BqeJ2pP`%bn=9@N*N>$*(rh^iFEq#<!CxgLSyw93jw?d4B)*%| z*Ni%{9X?X9#A#15x<b=mxH+*-Dy_jhtuZXE`6%k!VQOh}(vl?d03cZlBYjaLot-m% zb}8|1Q~JPi`glp&G<C+TRK~n{#$Q)ZsvGdXjGc_tqYMyw=6VV8`f|n^LguDaX5S@y z!*0gaQRW6-=33Z4`X*xpBJ=hia)Xe0FO|7Uop~#Te72mq$Cb75#16fZb;gwq?VgR0 zn*D;8jii-%T$1^&nRSbhjo*@qdz^Vnodq49jYpI9xh0DdKMUZV^~RNX4ay~d&c)}> z0yAi3Gp*!)8_8ua&Ep)&qdLx`;m)I=$>WgD6Sl|~{RiEI=gVs4%eUkUJ?AUq7f5gy z{Lm_pUdhvFDbPa9*Lg0`YspnT&Jte9JfhB$l+J-pb$`Be&2W+X1BGHs!}>DiYJXg4 z(}L#s&)Bh(^C?BkI4JadE^@{%{^Ka?@$71gU+k_`96?hQF;aBHUgYLp<la&oRazWt zQ5>=2=ICCM{9Kp~=WcINl*wHj$E|O(;_9hY60=g`Z&B=8TAU<Z>d0ME<z8HxS_Yyi zYmzSMa4$>KD$5%w>$WHx#4j06Eo~nu4?iv+SScT(shE<kXyvXL)vD+!tyr?CU|V}G z>nknW!mn5#spz+;+@>iX39sCBuQ*4n?A5BgT&cW%uDr*uDs3qZe=aFPERN!+NCB5t zRZ&%k;=5H9xmOicBb8O>CRZaP)gbYdy!g7qBGu$B7G*xTLvI!0M$~*ps{O5AgG_)D zmRf^e=ALy>gdI_R(@;zGw>EUejo8D3WwaLGvW_XD&WpPasjQZ-tXjaMj(xOFB+Z=x zsh(N8o?E7#QKn8JtxmzCROzHn(z0HqwO*OFUKXiAQ@cTxp#H~bgT_g{{z=16q(9Og zrOFWv)}y6x1hqnCXpF5j3<QltmW}phjlUmiTxIG#%Kngy{&9b)MjrhWfb@T%ZU|~a zN1MDx8&M+uJL)Fw|I51hA5%B99Xm1|dzKvs5gkWm9Veq5XD1yONS#--oi{R_cb1(G z5uHzEoiC%EZzr8#q^?hNT~M-JFjie~kzEMoT}WeHD5qU$$lagmy4f*hyRodgaU#3% z%DV~1y1$-w6C?MK()E0k?V+&hp^EIGF7Kfo>!CmGVMOj_rt4+p?fqbOSi!8UU?3|P z#0nl`1^?rI{^>%jKnNfZ0tAE@`=|c^X(52LtUy{IkQM}_9Rt#Wfoc#yHCCV+5U2(M zs*M5Fz(8LJpf4-X7YOtP0e#1SzF=S}1hAA9SPBG|f`FxCz)~=99s)Se3Y-T5=Rv^v zG2lEH2!;THS%F|65DWr>$AI8}($GKHh!q3@1VMm65M%$~ArLJDh?W&Z3k1=EK(u2Z zS};fr0;I+YQUik2Kp?d-kQx}|3jy+F1^EI&z95kA7|0h4Dun=*vVuy1pi&U1bPQAq z2F*i&=2=1WK+rr0G(QHK2ZO*6An*sX^TF%{kH2tyFgu+TAI#1Nv-831d@ws7%+3e1 z^TF(VFgqX2&Ihye!R&l6J0Hx>2eb3R?0hggAI#1Nv-831d@ws7%+3e1^TF(VFgqX2 z&Ihye!R&l6J0Hx>2eb3R?0hggAI#1Nv-831d@ws7%+3e1^TF(VFgqX2&Ihye!R&l6 zJ0Hx>2eb3R?0hggAI#1Nv-831d@ws7%+3e1^TF)=515_1|9>$%-<evE%|O_e(6kmA zm9)8fCEr+C(ymLOZ>-7Vp;Me|Sc=c#jf|<lgZZ=a=k>sf|IXN<tNUShYg1t&D$+B; zoN><7wg9LkV?egX12)Zm>YZY0oPt5PVaB;(F)l?sg(~lgWs_iKSEys(kvN|}GuE>Z z3TJMnu}a3TqL8SnIj^ps_~-4wlet(wO4~mrl_(mFVR>A&xHASjR95_{@G`9Yv1H%7 zUXrZ5+~b#iz?UHer7QG62(X$Ke$d&((iOpk8j|Xt6e65*%MeqjpTesbVI|tNXOncP zmkeQ(imsPRW|Pjkm5lE@16@5gJ83&OLL-Vtt{e)0D~V}s<}k`R7q7T+u8!P~N`p_0 zA8C5!D^tO_G^s4GRqnQ&(KP$8cZir!0QAXEJhc|azW`Rh0CZ65Aw85%>>4h=G;ABx z(|&12{L;v})ADK1?qt^)Y|xox*IoRjYwPb_U;pZ!^*vc%pCb={m1WVNiEFYv>zTgD z{b<(E3NpTO4*$GGnKmQNamc^eppoStfJ1&$SF#Q0&Fo`=5G;9Ro(Ya*S(<}8?myG~ z7yM&^^)70}w!q=JAhSFgU1e4jMd}Qe0po|>yO)Sm9}{0Nv^s>fC|fV=(~{Dj(Sc7G zILcWLB?v|&9yOo`HAV@%3;>FO{BuOIMH?<6B^*UYEyB#9_qP8rdA!S~uGzTCEYl_| zRKb(A{gi*?eVk=K9S?n{2TPxpR{|LI&Cj6)+4=;90b$4WNMmM=2XpKCX|#Aaz(7_K zxrlS#|EI&l&ur*>CGhevzi?9CQbzVt>Wo{FNB3aBV+#_#52J+w0D2LPC6LW}hJ7Cm zJ15|5Aeo&ST`qn-1U)?Qxe681MsM3GF4D}oKX#7PbnV+K(mDkDTy<8`k82IAP%?nU zMSwT;iQ1O+udGIGqsI(=C}zTDIu8VVWmXA+&hhbQHTU0J?$uWg{zL9$Hh%jLxpU&v z$nv$!vE%*R&FD(O(JEW(f~)hv0gWl+yyD&88Db8e4fl~CMkNi51H&u{>1_Z9XVa*+ z!I>Gd8>mv^<v?3=OzYlxDX>`c)>5OYUQT3sPG)IclUh*$t|+_cMH@Qg&8xzRKO@dF zqZEaL$X-VY^}{9alLbKGhYF$RWb!|Lf-r7{nhJ!rX)GSij7`&TO5SL?(JySFyZ2{C zy>JpllQbu|NNT*ca%n<_t4PGH>V0NC7Wc?nJT?|(P&hf+cCfP6eLkWWL6+t51q9&Q zDJzkjHJ(6W1qwTti$MCiLEAv)&vC^%W@Uhh<LXXJAMT-ExH}|x2;pwmAul^Ies%FM zfNAIlk4wtZUK_3-c9$$bE;UaW?&tYWM_5fj{65nkqe5T}9xN+i=Uovb(O%x&uA_!t zs8bRCY6!~Wu0N)5e7>I`b|D5X{1HhY`Y(EU6+c11LjVB6e@s2_1>c^6glqq18lV=Q zwB-Jm(nGb8WxDZC>Dl+%K;vJ3Y2S({+9dXN!x!4V`KR=lu18aCVZN_#@VOqpdG>Vg zg&gc0Ow<<X@evC4DhT7-QOdSm9_hY(HHKsCGvjaaavti1;^f2XGh@<e<NqQ|c-qS# z%g6KB0i)=JmEOY-4Fzo+LZ;}+KL+vq>8Tzq2gu)fs~~*qSa_r^@Y%i4%%=0+#pm9~ z$IL<CF~aB3!{;fw^GO>F<Ueo{r~1_*@CptnymNVdP27TmM4BqnLpCcU&;BGhr}9T( znZ;}L@JyvxF^d=i?Q`HtQI$-6&<)1v=%8?J2Tjrbcy-fsuCOy2cB&`39B~Eb%V88X zC=Mu>#$mrdr^z~3ogv@{i^ZK_rj#cU`>*0CVy;r85RtnKCyIhz`lC$w%|6lcN0mnR z`{N2$s7AH%c<$HMd#lts%c8jU)F0yu4FaLm+I}jUk<4+(WPy}1BywJ=<mYLFWGlQ_ zX!d~?Ar9+U5zi1oaSxX{zAA`VFp^_3V!i};57cof7tFqdtT_XPc;P92xQ+G)3tk># zkpwU97ufviuJ${Fu~ax6jN*3xm>sZ0vi$3V-tuCNKq8{CUHy4Lj#$}2yPm82?s#6b zbH|JO-RWQ}9HW4@+XGY{-dGjmilEu^-Hk2C>-q12!22tdAu)TBUoc4${;DZnL_&>O z&kb}SWfhbYw;-}f7v>OO@9R<^so3{nD!6!u6jKVXACF^s13zl1^9P`-56P$WQce54 z{A);fPKBrYiltHrl%<OE4K0SL;)Q1*043!t6y$y>)!FZqI)yzZEw8ns%r~<$V=U9F z4l+!$Y&V_Ei(l%-I5yH}W!RRXRieDSyI5rznqRAAncC+>K@e8lRYYFTJ$^)i3o60Y z38*qw%rQgNk|~72IgyCp?w7$ZkV%NKk}1%+niAavdqTbxVtT4_d9n}85|Xs>D}6=9 zaeedZ8TqejOKGWu3mTL-3H6;<B)Wxdz^s0z6_XpD$z^bU#rID0#Gv~g`1S<5Y=2Zl zt1dgFIJ++Y{2*~5Sh%vw>2As|hdNSwXN;*oleW;QA`TG*BW1JQZb`f(cgH?qYI;Zp zE9yj264R2~SCG5cLkI?cy3>UAg~IqNW~5kN4KLQO<!I1l6hwpZGuPi_dCAa(C}}^{ z9$PxD<oZQ<9CkT!c7ins^?8gZ3bsBQ+z0J0TjT-zMYga2+fjj}4>MjqzjN$j-2V~A zx6p4y+i4Bg4t=LvA~qGX2xiG)KutZ*=69<!c}D%qx!xW4ytR<6&^>9{VV=Tl&10TE z`O;|^#__5b%Y{%Dp}$p8TMC@Eux!G*=-lR4>7_o_4=V6ncgKI#!8Aj!K-h9bQx=aT z2qi7%&A+8ywx#vZaw~3eA;x&ztckaf-geo*v&@$0yfN)<rfW1koE2MH<>;rc(<vlg zjnmAYkK&)~>U(|aEQ89>dMi+h#{X5FTq939^^@$7#GMUU5YOaXg2-*<cOM5>*VGlt z6LB56n4^SAQu&}3`w;Smi{2|*>o`99PfTzQgC>$0M!Jp=4RlL^^@Q6bx4OZCN|hM^ z9zL4@?HJxg_}rXY02CU$bgvX0lwQPiz^tL)=F|#?zNh~Jy)%Cm44;@np~M4eyj=qU z2mQ{(XtB_nnF`I(i|SnIu8TpKT-#XrWnV&f({UXk@4Iley%e5$Jo@~CdJhY;Jf53* zMu3ev5ni7`G^b!1vUflZ)qpi-11%yX+;RdWWgH;F*f=qvh@bHXQ-qcK+|+6jdtN_n zlxeE^)RIOwqZE^K5K?j--Jmcdp0$0V<Hq8TMeeVa*2FAK+kzPWTvB|>z<NB%Zy7_Q zIV8#{A**m05#|MFOAJB3l)vFFCRE6TA8IXH5FfKFa(!01aV&lz+`~8R$?5)V_A8vs zXJmoG)ZyI!Qsj%zp*^7Rlo2-Yr#d2D;@HnSFuCv09F-#BlY$|PO16lwGJag}xTSct zd=?=lSEIPt3H6zR1-=pbS$?xqct|{x&OqxAO?lJdh(Kwh1ty!O7!wFz+@Di@xmIBc z-Lj?GZ6efF*FRJYzN!=nkOCFz>N1#1uLQ)r0Co3{(pO(X?Fq%w_ecN?D%>}k%70Tm zQWgtt>7l$rEcF+KC4~`adKE*%sUT<)!f=_aVc@=*xA`I#2zOYeKu4VjL*g&Ctz%Im z-LC8^bBNEuBzak`l;RF9vWJvTYKd8IP*5~71fgP8YhsqQLN2m@K@8NKL@ev*5hsCY zb0T3GLgKSy3j2bOtn8_#{Mm~tq5a<J513mw*D{e4%LIgOajIQF3*{)al~iK&Bpix^ zmOsBE9p@-zxpG_lNWpntq7d`EtlvpKueP9s2bT>egM>|e;Z6;^Ll%nW6ZZE60=?+C zU|3;ITl)dhNeEcWQ1_*Pk(vLdMRYu#vLU?c^$Wc2P(`6C0S@IauNq#u-A!BtIE@Gv zTFlWVA&6@-(pUQ4f)|1mgCUNMJJenwrk#?|ho8J(ik2#AljtY$2@F`(hV+Pe(}Q)x z#>Z<ay8fh9FRYk~F;xu5FFLNIHI1-3sww58I}y2@VJiGJH>>#d1xhE8R1$}yAjZk^ zN_VSloyk@cAZe(0++jj*8HC0=h6PTwZ7kI6|G|)^|7-HQIo)h|&af7v>{lR`Dtb0G z;`o7~1s<(uXIB>%Twe<G*=p}fU<?;^2OCg+=f$KwGi9c0SAOPq;Q+(e{4|4lX11@A zO9EWUiqGTclM80;)eF?a^t)y;-T2bK+^HG;rr}n4?4X$c^;nsQ`rOhyV&uOCWu1v# zrRXA^nH(7V%||9hp{U~u5jUr1RRFO(?w4$*BUX=A&lc7>HI%_2pg0&db}@@qpwy5a zSt-+>+?+oNp14krn3CW^-2}PviIjKMs&FN`4c`kWnF&=YcCYW7{B?gLLp)~dkX>Rr zg)17Jk2R;9$_tnr=ofUcR%5{ChrDkrXZ5idy>AP3(M-m|BpM6~?s&O8Ug(e%NLk~R zzSNyh(l3>WXifSQ5#82GGr1x}su~ox*)gazX=#=u136-w=MZ@28bz*$kK}jg(vmxC zEtJp~a=3&B@}e(ILLKrUj=|79WUa1YlRiX$vvJ?DJQokFuYSj$1;z}gJIywdd2x-r zVJol6o@1*_xY{CdTh5i`W}}$Sm1)|{|G+tl^ziE3sD4YndnB!;YL8j1$tObuNeo!* z;!bFENgyu6m}vMSU=@$u;d!8p5c!vS)kDETphxk4>BfV26{Pe!xh_ygehjeWzC_NF zR;%_&EQjc(U*34X-<#?3I@b<*wR-CKv6+o^q0$epW-s&9Kn$)j_7O6^djGL&o794P zyg?YOirfPM*VD!EJ4#nLQu)y4tDp&4{U(K|*f(!uB03Uc<DPFn$cT#tg%&=k-R67} zfq^7ZB=r{xFBK&7{{$^$#O^I>>kj!(DL~diht+3-)wP42Ho(xCI<vckwX}nCn}YFT zg7>h4_ltq|xr7g@hEGICh+;wjDI$QN;9REQqU{hWsu62q5bLU8s}zyiV~`qSkcwiS z!H^0xrD%Xhm<^k3EAMX<$|oe%V@$;m5Q>V->*CDi5GqcA_f90L>jubQ0$_}HzpW0C zVdpVFGpS-LQZVco?~{JkoQj!Xx@5A(P!V?9&1GPjrdf}s{~k-reMNt|O)nYCAo=-A zjp3K(-1h+mTK+5AKRt@VyRgXOum%jIHi8YWa_5v}=-EP_zx<2e8k4<47?Q=@4{YKM z7!c9KFjJDT?*GKS%fV%?W|f73g(QJ>w;?v$LS-{V{j~Y%_P2>y@Av!wuEK9$=k32n z7{Pc4eBELuT8^Eii=~8+K<N<?EF2Pq3?xR#Cq~N`T(Ty4u@`{G5PY-`|8h;TaVP}d zoFeUp5e7gDXZy9#iIS1d2+{14o&>f2mLay9CRt!Y?d@twh*Fjw_||rX4y9z+)<w44 z4S7on=emV@?FV~l$9^3{fp+y7OPI*XmtrsHz*(Nm(}8$l>xUiCCi`M}XzEYq%mLYv zzu;Mp<nLyUaRtIkIet`HgrJ3?z#%}m3?+2F;Nj(vv1c*mG~_pk#Y@<8OC~}JJu{1Q zr@nu00eurfQn30y*cP%Ro6!UkN+<|Nk&N--8X7C_N#2m?Qu%WrBfI;qM4%A0Wg*pO za0fDKBf5OwYvt@85qBaJ9g>3to5(KVNPB6OK#ZcnnV>F7OjNAnioPg4l2dK4#vxfz zNtbj<#Cw3gU|`|#PjW9w^0N{q#aePRAtCN5L$=%}!)s->Tr?b!2MbZ=o-Qr|SO_v< zVhcZ>M4<!Y0{l-9a06EwnUj4qpBqCND)Xy|Di~#g!)d`~7UWX$b8+)sGh39>^5MZ| z5Kdjl!b0eXfxMOciy<;JkqrhmNIz)x_>K8cp?R*mSsqJ6rB7XQYqR<5Qn(YwglFT( z2e0sLSEZxa3E=#RirCdu9qv!PYRB1RjuLW5Ai&=^@)*)3kHt<*hOP}8$mhVub;5+V zO5&J2h*!cCHI?64R}QD!SL&Y0hD*uA7P8Na-(_?whh%F9IdpI3Maf&i<OuHM<+60P z4r9tgigKRtRXzTg_?IS}1(9d#@_#p3slv(c^sM-FPej~GST9sb&uflhO+~N9Z#WOH zWKoVYO}*;B$P$@pPnda-A4pf-YEGEa5axe7lJy@_4NUUWx0&V(JcBhRSprHRTbyq| z&Qqo+^X1u!z|csKGS%hoD+QM4!j3gj0=xjl+QNtGv8C?tXp8sAvS87{zWnZEncVc? zW(FzEq2o+wSp^g*<)uP39|l&R9tGlIZ9D`WC0VyW{h-4NN9S4X)Uxd+D)}BNv47x8 z7sB}Jpd86W;sAv}Ww4%|td_Rp{AQ5>vY}4+=-?^LzH5!ztcnQuDWR(GSBx3fMeb0} zkW+@L{9bN}L(i~mL1K=(lLs%N_BlmRZOCB9UeuV0h2V&0;()y5xTP?fwo08<oMmsh znsx->r^_~9M!nS6d#Q^Aok<g!DwMM7iJLBZAu#4JG=;j0_2O$?qZW!Txv0=H`B1n@ zYkH(PqKVEnh2HsrAd`fays|cqf4gtV&j|S+U}{4z8y?;hyIaehO?rJb%x*ollIsPX zzzDs%AU321p7O8~#UcCk{+dhH?RP6P5%y4c><x_wgJlMhac5$)0Ed7cYb0q$nB$)z z^1}?pwiRNX;yB8TjB@*-f1N7K^Zv+X{!q_Al}{H>oFU%<e=i!~uQWy8Gcf)~AX)2N z7C7K+tKm8K^CpM6E?_k7#Fvg#<14h3TOM7?u0x8ny3z%S22PPtY0prLk{mjfn$*Fv zX=WDaB%H_q*@Ci>wU^XMyo;M$lPhT!XJp4ryOGVf;;obA%reARM~ZZApjCJj^uM@7 zA&&}hoI6#R&Ywb;F90}{&iT)=oQu>7JpnVor1(H}(o}luD0QFsFvp@ZqMJL%eDRp3 zxfc0iZ8rEp)JR2xiDUBOCcRr3=;2@l4v9%IoqK4#fp5y@#c4W+^1hgNb1v4N<1!HP zt`VWyF59m0@Zllwico6B>A$@pk@iL=XoLof#qar<>o{B7v4nVv<vQRjOw08&hQ5D` zm;+o~KKCka+Y~~7&#I+sLNpG*`7`GG?Z^BApAa}@W{gfBHe&ZW@~T#Bx2vzNUczC& z!Lj`4asgSRF6uJh#H>n6-#c5gu{3<e%IT~il&X=pk3@~2==W#C0D5&*zhQ5V@kBrA z@RtNrr_(F8-?1eQQysN3=*WVk#qq6&JJ5RqWnsYp+rR;%s7C5vW~b&o)+s1r!Z5<l z#-<o7KQSn`M*6aycTJd7LEm>d9HBH*L?15(+(w=E$Eqc~g2i<eoisc&WdWvXHg`HS z!)@nct2B(;cJof+Nkr>nf{YgaaWXrK@~Q#w`26JkR_G|O+ah1&&hh<O$qX@=XP0?z z(mSzyPME`+;Kyrmeh0}0PW1(%I1Q|;SvZ1S<TfScNg{kv9s|qoo4(L4WHyX%yZY42 zS-aNo680}{7Ak)+{94I+d9RTU#w{M<3S@WhPmmbwld7Zq%~bolpf@4V)2hVX%7VzU zB)`EamBN|aCSM+)HK>l#QaEr}z?oqY3zby&h1-?5kw`kurJ{lKyi%C4*NA8nCvg(q zSb@zK4MLHESQJtc1L7&+0tMA0#^FAcA2-RotOS#RVM5`REtYnu>h;q0tzH4EnT&ql zkZ#kqUgmGz-zvINvIg}l8t&Kz4sFbuD)@3p#vv1(%JL=~hUoi){argYLAwJzGHMk& zGX8&}HM*p)FCG;c6OQnYSBIGILU=&1B5cK97;q2FtRRM~9kKBgLU$`dzXw8ZTHD|Y z!ZZ&;ks?jUOWP<<`x;NjxJSp9HbTKAEVXuDjA$ZCzuiP0`D9*#ZMJIjCTzaH0VXUN ze*lHrg|YHB`NEEbstM&=^^?{%1%Nkp>PMoOZ0(gijR6U)FmIn@K%Z?upVDiey-}Z7 zTfc64zphTdQF_0*=YTeEzhzsW2_fvdeZTGN;IGv|F%XG^HeQbb-*3mvu?S`K-aBa^ z5iEp_u?ewcFB^+LFJG_3?N2<?&n?|o4{?&}sDfPS0o1!!W79fZDS2bFZR2aaod-yE zariVp1*x$U3>NK32*n`m1(%A!ZX=R?qLjj)&wabIS|!py_q^49bs(W6%b7}3V2Rge zjxP?46rOnFoE>*IeKqNLb<&5mW)eqh2%inH+r;+yd#BMwg4j(!jQ&KPtELA7eM9;= zRtPS$yV>$hRCX5-M2Z^%pB~{qE8sfuOFGGCVTr?qnEMTYyw@S_zzGVNl)>ndN>V0- zB*Vz#>R#=}5rRSA#LOflL^HtTHDm{FHmgGsehUcuzO@t%X?MIz&DT~~{3xHSmGYWE z^qeM-@NFf)g`D{yEm_rcGd(QE%lG=L=)=$T9i2RnC?8}<6t*oALMJ5Y`7tH001si) zUu0WvaJ#V*yB>(MVpgUJoo|%ce)LgJc)-CkvmYS|pWw_i5~J|}vU;6p{NXM{jiI`I z5Jl_uWWCpSCdZ^|Mh4Ch=qUTQK<x%eCLDmX_#sbn-V==*RqSs3L3+_IoydBD9xjR$ zP%n=wz~S9drQ>+kdj<PFc48e6${!Z(l%TY{vsLF3+<t&5dE!!ZrW<+jvVRZ_iJ!Sv z5vSpR=3Ho%iQDr|wafRTq~qfD{kXz=cA<mvT6lW3l-E0yVt?iQ<SI8z_>#}-8mr?P zJc)jJ2P;Lm4k-L(;FoY)Xw|qJwS&YDSl1hq71(tVNb(SHZA;YOKKf?s(dg0I*zN37 zEBln}<Fj4z6as!K!Xp(lW4qe>ot*W&T<|Ou`qU17=@xkH_j&CGKaFoZC6i(b`eZW* zfK>JUyoqW4>ZdsP0CGvsdLnL9srR>3Lm>>ay8NJ#@OeX-a(aT03AjB0OkbEop()NH zgqZUNq6lGfo0pjLhhm|q{K&&t3Z#RGQOZ647khUV6h{|641SQ{Zoz`P!{9Qwy9f8d zU4k>X6CgN*;4-+oI}GlUge16xpb3)9^8UZA{r0=wo4uefy1J{o`c&6>TFyC7_Yd8> zXbg$=7GKvua}!h`>M1kR_1>JnSp3~uVm!a&gw{xrqgu;+`BF8lx=MM1fXz&;X-nSd zhCr=M6^{(pOzT-?bFtIvi3z+S=?h=6&vHUvzR$8;GKt~tU)5jqZwJE$2tYg9Jl}gr zP`!I|uj@>wWS7?-(UVy|j}-{SER_N2^(H<xk#o)J^Pa4t>bDq(iZbxGE*vPF1_U&_ z7G`@>g<u!ZEGH*NvirJHGF|O`)C5|H=<ca+`>ap<ioN!Bubekh-P5?FpZ&>Rm(ERn zD}K0tLilN~>a4=}v+vjMG2_?vDj_y^=$NZiiuqVAY07r5gb9MsoXU11Omh!u6m8?9 z)=Wr-+jM=!$jZ$ekQbkuX>^E|2y(-KBH1V+-Zreri|VS?L>`&Fog^ax2OF6&Up-u7 zkX^Q}os(I6lC6BZQYr|Z0N`B^WjyFimwWXSNR@%J>aZ^(46a^MG%eyqC$~(<jbU&o z3xA%a1XScYKv}^#u7$Y=d0tt{%mpsr?<+pqb{p9jgdH3o7TC!!jug5jNHdi>2xC;| z6z%&lNI1DZLn;zh2C1M>081(lW4(8jRCk7`CMjSKZx(dDN2A4qD+in>U2LQW)ENWt z098CO>G3&fAhz0^_jmV;*x+ea=KMK9%(|vU43+biC3BPW)-`Y<XTH@>@5qjEQ4`m$ zy~6F<uHzChuAU$Dm<_GRp4A!3H`W4b#)@CE3AMLp1+rt2I5%zMhX<|LC?ALjCO|#n zjhZ0fSt%|tob{kI5|kuYs!0q$L6U}0la;OaF%c?kO|iz~BVnPA0=!{-^J?C+f?t!o z=R_~mfLMGDgDo%~HRBA;?9Zr;Ac;3+^K|s-ow#BOIf0|%z}7rmOv;h&8H(DqJhcSm zCZKZ=ZyfC}(2T=(?*(2YY~YUDy!yM(esId)p93#uJ7(G7Ayf`I_;wcVxg_!Y5~%1S zCm;<4>`PF>An*J#Vw4U$zYR=QVU&#qz{bsk>>;~%G88;wj*pM#e_B6)BPM;nq)!$i zyP8t0i8A}cvr6-4$uI(&p4pw$lYFx>sCMatY+dUCxi4Z}VW=!tE?V}~O_Te4$Zs|o zB=W(?SoS_$J5_2o)^uc69jMfM!m`BSXaEZqVk^{x7aM<D1uA~WPR7>~|4j&qHTO48 z+#oU&v&BQzZ1h27XX$yF&MT|fzbL~g%-DN+MBBtT#%1rH2UzqQ1Bu75@RN;$xyX#2 z=O;0SGg?_aV)$!m4d)PFkK9+tD)4SCx%|OnMevM+%W=@DxDC?|pO1rbrjzfI;!-c9 zJQMV4OQegWv9u^%#iW;#mo^Z2#*CV1kjP8P=7r@JJXn%szrA)BjvfyIsD^mfmcB7l z#HDss1j<}l8^`G=#vlDiiQ?GnGZuJLe!k%0+?s)dB$C8T?v<Y5lL}gK__+O40}?r# zqWR%4sFL87aTq_Yo?!5Caxj`Nr52mPPHFn>bTjY<FnjJZBKzr&>N`)O?;K(1YNG{w z%(01>ru@1Tg$_)X6M723kIJ}qN*{8(;xYLfrqpay2)X8VD)@VjXFVdk3w9U|g=XUC zyrH@U$2;KX9SH3l5XFaTD<zr``^)$1<FijTrZ{N><{=pTtoIQIyD2O4SgRW8HnxjW z)EL@nqs$+?l<mO$n}pq+1Q~?)wsMjfOEG_xiq{vv$p^^{nS;5@I9!jV7YJrSKWk#8 zx-@CxziDTm+>}zPGWfE+QotPZmhFSBKO@eIR7Mq_@Xz8UPjx4>=zO6F$qM~^Ez@YC zzbb3Xen{zzu}9&jvEGzHjlzsnOR>?#ZZD^BC&m#00<KQ7H~U5xqBAu=Ju2KjqpL95 z;K}o=(L6Xr?G+jzvs)qpgaO2FXAZ>uuxQB7H}o64Zphw#hx@ifC&j#vIvGuW@JN0& z6^n*nf(DqCef4~4BC;sN#hlaGk}kjHzp{$PkHC`VW>6v%!Q4?H$x!lLT)1b+)HO5< zFDB9*Wnx(q3)%Cd;v79^b&AGnvTF3Nl%>F;C)@c&;8l`oRpQIG59_e3)YT{bCarS{ zC257)R60!9vfjm>hI09^(R_ABiV|I&!ms?!>G8&DOCi0mL$>5x&n4MD`WRi%`aC&@ zI4iBqK>PKGsK*!aB1ORiK4z5F9&-eGWhtbZoP^d(8xxUHC9*l2S6+;7z4dD%VlEM_ zA86#N!KZ8{%C1y!T{*z3obLz?{!@CbY=bM!4fSm2O7K0gNpTK#gK*(&YmT@mj0DsY z{n^(B4^p(h@CIe@nJYVx5VF9zSoX+kKhh5wElk}G4My~VQ#iR3Uih8yLK6WCUu1ch zlSikwhtlZoQ@Ift=^SKKw|rIluHQ5L7=MhzPaer_t?Y@Fr&g&D4DJPn^loV}ga)oQ zma40FO>)DYSfI5wZFLBW{B0{KEBohr8tK~$nO_1oeovR$@dc`mGLi}jcd?GeVY{-6 z+%G)J?YpjED(fi*ZR0rcDgg6(%-0#A$Or9R^vHQmKW#xBm+TctYvZtB!soyS4}LeA zb@-B>b2)k-Iy*HN)<L+7Ox-y&Fy-zv{HpiRjjuD1NJz)Vd@@b5{K^!u8a>vzH$#ci zHL!Zwd3wdu^<npVTr(xFwYw>8)2f2bu@0O8pP}S6bPaf50bSZ=w-x6B?qFdWr1M_B zM-yWwCIF0^GHP(D5PnChld<}>+d~pkLd;ZViZ66!WGbtDzREeF`bzzClHY9iW{b=r zQ#bxRVQm#dxtN7a&hwqC8@73&k!eTdBb4LhB#$bTq4BCjzlZef?W?5UqZ7y<EQEa1 z+%`{Jhs>zWa?EoQD--cwSw>~AH`d)PrWnZ!8X6vCHf+fnjMe;O95)Yo9yIeAQluyK zId5{IuS^tsR>X=M`$ilvYeFWGtlK`nodEgS{%AC!(J|}0mbacBFrYY*R(G#_f|N8E z2z5LzjCtQ$C7!y$iEjP`A2|xdH0r0qdxk_zw)h^OkiIYwPER89f~2t?w!@xTa!EM+ zA`Afyg2V!Or368BfS|`gFsmTg!Vn{QPk~ka&=ppEu+6oH#RCA1J|n0nR)j3aqDFuY zuf@2C9<M}J)O$UYfyq+s8-#lj!iyFOWQi0|iWG8)6p4!ztBRDEjFdcze8>*FeHSJl z7nUZdBG}{=Tk6aht-r_+bg%WQThWYsO{Sa1u#qOzAkOOVH@21%+*uoT>NU1A8VPy> z>kYy%v@$|J`**4%tfKg_k36xye`0+6WBrbZymDegI%EC+#0GZKMoh+rAH_!c#|2OF zDiU~38)#=P(ZVwr@JS>nf7rkW?AapQ&?*;fBuV(LX#|U3+b%9h%4Y?iGovubVnw0F z#W}<^93?cpjceXWXmLnvi%YDnN{r7*?Cnf!^iLd6N*pFl>UT&Q+(?{MN}3W*dbdGA zf#|G&knF0I{0Jagf1AAFki0pWynU3sg_iP}H03Kx%Dz&{p>WDpoa%Bo$kj&`mgU{d zjMqBIU^ULBf+(?zN^=({@JR@_Wmud!Lxz1t#@P>#7uhDsmZHIcjK_}wgOv!2^)=2t z37(^G=VGeDb!v8VDyc{sxltM=SsK+Q9ZeS&32PeTCItmL(Hlo1vaWR6&2;+vbZW8> z%&h6JjXtp56LLH^R^tibJewc*?mzI8WeAF72#b6W4ag8T!Ua_eDs=f$izHjUCO@>v zG>XqOsm?T;%CtDnv_j9aVa>7=$r2fol6~iWKJJpeqzdw-W&BM@vP9t{k}a>3?H`cs zC1M}AnH}ty9hRF7InECMA7<y7*omCV3EIqwIL=8!&;1aPlgOHzd7qOLkQ<+yThNu8 zrJP$xmdE(o+4P36eMGsnG*2osFEut#qa!c=F0W2Ge~Kx;)-j((D8F$kU*;P<F>}7S zRlbm&6YX!^E`Di|!zjz&o@UVnvjGLXSp~ISdN4;%-^+sadmr>yA2(P(e(w6XR$Z_f z0NUy**cU0>%q@g}bu8T5e0Mta@w~cl<-ULytkb9bv8g&gv-wkpBf|rF(O=dgH^cl& zl%g)>qCZnAODmqx6<UE+1vxLDq7@><X_dt)LM}lfQgWh$sbX>!T<VkJN%RsrXaUo7 z9!p>`gJ{W;Q3*$22~S=LUv~-DRtfrTi6D9DSI11#vb@gH0?f8NNn_Lc>ij8%GDYJu z*^@k(gfjKKB2}j{WpdprG7w=lH9?sHadebCvLg&EOd`Z^$Y^YRLSY-|0%j|Ck7kGK zQ_;Cxfp%Nrl1J#YC9i2v>DFE0kMYq4qcVW4GRU|hFt9R`yec}cA}XQ66Kd`~UFp|d z1=*^K$g6^r81h593(5pTVB?zj3Hr>wZ;BrjCwwT%4V><*pyg2LSOzq!Lax3WTB!nU zRH>;Vuj!bEu7f=f1hjieiV|A&38x)fkP0;9SzoWJ<Qy1IK(#0BYCmn&D*Uc3o+g>= zu3a#$TMDdO$*YZPsSC@fn-*2y*sAlZP~A1IUrwk;wX27b*MAYM-<hsINvOSksJnHl zyX>yN&$DM{)ceH-J!f;aGB$nu?nCt(%9B;&UZyg(B1@L8?`B(rWukWQ$``+;k+4UJ zIA1Krrsh4G+Y!B{u(lKLosYOS18F6e`dc-Dwoglj{M=$6d3*ABPMZb9T7>dl1QT_H zA3cHmJuM>JEz*xIq9(7!xBcXLxD}j1GWo5Fr>zTRt<k_%Et6LL?N-CbR?_mu*y)e* zKa}CeV{ZCegy$Ye;cHPVY36ebSil9^lQw&2dEAjAo>g#ro)&Z_70a|pej{8TltJNB zgFE8U?j;6w8pE`)#ON9Qq-#(<0_o6>6<(2cTHwJFST``fwSFt_{8^5yyVb>rO`T!C z<Nlz!2s3)QwRu#o8^@`8u~mN3skTO}yTYKm45Q}{zHv(p$z+Uoth092Oi!(IPkmy~ zUnkR&)1D4zr%8%#k;R_6nW%=--s+m(rN@RfiXPK$w*}SS(6(BZ{k~Qc^=TelAs)@q zG8J1BhG8C*FHz7g`seOeG!LzwRiFN1OSN2ll%n0P3FPoKTJ<E$fe}2E2h0ut78E`+ zh$8}cjR0&%A?CSte$$u#X2D0zN{U~nog%T-V02US(6}cc22^&S7WVjVlzn)9ny_?S zjRlK=UX7KnwukX)_?~3sL}i52#hW>4gs5_aqqm<4t5@WyPE34M2y0L(cvQw^<N;+w zt+s)`V0diL0LCyzM>()%%W&@BYEkCSD*zgSAbr3?5r%Y3TMi1-pcLb&596VT(4dPH zVfFq(T53gef>7TrD#$mZxnLpR(4gBFpiDP*ypI_7#7D^oU=I)S-6h&1o=phRpg5&s z38kV~(I9>MF)74@Vyrijk%V&5gDJT?A!Rvi-O-#RH6=BO<C26FlFy$jGXNJZGDO76 zmkXwCC{vfa^n9pLY7J7y@9zGyI1<9qtZp}Cd)hZ1?44c!8|sB2?!X9O{fo7|zfgL{ zTxJ()S*KmxVX)bWTK5g{{*m6<W`#L8CTx>q?&JwJ`82Bw9%FOq9X>O}$Lt88cr8%d z&2I7>!=qklSXP4!KQS?`X;9Ecgo_q%gd5Qx8Ziy87rZ?OeaY1kOa>lPv1~dg4{K1g zWhbU+P>Oi4GS~S%erf#WgOW$`pinMhyYyrB;r2>Rj4X^lYGH~1u+Ke~UDa@p>D7Y{ zmWtjXSqrR$^<af!>1Ninr(-Gov{jdta7X_=f5N`{Hc5Tow0~!B6^@9yhQPe`>h;>e z=<2W0l$j`KdeX2Z@|f^hXLr&ZD5*ydYsB;1%Nx7bO?{nUefGmlzw2L^eA4=P?QBS$ zw#wPM1lESj-)=wb^|142vu!=$uUq6Bm}sqBSEBk-Z9h+~IzgUncOtdK-Wn67yLZsw z4G%7FBYF~$sQPNFc6iXI7MC1ryY)%&UK$r!?R7d0iqIg@uxr1)$wEFJmJkHV1cKz` z;ewYzMxowW+=z83wk?~6+c~>Dv)j+!gZ50WZO@Jvm=4^eV&P%e;@0wKm0%_Dym5^# z&Lbc?UsFBKQoCPkNmrXM5gWK%kxxILTj78if1b#BvpXt23y+=MDCAs4qnZnJ-8~H6 zAfOu8;#?=<+C`u1#|Q0RJndp|!4wIb_Jb&XnDyVmW)-hB(i596%2qF<#sXD$4zV#l z*L5&*F5e6a&y8Zr?`}hb-dwh#c@|*}L&k54hF;YT;9_IkXf4IpNa$ks{Z<%^;Xt__ z-TTa`jtUd@pk1D^oJcELI>R3PyR+?KssHzMmF%;+ND~_V;YX*j0y%v>seY9oD?PaV z@=FZ!MvU$ZShGB!jj&U_&tmnLQLqS{%^l=^+Mo0BRC9@-;TW8w)SnvZ=0_<hNBgx$ z2_KIG{v8!i9T$E%Dst-{*ZYRR@!k3fdYw4J5#(<BFAxq=>tS-~=Pg2!|MF^~XyMLz zc|mIFx)trhx!=BaKyg`pUlsS(1b4_oAjM@#DD_k<bms~({;CfBp?T@2-j{6gbLy2- zU)XXr-I>oBTSo1`?4IH7%DKHWt5(6A3q7><70a<&H%Sxiy*u^aA&0(Bjv8b0==JKZ z_1!ZCYRgG5W-5)huD?9Of0>%OV_N(w{qk+0_Sf#{FCzG_DXL3S$;<4Yzi<nGz4>}c z6#9z}_Y$slCG%O`mG%k={tc;Na0=x9p{80-z4@cu>XgqH@XlN3MI0-Saf*{kVV(&P z@7bT??z`gcUI>z85pND9N`^NQ=xdNtN{0vR6&i3A&d8<yX9yF;buf45txOu5H3TWs zYS2sVY(WdHmT%>#^^2w3f*RK<*BA91EiL8N;@RV#4nn0H#cP$XR~J#&y2*bQqo@-! zSCb^&h35~#K<-Hwf70N8Qr*?l;p!O!&B@Q*m;>K)-T&l&z0dq~pDnqXCix&1_OQ11 z=RNg9!oWkN`$L1|ePP3W?fm^k*}V(sA>IAY+2{G#fiLBft4Hz=OSaVeJ{r@Z_R8PY z7B2L!s8CHs@69Ff%;gmYc`bbQ)XCl`oLtN4R!BS;;H~oS9lQKZ;=;Rr^`mgW*U-1M zq_1put2|b5_2UXR^2NnpT)gQl)*9y2qM?YHB5b&+Lc=%Nz(r(HITo$2BMC@^Tm@)N z#d1mHoH61oI<&H}tdf2(|Fn{+bV`W|<oo6_)fh&bk^&>3y-WewJ3l?LwDPGU9w9aX zv~-q{L`4fxQwN}}zMWAnxV%#Bt6bwk#wN_T-O8xWVG&~_O~KkY$#lj~zs9d<sM}^a zp-xq(&b%&k{R`>!9k+Rc!v#2cZPjs2jfz{tpq;yB-vP&SX?uP1+J2!}{yme~){Wyz zwSE|mfSR*S4`e2ER%QG2tjnPX;~?L#(Rd)@UFrE}p$5}EuK?<7SMjbd`x9ZOb05XJ z-4BMUE#9U4?K-Ouj)fQEfW$mnI-IlB(X!yY=KJ>ZC>rL!itM{@Mju?~!_K4<#vd<e z5D#0pD-)3O-?Klbo45}?!6I>LdqU|I$l^I7D`@g`wzP7wWozvP2vqqm<%qPm83Yp? zkbc$mSU;(bBOZTfsEH6RX{?Fy(W@GNGc?VsK$Uo-U5n((aYaL&ea5T6VDCeqh!?+e zsYK&W)U3kDJj^#mGf&<;!)!6LG~TyY>aG?(N&u`0+=*%&ZY8jpqv;;3bsp+D>+x<1 zPY~naCclv5mSMH$*J~QEq$Cmn&@NXs*)i!>(ad}wy^(Z~!emOB2dR7NEghgE0RYHx zF?t4Kn2aAV2b^(u<ec>zy5(oYi2C62_G2l%<{<(&8|J>BQ`SvCFbZy72g?(69s7i= ziOJa45!H^C{B`brwJ8Pzo$n+P&7+(mcI*JY>8=~?oq4~WyKs4f2cl}}UMPog{pA^b zU$sQk8r=QXmpY`Av{T>UmKDn?MmAo6SKwQzr?tE@R-<X+;#lXrs6b5ij>zFY>0YAb zU8iktI)?~vre;Oceku@$%=&{p)#kn&eMOFpyd%oJT9#3-uC!&{&WEjy)J)=aOZ@As zZpFxbpu`OcyXuE{hNT-x)#TxhngzMf_8;l*a#8gGRBwH$I00xh8FN0;Vi4Wu_xTn} zstrZ_R)jxRRttX=9?{xA$K=0(3zIx&U3Bg%WV-cSu8Da?)Ws>h*7}Vfw6c~HB4}!r zPZHv@q$>2+XGPaA#CM^3)z3keIO-Qq&H87csoOH4+rrj9+sd6Nc5;sPw-2Whe}2S~ z9q2R!?sU@>u+;GLhahwL>-%wRFk42{K*UJVzW0~5$jeN{COO;`%UsM6g^N9pe0hfj zvG?Ojl9EXA2F1*L`%?LIUH%^9+e|EuXz6<?x#vWjWmI~ctP=In1V=rJ&p$0Y_>ZMH zBT41*ni%vru)FIWNp>ucME#`+Wt^kfiD;W|^f(s-QvE}Xjn7Mb#TQm*-cJ0;#0dk} zuCZb}XEmvnQzDlLo7KeS8Np*5)~t~INQ;4IfJ~6rFDbt&SL*H!<RKTUezG&0*Y0m~ zKtzl3AyL}=;Ir@c&7{e`4h<p200m-K?T()0CLRQnOi+C)Xl9W<v@9@_k0CDS2SP$b zLfIR$gApY}`6bO%<P3V&BW5)&ue7YEwPiYG<rWVDQ0`OCsGzc#X8KY_vYZ_&bAa;a zIvvxzviBSoMl$6_sj;IoGqi?=y;xidF$3Zn7hG~lwmZ>r$oE<mIb@Y_4&daN)S*E+ zf%m*V3Z!gkgV-CDiI;!pgKhm$$PTOqMe>p{s=BRrpC&L#eRSQ2Q>}MoiZS8DC2o6X zGUT%)k|6+V{apr=8aO3WckDM6<58?N9^FH&73muv0)aR3WYhJD1k>3Lv?#Uw(pc8P zH>D#BqdYPgIvFW?0c@O(iqa}Nsi8#W(?Qj0cI3LL!%h`Uebp*fW4eVgD`gDPjw<#E zy4k~e)%0zwDv4VwnR)!>F)%q>Hg7x!a&1XvJ!L(G791M?gOo=+TmFM$Xh^STqQ~;Y zYb26*EiE_qq6q3Qd;U`L5GN{*!7qEmiv41iDV9l9+oZe3hU`?o-h+{3IG+?JQ%F|J z*~^dBRM~Vtn%|Xc5LfH5ifv}O8B{TILN(Y`m*3|JwiISMspjVCR*nm{v6#8KC_ZjY z6$(~ClUbdERN=<3Et0mbx;h85N2BEjzxKvA=U~r#)1@VY_R3opheUF{d6M<+MPgU= z51uPUfeO^f^cVI^9q%=KoqAE16{&yoHioyo>pc$P4#f30za?<7yzzAp#Xb0Pwf4LJ zYPBJF{&DaQWup&;iYI_@hwR~mUgNQIp^dL4waULO;QWm$c+H`4ZqLSQCm$7YsWNT= z!=T{)Z8*Ypv4UV8_QzqgQ~LvET*7>O#AEi+Z$D!+uQ+X}II}J#aapt?I3q%8w?=s$ zPILd%vkjouUieQqTd*2-0gn^;GQZ~UUWXd>KGwNc0$eQ6+{s{uI4z;e1^d8vY_k^T z`Z?QAmOxP(kwGs7VD{LPz0j%1yrF{kr}f$c-T|ZesDqY*ziMAV>6?8<1~-A2vqy5W z-3uvT@5-5{<8XE1dAKX+Eg`;Z9%@9)0{sbA&F^m~3uU4LQ6wJ0(m$NuhK(;ZeDQ*~ zpXcIB;H`I$lM|M1a@U#9#JxsOrb7h8B0Utl0~#S9r(#4@+hMN+DQA<}4#ajux6u2y z%mCY8ZzDc70owpl?VO4RJgs6xJD^whGR5zSS19rqY2JO^tFktTmLbIdCJ+k2-Zu}c zphBe(bh72l(;pIDN9WcaCC0fVG<w=?n)4qrN%kakeELBtIXfZ|dbN_%yH22~E#bgv zzS<c4gZ>$_CQrFqQrqDdZ3wW>YU%~^U2kMzh~B9En24PHQ7>Wt;E<ug!?m(qG$M>Y zukPa=WA(<$*d0#1ZnW>K6CR>x?H;%}8|v3uiRKJ@)aoavPs1@=T`5C98ro~RX$AiM zd98)eiocfEb!hf0k~#Prc9{Ptv-xFY<piFXxKEtz_<6o@@IHP!-Hg5Yb^c-Sp#=PX zr~x`W@#Q3@Eibnwko2YoSN-rUJaA*e{H~=^V)zC>x1A!oM!#C6f6(A@UJ>ul2y^IV za#--#Yl_=kwue}LHMu=Q^WET-(A&DOkTd&%OH%R&U_-aSjNI7Creu)wWLW4;rN!Tm z)DqWP@X!fLF}c(EN9p6Ru%|-{II9Zv8cS*Q!4JH;t<>j-9}~M2vYOPZoq_%Peiji4 zrV^qC<3V_}t_Vi26c$WsE%8HJWN$+pA=pc5dRdAHA4DK7O{6vibC$wJl6sxd)1W0m zte0%~+#%L0O$n2ZxfcluFQk`gZ}6x<UzT3>Af*$RVNe@hj!UZ7L7VMl>$0H(>kh9` zpq!M-aKL1US5Rxa8e`)ML(_T>$S^r?un0M1`PF1Gl4ADbnJCdBDRv_$(2ywO5JX!? zM9W4Tng<C)K85VQ@+p;!rIixkkdy5l2psH-n2b`+L00gQQwknce8T&v8q*#iNPvz4 zsA?KwFVOoo(hMAsrIgnZAF!^;;LkzkS3**@ls9ydf2$Vh&^;WIic0c}TE2>TL6=lZ zt_PW%L*5dOHU8b1yT}=hUkZs=c-%&9+*WSfrXVU!OF(9lvbhAgMF&Ao8PeuR!C6w! zYeXEln@<TrkvYnz9#jA<jJHN0jNmtT$x+Zdp!x;px2im6p%io>(DyDXOfRC&q}8-8 zm8`@SWfLkyichYNkgH2a&f`VKJYn$zB+Y6Ns~?lPmndl#P&omaW(yR7ELb5`5y(nH zTKFg;<Q*=<N?}nHR(MMDIiFH(mD{XP0}D|9AvA~3)P`VAO|h0DZwbxk#4^ezuN}!p ziK~=Rif50IgS{qe2$1l*!tDr<vO9+Z91x81QEwJ0hrhA6G$D!;(DU(8)UF8liZS;t zjzQph0>0k#eds76e5FC;)FE%9>{w`;cIbVs6hlkH=N)2;#gl<*D#ILVBZ)DXv~;|G z`YBlAgpJhH@R7o_1ro55gQXM^@R|{h=%oPk(c#oBGBxu>(U)Cndia1W+X+&SsW}>T zSDo41n;uS#T0!fmpwkF@(#Xkg^byK5%lsXk*0Xdz*drVoKjg#$8`)+&rYDl7?PQQT zJ}5ZBV#63BSpy-#zoz^6*hes4Nz<t!i>aQfvA<~?(@%>XAZTd0QMpm8>0zVxP-*Ug zAxPaYx7Jd&kZT4^hFhV*=on&tU}+)LiA2|8@pgtI$uA&f%JQa;2oWLGVI<Sq)W{#9 zvG<5*zJbKZKm>o$k`kkRnp}*P0c7?%ep+&24)BK%i1GTiHeDKNhtMFmEuzW_7v$Hf zUz5@N+!Ok=*WpJHLkUnT-HAP>(4v=EBKRir(*z~<CW+}hiN`@n6+d}+=y}{u2pK}5 zivaPPj-7^~a=*<C21EiJDoIy$IHD>1WC3>mLho$Z{k$Q9X8Hc!5Qp7%Q1i@Ltx)ft zSXh3nmskgpSu&EGj;w^<k`xSQId%+|LE&FPG5I=V5W&7=u<{3`HI1Cy=M~w{pyWY> zU`H74P`Hf=Y^rFmhdxtgU(bLz83F*%-Xo(^0iFOHfal2-Q4OKvzXbsBKUMjeHU_`| z062gh0AL3K*uenyTmU-^zzzrK0|5F!fIb+Yp9|230rcSj2mk;90w7=jBo_dI0U&Sy z6aat%0Z=dinhSu!08lt!6#!TT0#?C*)m*?T46q7+J~jXjd?uTp-DCh927o`WJeLgw z0>D5(E)W2F-Ueg`0NH^+b}*1V7sw6+vcrM;0H8h)s1F9}=K}R%Kz%q60sumQKnNHJ z$pu1SKnNTN1puKyAQTLQ<^rKGAQTQ<1prrpz*R7CH5a%Fdu}8H;eZ!RIv1Xs3y1xO zD*sp6Ko|fF1LVR0u;<Evu>)Z2Ko~n1#-0mfhr!t4Fns__9|+S2!}N1u`Y@P290mcv zAV3%d41?stATSsN4ub+<P#_EnhCy>-P#6pfhphr&t3cQ)7`B=VTZO?^;V?J=1_#36 zU>H0X28Y4m@c#ngxi+4C?PuirdE;{^umj-iKsY-X&YlZrhr!w5aD4z=9|+e6!}W9F z`Y^aY91a1%AwW0;42R^xAuu=u4u=BZP#_!%hC_4VP#7Evhpz(Qt3dcF7`~bdUxmR} z|10b{(4Oh=XTSUTy#J^0|B3qlnW4b}ztJg`8jFS^(Foa0CmV}LV)5uz3Y3~k#u7<^ zPCJuLr4#RIWD_Wro6Dv?u;@Zfr<%)WvUzND^q5k?5)O}UYul)<%(Eeao+o?9Entme ziFibT!0V&AGRa6$ee&BQy(+ad5NCJmu~w~Fo6c-tX3a_ixUR&Eyq#maMR{oW^Mirw zPOJIF+N^2^+t()7^#@}1bvKLV2>jDGXIY-#2NQ{@W5ffvEN7zOV5X$(YxDUOdfn&G zxLOb9k{OY}+j_gY>xj`fYR`EL&IOI07kjzhcW$LfCcoF-^t?O!>f(-i=xTcB8PQ&M z@PbKuu{o8$VA6(~FPQWTCjEj*zhKfYnDh%K{enrqVA3y`^b02af=Rz%(l40w3nu-7 zNxxvyFPQWTCjEj*zhKfYnDh%K{enrqVA3y`^b02af=Rz%(l40w3nu-7NxxvyFPQWT zCjEj*zhKfYnDh%K{enrqVA3y`^b02af=Rz%(l40w3nu-7NxxvyFPQWTCjEj*zhKfY znDh%K{enrqVAB78#-!WXP%iM*h+h4Flcb#`I%=52IaO^_(_LT=;^(L_i1J6W=R-aZ zo<bRc-l7%kM3D|~@Z}To`2+^1=7*N<_TyTGTMiQ!YxpVu$U&nerXRS)D?6`lL4&KK zLd|iZsW4`Ij}qn^q;dYYtt;Krick3YPm)J-z}sPGxQq)Pw`U#V86iCiDZFL$>K*0! zvGe~jq<K8V=e-Y3F0u|Zw&pY)gEb)Qi~s4-4!`}L_2_`#_pJXfJsSM~=+S)9|EC@u zdRk*=QBzguo)L~1Zh|whlUP5V@_bezn}ts9^v+@BAyiJ(^K1cPe2pg_{c})@C+`-z ztBZ6Y5;*?^3iP%R7&LK&8^@;g$lb?=ZgVtY{B%jdfV^KIN3JyOs~dHWK8}&$aq4C{ z1OLyBb`BWeDeUO@Kiuf6-(O^Y5evCyTQ}tn6Wu6qG92QBH^h@hNf*1IJd4rejmRg* zk<<V{vlu{KiN?=n;_R~XUOMPrSqyFmow4R7{qai!^#+pEeyI?^J|P%0<FQ~Ie<@lk zS^87WmR+mSdAR*|?{xha1(#$tq*C@N50`XOJXF~@1m^N{%uj_NEom0p2~h?}rs6J> z6h_{u@bB___`UGVmOaI`lN9{ip^>HgHIF6*2lb5Cs9*1otA-`7+QJCYF_81rbQOe~ zou07no8S5&PZUF0I74I9Y^5}x+=D7wFZHPO|Hh-?|67lSH2>dvwAAo_dbHHg|JI`s zo9TndN&nNMnHa>+(GM)U>)E%M@ydn*{z3fb{st_C1f?+VEcbmG2>JZG&;OwBYj!0* z;NK2>FmU*<|G$vWGkrnbe?OywC;<pRxIuV(bIZn4DlTAhpLB+2Kw3O{-d^HAJv#M& z^k}^Q(W7ae^=QO}3z?;skuwv>lHm~RnJkZ#lpl-C(BTMH(Whk8M?5E{OKLa+sib{i z{}o}eeFD>s<iL%X<ZUeY#t?pM0>5#VymN<NxgU6I*!$=l{>hef;2Id2w;&6pX^dJ- zycn^ECm`6TYpC4>Cu0R~*!%?@$-XX<kb<c;a#JU2J>KYx2)HZoM{rR7+@AOuE|*AD zdR$6uPu<6h&ly7`l5VT~fmz!aOMt^pHJjUNJVWHef0(rH_+Zxu`}tglI|OYcIhMs@ znJ^;#z>I3`O36H~SBR_CdQgK>a2?e5xW7!j!AnBLXM-<r`i`}xlEhdd#DU39rbX@3 zro+t<7h(1M{7}d>&73X*0Fa_}&NkQcU5mO%>k5sK#6zW|1P~ffjpkvq3zA2@#zsj+ zD$`u1lf?((Mfy6gHyAa<dD?t(+4v8W?#qAY{<Y)xSmWRP|1fFqWpmHG0Pjyy;qcaE zrasPAhuezv77gylyPxk`6p<`K#P6=Ylw15x5hVY7_fS$Ceek94>EZEUBpcWEQ{L~( z-;THgk6GbNbxBv#wq&gv-%|?jnZhx#dnq}zditJr(f*en9ltSURfx)G9NrvNLe|8e zNUEX@h-HB$l?H%zm`O1UoVke99r74DDZ_(*PSC{nPAMWKsOe0l1|wVN{wdTun0mFH zuanExWD1^U>4G(@vi3z0Oy9R7e^BA9VfX;!S(MXN5s08`kz$+OYgXqh=cwuK{iUOT z#lPTyjLlo*xWLgTvlNRl05FNeijA7G${DTVvHoO6Gg*}y8Kq2<=ljPQu1$r^rxPU? z0-`@!41o=KPUQ<)9aqv?)ZLcRyUw;T6!|Qzt`|adWb6Jkwm6fWC&_1twV#m-Zr*2c zX7$(<Gq(3Ro(2$bBfZ|KG+{lRR&8*<wr(^!`=c9a>VBKfw{=!uKtis*!be1I%@D3i z*EPCO#)Wb_#KVUwNUOw8CZo;!Oh}V)()~wBqx9YUM@T<y$y;mHdc=(k$aw=6EiATp zEpt5>Hx148&2!hXtU{I3i?({aq`B7lmk&e+S_xEneE)SF-uoSNsgxe?@Evj%M-j%I zZqbXX=12A$X`-~{%O$CeDmi}&Y$uUT>i*Z}SV&@!6fpJH(Hg_(+%V+q)|K%`A$<F1 z`Vtz(ruB%OP@Ug|yy}d{W7d`XaNE=4uOTw(-=eM!jD8@y?U59tnI_qGuJb>tHX3b( zrkLVAWp%-zS50n-?IHZRTDfY$JBnD=)9uQiQZCHB%G0d8#D3F+z$FxmQi(vnb3gs- zoemr0r*!ai{zswW{thQw?Ie3W{RnA@!%xGn7)$8ku+4q>_|t{XmVJJuehjJiX$dNq z^=^0K>H1il=BKtKAy6BY#oE9!vL>XW+63V%N$o4U8IyCH^@F@a3FpjtFI^{#Js5wT zh(3>}PIvll8Gl!vx<@3ynv#F%mh+b@yGe;NZFYuq1L8M%YC{59Qix7=h%Nj(N{ch5 z37&t4mhG?<AFVl_<_A6oM0SYkjs6!1fO`L<qy0M4)|YlgX?*f}^`QJOxj0d;5gd<$ zeAq~uktbU2S8A!A;x*c*J6irE{fZ0^vUrN~<vWq6q9U<cFe|8PSI0wwcwz3Tqxny^ z3uvb`$e7<(M2ReGW2#$6?V-uPo5BM(r&w=g<rm!yS(~w%*f<eB)@Norl+{Rh@0E0( zq=TxWQ_Y`jvU&zbYRR2Yxs&yboEEI*6dtY^Q5g=@GW=nT(#)J2_Y8A8$ii5nKp(*o zYt|M45&Z6jyiw6C^btdl%imv~&duqD5myr!P}aN((}hO{McMPlu`D=;Z7QE{8v%d> z_fsDQSW-P*334#0Sa_-<*p&O)))CWDSI>r0abvCsK|Ko-R``%%AZp)~o}`0O&_T3b zhogYxyT$8x;&LqT2m3~!UD-qxd0Ho(LAQd57p(pf>5WlLWAL?6>0QDtRoa}6XITO6 zZEvRPK)jEsh-_942N8F1d$filUn0eYW3fPBYl&}gC12<tMe+#DY@!ERjYNJWiQ&Bp zhd0V<pSy88$BEPa#v6a<U{DoSvHt+}vhV4&ZMm6p)VONKldZWKlx-tO_l8nRe99PR z;axLo+Oa*-uz!uZius<OUp4ehW}Ol{?HzY6yRl}XZeD^PvpP9^O(xlI^QSs%Xx!?q zvZB56tU7CEo*cbi*wL6HXJYd^PkMb^#<%a&(^LE-D(z2o-k9jPncP^`rJ#wh%bIu8 z)vBNS{;lR>`N-~-MX2>Ad#yM2;VfNydM{kgURlTbPUEDGfc!(=ut>X3x?_Q>j~yCz z(7$u(Pj&VWgF$(jM7&Hj#OL^g9P42U8=o|RF6^HaRo)|VmF*~3p#^o-2ddwxDJ|11 zicVHug*JM*h`Y6)O_?8yU)L-XdzeqQ(})Yk4NH*i(RIvh{Y>zilmI)2L8ceJrCcfp zC7eIt%xDZ1PDM4I?S@bGEPOKXG#%j7!srk!FZr3-;Vtud06txjgc0y(+@JqS0}>BI zFZG)fj{cQzPyEr(?-=Yw;1o8&sD7B77)@Bv5V&ot!558bv@xP<t$aA{WuTQ(@?_Ay zW5^k}OM@jG7f$NN6Ms?=t+_CKt$tH&hVfdYz7}+=OcXaJ>$wpS7Fj0vL2xQ=jU#1) z!ocn|+J@TP<>F?-KJ)5I7r{1GwJF10!GXM{gAXTzi7suY%%fADiwq$ah);4T=+I-` zXq(PaC$N-Udnl!)I{Y6+E_w2KSyuWqo&L?NVAVIHD_CBu+4%jRiG@!o@!@(VF@<Y7 zxLZ5k)K<UJTGvZP<i2T8M^!0xDW*GFaWN0qS9quLQo*%)+G~8$3U-Z^Ouv_fuk70K zF}4?!Grf+`U9flJZ`JOf{<op#^p%qLkGLr3ioPP&t;{{h4X=*klYn-($0Qd&(N*f1 z#wz~5dbKwkw;dH9HuNb4HSLaRu$XSa`<bTM-Z6Hp+RM-!65YXumKH-QeX?|rsNDL5 z(BT?8XVj8L3WdJ`m8LkoS=^*JodR8|{5T?i`XrYUGO1dXlr4d@IDm+oblBgCjt4Mk zr$zj%LhsW1JvJ3cYpmB!+@8?7FKJm?WHgmY->Ee9=|Q9(ix&!6OmY)+$LWaZku9+G zv?K8$UxUgR!dNUkRl<U)AHPq0xocH41G=aFqDa_*U<#p)U=u|h^q!3!pEeT7v<~8{ z;g=~~H%fs(>8S~Okr+?tF_mofp=ga3bVG3^#5i=McMW_}r3wdNM!>!%3L^qpBLY1# ziww3Fm6i+xo)*h5L}nf&PAw$%MkHPjB<TetkzYviJjjvsGE^Rj+zUuX9<R)_URf+4 zn&6>0YN6O@q3EXWz{_x0T7NR$*qRK}a1To{JWJz^D5iH27ywHE9MSdPFb3r-1#(SP zu6^wBUGBHLazx)<D6OfAJgA<7X%1J82v;8iOjWhu_OB9kljn9ri!K%QcY-EPe8lh3 z;ok{#9PPvRSrNEH-&xK)aF2P+Dk4~)wD2ZM%Je46+yE0dbXa_}<q=bKH?;qO(0_h# zn<LZyqp{j*xby=2b6}unnd3dMBD^gol$GTZ{vQpR>wh$8G#PZ>hE^pe0fQgH5lAAz zm#@RMg$y8q5ly7YyrjPocD`saTq$7Jj)2M>q;71a5cfb=NKz?m6vwjU2xSzv-^n+B zP+a^_f%it6;6<6hE~QFNrHUqLG4`ZZE|u3Vm4}aZOH{u7QDhcY<#q#D!mPPPnP?sG zdAjlFu7)rvWvDo$sK=!UWN4`!0GQIHHfRKxx=~mR&nC1K6^%9Z-nZ{;KWP@U=+=hx zEn{4@+*f^4%f;(asjDNR##IB|Mqt(UdCpF51YbqtlXx(oR4OTxN{3P9#nuED^$bs> z$Scj<$9gWyCDD}mI0{Pg)EEdjF1Bz=cj~QgfAs+Dk_`N{>8~})*&436m2Bvq|JX_# zel2dJ;3P+?)@*0$WRS7glb$wgjQgWVHu#~eYI@8at8#iNX${epCk^UZmF79hHmwpL z4aaeA{O(M4#s&T7weS$5@kKG30g=3OmrH7f)zgK5@w*>g1j!#+YPtiCZ``yLxET73 z^0fd$%JHjVOTpv!Jb1e_911AHF}ynaf|y9J!}f2qz>KI+MrWtnFOAB0HA^{6>%WrK zAnA_&CnDA3P^#Gm6&SQ)x!-}^%#W|+&zbjzyfiZIV@7fN2_4o?MCUwu>Vk#3n8|Im z8DRuA?u%tmn=3bayeChkF*&dyv~KesLBp<MnN-y#Q*t8CO=)BD2+1Uv>Dof=g!fI0 zO2$wKmi*c9;0D-%toeOGZK4R#k8%_z?8FwX_%kjs4M~ghG|1_i20C;)K55kcCmipl zgzKb|%3EVpk+;--{;iA0U~Mp|YJdv*_V-BhxjAWDfbkp~%J<mgtVIStTR9s<$wy_? zOXVHt3SA!l`i(|0bU**0Yz)er=f>~R%&cx!)u^EysN)j6QO~>mV+<$JsMqe}(QM=w z#j`(3WTJJ;pxH+cNO%7VgI2Tf=Y_gd!c)_mm7>TGOO>NeUNt|R5_d468cFFYlMPUy z6QA<#gSTUFvQk>ojK6wDXA7kri&jfA1M<8ap)Xf-wYDS<H$Cxus(pHit)?`GCNNgI zF4~C_I}qhO5hgFK+GbQ!tzT&i0%&;PC5etjn_ZPP4*uZKfacz%nGm)yz~g|b?=o{b z^>V2M_KF<z+*hDp<4_*f^n&O;l386N9LEY+7F0P9Lt{5$`Y7tEvP`YKxAL%LmJ`H3 z0q`|xV>4B@j+1N2dCNbP@nKG{RV6L<X9T|yjbf4|*H1N8=1&|M<40yE`<q%>l@-_0 z7Z?fYHI|If+?5|Sar;u3XB<n4R>#X$zY*l8hz-wcO+#4CZgt$tme=_*nfDoB{Yo3H z(CRaO4~{l<Cw|i`yD#Hh$v-j7Qq{!g&}IH6eYLHML2K7iJBj^QF5^!k5NBm?65)V= z;ntz&5LBxieCxS1;kC=oU4>zy7Jry=r&i{jG8YH^lB}|Ow3$)q06&P6=^S-L#`VCO z>-~l3F+JR}!eK9<3e9kHm9^FmGcXJn6k%SoVs6V9b!2`sqcn@AZi3cY<@l5mUAb}G zxbdoWt2~@7Hhq}UxP>*E4SNJ!U9u8o&X3KP?bglrT2(@5PDhWCJL~o+YnV?k1+jJJ zdvr08^VctJ%+v`}jV|i)ERIyu1^*`1BO<_bAB-nq>YY<m*>)|x`reqe?c#=vw)+P1 zhK!1aCwaW@##~Ag*w@9YctYxBJhMNGR(rim(4<uiB4f+)H&hip+zf_FuF_XcPl(@U zy69BOc)?speB&I5*D8Le&fVtp@@xA}mvZ@oH^*9}1f@Q#74tKpX1HkR(zBS0tg0Av zh=xxm2jlScq^wUL)Z}@EFBrtH%Y<IMqYibcGaXhGPO;V$PThmwtp@L*7Ww(zyZQ=D zy?ghYFU{8-)p?#R!=v)38pIMa!BV4zHdO@`<vr(_eMbiKuARG!@t_I&Zs_%J6kn~8 zQ?g!X@Moyrf9EN(L`E_5-}3Zb#XKdu9w)k}r?X!6+FoI`Ca;Sa_F-peTjfS#`W7>A zCdT<j8fyvQ$54EfFo#c{WiL=aL=X_)Olszw+eS4d6Sl#e=G)xs(Bu-Ia(9!ITd^Re z<O3V+jfs|-n@K#unF`H-f^*#M_3+zdu^NA9k|JO)L9}dRr5#w%>FI^OE*QwJpLmJH z;dH4KJE#}$slT=lcH&ZauMpept%`E(P<2wd7GI50|D_hLytHO#+koZpQ>n#6>bs1L zSi~<U`Yi4z>o-IVsHHjD_d=!XcZ_2h8-X}YT<FEqrzSjl$@3bYK4sZ=+M7bSVsfW# z1~@)i`kg-*<+}PvJE7OE4Zkl}?e+j@sU~vsBZJ6Btf_Vh<mb`&FZf7s0pg6*<iiRC zG&giVuuDW!l@hsp+fu!KU5kI<lwYuUHQXV3)`n>Q&Ooe7v*yU7yDM<V!Q`z=Yq(F* zWGmvXx5B+I!9|OiXTjrQU9XkkE{i{=D|szX=O2!7?M|(d4#1b8onDfCz(qUwhCv*S zuFJ@d<VcudrPbesK-@@+z=(atC}UfRteuanAB1cK7ehAOZZn~1)5T*U;%T=KYjYLr zunOw%6hqe5vUpg(EhMEqVoWLtmsmx_7Oz|Gyg*ryszyc;VlAa(y|j@*q(3TFkdmiX zvUy#b$}5OSi?t9B4(J?8tO-gre72w0dipjW`@V_w8`<=I%kMvY>^t7>KkpH^dF(%Z z6u1)`_)9T(L4gv-JBYb6@Hwatmj*>eWj3o=_EnM~<*4&bnoN4CHlhu{fI<I`7AR;# z1M%i#%coUbYC0SuVHb@<aeN(QBkc2?)Gl~Dj9%EXVBAxDVm-HB$KT=j&I=ovvl*8& zG;i5<7bUd&XpTe{11w8WK`$$V4=$tUrDNZQ)1o$u5fD_|Y^B3V^U?7g;vDGQBOZm{ z^+Mdp=7aYDD_t<vh{zvy#k1clJM_i&o}38x8yVBt96kSP?b9ff>)mlvFKJQH(C}BK zE+}5xXi#!xPug2qgEx9-f3Mff_lB)KF_q8)n<}UuQ-Jwmk5qYYODF&^vcKSEU|ul3 z9smIpPUm_F5R|4i0PthYH-)!crN(WSZ7^P;pcK8Uk$4B*=~a!+qDlw~z$NCqS#&;< zp`HSF&X|C?`oaQtCKCUyhJIXfr>o3I$KE2L?$E>nmr{A`qLu#*fpQJi_oZ$1Ee*{m zLO%QL?f|8+spn6m6(q6(NPMg!U;>4CpKHw8?yQz3W_O)SIF?!(kwnPdlu%HJQ6JuR z{|Si#7DuUDgBN-#wz^hTgiOD_NsRU*>-|{!r;;I$R0>(7#};wdgnv7eb&oJ<qw6zM zOmRaJMb&JAX4&5Z`-lT)&==JHiuTV5LjM?kGFsu<Wow=I=e~2Dxc&OfRwq+^d1J5? zS;%x0T}TpYG}<r=Lu9)U5|AThYy_P~pZ$OnuI@)u9dIIU;u4iFNO+UEom~qtZS<el zQSHTo-UaT^67@@jvD7X_aOOmtoQ_4#4V&?`YLdV&$t2HSmuV76o{>pjzOlFj`do_) zTuZ>Or6q6V2QHN@W|amyZ(pC|Z=Qd}IvT1ua-}0w`g*k<aqS#-?McF^!DLB?2x6e4 zN8I}z{q=Xeq?ATQTrf2)T}d3|6K@3EmCjneWaw-4$J-F)gO4n;Upd@ULW}15nQo*B z-N4tc8D#s~wEmPm<&!zpVsaK7JBxl7y<`4|-%c+DeZON7d-Aoc*Dee|_uO}RTe7&_ zab_tKg+aj=+{sfS8;{3q9Q;<3OeUfj9wWbv%J-~E(=DF?rTEIHGdWDUgVBNeWgmE* zw|e838OifRf*zjGGs??Ccq7Oq0+(&IKi%@N>MG0^@r6uhNrb3yf75r+B2-xJXrO9s zq%I|R>UR0m-@1TN`1v(4mvJijZ%0#w#=6gquItlpI(d1_hb&PkxRP=jzmFsm{!s5x zCfvxEHKgfF%H5wU&lP)DIJMbwv?!374*Kiu;83s_$2#-2jZMPgrrWD6PvBIy&sX38 zyQiT+Dr5v{f|!ED#XU7tI_1?<)BW4=l{Y5tNqybckuX_1XzVio$)&LL2T2QW;KOa% zYD<{r5<}9b2Y$1Ue^;RT)qm<VLg0023X{a6>*ky1BOlFOGX+eIo$ra)ox{<UcBIA} zW54;5f!}4xIJ>5+X+Vb*OO$?QDt(V<sgGOMLT&t0m?$OEhQ*KWsBhxh<S3sRrYSP9 zF6AH2OyZAtB9J2^9jd<|tp<8WB0YqVmGyzd+{h|x#5JBV+t?5NAbWJmuIL@|R_k&i zPqPrAigW$?LB3Zv!`Fhn_;p>~PBUV4eZhkq3zxQY{k@DK;wl>d_@BhH;x=+4sw~=W zdJCEJW-4!s70Gi=GqL}@`c|opjt;FXOCe`7MO$h?=l!tBzZ~qBQu)2Mbk(WmBmF_( zDJbjqCe7LK8=8KRj&`|;zEK5S;5`XI98>C*dc6v#O;6RY5wkaRN{nxjPWHbky1g3z zSe!#%Wf^|N26Zz#rc<o=fa-g*sNQ*%u-W&A&hAUU-}mDSyQT*@EhdBb%umT$p5>)s zAtyOI9#N#)?mQ$_`ix!L1aG;sk^@v;w@ns1vAIhVI5k%=yC?8fvR&A1Fy-#?f5=0y zS-Y6cKCS@<L)9Zt$fZitVi@E~X_d*Pam{WPmAT*eEUQRz`m88u*7>Z;StR?csd=m4 zu4@Fj-Y!aAct<W-zsKh%cPXV+Snw<zid(w-tavumgz(nHq`?e|OYB+Io%re&xpZ7H zb+8F0ZUWc^w1_ygsv;)O!SS%g5ObFPFOJSSD5|fG<4Z^`-6_(r^dc$UoeN0kf|PWF zOLvDX-LZs#pn!lN4NEMtl$3;obSR3tFTeMnJ7?zHxz9P@=b1bAp81~h$shvYk|*X( z7lrf3<bJYxZMT`BR+nd3u+JRwJR!~Z)a;llMa&n>9(?ZeUJ!3dcEkQ=Ud1E*&*jwn z{%4D`JaZ8@bCP6#Zx%cve~_%aPychh8BF%?ax3+*{Lg)VgQ(xg>qT%XcbD*ih}kN{ z$+MGhxNR#O<5t41DBva<Nia-+V}#3m)BZ^6flor#y)K_q8IL#1fj=)Y!gpvCZz9kZ z&1-^&Rprv2`P9phIuh5@(+KH2z<=4(h~*Zx>Are8(qA-Hl9+cCF}3mlMGq^<UJ;D2 z5&0&m3RF>KCXH~mvL!3T4Q;d<H?JMeXkaEav;R1ft0`iL0SPMW8UYS*p>1r8=^e_v z-1O--eU-%N$I4=U_D{MAcCnsXenpHtrKK}Q#PfVHt2D-|eG&ORj#^s>=p#adjpCp# zN*cl{JRIiwVVINET*D=tJo)gQkOM!d;ZYz|WqE)}%eT*^FIA<<57nhK>e8AkigE4` z;P~GYY%^0;5pZ-mrD91rk#Z-Eg*E`NDhV<KP03+Q&)A&Jsq<ftjMii>j>gq-%)@|O z<Vy?*L0i~_auK`?*fUvqdjj>+bB!vI1jH$$VcMB(*lK+8NmkbuO1z}TQWw_W0sJD^ zvQqRpgzAn|*M(T(%=y6B6cqLS9gh>PSS?Yuz7Xb1)gci?vZm)x9b8#C?e&6REPdRN zz5VkV=lSG?JVZb(S4zSVw)3djalJ(3Rf;EWUPUsB3wFDPPk(!f|L6=GE8RGnlrcXR zpPR;al8s+((7s1W!c}DYiK%!dn8m`o*_!dIab01Y9`UFm@H6KuFnnsE6A{?rc{(Zc zo^r1H(>0%gJ1;it+sr^kMIj^9Bl2x*yonc8Mn4wEahYD@^!Z>hcEPN<n+FYXdcJFS zffmds0<)C$r<7K4$tDNcl_4%SY+>1|mg0U{VTFw?&0Z}YR!zX=k}LJ+zjBp+R5LYZ zab-~W>sSK(c`snNGP~GFC34)7TnCzGDq+ma@5C58czpT0oU}_De^An;(YlEcNH0p+ z5pP~#Qr?#sI3HM_$8J6*tgj}|U$B-y7d&F&j9)ON@y)P;Y?1Rq&Jm!-2FR9QCBIB1 z7u*uBQ*bdMhQ68UP3&XfSL>tQ+Mvl9FBe9d)kSfTaZGDGdq9VpL$2Y^jWer)ScqXH zzp3j`&eTZ~ol)(h4{V%NepSy4BPRqtJv(d9)LJZZXupo~^Qu>m8#a%Ip?kZ+vtFv< zqxRF9E$OE({k#&#g&L;?^c)RO+olDP85ce7m$R93Y2U<M6Ig?rW-J4$C4WzL=1Xzq zzpo0|K#(>DX;j&i-hY4M-rg!C)J*5DfPlPgy^H;*M58&TE0~@})#BdTSt~q4`RjB7 zQ#!h%9hUx#zJG*#2)DpISc7H#S!=g7w?8GEBn|aG%~OXJ8}34E+Tf*qXdL9c=POEb zVsE!rTT<ZY>B#RY?K(2Y1J;Zk9M(_{UNZc`EE4s&)KZtGXap=T-l-QUBxFTBPUXn` zCidFKp(%Vrp}@=YZuf}Y<k73@W42l(&6}`MdYNceARtNU)bRF;73yZYf~JL5{-1;k z<D*p=`~$?iNrEa5`hHY+cC8Dz+c%!@g5L#fGOKMJcLp)8Y$Qf0+Z_QU0U<qYJ%X-w z0c(-m=*L#B%Fmphk5&ZUvVKm#tRS{&DOxeet`cKf|MP-BBs#?uP(#xa@Cek6Y3%)c z{aK`l(dseQN+M7!TL7@CF4+^Rt=?Rv@FB?t^jr1=wFgH5V*0wyk>>+?lJ!e3F!DS? zxL#~eBR}nM>4@Pnb@j2?B`Uz?vDo|vUWV156FRnu!hsTr{l-?HvEbDV1-)hTLWr>t z2i2RRz9WM<&^`4(QIT4`&o5<*UCI-|s3fHWj}`vK?@>Sf*Y2F~0&m%W%?Nog$cM^5 z&YAz7mHqyp|GGSrF_wDc<@-qRt+X}GZ1p%4X*BTgV*h)Q`uOQU{giE9{I8|)vRAvm z@->f9S4;~Ye{SAjjH)Vs1GqQ`^fF}^niQONha#UCh0oB5v>1o|sD}{~P$eDLy!v+F z3pkX_%!aXvk~v&R6U9*j+9)@d!J8B?Aa4wZCgrpU@aLYS=q=m*YYNOV4d)Q4fT8a1 zHUf1RwKO&56buKjEKjT+qd*Yn?(mpWQ{g2ZESk=aqmnE|L<)%_xUW!~H^w!C5dvU1 zqqr7;K_#k1L+p9p*-w-guCTrZ3KH5lSB%B0u&Y--2a*k{3a?)?X?J5Y=24~?>VCR0 z|DFYKS0acVR=m$5lc^v}^C9|e_^1*V!LCF;QVC?0;*nLN>`6?>wRqL~gogS~QeYw= zDmRW@l*~LUM5mk3-8aeI;ZZ%C`r~Xer#M3yHcA`<<{fOhOG%IuI+VDMF0UcA?<Wm) z-7C$X;RPDe*VRc3HIzZ!WY_c9sBEQE5daE{pg~F(%ndB7j%$0%CNmN1zo61dK&kjX z^=netRc=h@S5I^EI93hH-}8x2D#^^qS#$}K#tO;I+JH@W6pnFpPFcXroRnlKCjnJ5 z245T}3wBX*V=xtEnsdU=VOE4WIUXiA;3bp>L=e%Y6!F9@`bQ1zKPt)zUftMX;^~nL zjW(spZc|@2GF2MJDU^+eCQx=F-I2|jSWAU0IXC-&vE+S1VQ^gFV#G{NG<zjMbpx3I zIUzs5(BKh3nw&+emdu)*Bz-j6odTMA7yeWkD0z{@hoWGF=Q{LwdpL+JOQyBbv9&D+ zNL?l;A5fMbJb!G&A?AY<kc{ILk0Z7%++!Z?c=URZ+v<CLP?0&OK2M=kHraF%)dY{8 z%1-*@LyA{?@K1OodlR8peo=ChuRbO)s-ftn$N>&nv?H+Ce;xLb((uMmC?#QD&=XoX zk4f}T$%CP2bxJ^QHR0PQctse1f*6hwg0RH3j;GZ%?$vNEg4*u6FRObM5J1i*I?pp@ zSai1&JM^Mdo|fb)Hb5dKu8EFqa3y&c6<E<2ELBk|MhM3XE&UGnRdI9Bq$@65enqLw z3Yss;Fek&W;P?y&p(o2Qe6}53p^OC%Z+_7iFK5;G;=I?Qbi6QjzKsUrRZy*2IyyXF z`B~KFS}-~Zzo?Ausw8xr2XAXuauu1iiWc7abF@lEoS6m^QSpZFJ`QIOY;y=U39eQz zWP%)2<l2|%@dQpfdOi=PY2vJji3wCok-X^S2`~?aIEZlb*9z1EscF+<7$U~tsSToO zBUqNl)Hpdtc20i0nX(cLsAy|KI!Y2evofqG6QX*)u3U(Cv`lY7izMrDGUG)KLpOc> zD@*-(kvKSgIFq}{V7FP=8Wkr|118;4CHhzH1s@GSiYBzkc=NJ21JNjV9o#|~xUm{m zVxDVyTn9)jDo#PXbJR9<AfG&H#7l`Q(595Nq=JmH+rbe%y~4LxY^^V>R>s5BG}BHh zgX@c|pE#(U*EdhdP^J`75i~TRWI#hzRfF9zGK`4#KQmBD1k=vc@9AK!*b3J?E&ILP zIF(@nmO(B2<(ds8Df9%7+lloK8QwTHg$0Kou3Y-Rvi-`YoK2zn_o5Xim3{RW0*621 zUt)<iLFVs4^-XFEKrQh+C4ey?S`VJ7)kSuysF6WQa@CeLye&X5SUir<L`M7A4w=6_ zE-3xV0?=s_{legx5XJDV2@}u2wt|SeWCTh~Bt{*!^!nhlwG-qlWPE5d|5ed`#ir!k zMwWI#1MMX9H?`YTrOO<mMSPNpU=(}8Yc2ADGE0gwhxe_^2iCRKSI3sw&qE7S4)Foo zDYR1Ru#gmam%Mkd6#vvr(&Eg5YBDDgvR5woB>Q>zKfK3ftS7jvy+oa6hTtqz)bFGy zquk$}n$<$If#r%o{cOVG?>(i&z2%_ZN}b+nkKWqU-ukBA#_8Us@4YR=AIh5uT?mUM ztupW#gMmyWtnjqC23pjiiOL5uHCeI&VpG>W={aSMUu}=FaVYx$IQVRMn~0>&Vdfhx zH@hEQeAyLJsPr%0WEhr8!eNnteVu^=kAb7qf$vQNr_%%H-v=&<KVE}A-s*h(>GAPb z>c{)0kAJ5>V!nUG0uJJM4pjII;58FYW(^XiRqZ6c!wHM>#YfP*dyC2<gNSrC7N+?( z5rYYcLyI$=YC745+B-$@UNMoJvf(^_LRJ8##Jb~Qb8>pBPD8wtkxWcYz<@(UNC`FT zaW(UIiiT^2I8PXjC_m%U)E&|4qtiJVQAdtwtdAJ}8PV1qHTN8S{%q7zV3a`}Sg~DH z+`tr+635?^bg^O>r9;4-+{so+tk+Et-#td$X@0GU_p7@v7)k02Qx^|0EfYo9H&Hr0 zMaU#n8K+GcHBVq5eWU3m6KQ`YEKVj;1tznRqj?dNS!t8G&6B0plf|BsC4VN%N+zp4 zr!-3@LIT~E7%6Z?IWwPdwy)Ew8FRilnew2R?tV7?!J6#d`gAuCIjuO|cQW0^j2yNm z>x!8ED1aPCPEY-rMhZ+jR=zkm$n6RY-TLK+q<F)oMEq(rProP5wt@Cx;r(lK3gdM9 zeFLrG2VxLR(>Qq;NkkQ|3(E|mb_7xOI2Gy{b74-3X06Gp#rPW@&A)jvk1I%yM?zPh zKmBQ)mZ;xzs<DJ%14%A7k8LzhGJ~R(o1vVUr};atQI8^?L9v(4bIGCb<rXMf7M`5W z^Od4N8z_vR+-D{|lxQT1Q|_|}%e?IAf?VW+j2{1HLcjr?SYhL$X8)qz%%Z{Rq7ez& zL=X+pLz{b{pO;enaEOeDx3%EHe4`o1_$g5ibD7-MSjlEzwdZ1(sld2P9&Vxjg3Ez= z%fVjDq3O%vEz6NJ55(x@Xp)s!!IgNul|-+V<n)!)(v@Z1W&F=ol1%7$hN0}zmi(5; z*Db4sEsJ>@s|Ba4C4y_^rK^?c3R!DScQ{P(e2uZ6YB^9HE-aMxt1u4VCH2evbB3kN zmg)~1x&0)GeUUTf{Aq)F>&<_@WU#DH2(C}sERRR74+w4`^)^Q3)(7P_Q2pzlOE*^f zH!xcp8&fSC=Gu_D)74s%H9pO?@9CSTrE57et7j}*-{rQdNwxqxWx+*l-`w7gNwYeZ zhJ50(-dT7ZdDP_=PrH%&1xSk!)Gj0?9RggT-+>U8{0NGF+jLQzw42*B@?V)*#~usq zu<7qGY<^|s*`c@H;V;`^+T0->*b&P3Dj>fr=Dqp!pLVI<jstQL&N8HTx_jKPYsj*v zG`p)px~HYTrxmqnU0Dh}k{q<C&?&9=nF#ZB%`h}t4WbK-1e155=)%DBRhJ!h{ad!_ z6$}||FTB5ccz=6goAEO0n^)^MH=zSh`2$zh1MiH3$g+bd(!(Iu!|<qs7~8|R*#k^M z*<sQd`eftl%cK&lE6Lmp5&B;ouZ50+vV#g+gGyW1N=T2fI*#C^$JJ*?HQvXStw#lA zC6O^LXU`+yhY1P4M4tNjwm1g8s``FE9%G$NA*g*!04^-K`~JG;IPdKHNb6do?a_nh zqde+(fd44I@ubW)W5V`i+WV*_@pORnv_j~lr|fhv>SV^dq+GsYsO-d&h;1+G=xfv& zI_hY7^JF*UZJGDkC!U~%fn(7Uh4|pJpZ%qbvjKFWXEuU+Jy>6xTrc92FEm;&a4}Hc z&4eP}RVqwEqKv|?=yw)tdxCf2bnopk+3)Cor@kmYr9KLygP*Jd%g4M6pHg1xpUz$+ zjVCnem3VxJnj<Zv?>(Z07Ou};$ef=EWnPuHUb*m`wxuu`V_nO=N#=XipuZI)ZFh0Q zdOZ?)wk3TlK*mNLdTa2?O8R9ah|vVo9_(<m5-{w8Q#=^((c*inq|SQJJGY}(VhTX~ z&P%+ZAF*hf$-zezfV|7w#;m`=_#;1xx6fCAt06<g)Z(tenFS2$1B|~<Mt({T8x{;P z{wR-HW<L+#J_>4`{oasw`Y$*VadT?vK<9)x`S%mX^y<TRSCg`T2|in=&6!c+uOg|W z_65W0C2oJO^L-Bk-!~due=ID3ADp%cH&?ZW7FpcCj=Ik(yB`eRU)$6kc=LOZEc(;d zpMbg_TILNa&A%-*T#Y2jB-t3u615r3tWHFvoje1FN!d~X_=RN@-^*oJfaDH}54KOB zrBVzY#hFQ68Y_p?)Y=9?t?rhX8|J1!dPGy0QNux6g1ztXqFOzb>9KlTU7EwEFhODj z5bO!pNdHYK1ez52X5c1ibH-u0cxY6kl`rJ7ws>UHV3eA`zH|XK44Vo;^!=i6K*k9Z z$Nc5LwjVBcqe0MwOH_V|5ss9g){%Uo^ghsLQ;*pE+n4sB%TLxH41KJ-oKgQ;nnHXm z`|OqzYy=q2Hv1FKXVW8AyjNqQ2+PsUQUTlJsd9dcg}%FLCH(#BqzIG4rP%qkubNbN ziFIx_3BPEm_?z08oH+LlxsNoK)ZE1!<&u4~>6zX0F0V?}pNk2(wR!l_L#f0a9354i z>6!hJYLX)Wc(9W(J;UDjT8sfHf=&1rCxZ%HGYV!PQyC*mSakQTSQ99UhY+gXrX8w8 zyj@E@WhebLrN>XMLhY+cS-!@}(BfImBbm#%qgnrs)}&5`9^C<I$m@`4sU5Q2B@|($ zIG&K}x401nC9I3(Jf$7#{m!wn=`ktD8!v_wXtB*RR%hJu7oFsY&O>RG26g&sa(Y>d zO>t6K8duXy5_MGae`Zdb%9|3`k%;vMX|=rV_$1m?-0e40nQ(04^f;(cM;$2jgHQ|Z zFtVarZUaq%zEA%|;8NGj`q?#GGnav*DD+d3ijg`?dK-(LMtTwl!*>*ZRb&EA75bcQ zBa!YKKZ#4Zn%}$^5M#K;H~Xa7t&3)PgMC9|{G+jT96jcns+L+8H7B(`oeGV1)62;j zO0EEi7+qV!yp6e-KZ%!@RjXTMj-ln}nfJDl)BQ~d0Ss=S@K1@gj*3u{0e8^S1PQ`& zR9m@mRhds<d0PUVbI0KyyX!vsm_*1!I6#^dzUimXD^QtAs+YZf+`(@#)~kJX{YB_y ztVN}YQP`@JARV4*2l`)M%VD+eP0n7}C8f4wCH4l$FfDFjzDp&%YSF~yTe3rLR*VkK z33JtR^+GI$MNZFD+bA7|B%d5rU`j$$!vNI`vHAf0x6~s<w$@C3Raj0>^vU)Wp_7-> zPo3gL2R~juam-^T_I%dixzAHiv&>DQsR(aJO_faH1(CP0+NP0#OIDKn)K>x2X<u+% z<~%z-8!HDq-Bj?F2o?@K@8Q^)MmGrt>%_>6Z+SpYyCMuyLe*sjRp@`mN&BT+N&j*e zZ91tu`_u8ZK|SDCdiu|_z1*tIvUxF&7TT>C?N6V@K%tzb&P)`DH&xEt0BX0-Q`LAA z%r4^EpgvyZ_1{0~!UWh!r^v@%9=3O5v{Yd?N#t!+MtMPxkoKUXeC`UPMl8~XCl1{z z)e>TjE*I=1*-1$UgMs-3V_)O2+jAgOT}iszbs(nS6ox^2GMwB-$-0E2BGv&6m4A=8 zynA#ePM%_NLGMOVeo#>k;06i(lWz7agv00P7dnN?Qk{ee;nQt*qaiMrF8Q)LpI4HE z%L6GijMuGMTO5l)zYWuaDxDa|-6jMwF1cJrEHJ=@qThr$ZvLJWJrbYDv*i55rZvZC zVTxo9NC4wCY%wTJO`D2#`pNC{g50=0c4IULeUUa9Z-Ot*sV+amx9miE@pc_O5nv`$ zPsvxm<XD$1G4?^m{hbOU;%^n&@-%#TN{EIu3uvnW35xKR@l(<~ii3Nb-y)GbwvDUK zq*QYqcW|AWKkiP~x{?uC#k?ex-!)bitYrH6nPjVWD>uiIs;0u}Q-i<hSx#l3a;1Gf z%?Qjpk2s~G93&|bDpqJwO&^<K>4eZQRDV$&x${}En9C^dEVnw=xj@p2a)CTUJXfBh z0ixWU-ISE2|F?#xTb@Y1M8dh^wug)~?QNsT-I&wSP&7=!T!6J-jjQ!*Jbjc;6VnYI z>4%eaqri@CHv$}mY(G?*@(Se{z=2&&&RtA^6EBm52Y=e3;0dF-nWS$GLP7ECnUD6| zDXtL@>okd>;V1HzNT1SF7tf>yW3xO@)l}h@qV9j4xzT2yZ3U-ZD6R3B3VeDQhgS`8 zo#E&03K+>*=k#*^8fxhw(^CHGYPE8VW^LtPdX4-C0qym-xsg-v{OQ|Yd#MDDZ70xT zKqF|LmZ*F6zOw0@JoJ{vSp2%-UoP>3Y2z<7Ov(|b0Uw}TExi|A6r+@*66(+27!8^y zN!{I4oAFJFWjJnC9mdihj|v+x2HB=lbM@c52^$dvQm1!69YAOa+N^xBEG`p$@Uf>F zXy#T@lZZ;C@B1Xe4^`h|(KLwu6>PCx+j!U5RI$^`H~GnBiFRDLjsr>gshMGun#28r zfJ8&O%7kd_6upsl^_ILZP;<4k`vdHzUC9Y)poF^1QCAmb-5PV^CR?2(jlYs0v2=Wl zcPl~I-r&lD*SZ`t$8~(=*8tG5q{HfLrqRX8YI?ER@lCp$Xc}z)R@_kTHDs0-Gwc6o zyh2S$MPk1B)TwOpvjBTbZGZ|gD^W1=#mYWIzi*kZ!INh~py5zX!6>k*O6g%p)N<W- znWyz8Gv6Swmc3O2srk|~$Iq*a7L&)idfomW%N5Hkw{G6HxSV>}$imCwufXoFS*#Vd zWORJw8|VHVFK3^5@O}>4N&6VCqSV_nbQyN){uS3F_^8lK%?R8uZf!U-`?^d*bmvrr z;V91YZsGphMY1QSx6_w^PTmCnZhd|)5j?B8{S^L|&;7^pZ>H50^+OuzgnX08h?e4_ zE-P66Jx>Cy?Is7&WfDc1D9A?aj-=mBlv*1K+Ipg&MRE0YcNxGILIz|sLNFDP{LkY- zGD{S80jR{N8#TI;HQ%#Fy@S;(jm$?LFBohR9KhR=xE!SFD4CD&9DV>m5m0|2W88q< zc6KEV+Mo{pd@9{D<9##kzSLQ)vD0yQ)ma<!P8J?56x@#^@r}3Nwrs<=)$M?qD}D~F zh0G86Q2geS7himf&~CDi!?r>9<1;<*m!E|LD+da+k%!@|e#zw}%STaM$4X@Tb(J6b z)_yFjsF3;8>-_oJMcR36qY5PQ;B}6T|6DU2kQWi4)c$)Lduh6L(?rgWPmfw|@K^JT z6DAhhevIVtwXLCCV)l6SX4Kt>xyy4pn?IZQ&+guqyWhOG`+M-S|7Q+HAM<M*v#+1| z_meBx-9UJQ+pzpPSSDOs8b?>L3f!C9q#&X547*u&_Iqasd*+j>vX%+L9V3b~#gx`B ziGETsk%ftEI57OXiqLs%00GQl72k$;2p|<7I)PP1kbu8}ug0qcxQjlNO<@)o;?NwT zVWtg&#i|)%;kUh^1Ad?{8Di{H;^7nlCE?ku^ftd$Mo)@oG$|DI@|HF!q=_k1;;5ue z%cD4km3F(p;)CKRJ(oJYSOIcB-uB%ysYs-$WP}grg{wUBY)|D-Im1x|r^ym<bYs;t z3XSw!d}>z`=y#x0Q67G{VKAXB`IMomWj^=gS8|jzQKX^#w|fj*P#Y{#Qy#l1#(@xz zfQ`te8>h-5&Ts->ED0~NB8G{RNR7TAqC%;5V$`@Z#?*S$-X6=4UP%uXPa8KHae-}F z69YlwvlzZnOu`GY7`5`1r&z@$SLwz!RUAwi7V;e47L%KxeCpFDRSq6kOO^039Y<LW z%KK{sP|IMdheHMWLpn7=(i&fi%e=Q5%*WA`Ue|y)DQGp12kv#oB4zoDhjE{ccREe@ zBHyyba4t?tk{}8DG*bdau!BUftFjVXJ|}jF5(P;q(XHcRzm2yjiH=-}mrRn6G{ntc z#DA@u0yovleKr)xrdCxEFWc}bKTVA>Zqh_+fNUX=&lEGYeW-+fj(4Rf>&M)khZu(A zjEDiH5q-moeN$S@ik7Lew>Z=2;VB8=v})XN>q%?piCl-c3c9-Sd#;Y?vx&OlDS1^z zm#iuI6P+t3m6s>O;?@%jO+=0jDGQ<SFj?Z3M*I?STn5AD*5X7_HX>VCG@v`$%5&5_ zO-(EWPpmM}ZDiB|j?Yi<AxE6Z?hg%eQCAB~%MAF)`2^__ksw-u&zPnhS*T9e7fWW% zay+f@azy9jv;LjVsa@y6Jzd3}o9S;S(+AYZy?~GVrnB*jxZ50fCyTQVQo4GF`X?u| zCrJGhfw?p0go|gox2AI!x^uUS`scU<SI=}W*D<rhNL<H3gFkr&w<88O)N^;v26qv2 zfWLFUROkNG%$=^!VU-#<YCiD1*;5?~5gb)3FudBsiK@0o9m9GL0Bj@G$<;;t0^I>k zf_UDMp_VVBj5k`h#&Iph__PEl3hU9?J)~9kkf@Z=l;>1U$tMcj7)v*$ZRFf}%^cS4 z9PYmUdGj15&ESICfCpj#cw~5m)aO%MxO`?T$YQ{$Hz&X{$9HNBdSoDgUJ%(g78W$Q zduAYxHh$W&a4T*iNn;|F|5>PiL5AeBsLkh}s`KFf1@2Shzq*FFG;@ESnF{KeKKlC^ zcXalz_53hrO3gYxa0B16#x!!!RA+xtcLTGiw{NO_Y6={kH`JRV<45a1g6Ka&ll?Ze z3>eTsC*BwfKsFYwxY{ggA+|IS?0dAf7uxLaqFpUIvQ5~Hpgyyq7v9}F3nMA<l&?~p zGHynODgrD`ahYhe9g|0ClExysCrg-zP}B)FMl%lC_@1R&1Qnyo^aX9GN2S(rE)$6_ z1=W0L%r}|yt(;5sCU9+NAl599s_sSI(M3Zw3ws(7r;SC^eN$lMigqL<u6D)3W+my= zG}&gw{OM9gsYN=;YFeO$!R<=Qs6~?A^Q^xsIgeJ;BA+{SS>*Ox<ixM0b3HF`SuKJ* zHx^7ui(IkmU(BVk#4>qfZ!?fiLbwvU4@rRtm;c3}W8y8Ve01wIE$m!`t1H$beUN(S zwVJ`Px;D!ia;uixwOWxcO@V7If+-#QrY#$$S8XCbO3i$^xvh#sY6O56D13!^B|sY> zvf&XYGLFv_mz+gA{B)l6W;8-d50Hh$&LvXBnPLe5;IplhRpE=Yt-FX=cYHUCw7{}4 z9T-C^l`lS`@GRx-5N_4`Larrj<-pQT0_n_8Syf9}Be61YPFZL9vJsiGnQz&ZPt@6O zLrJ*#$2cWcEoEQU>RsSQyo+tah2`<g+L-&7#-~JWGqyYFM0;K-VFXpoM&yeqO@x0^ zTYt<=5k6hMJf(vjcCHzk3$G*67N^*@_7G!pvcK^s(DrP9t7hKr{*nFq?N-;Lt$%vk zINaOS<lC61+jtV&=Nnu2L3YFg+vs*el99ISTiTy1wzt@EH#vzvM(rEfzJ?lNy)fEv z060)ZInZY~FqAnkwmQ_n@UAWj#h<5lDy9*Akzi{58bsvCF677|@5rgY(?C$ac1V<) z1()h6J%{W>636QT9QkJ*1vedq&UQGfsM9o4wT1~lDW@%7?i^GTiQ76!csog+IbP;} z(RHR@aigq?bRvz_ZXb1$KXX#}w@ccj3EV3XU2@38avobyr&D)U_jcBZa@Hnc(Jyfx z98v_vI&*dG@Qpd^pE(=oJBF>`6Xs)p#IklJ_DF*t<^uXIX5KF5bzc!|PMh$o--J%} zq5Bk-^46O!wr4In#H7S|`_kUX#$;l<gp?=pP#0S$ROn#=Tx{@3`X$XbIqz@FqE9?# zp<bKcs>lUmD(Qf^luqBiHPYkx$-4%8b0PB2^p{ChUK$M8Obn9Q4QX`^hdR5=XFlE} z@0-v(N<QH3b&Y0qQ)o>o@5cJojm1n5%anz+b&<|=Sj-gS$eA;0m%OfEYZJ5SmT~6j zM(^TMh?~uNq+1x5Lwl4XbOa`HsUcVHf0S(xfcf8wJfZ%ereCjTv7fQ|qKwp$=sHQu zCss=_R#!2$Qr^8<-@QVSDAb-Jn${F|rNkl9NBhlN$Fjp0&6wF^dRsi5G(vT9vNk*q zQAM2gGTh)Fs>+%hFDh|OjiTFh0Mw>Rd1=Z_$aQ9MTIKnn$37kan1_0F^b_QpJ|QIz zH~c}UlDeoeK!l$zZm6JHse5ULPuECYNz1v;u4UG9Cdlru6oI%1kto2cS`jDba)kfR zy4oJqjDsCHAJg(Bo~b6$1eM6I37FiFak$VLYeAyTv_ra1sxH*l{&~5po`gz`(K_R@ z)Q<AQl;I^~tb!?_hs*VDRmGd0C$rwGG%h6z_}!lfnYTwoE(+#1HLD8~X?+Gl3rCxY zKQXW<fwG3G(k3Z%U;ZevMl}yLw0atptd}BX%1g9XF#)4SjmvK0Q*JQz+oDeq6<F17 z_{Tv+PnW!j-uQ5(;Emi6i1H4I@KQ%+MK@950L8r)g;FB6J+L(Eur#$5-6k71N6AKI zDg@N16U_%Ru(tncndjv(DGad-q?qNISJ}rI-l={GP<G##!9DPpC_VeWiEs1Hhp*g^ zqMb%*6Tdqq{bDoaaxD2ug5?K0t^hJ|k{hQ=YBD0^C4*W%%hQbY&htN?UV>ezS=^4v za`2hb{qwD_BM1G}eT^(ejKVh5Y<c}&BVY2V=1ad$WF}8|CYk-W%1^8OrvA{~jU4BX zy_=|y8*>&}@7EY6#aN){3lvwI+Dbk{pFayML3u5S8p0_;W1+^gh<`WLYh{XS9(O7K z3g$6m_R&nw{3I}vEskmtUxn?H)1nsp%k`jBR7A)buJB|Q?1Cqe#i=&HbMA*zi)I<Y zY1Ktg6#>rtS#pifix+%007cjW5C_0J86kCQ>^x?S8~f095Y`)q{ETd{#x=xaqd9RP zw4S~Vre3$kPr@74n^JPc>M*&WmazE@{J@=gQ8%yd^)bZrP0A1QSlzy8_D@*H$q6JF z3WJ2Lhd;`&v5@>ZZ%Z1x^uw#-K`as=PUHQV&apEkp1!|rXc-v+;K?ssLRP>ZfWUv4 zcrR>StoQ#l0AK(B3IM<X0OWrNdk_Es0s}x$00<5MApsx^00IC&zyJso0D%J_NB{%_ zfB^t7FaQPxz~BHF5&**h5C8xI3_w5u2si+N1RyW~Gys4G1JF<a8V*1s0q6&0{lnwI z01Om>fdeqe{|NT~#Rh``P%r=v1|T2$z#sq^1O|hkU=SP(LV`gUFa!XGfWZ(b7y<`F zkYES~3<H2+U@!~{hQYxwBp8MPBLH9o7>s~|5pXa92}WSRXaE=u2BV>1G#rdZg3%Z- z1^~u@!5AnQ0|#S}V9dif9;OY30-#U;911`_3=0YZKtW(A2nq$kp&%p_gn>c;PzV?b zfkGj0C<F<GV4yGn6b6REpimeb3PVC+7$^b&MS!6QC=>yQB9Kr728sqi(O@VV3Pr=A zXe1Pkfnoqq3>b=mLNRbC1_{MHNbsOI7!H8K0dP0~`Jf0K1b~CUa1ay@g2O>bI0yrW z0N@ZX90G+y;BW{M4#B`-05}W`he6>mI2?wA!!U3J0FD5|5l}b+4o4v22n-wzfTO{1 zG!%}8!_i1M8Ux1w;21C*1BGMYa10WTc~Ji$*<d69iUh!s0OUh5kRSjO1V)0ONDv$e zLLxyJBm{tjfRPX=5&}m;kVpsy2?HQuU?dERgu#(8Boc-}A^=DP7>R%)5pW~|i9}$K zXaEuoMxvoeG#rUWBGDKm27ttXkr*fv14m+zNDSt`LU_o=gCq~*dgy#81rPuO0%Jf> z3<!<^Au%8f1_Ho9z!(S=1A${8NDKsnfdMcuFa`$2z~C4d5(C3v5C9AUj6py#2sj3T z#2_#jGysDJW6)3x8je9DG3ft-JrvqQwjU&anD_sK|G(=0e<8pCeiAZkwp9$p5>WA5 zPqbAICz5k$muR+Eji%Cr-Pb4DtH(3hR8p9=I%+0!c})=3lO46wuSJ}UO}Vq6a&GtD zOJDH4cxECce2@2z-a_>&<&v?VhFu@d)+ofvKp1ZiO&fHx<pp~?j|`h_x{PPS@|zal zKwGM87~cted8;+_Y2&w<*LtVz`O=Ked;YC<ujSt~pk;5nju?vXEGGrNJA<h-j}xAS z3fWJ`W1!q=udi+AGB`{IJPSL&&8BnVK);x7n=E6;lj_P`)O(b)`JV5={eO5@<5>M% zV)+n!vgP>_|G>-ohi}ZgmTw6&_mW=QQ}vRPt(_7|U*Ej9!f3FvJiFeQ{owRkz9j7T z_sP{njX9R6(Dl>N`-Fcim_Iwamvkks4zRk*gK>m3tOM~|T{mOSvzN<b&d@v#F>5F~ zwwTrZdWYCcIg76eq?81e@z_Ckc7eTJhiGH1r!G`Rov52!{SFj0hd%g+DTjyrkGfrb zF;dAzV@bT{iy1bk?&9?K{Zcg$Iab126KQ_Po|ytSUv0rN##NWR=VH(I3oVEUp}F$% zgnO@{DMxj$T__p2U;F1YLQ6sz)eg#nI$rD-2O9I$mxl>49Ku8E8XGDj+2OotsjU2s z)p^RtoK=PTJ^OX9cL*Bly!`mxYd>-&S0>`gk5@)K62lz2CsQ9wdL(gY5bQ*DMTLOg zFuX&sw)PWwY{d;t$q2MH^M{`xK<b6;%{)1po*fGV{8cT}>|Z?JbvmY2z3cJ2Z%%2C z2|s<mn=swlg;f6{)V{qCNF@q)7SkH|bvFIx<KL^MH-iAOKf*%<kDGl4iJ6cW!=xJ4 z7bAo!y1v77R@Ut!Os+`L;gP&!jsZre_4YydpjOAE!0VH%ap7>F$l!~G&JHBcd*Jn~ z)c5tb)8eV_Z|7*}tPQeNu1oxpIv_pqk2O`boHgBgt5l+>$(q|GehQVeCfmfgrylpt zS5KFj)BC^ZL#t1J$h!|O1*tnRnHz9F|EOoQa@v9^wat#4{%yh?M(2H}9>N4CjCx$F z>$IBaloyf}ry=xtPY=>c@lEQ5caLhJj!a##E}|>%puD~{OeudZsaGRzt9y>KDb|~F zuj{R<l+7Ef&JV`@2O0Bc9W)rn!bJCYrqgx8^FLqOAJhF&N2)YR`^~*ATRvH>&J#0U z=NOQ?UI`W^Kg}NP=F7Ozs?R;}FroXnakXrK`Fnlv^5eg|^Yd32z+O23BRL45oR3;> z+%$@E9mJa@^V3qc!Qu%~#5ePa8R0PA=XDz*^}C3r13J7EE6gQHxsd$$<m<+O|0mk8 z`FOqnotmPn>gun!AaNA4caR11H<83dxe*coCP7nG6v>^W@yCHOnE=4`n>^`mC><;5 zaD<n=J<){OktWwd8YJVJYJS5`K9p2EO5+mmpu0m~xiYL}?-GAX<wQ25sUcB!nKCu8 zO!bDo|MLbaBe2hr?PC&?c!dLHqAn*p&y$3wM3h-U0UWOb?lhjhYZtO<-eV>FHKFf! zl^gVj)n+Y#PX3pM@ZsljdR+o)NBZoj&R=>|gpL4lfMHNjES{)i8yO%8i^P#U7VAfQ z%-bHqSG{|+!ms!exW@(y2Pf^s!WnQx*V*v;1h@mM{3SjQ<-F>?vBEg^d^~4}k6vJQ z#d>01BQz^qGKG39osMJha!j~DuLKv+c7&PELOZ=)lz!}Ub*J31zaXWn+o0?UpS|MS zD<lad894r-7~Mc#ioNOzj36wAUR_6Va`F;^5%cDxK4s+j<^E@cvp5Nh0qnVJhIM(v zvD<jX8+(&P3DO!d+pYz;Uk|xSK6TU2@8K=?aSK<9>Wux$V^iPIFn03MD-)-AqE@Q~ z1h&Prv<@QVPG@+E%*pHJX_^Q{Jt*OChsrBnCcmv=*NW~nTa6>l@aTGB`7>o{fL0Yg zi2IGCaKhwV^*qwm=1_UgJ<DF^M|&0tx8GuKrXAi=R^g*MvSjT=C^lQF<XsWXYJ%40 zb|T`Vc#?hS<ftx1YY4W3psC%F=0}X*(mR)Zkd+nAYm{lSuKZ-h?+OYeeP?6QJ5J+V zQ?=!2kxnh}sh&rXRn`HXT90j|w_)wQ`qNwECrghq-0HEp*!gzx=1HavXD#^4BU<`Q z9GLRlr}D!_0v|VfvD+-m(rilUt1p{S-FI8%F{mvMN^!Q;oQ%}I*&J+-cB!MNH+_dy z?C%w?M<7hW%-d*rJxoU0{#2#8_RjbR+lic0Zc@8})q@2%<2%LAm7gD4>`j2pU3yR3 zC#fq&3VA<*%7U=6tj`v9$x#i7@&!i3Yyv%!H=0*D<$bxlpil<W&BXlrJ|M3S!?cZ= zsCd+$*WcC0kn1Fmo#s-Vq9g7wT`Kwe?h-l&tY>>Ycvvu>vMH%&=I>|gHoTQ@m_gAc zrz1YQ#}o#-&;Jz8Na&xI1j990macNThVul=pLc&URy$7+e%QK|Opl{|(8U(Y2^Y(2 z@92wvTFsi_>5F6e^+OvaPoL^Ak#&jd7^Ozz3hocn*#1M#v%S~p0B#Oc)``75E)SlM zgp$}3WXaiBiML#mFqX*5&c$1JXn2bsUwX+wnHdnZk|@8>;;o{}v2oRnMUL0u9k+PT z_ESQ0fVhf`HYFzy1v%dhA*QZjmYBKwE5gW%v^+U$lvEUa5y8c^d!F$q9B0hixOK{I zWzf7w;zgB<H4V2-n05a=MsZlIwyEy>yS|SSQyhu4OfoV5;xr1!-p~sE^Hq7in2_WW zD#snY8GVw+CRtHBjSnO-qr$Z_5PtK!^=89eex?11EuvhR=z!tqJsc-KFl@N`MejoX zYtlC%D&KT`kMQ0et~=cAYBy{i&NLh{&JezLeSUNG??avB7RmT~otnV!PC!&eqI`E& za_DyzhSaPf`ik}>`*8s24S@>KFDt}h@CnZc*zhxQgG>jXs2eTPu_FrMGzL|tDcVw^ zg74XP%a22PYTJ`{Q{GlI?^*;^K&?#xZI{ObS7<KofBJY$^9|m;b6Trz*BmTvn}GaZ zgz3@!cniI6`EiP4{_c<NNKAKMsU)Hg$6xy>3Ti7zXdT>-2scZXSP=xSfs`_4YLi3s zjL&21ZEu+E-ikqoh3#^+LLm{Fw?U63JT#0YJb&7K$tSE`VjFqS671;f_&$1s+O3*P zCLcvErQ`^^4w_=qPo|=7*fo`X?>{Z-^>_4{!h-6!*>eRfK*DQp?Qh=q<YCv_&i97I zzHMZmL|!V<6CIBcl=A>f4nptANj{L{C%*P>&>%~ye{cqeIRi-E`4D|XxoFpW+jA%U zRt&GtvByAsZFVFATPuMU<}}A(`!G7DMKx#MpD@WoMwJ9!M#+fTS}%(opD8XsMqW2@ zXWMWi<>|OU(RqmTJNtQb0M#v_MeI|taXZjn@Tn5j+Zx@rF+(|}Xwkt(lJf+T0baKi z2_98;1VbsnCA()zQbQc6xJx$IJdWKBFM2g>ZQfG{&~U(Ec)?JaT&`E4A!*p6x-VQg zQ)&&p#)D*y^wd@LReA8Lx+FdYN;2R-mgh97q^G`#XVFu&w)+{!zwKf<7M8S3dR+jt zxd?mPPM|48cK%>bX2Y8vBsI1m8)6G{z6iVa341Xg`%)3_M<L#D1)g(~iwiix=$(tb zSpud@gN*nc$D=WQM|Ku1E<Es+A46lrmRexkQg&nvRTwm<e?+xkRo@fecc3uGR5j^^ z1SdCN$dg|-Q#?%Yw|e!lmc+b{fHoyhH)ya)@?oN6W<hpxEJtIUVfkT<>LPV(0FKa@ zJ#>*9I>M&D|D5YK5>@j|mO_j(R=6oh($!B^Z9&z>MQ=#L5x^GMWkyYTm-wX`Xssrt z$R(~Ks#D@dZGH=3BVfK4e=yP(#%jg3W$T;PMouYNF9pQ(VTIUa=a28vohap;#O1@P zA^9{o9TpJKMc5Io%Wr#v`9T7eyV&3Jq|)<L)jeca-9RiYs@hPZW_U;rEY!gV2lL=$ zE_paXEDPwIMOH(HCq+(Vz%6P1!<h{3Oa%|Q7fJA$3<|yBv$>3vP0$mU=F_0a<@sqd zrDCu!YPjfPr{2z%r(E`mHz@ItHtsM**TuJ3+V-6&wbzTlAw0k?&Ev^z_q@Au3$WzG zumno&nLnNP{i2?<sw}KJ-9ZT|B}!QI4q_N+u{~_BznnmBp`1l%LbjsnV=lqkg^f_Q zESd<~)eMk-l8(2XFSBD~@Fa3Z(|sAm)0zND)YR^eHZ=;gNqz1(KUiTA%KWrOZK^`e zPKl4NTX6?Yg{K&u9^hHln5NC`Vna^o-sXK`kNaaH)Fp}PH(Ta!5wcb~63ow}l27C~ zQsj8PB4OB~WEiQiPvk^CL?k}iCDqTve=AB+NQcXbx^ym=OfzKT)P*Zh(vA4&y@|tH z$&-3bnS`d{6n@y4jd~pkHw1;Mi%Ta(xi$9Vrqj9SgifSf9N7rdu)yab9s3DrQ(C#~ z1Y0MjNAw}lA^GQ2HdAU$y^D@>Ml^-EKGbSV)V%J$#Z}9WY>a*V<;R3oay3@)8gp`9 zOA*OCxN+>%QR{W;h~PO&smI1sM8=FoM-V3eX(SgqXi|x>TzHZ~lt+!>wllxf4yUtX zQlm1Gp*hu{Lc7z1ai<v5;N;Bf=!u3qq~O@PWh%m4QrqIB=Uv(v>M%YPWI3=9+^@0j zFc+*Bb&lJ$<`ZE)<P8Q5>95x6z3Qo~xwDOaq@Bn6&5Sh2Bskp!XBW#f)+#3n(V6VJ zmAyl~)=GhDtd)wV7SjDvKZobUhvr83a;YZ!hZGPVs^vX5lI*1uQ}oRy4#?(I)xKZQ zUN5lLzEU^5bjoS0CRQ?WiH4hfeY$+tb&IBoyF=89n$R9sSfEr<KkPk1acU-<2*>21 zbgi1j_K@(v4q9DD2Zo;=5Gn~-8xMLXvx>})U`ars<x>lLbIa>n<8RVXJDNO4I_euX zykfS5E0LGCS)n;U!yHoLlIifQFL3O*$&Hf2?nQtvD%!7;LNGo>arKJX;!0%j?JTV& zZXTVEnWGP0Kb`c%bQYm+u6jEJduZb<s9!#(EBFc@PHN;y=6pjRnT(Tj&cIm~LnFB@ zHS4U(|GE)i?vQjDbt5U|?UyZcStZ+(9DQg|H2LlWW1hegg1aEx2gfJxMfOWS-_);? zCt$H(j`pp+uVrNDX=$Ue4s;3<O-;~Vek<7^!27B3Wac!sVt$S20@`5u8t)%9!L*id z-v+#6OtJHGl9nJ}B}_lJ^hk&)gjbLiZKuBd8D{e?>-gPs*~{T6#cbTmEYEE3Hdki8 z;tm7uY}9jy(feAN%aW7plD&N=noufqr_N_7LOexa8iE=l6%Z~#+!>$Zr`V3&e8{!Q z{}wXcDak<X3LH<?i4Z%YN`g0g6c1J@`&ucLvJu$r2e$eiaWL%pEp?ihCiBLW^biWv zgv2B~U(cCp8<5C$m!}nrVYUfpPI6TT5|*UvJ_5*&jx~5rAw2sv7pR8!I3#5I@wUe= z_Y;s%&B>tYqT7kReI2NO^OhvxRE5DgLZ_N}9OSNN`-S>(LXbsvOcGb14AZC?ZTUyp zZ2flU`lk93*}ld*XTybI>K@<?faFuS3#2*39vZwZn;ix80l0F&2^zP?y|gR+9Dwhl zcP3Nv$5i>4#imr(%=vxbDTZB!I3(jjJi`QnGZ;}GAJWKobxMPMy2Do|pMHbL)7B8U zB&fUJ>Z1|iI>nB`E3|j1Pji9e((tiP;EY`R8`6C8g}y#;O5=j=I|Wrb*3vOC?JCPr z)rB<4YgyS^RXwKBY@M%0O#7Ubn!e;=u3(v2<k3uPXvgimi&@Z&3CXyVRD)?6jfIT_ z86k9Br$NqW$wg`*^FB==?<tMmw3yypzNOC#u8$X<^ODCCTz_B$4wLgAMt7__3Xw~t zCHB8$=HkOVC->)KTGHueW;=n1bL0x0pm=yBU&6D`(&AG@EJ1mG%ko!Mq@oM!AiUf* z&4yA<Pm<*ZD7i8IYL=H-L@AAAwwU<X5{4*xCdUhkj&QMDs)xyRn5?^qf325tbQzLe zAC<L>J?8LYpF4^8e8RComiEP6Zgru5IaY2puXz>5Y!Yl?vJqJtXS12pvJs5)UOHgI zUV0_wWC6;zyg0LQvw>2P+uD~~6?`_g7`i1B-Bbt+7;xDX5u=rjTgDw|)DBN{@{idn zq<Ta$*F>^4NwRJufwuhNV!aeJu7i$h{(>T$Wr*tY-1s8BUhg#HGLXu#R}z9Dnd9S_ zi<2|?NAjLvbL%n<c|6lEXS5Y%y~?t&B@;!pd^>R~I3+tfjhDXs^lWRZG^N6(rE6oa zVrEZbc0E%^Thn|0^TvwYzkO@leGJXty?mQ*I--QvvitV4o2F;GS{X>F&>X4Ifez`n zpMUq}W_G10cQqY@Z8CNpY>|A`Gt#7c|MU)zfTam#2c)du@HTdC6qk~Dj*Mt`S8R5= zTshK&IwUvuUY{I2!auh7w;T2k5ifKcwt48=dXV9L=&OIs(|ug}?6_EeUcP;=%9-OI z?qPo9QGWk-h=+RLY`^I8x3058kFsyakq4c#TU<Ba(rph_%2JTF$9kmS_vB8Ha(l3W z6IA-bLhCV@^n@p5Clmi*ZsLSW>uCDocz*Wu@ZZw?>G6pC(Th`R`1E=Q=~wXPH$T?% z2L01<{qxk#W0}np+{|MFvI~r!c~?i&78#3w6l=}D*<CW>gPt>|e|i^(r56t-5lGZB z#`asp*|yui%c;$yxk##d`D0WD2g3GL_|56%*~OA~%T(Fr&cL;G#`Q5vUpDD^d)YB0 zbt$Xtta$T8@a1*8JkWXOjQ?MWlh<)+MwF!fH=M`EteK~e-kgUB9gC4&aLnBR&%fi% zT^l<52>rL)tbQu$n(QOLAzrpe2n<BAHa*I`Y8tyCdUZ`+b|p%7`kCY`Bt6RI-vK{n zi{s6O3d@i7e+McVS7~QIn}66!#r$-6b87o`cVzn}6aSZ!f?e+BSC`VAyn!>L$45Hq zzm3a7DincDTfd!HTvY7tF%A^pm#9SUJMM9Y?+3Q-2hW8Eg#QfL{rUK6ZS2kc<f}i^ zTYm;Ie~>RlkP3fi9{*ib_=}ud>}vV5bpB_6tUrAAZ@<BxKH<OUSO1pD{vMPI>jiId zUf)k<{sVsgd!+COKlaaWV+>mO&&AdSpt6~@GkQc!Po_}hiE;ulSi0oqMR`Z^^v&}{ zT#Bzl2~4s<5d?n5D(O$ulvP9hoa-D=0s}R4>6;yeqI{brg(llGVNx%Ro8ObI4U{Oy z5^)s;*v(g}7W2CxI^9fC)N@JYelH%GHR1LMMXrepn7=X0W@ibxbwhW$Hkk=BntLoD z96uU!5xw`a=?KW@|Da`vVMA4$zb@1JLVIpnufRhpf3oDWSmSYD#+6n8+Is8s9?Ipp z{9-;DC)Dv2NgZIjRLb@KUGWNdy{<{x-}VIJ>Cob$hEGEv81iLV?^caC>{-WED)@-7 z0B-si<@TFbm|H&54ta|DVe{wg@4Z-UgPi~Sv&gWU$dhc7a#9lpq?-c14BZKRn^9SP z@ETofeHj2p;A1Hsr=bY0&i%RQXHx1jg+bgubK=B=CvQFxl9h-kx;(29`B;XX=EF{O zOWZn)MZuXhL?gL((LVm$pL~o)&GcdzpJTmEo#mCMj{?)9&&eb7R=8qAU&Wm-$MNxR zF4ahbuM8)sOim_MSuh+m^Gf9Loi9~*3Dd4LD1s5bBOI}d<bzM2o8~Ih>T!0=hzVEu z$sZI%*Kw!DSmCuP9t}~dGaOKvP85CntYIMMLK#pej{_N#c47Mqo)?g<(SoZ7|9;!4 z#nYly_d0?y5ILy6o~MsRNU2}Hpn9vNW5J-Bug>!_J`gSQ*7@Rp09Qb$zfhef>Qz=< zZ$(u>FHh@oNoILv6<S`G40hL6eOfiwr36ZK%WAK6G1&`&L(^Jify!`LoT?q}S7~WA z*4R2-^|oCLku{B8SD~erUoDBfH(x3*j91)wIi+Wxm#q6!CTJE8w7G`~m8oLqEUxc9 zQ)_w{&x)F>_0o$=ovFE+#blirCWtBK_*GG9vY4ie8ikqAfoS@ZPCx4u%qDtiq?g@I zX>InwG?&D2Nqu$I@<kT~>s4tcE6fjN2scGK;BtvRI9#o#9P?Wck+n5!sH1In;C{h< z*5w}cJCxZE)fSjZ1xb8*=qb}Yd*EO71J}d2>6H5Ea)Xw;>AtmQ+gNJDoJitM>w6C8 zl5zI9-91a)3DSz5yRhWoBxUe&l4}<E(n<rR*VLH@t?yqe8LgRh)i0;Hx!60OY4lJ5 zZL}vmXJ-F&!@jHj3CDZaj@3%C!897lGo@8KN5WGqvfKW6W)*tnw@lI58jXw_-fSO( zI_(+Jce`v|$0WRa0|5qddHTiA`bYW?O|^L}lYWwLigh^Wr3*}iTc3)|Rjxe6saNug zo|yo*E9`aXC%#hCp#(#diQVm0H?hg0E>y7(^{#S+^3sc91|6Gu>Qs1=RHZUDF^gSr zA}8EZr|x6BoPkM%u<Fzcbx1xLt`1gva^X!d$2#PdCKCpE$U~qQ#VAgZid3}X6|s25 zDP~cNTm<76yZFT|k}-?KIG-}SSj8~1v5jSvA{^KFL^qO=j&}6o9Oo#;H|9}`RwPE> zD02VDIubIDhcqM}?f6GT0+NxBd?FgRrbamy5{`*HV<E>##bIP3Bc3!PC!_euC=Npt zetMlLHTlI(vILZ#90tsac#)onZimQgouwuMDTfJfhytM;<zTm{kMYTtwDTFKUI#iC zPKuV>tH%?iGEHh$)0)@BW;V6CO>Rm>jVG$dCy3Eaa+cGa=R{{Zxk-#bHb|Q4gl9ap z2@OdeN}Te<XFjK?j8k@S8N(Q7JSAy54g#om8be|TUqY&h6>p)aD`uZE_9IA<?okw5 z9SV#09}ZfMaz+|aCiFQ{lFCyVnV6PHOS)2)wsf1&$i%f&>Qb6+GZWC8X-#!nO?v;t zw1_>$CrmSSLi*@wQbrY7Lm|}@l{KfMgi>gwa%7V+$;V-xLZAZGHKINF&q6ufX;@3z z&J}@GtY<}QH)ARyv!=DCA}v>2-Rjbt)(2;DJ?AhSWvWr_RZ>K4p`SkVrxbN`buiqW zEQjYps0ON`Pu&peF4(D*39ud?%o11&1C`2jHZz}%OlaY`S<h0Fw5PRZVMt4qn+i;` zrM;$VVJq6B)b_Ks<?J*!yIbAHRw}aXEog%qTHq?>reJF8YDGKS++q{BxHWBampjc# z6za9aW$tjX8=2xNce=Aht#Rw|9Gl>ExZcgg!h|$L!G3U;1`Q(3aQGPch;ILNppuk& zH-%W6$d^w{wT_3J+Pk@7EvCYS?r3kj;O#Cq!3>5iZ@C-Y$oTX?lgRFbHSF9BYg59- z6>f-0BVrDxHpIR?%v#F|Veo<$w;yJ)i8mZx1|Nm26Pl@agZpCXniIM_mTq`aTA`V~ zN5iZ24sJ6+C`8q=V;m)Km1^nGW&&7kAQV}B0M*~r5xAf?q7+k~LnS85GJ~G_;7(L3 z8qw56HC>6yUJT<JI=hBAY=%u=!g(1y7w0QCCDw;#nj1cIMb2F*G@=!~=F8Bz&1AXG zX4HZf^EhRkSi$q5b@P>dv^Fq|PK~1z-DgsRMlqvCwQH&iFlb=d(Q*GKb)s<tYp~>5 z)ZqzFJ(!~&^|U7`ljsRwMXGC5w?#WzNw4H~(mTQ631<@hDF>(g6RQ&Hzkm@P2M<cS zMt$zT!qMmhf27_*{fA3BQt5MDoXz4s1;|->uvdUwW1<9f-t+csP%JE<VI!E{hp7#7 zWjo^L+Bn~#S@(m#3tg>jb}r+DacRTrm9@4A!}zxCz5hLL)NDNA5LU93(w!L)tNX~m zZLq-CZRFM3mOR^GZ3ipm>f9bh3^4#e3}|j!@GO~6%YN98oXs+$4(jIvI@O|pbi+qQ z3Q<sFGNOoX#25WFVvY*p2`74?lTP|9I0r!3V;}~gn1wbdCr$q*!oK$FA_lZD1v>z4 zAO=o{C7_<!hZxqrcL2~`E=f7AgFs#BMtgQFrSY?7&Ti>BqkJfXo-|)%^A!Qrdcla7 zh^;Yw7t#crDAhIaoELLz&EVbiu#L5yNx%3`n<<)&KRjYmUmMTt<|}14j&~CF9ik|w zDA`d;l9#L}J`I~a##x36Zh!+Z+#m)w2ugK){p*Yd-ItMqw$-Bzz95PTMv&s(eS4=f zVNP#ESuc9!<cn?FVM(OE$&47#(ER4#004pX%V=0b5xa=N|ILqq{riks6OBn&f#-8R zoRhbl0FHXA40#(0HByH86NBnnD});{PrC^~JB-4>xuE}uJF(j|%OEXch=CXgs1VG# z0j!EkvkagJIJgRpmP5J2sESW$i>TlX2b_xxv^N_>smyqan_?@?AUL8J21bYh8PJ3z zV?fL(yC}554y3dZvqCByG0z*Zv&%pYk--K8i>x>V<Y+i7?7*ieJ1SH>uOpAbNV50X zJ>sB<m!pW?yD7qYJ?(fon`1sSAO`;ngEY{Nphy^ftB;1NoDHEF@pG&fITND02qVE1 z6WS{wF%T)SHXO=2f67Fu`!)=Dk$yWvqL@3s`$PGotstAG8@PdLT8%55i031_dTT{a zyNXNGuCc2{i5rT?laheqi>fdHcGC<>TM7dJKotLzikw<4ks2pwWFrQ&JvWONK=P~> zoWizHJDh99Uevo4xW6^DFu@ST*noz1zyVPBjzxfj=+d!i>P6AAi`1hGxacg(=(O%p zBMRFNNeBbyOM^B{J(BwjcN;G2z_mK;z3GFk>2SknLOMb*KJB20>WG0rObY)CK!s5b z>6-*g2|B3KGRi8b7CMukm_(y9lmekd9WovVQX=^hj@-ez!J<j_;}#T2w|LA6jZBJC z)Ia_c6*$w4Nw~Q)Y`_Jyi>eqqH2AFrOqEU}Iat{WVwk&KbhCzQEde?yQ&S26APN-> zK>h<b3?#+5i-DmKOT54dh_k#~Ig10krZoRF3#~vS)9S^-ct5BZ3jad`G>Cx%GeP+S z%;h?+6|;&o)Q3fggQTDbN`Qt%c)k;SgE6QMVaS0?*@elJfl!!-F(3%cG_ofwJH+d} z&YQxmfI-=dCPb-}lR}QyIgS8hM|~K>&s0Zxkjxw)k9p_<OxS|VjD~sG0wXvM;)H|Y z+=3gB0Z>@X$&7)@qzKXc4mVU7m|K|Yc!^qLkHFiHNf3|aP?-6n2kpoN=d%dMJPb|X zky_%DK`EjE=^e@e3@!T<^h=^XNfI$ro%GpHoOHTGVG(0`P59h09<dP_RKtBJ#fP{` z-19el%!#YKi^y0&dz`?V(>Z%Yin;&T2VB&PqVT^Pz%aOAizhs;19?BxObf6?F$ly! zWf(iUtifgM&?7v<XN;o$fw!`dLVEg8DWb|O3<`Ur%B2{)|8vTHpuiE0KnAQhHCru$ z7)~*GL#e2RP}qlgAOo2Q12Q0rUC`2fV1#H$hAz#ALePQn@IAci(8*v;3*AD%BNS&F z23*Sw?_dWY_zuh5hhT^UeF%fb3<e$OlQ2+&XkdpNs8Tgpie10~IG_hH&{AR00rAMv zeaMF{rH3y?4)0LN-RrdlJq|)7ik@1Kt}B)FAU5jIHRh{Di>L=)>jk9g6pVUJkugyC z?45%8IW4m`2|*u4K@tRc3`qZBEa8w35((A;S;QH+ngRg~xy*?tr9S{Tz*($9qo7LE zK)iie0TPu$63ojPoQSK$xxiePDIBB;Bg>$;O1V7IN>ecc>9@@TK``XYC!{^g`z#Ml zi&_aNIVFg_>@?4Fv9gE@$H2dQE7!-<ztA{O`nxy=WyR)$uEU%gks_Jc+|n+H9qRy( z#k_+)g$7~B1V07T@34hX$Op^hg-l3;OCbz|G)=f{z&A?_)=EHeRnPR2I@mPTv`83X zXh(Wz1d3<}AeaX(@Q!?N+IgVV@1RtD7z0TN1!!o5NNC5T5QZ@z50c$dGC0|kmA>7( zPTgAyGVC<y6vXzJ)qVe9Pvjyl>5D$#&`>ncwYV+SPNNiTtIuT%lujuS+p&qOTejC6 zzt?Q2DM^$Wd8{&XO-B*XMER5r%2ipykfvEtZ#~!Mn?L6RfQr?PfqPQ^aK6<HSievW ztWZI|TS1{z3KuL_rjSwR3(CZ_iWJ>I*02mo!wDbF#@yxB2E++9EC{MhLpFj)Em~c? zSPLjJh!3TwE1Jr~7^k=Ry_0G_+5N-0t5zp+8j*UB<RFhKJ>SGQjx5!OGu_l=NCV^$ z)8i;pF5T2;0MqW^j&Th`2!yv<qX?_4K-M_l;Y-9}C=F0u+kMzmp)iDKh=yQ*gLz<7 zUE_jfNCwL+PecD$hIvQ>Vc3LuP=iPaR9=w9A8?A6-3R!khcUok@UWQbq*8=TvF5ut zk=+iTW3tz~6;>UJn9w^}qz>$?&LzWK!X2zJvz%O&x}c*JC&my&AzWnbj~z~2ExQjH zDzing;%x(rMP#xTYLb&G&C~TsqVPWe*pHnZO8%V$+|^!o%|GH;#{UyS)o54W_1#RM zzfnxhw6l>(fKlx=&EKobq<k}eP2{1Z%7H~>sXPi%1h^|)O?wQeyW}ojskNPqjH<|l z6GXUuI6;+KUTK}y=r|7U*gbYcWiB`cU0Z}Z(6y`eOtRgFU65scXju=&+7_;u=qp5H z^gP;o<RbrdO6|1{y&7DJ6c1txTZ^bo%VdWxI0fIll%}l?F1QqZaAo^dgG<;132p~Q z-3NIvR9L=)@}y;7UW&e@QuF0j)&jOt9SZW$1OlOyOo+|6_1Kr2O!7?_?$9;zxI@5& zA;K-FxzQB;yw%s7GSiVN$~BMzK@epHTztmoF>_5V(=sG6x(z~5mmy`MoJ_!DMPLNr z)YM*RxH-RrK{kfV)%;MuKue@}>Ac8Z0qn_97K&L^25l8em}-)dwn4B%Qob8Y-$f1F zBL)LNL4puV;-%;(Eo4~H(TAAi(<Nl(mC7j!Wz&=h#EWU?%ju=~WV)NYt`yt@1B&Q~ zj&}bL15KC+b{vmg*o5{))ZqkEWe`)LV1#NGgB;k>_|@O`NM(*Z&0Cqgto}W(u!v~5 zsi^y>RH=?xO&Db`VSrSRFlfhJ00QMKVH7@7XkY{@-Gw-i2j0|8!LE))(9(Gb13vZO zUq0;U0E+ZTn6Qn_-R>#TnF$0Qis(?~@wmBRW7V07O$&oo)uCL=`P-lkl#XU@457~^ zD^`3Co&wF0?B0+%ZRni=Tm)q{HL=&5E;}*cf*Sw~6O4fs&|R;P-S`$|or7;_l#NHG zh@3-%C%U=0gVCW3BrrVQoC5#>vA;hwfB>&=N#cnwJkostOAnP}^UjGA1Z8WYaAMNP z+09!QKuhcmf3vOr&=2v8o3?7*g+XEf0H@@Y7#K!HZoNe5I`G));S7VZYsY2KH4@$q zN>%5`%uI{eWlD{PO^pd%i%lIbign>|`>yZ)>5h6(=G0NpI*g8&vrX}+Lq@m(-qeRl zm4q(W@t55P(c}d<&<9=!0~}C>G006`Xu_t=T3_A;IIsvt2!(p^O;f0~^pw>r$8EXA z=#%n_BPR&iR0>09z@B4bO;Ow=j$&rAwg_n~o0+P?^%NwL*6s^jCX0~2h1TbuT)<ss zod02BFAPI<aX$MKyTB~nT0=Z3Ojr9$YFHoArDi~<2D{0$7u_A{SdWXX2x6rM4h@{v z)+LR#JL<hl%TWyKqMl5sM(QVzK>WM!oDivO@3d&#Y7nR1XAIJfkim5wHuETmaGb)i z6TlRgDx0~$%TD#URZp*&4!8)<-g~)Iz0REY^O(TxBoB1sl}207Mxl~ywkG(KQEI8^ zU_aGA@z6uv5)bZxx#dWXW~S2I4zPiaaz+p1Whi$fPhh+q-B*9?fd*QjOO#z*KYZ3t zrka~5j`Tz!6b~V=0+rlpyLql6zAkpGsEhe9i(-g`mY&4coEtkFO!bga7YGkKaQ{^A zVTsCGF<zsjKQXv=fwk`nN9v&H?=@cVp;xhCaZx&cz<kMBbveP{aK)kzd0;Qi1DjJG zeU~B3l6&-DdaCcT+eut0Ui&WSd?ttl?pS!Qm426*+To9!Aemt?bdJw>5~@ys-%cwp z6)C5AWoU`l(O)vOY>dI3dU%E|z=?$s5RCB&&Np<3p>f8yZGNX`j+E6qB(PXgeU8it z0w<4`=6t<+kN^$V0L65m$9a{sDCl<0zis)8CO%CM&@Yzp;D3=%fstul`eC6aroY(@ z$IGdA@~F&ysju&mURQX;IT>An;B}%Y8TVQfJ2)%ey>I%>Qr)6oO>2MBDF1{N6|?{A z2Z(ym>g`ijP#`gA`|2qZ=&<0xg8PW=8))&N!HW{>IgDtKUbIZ~lqnmzY*@W$`j+WS zNl&6dgDjUVyf{!_G?x-rzVx^cB*uL#9Y%ZkG3UykIW-=AIa4XfOeIM!Q<kY-QlK|! z#;i%Ot3iTAH(G=$wB^O3YK=l&>TqRJnP|V7RXdC%-esA*UWCgs1^_f|f%=t7lHszE z%A(;N$q=u;smiK8o{X2OWV{6%OE#&PD!r<cKSTT6@N#0yiJ@7}d>Zp()(o%Oq+643 z$K17ROFYOFCUD&XmF=brc4G0e1`pm?euFkciH2E|yb65zzKUOSlm87G*5dJoKEv<Z z8&mgp<K2^U?;4%G#e{T)Z}ppXZBb2_t3N#+6eNI1aV3ye^{`YFSHK0x)=@+)xYl)N z&E(fl`n^VvR1r@2)`UahSD;5O;fK{wK6wZtT^sh*Ax}9OR#Zuu{B~S+62j$Rd8S=9 zl1ao#CR%EE4d+>D`&IT@RUn~u8g;I<wwjP6HF+7515tU|k$ce>op?cc37<pm@kXA1 z5&9QjcfncdRd4APbXAn*;WnO`bqeR^nAcI%-a>Vf$0wO;dRGud=hddxmTA2t5=o&c zGmM7z^*7j9J_VQ?qQ9}YX<Rna^dN~)8HSlAgGqGhil=_KD*u2mImqf*4X#LGSCaw= zCuY{w+Np}_b(Kky!S2_nYC1Z(B(a=HNu{IAS_VyGL4FqGVWU-RnrRF*i=|b7`WdEg zTzVB2nc#M5E^dZ$w5Gby5EE#Z#gS)NWf`gqR&IBOtL}B?qHEB*{j%ojnz`YdXG3QG zTa$dX-5V}@Qi)dGMNM@G;7k~|7@DLE(#L7WMR919zw8pI*1OWm$R)TTN0%6a#cAyF z!7PKRE~`TwH|kW-)jadYF7v!2Xsum2TvehWrdW?iTASL$Qz<5zu}Y(+<HS^Fee{*) zl`L+&3!kPiyAT_^uh|uw9p2aYKHTNd^?2<t!C$LgbN|hBi<dV?<(hoA&2|U=_Ss=u zX*Z*<5d(JNb?g1F!QgTn?Z#_$=r_v<>cewYS80CnT4jF(^W=U#*lN3BsxG>3lb0TH zXyv^&nVez2P4+Ot4oh@NN%D@hvcVG#WYL&SZS0YqQ8_V>yT3Nu-~tP7JKEIWe!bX{ z|9xkoEK8MTmxKep{q}r^A1>qri?1)+<+Gpt<Kr_Vchpv$Xa3r0H{MXkp9lSaVyZ_U zj4{f0jM84qX0{;MfzEZG16l(~*FXe85JP#1(b&$%Ho^@}GLP9-)QERM;cYE1O=H@X zrgbH1?I&v}e3I~}M2vvpZF=8gT?Pe+!}KxkZvU=I-Tl_~t|%#EhWOK<4#D<A{mCnT z8GN4x1s6XkIxcXcliLudHVhiBjfeMwTufkRIn(*CLwZA7YKDlKAs)nS1vy<A6&S}d zR?dM7B;)J;S41@`hK)dUVn^tqi6K6we%wk{W-0^1&os|kSAt>Ff|tDBWd?YziR2-n zk%>%9f|H)?Bq%@m$xd=Il#?)}C_|abRid($tbFAtUx`XsKC(QryrnB!sY+6wGM2f- z<t;bK%T)sNm&OdHDm4)q%Zwx>$SkHXeHl$?%JP`5%!GvyIn7yG)05EbCOEx$%waI5 zYo+|=DwUZ+&KOdJk9185AK4>g8PAYYTmK%ibVSeDMX65k@n`q`2`@hpv@6Pq5SSD) z$-@Ygpa(rpa)1+2hzg{jRZM6=>EqChP6<mG{b)zD1JaRlG>}GXlv_wTQHu_=r5hax zf*J*+07<H*2Rhwmf)_PxNwP8VbkaNx`J-b|i)y@MCO#qg&ZRQ7sZM<=RHOP%HA=Oq z3#}?vv$|BOYPG9g<?2@X=~bwLb*yGpmQc^C*0Yv%txa|3urL`_6*}*ozGJFT>jyl2 zzVoVX{VQMt8`!pnRj`IVY+n(p*sO-|SZXEgVyn7Ouksb1N#!T=-Z|L|E%k%zL@Q%E z+thbZDS2%rWNAsVI3k{gtA0&vwf|zPIN7Rpw*2JkyDGEVL!$POvpbR+gL^bW_EwFR zVMuO$TSR`=gRog7hSu0gRYwuSQJ#_MRF>h6!@SG7k5uGI-4WgFl9!Sf{7iL8vfV}v zv3|{!ZDuKXyy78ps^(3kv-Y#w-?DaC$7StZ$=jpt`mUY#tgUM2ncC$Bsf2WGDm@>3 zQbaDaera9dTd{Uv`>GbX$Q>?Tc3T<J-j=(M6fO~i`xp|x*TV=NVq0}9*4XxT#<+b< zaZQY189t`Rv3>1=nF{0ng7v-1ATiWrn3pV0rmT>4YE_1;TG6C8YA9ari=8AwxYDD$ z#kkUQsUl@8lNqwmJ@62}T>oa|ie|kWUbA|$T;{2y49ib033MgH)g*^l%zaGO5Z8NW zo`RXFjGXXXle*cVUiPScb}En~E7&{lSjaPeELP2|WHJ|4(uKY9WyY*nDZ4q;b=B&H zb(<JUdz!6<HubCjnrBWcL(O8wi>;e1XR5Xr!6Y8?NKlMoDw{;O!45HcA5G+@YI@V1 zhIOT*Ep28yTiMTsZKj_J>JwWVsz5e!r@MQZQpfs{7bfgJx4oq4HoDx@esfftedwxg zo7I@swvN&ZWy#jM+K#p?yc=y{)3mv(Wes*Fh>>t3&TxhcPx!(e-tdT1eBuqixWqBe zaE)Jlj~V|&#vjh{ci(Zm;v+YC$Sp4NjI;dV9zQwBS03?^zkKE}N4dmjZu7fnVv7nV z#vo@13ZN6i=S3g+#kXj5jK93$!x&`HlfK7@Fa79uxj59Fe)NkkJQ*|e`4)RV!=PUs z>kV%@*pUu$r$-&@VgI?t-~RTEbG+$fZ#&W(F7~{0oa{t5;vg%I_pw`i?tjPl+cn|! zrx$&XOHcUS|E~1I5ArTcXZ+-gzW1DKeHcSuc;yMt@`*Q{@HIL;>Qk@!)w90!u75r3 zV=w#J)4uk$zdi1AulwEezW2WWJ@A7s{NWS7__4-6KJt^V{N*#h`Oben^rJ8R=~KV@ z*1taXv#<T_bHDrE|33J`FaGh9zx?JuKl;<J{`IrJ{qBE1{NpeG`P0At_P;;=^RNH? z^S}T8|33f*pa2da0T!SE9v}iHpaL!+12&)oJ|F}}paf1J1y-O1ULXc$payOr2X>$b zejo^jpa_m236`J<o*)XQpbD-a3$~yOz90<7pbX9+4c4Fy-XIR<pbqXJ5B8uB{vZ(l zE*}~UArTg#5gs8DCZQ58Arm&C6FwmnMxhi=Ar)4k6<#40W}y~tAs2R`7k(ia5}_Dy z;3Nd08J;2T82|?gMhvu}8@?eN#-SX}AsyDC9o``x#^DX@Lmu{_AO0aA{^1@5A|V!{ zA@<=Q9-<;H;vyy@BR(P|A|fBI;Uo%R8OFc>UScLzq9t--0BYg}mZ2I7AR7)~DUzZm z0^lj4A|`I&DgvM=ZsI6@;y%nGE!rY1)*>agVgSD4|M{Z-0b?+x;x7`T1%hHP8YBM+ z<1#8^GxB0GLL&w;<NhIIE=r^SS>rVlpf+A$ETSSV4r4g>pJ0q5IqIS*qN4_#QltKL zWB<7$|G{HCI%74`qXe>J{^2A3>Er$JV?WwsJ^~~J%40hUr2P?O{vl*S8stH$V+NLE zI-2ADK_oa5AVsnw88RgODdhceWJ6+OHfrQXisS<NWBr*V{h{RispLwMr2JjvL%JmV zd1U?3<Vb?#JIdrt>f{01WJ^k<{=sB10%cG-q$={H0kUNL`K0_Y<x(PL`#I%P;{PNC zeq%JIBUKh<R%)e18s!Bl<xXxT{z>Kgk!4vzCHt9WQlh2$38gqjWLFYpK#Ju+vSs?I zWm?)L`r&0>(q%__r3Jd>Ir`;E>gD-?CHx`g`zfXY@}>GY=3N@5`9Wr65@t<G<}iu@ z8cf0va^_}sCTM=9XnH1ThGuDwrfH@oYOdyKwx(*H=04m2YrZCJ&Zcd;=55v{Ztms~ z#%6B*CT{|#ZVsn#uBLAmXK*GbaVjTr)@E!nCv+~SbT(&m0%ipY1{!9kcDkNrGGG}3 z0eGrGc#bC!h-Z0{r+KC)dambrwx@c!Cwso9e8wkz?gM?oCw|Une%_~k_Wvh;{%3pg zVGOK5Bo?TF!l8f?=z%UMB(A_9Dky_Ss3JNjW}c%OsKrcR=t^klGH|Gef<%Ub=!S}D zhmz=rMnj0A=!mLliL&U4as?3V!-Xz}KybxU*l3Lw#Et4`j?yT!@aT{FD2@i{jtVJ| z4k?lz>5-~Ig^nL(?xl6kV|Ol~B-rONR0WDo24h?)v|wq{Z0Ry|>0*58WQ6IJj;WTG zshDPIhpOqBvMHFZDVcKVn|^81*r$~;1f065m!>J5_Gz2`DVheVnF4B@)~TNs>YyH~ zp_XYh#Hd{UW2FA$l)hw?PGB0?=Y|?cPS7Zd)@Vv_1x;Kjk9Me@hW{$4qG&;kDvp|} zr!GUPimFhwYNzJJr$S4pt^}IKC=hHYtfDB0=0uosYDzT3r!vN@3WZDv>p++)W1uRs zl4?~51+x<CvmUEVjOwx)NVD3iu{K1ER%%#sW0N{*xfZ1wbSRdNshN)HmUby)Y-yIp zE1kOQWWeiUXz9A5XuG25yIyI$>TAC8E3~jHn7SyF0)e^??3L=Ozuqgr=Ig@JYrh66 zzRK&q*6YI-YQRn`yA~|JZt0i`1vG>!R(7ShCg!>3UzGxZl?ZFLDr=}J>#P<lstzl* z66>%^YquIm%u<G`PV1H0?5E-^tU`;flB|K4X^g4?w1B9d0{<*xQ0u9Z>SWaHk6P`o z9xbezDz1Jijk@Zn*6Px(D%P^<O1x~S-fKO?C=6_3$}Z;0g5Q(=U#6z3u+l5Ywrin6 z3$*;}nx<*Tc5J_n>E0G>-<m1lo@t>1Y~l(;!j5UNqUg)=ZI}A3#VV@24y@q1DZ?Ia z(p;|MLadlJuDXIOr^e_3z@;q4B_#p@#D>PpAc#;L#IwSxOwjC1xWv%*N3Q<r{0Ob> z60PjQ%%~QKs-B0|@++?@>+OaHunMc$HU#cctz7&n^%_WAjOt3H1Y*35?G6Zn_-yUM zOpYc9^=j+0nrtV=t@|-%RL<@FwQPneF5~X0x>9VS&h=}XvgyK3to_=lpFS+V?r+lA z>z1ynKJe<!(kuUtZvL{X0V8nI{4f9h?fuRv0pG8qss`ouE4RAs$-*tla^T(aD~MWz zsKV6IMy-+v#pFWo<an+57HqPLM~UJrw;FGNSS{_gX{@>{lcvGE?l6cd3GmwRv}UVX z7;9*JZO9C3*sdx}bqT*FEzE?iTd3<wjB1UVDW1A-UQVk0!S5JzApN50tiCCyLaeL$ zYrD=W#?Ax=o9WtOtd2%(1A8fp8th^~FP(yDLGbFgHZZ&DXqgsk1S@Ktt}CKmsUtHo zoARjy^KB%P1ekWQGN|qdV`L})$E4Fv?zCpD5@#-A)N$oXEcR~hO#H8q`tcV-EVEW{ z^lq(XL_@;LF`e!(yw)hLA}$PV8D_ZC0mINRx6lO%^D!6mGGwX>>;tU8ku*m$HBYlO z<45k*?POkRL5eZCDr}b;uO&yXvF@<2&T#Y^2qJfF_)2m4mZ?x+%oTg_x_U2$a;~km zt$kvyR@iaF-l>;T*}{RG=RKW416@J)94KtjLib$Y6<tFU1IS6m&p{l}d7VX1w9px} zLo*)aaWqJGv`B|ENsqKimo!SB^hlG$?V0iVxpZ4{a|8-TjN0fw|E?b^ZqyR2IM?wy z7xC$O>8gh8WcVt>POh5&qAHp)2CsT=IFBmk2K5RP11J#B0Xwp4WOXQPbto(YSBJtT zbTwFaby#n;SDSTNi*;C^^;&<mTfa42$F*F~HC@+rU2lSZw6y$spEj3YUpJ!~+%ngK zFgeexpZYDQdg;?*Yyy+6)Ee%(QY)R3bI5|IV7D@!&L|}Fv#GW!2JaC}6a~_Tj565N z2kOP`S>;uJG6sI9w-#y_JMSWE>C4<PP(%yAhD-k%i1vD^L$K-}?=HJ?iMmp4*5)fA zEA1@*YdyECCOj=mWRQ|<%xFCA2ZjPg=tJ$nboy~OlzMYIrYjVKX#ZyM`~>aC3N25Q zv%0qFtVZ=LTWn(g>omjWuwV;zX0vjanyt`IF1MykY0$BrhQ{O^%yoNC?ftd6l5t@& zI0MqO=*~0s!fXFRY!EMTtpe;5BL*1%v&8au9M|b<`>J*rt)nn-JkN9H>hG53PTI~- zX?#wA*U<-V0x@X!cJFofdH4A#ctNHskK%Ap*DBOz_`k}rz~*sKD>8+D@xQJu&05CV zCNBR*Lw@V4WnZhPo^O<a0)bl&$J~pq#*PPu0y){9YHuTJf2DmMY9G%kc{?(&>Ttf! zs$cwbvm)~Ek~bFrG{*+2^`0|($LJ4;Dp30`y($S~=*L?8@f#!r<(xzsNXm6ngzX8& z3Y2i`ZeYv*ax1awYk9vgp0~ICy0KJOtR83XB5Q52^7r0C@D(?0mtwJ*!W8sIEhOg- zfv<@egh8Qf1{#P##;^qH>4P5t0J1v(O-LYiW5?|AxcNbQ`AIwfWva_!FBs$SP6zaW zjJEMcc`L^@hRbl!T8Z&GtUsgfOk^uiuxrA$_q@uk-bQSVDg&b{$#86v7!U_Thyf?1 z?F*ltK2Sj@WXC!rfR#t!CO`_B>p1tN`TzMi%i3of+iF1n?P#zlx)(4{8!R8oa>RDL z<MOZ4a;%<$I>kO~$;zmJFDoMxt>Jdp=P-mMq=6)`gw3ZxGDP}I2)rM}L3ZRr3q->_ z<iP3wwZjAKLq4zoCa8e2X9qoi0RZGc!ta6#AV9(I!#q#{00;mmC<3x0dm0%1`GrCz zBs}d2=3u(6E7~Uzq``UqfOyXRdD4A*jwjsHz23il-S@qC=DpvSrx5`D-2cFO!u@#u zecj8wd%FGI2R<AC0pl+|5aiC&TFFXmW*T&oByc87JcZ9^Juk#)K9GHO$io8=Jr%@g zFd)1>6avuiLejIt>|21+SHUUlLoh%<b|^x@=fe!3pN$9m5NamzAO9p6KWBQr@)MzF ziYD|wzw|pl^@nEkSO4`}|MY7=_HY04Z{~AOXLM5M_?JIuF2BRiUm1QNu!PZz@55*R ziUDVmPE7QCjSPI)WBoqpLl>YuK+H?9FCU9g`}9>gHE%{Vf-D^F+sE#KM2i%o>7x~A zAH6XVErt|1l4MDfCsA4qH7sRImoH()lsS`TO`A7U#=yCgXU~~v_5o1?L@3drLVpxh zdX%YAr$3r51p?KnRH{~^X057q>As{*uW~&~bl5U_%JwO%rxsd0eP||SLbFVt*=Y3W zE)%KG&%u53AkI?(0053q?JCZ@;!q!;Q1S>97H~?Uq5yt*sR(dm;66nM^9=@&1Ef#W zB0~`~5QBAV*RNTxh;d_|Y}mJP=hnTOcW>Xf_r<XNn|N{K$8*zOahiE^pFn~Cw2dac zEwpI$rq{DhFZ=fHce6(WUwu6G^4_Ii_l`Ci-S+yTp@rt&z5M$7=EIi{WS^S%@%L#D zzx$SfCasL}%48X|*y4_!`6hu24ZIvIP`kbS;0Pf_HpwRkiP*_uo(D2ofwF|68L>2r z7)nt9hbXFyqj^5uCm0KyYc3Q`XqqIr9D#i9#~_Kk$wvc<Oj5~^d<0^d_?}ee$pzb+ zQkg2TTxQBBxy-UlDZPXe%K5eglS(bCB$LcA(L_^9HG(3uKq}4TvP~_eEUUV_@KQz$ zG|*@S4Kbi;&@8<|(uWGa09%L*hlI&tn8c_sVxL_g$f%Hmgh?Qpb@*%lQ62;`QiMc( zJ|pPSeayje$(uG|>8BxIt@WfMZOyeLpmfsJ*Peh<L#_C*vuhdcj763^w(J@<+4+_& zmb+u2CAPh3>v<9{0~g$<TPf?xORsP9Vz624_)~*iZ}pNg+U%~J78*^|G87tOB!NpJ zxx~<<E(Z0%Ffs==AxJbCLQydvD<l~$B6_p{KnA_^Sp<Ls{MtogP^@r>!@opx0MTDx z+A(06a3$GSUR7S1)|O#@Ns^%2yK+G;*EG}SIlr_LOE7i*x##(I=DA9v>D)5sEun-H zi0j%TI!l{_zFAKOwVOnYOvFfQpL(_yLyWrqwP~IfR*ZScSZQJkS?yPS?DcIW<DUQ9 z?vm073fW@AWjC#M$3;uaaQl|>Z^E_w`|!aTANM+KuO)UqW!uA!S<A6Qwl3}XOJh#8 zo?Ht&yQHmrJ_WIEi?)3<nNXQbeB4J2V#>BjpN{Wda;1@Bay$1Reg8d2ppX<k_nDvm zyvl#YG#qGgYyKNbZ+8xtOzM}{lIR1$EOt(Ip$s?r=e2Ls>7VaX+Gm@mRfZUI>!JrP zV&J-q>(|AIPoK4nH$Jr<U)I0V1W$mbsapZx7OVwj%UkVZ*XEk%J!_TEa#Lzw<jgd! zIaM%mQo54hq%^sjO>lz%VjMKm^)2viD_f##A(xavuL9vkA6F7X7=TijePsXQ2D57m zTM&4+P-MbDG9g|NPm?kv0xN(^^i|$~03YR@X=m31+TONDK@l3RO?#W(nGS>(0cq)b zbSf6I1jn=a)T|!-iB7i4x3l<+@PmPSU;K!5GU`339u{HHU7V=4O%MZsatq{52zbc0 zHBphTLSFf%ggMhu3r%8#<OoG~$q;6;j$+!Do1pZ;VqGa)V`>xou9cT)q^mu1<f6Fh zl0K+~kY4;_mb<{itQu+uFO5`LYS3atM*8w42PEc9lz7Y~K_@NP`6SNV1UL*jGjuk? zVkxsVIT5<hn#4Mm3By-DZ2j<YYqFA8g7U`-swtYLT+sU@M?>wf#g_jpWRNm-wGsdp z51+joW<O1mNPy<ZN1p3aHnEu(WN8a&Q&eLdN7&Aw0Zo<*%%1v`Ryt>~l8jOcoVOI$ ztqw*5b=om$>TKyX_zm<`D@j{R1j<s9BvYm)F=kDj107k0uzd4bqxOpR9+A#caip9N z^}Ll!zln5QIYXA1EEF%HwuMe<GK(AUX`wZGw4!x<r!s!{M;d|)mlXOTPKz{1J;LOs zXdOvR-MSCB#ubtMiCW?;Buh9-XOm`fXS=*)v-HVnPV%x4L#y<_L$wl;bE+IYpOnHV zG1ghJ++^rZXBP+63y(B3OMdJ^*BlLzcQ2VMT2G5pnu>NOO&b5!LXCFW?oBCvh}Gap zM`uaRO(~U{L?cvx=*4L*i?VldBUKM2SdWsDj(CEnXX{cOTT*UY^kA)y2stZ5Ubn5R zP3?94sV*p;D{__-P#u@nyodVil2OX!fkbCXQeyT_>a7wQlbXUgwo;O5oNaVv2n~Dw z?LnWdXZpZ<nw1nWCaV?g5fd!ee@57!Pcv*QpGQiM0xqQ7NvH^WxvqLm_Do3AAkjL= zr}BQVa%?<qw(QAX={)nR(-m-D$hIInHi*JK8RR0j%i8XWcE~+uYkz>s(BY2pNqdUz z`VPxZ!Jf&4u<YQ0$h**=R&iXvEl>)#I;EoSmA7+3-M|0Jri==C_{MlN@=kz>%n74* z&Nzken`afBc6RAzauRBP$0beYjf;g7oUeM@WKJ@L3t8C1Q({Ty#&T9rj-vclw%k`O zdf*@oIEaB5ZZL`JoP|%&!t+h^sa*;eIj*ce^+^<n#Y1t}d4GeXHj_5Vh}JBQ*c(=5 z7YNu)&hgRNisdKO)VUJd45?fs_MGNLPiS;4BwJG<xI+7CnruQ73_dbH!F%U$*IC;l zX;ONl8d1THv#Ejp8<`r7?WC5H$|6<t%{HjvS@O)9v|Yye_{Y$nj){R(TZW$2QV-hP zb01;wk+j#M!$jduAB3n#xkr*}VJ;`auBLO4F&_U=ySA%zk(}UKNL=Eifz;q-G9|X0 zr6w1GQ_yE>G_+B^%Kq3)YTq0&_&ho-)Ky0e^+NeRZV;^-pEXf|aL6t+6!MVlPSp|q zu1p;)^|z*z*i{@hPi5&K3?}tv<&|8QbB1LpQPZlJ7E{2lv$IzoRT+{#Iz-pUH|N$X zErilejvIJZ9#1?YU5Lm$B1R&RMaBX&lE^Md1Q<-HKx7g@JOC6g7{YjJA}|2JWl$9v z0Q}%1cKflMK~C4K$MxzVZ_-d;UzD+=LH0_qy;Oie`=QXDC|j9|Q^q0`BLrU!R8fNw zfZuzhB!4JhaY}!DAN%6R-uARdT{CZx@EeNUfD1PW!wnRK=Dh61>Fcl*LbSjUOcA6; z^RPfZK9Z1%<bw+Q35KUCu6_uxUn0SXq7@Dz81}C+K%++HW+edSPX;9c8L$B(1Smoc zP##c1BoI(2@B$|=11(SkE3gAGa05Zm13B;mMKA<|BSIc<0x!@5S#SkiPz7Jm0$UIU zX;21ZPzF<w-2bEwD75Y+^kiGYATPo|B*b76um)WAf(ig&0RIAQ{=y0z1x6ZA2QK9e z#^5hl;6xPSY#d@9pl}{mWf#s5L=+EI3T7Ut&~E;x2iY+7*ia&n2lt9k4vB*I#KQNA zA}qGT`IdqY!Qv?Fa1ZG)U8aI5{7?|bqNG&Eq;3Gm^dby0A*F)JBJ?2;pg|G%<1bzW zA^sp?+OP3)0RCtsBPh->=3x`{p%X(xGB^bW0w4x1ZXamj4hTXCF|V{pCN);$ID!K? zeDN27Q8!kAHiEGjjWHPa0o>kDB=SZLtiwK}Xh8I1Kmz1G@&iDQDjVrT8Udsm_2L@Y z;~VeeO8>ltTM&d>%<({?>p-B$AqwO`)bUBy@kzqy;G#<5_(vx=OD}E!V9a7KIwm1# z5iq(CBJ#lt96}x}Kp)0H5<(##XaEaAqhkmX3sZy)Btjl^Kpr4sALQZUD()cAP$JgB zRbYl~P;b?Akfl7X2Op_|gvLvHZo|x}XPRqjZW7-*iHtA`svb&?$VlgerJ-UH@2({L z7zEU^FX>cl)1rkOn+`@uMIQ<Q4s2xq9B&`m;r&zqD?cPOtdbW_r7ExTFGyn|L}V%z zf%80LMruSDOtNKMYF3odyONQ@S`Xu(Lwx$AsLI7}45!M{jMf5eFp;WpsF88RD#}WU zh5rs~u;ObO>@KSQa?tvQPTog_Bmx?^;4VPRDRFEPCE|7>f)@BgA0p-~;V&T@4+>Q! zMXUf59LDm(U^eNGFc9D%EJg-6hA~p*HVXq6f93R0W+exzC2MN+-mpm!tJ0Vz*YJ%@ zfRbr=>N%;#svga+O3bRJ)4pgcU3M~}`0R7oML`4)`;?)!>LLv80&AKhADqywhREAY z%QyilFYnVnwQVmeiE%KeS{gI2ey!R560hJ#q(G?ICXI^@^rNti!xqS9Ci7oR>M<R& zN|eEU3`Ok1z}RMJ8M2R@tcy7m<D~{_4U4lbiR>;rPCsAmk$~&gP6?{YiHyW&?*9<< zqAu#E9&=8_M=_&k&sc15z^r^2OL<BO+v0;>&dxz(09wu}2I7b5meC}3WJF^EKl@2b z@k!jO)FPS@*Yr-Is^y#dq{XTynr<|3vL{VlsIX2+dQxnB*sd|#<HZh(S-fSP=*@%P zN9_1W89J@gKF#}ZfV#faBv7(A-O#O&6YE^`)S!ct(x=2~a;xrYi`)yUPK=UD$giq1 zYBEXS`g3V~jYyG<%Xm$cxU(E(C{VMFBm~by6Ll_ysZl=;FC!JtkY|#jWKTgXPcw%> zt%YhF4SELci_AqqOSM_6sa2<BJ^)T|5R5v-g<bNbu)yOiPO6#qky{hBB>#vrOLvu+ zxKx=QHRPaZRBzO(a>lAKDUzIp<QC0SSq^EY%$BN2dJ0b9g39QG@~5OsrM#!-qRlNn zG{*pSTeT`&Nn(gZvzS;k!IYEERJ2Nwhwg$jSs+J@U@q=VDJP#Sl*Z^?>gCx`mZzrk zLGKERlB-}Ps+rW|tBB=53+yb?M`7vHVfO(=$rV@atXzF5UG-9Lq|?_jl_%vS%)Ut2 zw5qA>G;l1nO=>h;mSx_?E{*OAU64#X&Iv;OjNfFah6uJ$OzMaJr9yZXHHcwnTY_i- z3U0SlXnU+leD!hC$8z8+FQ^JzOo``|_DrO6j?Rdx-i=D&=-HH~X#eJjLb$|f1P^cw z&b;sfaLU57)GTK;ORAJ^Z9`&Fe^yt4HaREOVJEelI%y{z%Sg=#O<M@GsA>F;g{Ro* zu-FB(+NFUihmyi2TC*vIDh<PCsiM?`UNj9dmu|W;7fU@i&Qeq*FP8P_mclYNjsmpH z;)S6UYv10rCm)K*uxw35C}|$boc_p7f`VoulUm5kO}NP(mu0iORdWlhwmerQWaU;x zS0zVR>Y6ck#cZOAE7v@zFnz8<ahKgXsd9IUPa#Kp87h`|S4%qQ*?g)$)g!3N$2|3w zY*ME}a?EYRb%<yc)~5H6&h?nQG*NZRqb_)6*~PO!Hb9fsp)@83lx$8@BPd=u)k;>k zI)TcKd=4<Xj@QcOtD16w&{m1pLVoXeAAW4DT*5~<j$%(ZkmUdN)qLa!pmuioZFM!t zcX#(Pk#%neYtJf_aHr_0J}8FAD63Ei$*8J2G3_wTcNxrctj_j^a3Fu;S91F3iK$MQ zqSvif_`$At-28*0LPwSU)5`Xy&m1dMEeSetYgCuk<esTdF>E^x=eT~gr`U^<+9xy1 zhHLae4AKC0B%$bv&JiP)XEm<D5_yTT7+q_bwI0brf7mCHb+Wu@v22Ns_VkRIrqDo0 zbj-xOhJ`}T%Zus`$$pfoW|(hhR1vj946x%*7y%8^fKX(IL1-umBO^E8&{jj&>T)@V z4!KI9XicHyO&4c;YA!~PMu)O<O9u03sOqQIiKzyz-mL#g($-~UuMBAJNV9N2;zB|@ zg79i1mM{Eb9TcwzqnJ_oH>20~CB>B3dJeHJ38BjCTQF3O&rYA8mS?zUT!1cynaX3o zES+F>?fO}nZFE6u39Qz_kEKhxZ~#zCi!U?;J{iMe9^ev1&j>W{G8PX2JS86*!bTDx z^djR8qB@XBi!ODwkaKlyq2msv?<#Vy_5yLNeNXq40<Do^ESe(roNo>bF|CoW`HoL2 zpf9dr5BZ`G2!_un5H2a#tUWKJiRmJu7eyj?feQ0)A4-w{5keu#(nI<W2<G7m6@>{? zB`X7I6O>_4zPSMvupt2@4e}*IWTymCn*>#R1X=$(1XtU&TN|}g5GWKdwqHB7Z9BJN zd$(~r1W{05`q%ZI7$N8-jG}=()dCGXt<$*g2GBsM1O_)LqarEsV?qKW=%GeHMIT6G z7p#ymHUc3G(1~VwxWS97dyrRPAO_aEz1jP{;XA%rW4+;<zUTYB>D#{TyEXLtzU%un z_B+4*8^G@y28c1h3*5imd%X`J21-iJmZ3uhj5Zv^YxI#ql8{jXV*pkpRrVn>He(=w zb22KMAxF}&=fM^$I*0~o7kgtkbmACge8ztxIAEN{aXiP@nXXcJXzBKH4FoN+4=sM0 z(`4WVe!A$+7DEbVLlUMVLqZW|q$4pRE8G7e2eLa75~lRplK&W+2@z<BXd-Wd`#5*J zfNmMjeB=Psxy(y~gX3kP&EluGRXgPTY7^zKC6X#>as5!`AV#HB_AejOP#z#4G^mi! zNAqJ&94?p0XJKMy*u2g6*Q?LGf7bjaq9HS}rXTx`Gn+g69-3I98vx81{btiMntTyd z00BOMB5m;iHbEa&05lBGv4OMlkciu)*d_7?2B3GVJ$Gi@yi0|a9*TQ;4;3x+(QD{J zAIWC8%UfnHy?=V#$BX^dex1^9BBz@P4cZnTw@(aaqaJYJ2&MgfsxHB<y^-3z(!t9| zfZcZB+%rK9AJ6JRMm?5!7Ia~P%r%~x-K$--_F>Y;&ERXIEYh>E134OQNCpNK2l`mL z_<e*kp@dChX3)E)+PT$AH(cKxi-mR>yq&E0rzDyfKm<9vWCGw@G~1Oa<P(h8x!op) zp|6Y^sLhH`r2Xb+g63;J-Uq&>w%v+1{v_@tVGm`OQ0jP@cWuY@-}hnOjUL_|R?>r> zCg_Ep7Jga8ug%N?D(^QnL>MKoKI?_-<Np)Y<%J&REdtpO6s6ETa~bY_V+G@Pr8ac6 ziovUEwyW%m*6n?%#~ni9+w+IQDlOQ8S-7=cJm@UkB}4lJ@+m*^!+t^f#PP#E@*RKj zA3sAuKlDX^^hv+;P5<;EU(F<c^<M{JbL{mUQHQ#wczXJ5ZNK($|Mqo1_j!N!eZTj6 zUv};?$W^NN@9FrBKlzb=`IW!<ng98nzxaV-Iqs>C<bw@?9=wX)CNg35H-9ZcAN)Zd zXVKzh0wyBhLn1OFK-9ne)BpVg<YbB{{ShJ}ifH{AgZ*O$Bv!;B0Af=nVgm~jJZLZ> zv4sj7B7EpDBE*RjD^k4ZkRis67XLeP{OGacCyL7UnLLRyrOK5oTe^G+Gp5XyY4#bI zi8H6poi8QrJHYd#K26J%6;);wX-Q@EltDA9ZyCL#C6`6rXSE)*dRX;wt#_5)KCsL7 z(TfJQ9@?>6&92qTH7nYyWXGPZcQ-Fuy?FQf?F*Q%;J<mXij|6X>(Hh9wnE!i@^NIX zjVVKW95l1$&73=X{`^uIv67%mo8IX&#_83jYpTv%FB8(U^pxpKs&r~?q)&B6^ICb| z+-PEnM{^5VcyX}9&$4}9k}}+|!}Sekj@^3p>)N|>|GquEzOHP!ihc?iuG6MV)w?In zI==k*^gR=+kN>pm{QP64*8d#MXzUdw6*RR?^;A*1QS}^U#fg<%grqt5pmHWrc$`?$ zd3D@A-f>kSaTbb5Vu&V=cw&htqIg_XL-|&lRZ_`F4>VFKLmXrM?Z{(~re%Vek3z<T z#y+nN$zx40XtvmFPbF1Ujy2+TTT{Wc)s}I{VfdU?<XQFIm0ejW-Buz>XcB2^rpYFn zZm#)en{eK>RVK+n#gt=KGL|P(@F59kpn~2fXrU+h1eBrpA-b7t%h;%!G6y0>U~RWi zRn}e9X-HjN6ppE-rkT#AmRQbpR~Cm?t(t199=givtFp#QE3B^8m0TuTP359hP(9id zuSG?uXtBo5H`=j)D*vgheEY$ciGoT+V-%#4QkqnaR(gjVWnK>FR)xusp${*ioNBAA zB6`X0cy+0&7QDa3OYgk)%8PHk`9200WW;P`+l+YzD<i;Bo%Lt43NO5qoecN*-@~O9 zxk6^gji%I%lO~npZBr@rr9SR}0YJ$BR4`^+(b?;vFaYEb&AQ{I3!KVq!e#Ga9O_&u zs65Nuvs^qU*RNa=IyM?{z#6D@ue3ESmBcXRL&iSB9G!JkRL}dzFWs<ocXupZ(%rB$ zO0I+;ouW%OEX~p#3rMFZjl`nVN~lPeppqi!XMg;@_m6w-J#)^TnP=wAxo776yx#F# z*B#_f%f59v2FcE-8shImx}&X|ou98+zxixCb6i6RV#UXaY3ag#Tae_q{dPaVKPS;+ zXs=1H8X4E%dD{p2&)0gk<0}#UNG9zXO#nO;Bap|=r({+zF$z?UuTK6a92wnY9E;D? zSd*Q|(^A8!&(zemdH22JV|nCR=eO69KVJV7i~8AuA&>giP5tryyqEds{rAS7L2;+E zS=owAD>a-tC+jt%$*08vyiHU3GS`h2l6SIQs#X)())I6J+@vhL>eV{Zm(Q?9aCqmz z<8E(woQD~;;#jeh@ueC80N0aC(lI5!UN51KnrQy1aIy1nCk+=#h&DCJAk7#DcMEJ( zfcIp4Lv`&OK;`=-Xe`l^lwE7^kh$5S4N_wQgJd^bj70qJM*|AB-$kE}5xT|TvRs+t z$rDN@T*B6s8%HKsj>bU^MM<>ny=gQ*Fd~|c!6ZR&xBgQ&L3%88%}#t*7cHeO>9pPK za5c6Bi0i;>3~2#3s-}4KWt8XAQ$3A_62_vYNy&#ZLU~XXi|b03&6`%OAA1gq1}(X3 zGsF>}+mhtkIkW0Yq=+dhWJwI2${W9M=ed-Oqb3Ka0>a&e6EyUS&NS)yNJa!v8d7!# z+}VGWOq84}ry0uQ&Bm0C8C+o~ccCBz>RCOwf@t2;AgFl75lbeYDDG#>PkYH(>UvLb z%{fC7Tbh77PeN7V`y*_^OSn3!#dcCm%Z>hdI}Zk)9ryaL4g(QGP2+}iVdqwhGL}qA zI-!BtX?mmB-3cPwA0*MHrm2R>VQL5{kZP|J$cVREi`O^vq|)dPWTlfx;c8EuaDWD| z|Cv5ijm5%^+@nqrly1^BAIOQ&3S_@*2b7ZK=eX&r^WQX<s6y@W_;RqA(vuUFxtb^( zzFhEdMSJOoxM=9aYp`q5x_&hf)Z(ZOPMQ2d0G~~@c6ljYYJQQsq1wv~*FF*%^KXE( z7HC8Yj1is+xC0uC6YlApjM!Q{*k-dNw76UN5ymK6Gg>iezoT?6u8a^4EoPDkLB&)r z%FWOMBjffNlQVUL$PMm+`qPt~2x&%aKLrZ9MvxzyHWBfeZsP7KHn}LRtIBz}Mfrg> zudy<@lI;479oy3DKX8n%;IRUJ!GSYd)p8PTb#~T58Bed!$|T!$2jRV>O|O-bi3IF! zv6wiw$jkTV>QzjK@6@%M_CSUubfS9@<%Vb5oOD0YNkYq_hNn|R0GKaL=uNn=xxw(` za<g$fP?|ucybJd2WSd05j50nR`R>Y+_}DS35=tqMSb_7FA)b@^ZSnRVxsE7E<4o2d z4sO=ytnp*k4JfRgWNWQoV<^oj#9lig&79pLUwnx5v%P0MW>Vzsngyv349vewsV{=D znA|FpR3IF%rV}pmN7^%)ZyX$idTZb=P#yr+jLro&qT#!7QPj_&cF&@-?)>iub?H*y zh9~Dm-w1d)V4z;OuZ05W36piC8h@c#L~2szY?CNA7Cj?joC)+-J4ubXs?nh&hLLl2 zC48P`?>wF|N`f?l19^2Duuy@|wAaGTa^ABq_hxnRPH=g=p@?|V<ITUKZWtCIRygLH zJ;5hv5V|;9PD}|%nvGJH7w5Qr!)mai77>gAJ;uGK<lVep;NmlWs!CPD3fl5(M>CJN zZbxjAq_tU;TRr(=L?o&2LahV>>Z4m~u%ndb6eEZ|2$DmG9Yn=2FWm?&-IuTs{nhf{ zAZF=7MV`&X=N~y}`qMN+AwB^gc#y7Tji?3fm$8!aqch!2@CAyVga%clP<ojV*G9&> z2%0SJwbK`BOm7OLy}CUj9II%Y*mzZDimuO-R622BC(R{B5yc;!yQzjcX^1~?r$BNg zc4!>G?kWOn7L}%bhw*y9N%VDp_OlyG!)_q$0wEmUUp;00$4Ha@L8)Fl^YT7sQjUlA z=19-(r+qjNR`1DW5j$x~E6qsLl4E1FH=j!TZ}5wSJB@0=<(~z)&{m@B?72tP!8<ek z*rAk-dSRCI{kGJRGr&tK&yreJ<KOQ5m)XBMPk$HuX?Is00?v0AxCZ)7-f|Ip`faD> z1Su!{a~UN8SYSJYlX;lFFT+m+e4!$4H!22>oSNeoW(R0j1j_BGv2-lIjwe`IV8-Sj z(thT|GNS^XP<zQtS<U5qAy(%0%DPIpZa;8^ik2aSKQ#2=7yz#j_ocE6f2>Um;}Q2= z`_nIZ+~FEeZbC%)vE*ar7@hW5YOv|tIJtIWbZd6PZx6kis_Br{cF&f?uE%K0cy&C+ zTx8tXFrEBi7lCG%>Y%m9$+cQcMU1DD@uo%WSe?czv0-b0ntJN0ik(t60iM)3oNR%t zMdnmoH{lY=oTyRWI~ywaQ$9vqZw?(+zp*%mdRmq|`{6PEtzd}<$EE0gs=+|rmjcQ4 z>J&b-g6x+xVKx}SeM{zjbH<T#4!nJq(*0z_d)B7d*eCrFHdWqbfj$T-7WlPV^fF)Y zPV#pumcuGG_;#S7C5O~lN}NENz;=9>XIg2D<Smr><ruTqcvvLA3DX6$$0FTPPO4mx zD^8KBzn+<c6|5^ZWmz4T*hd$vC;iEmHj<h%5G$T~pMO_NflG^9!Iig9KJBST<}m}! zf^+ha=SvGIRfqup!Wu(nk$hDFtt3NIn56h<hx~MZ9LtS%Y#80Hd8{rqTsMd_-^JSo zn`=>mlr)^1zK$(m&$zEDGtM@RaVA?LMp8FGlPp>ET`a$?Czz8Po|PRJPc2+R4^)Q; zony!OSYY@v8*`{aG79LWy{x!i^~Dz5n&uXXFy^xrYBI}Li@sRP{#Gbrc$_C%MLPZ< z=N$_(=8TOx6y}qJb!mvt1n3AKt1VVy%S({r;srjKNOE4jf`_;!TFR@`r0<=3yVxZY zxN(Pi<p){0RsPO1I*N`aD!Q*EngEf3H7Fz!^Rzqcb!XW8c}3q<bLevFZo6@0GpZiO z<q?=s$o*1@NJ-#3F52cUX2<dTG{$DfP)xW})T1t1+f>9Dq$(Rr!-AVh*p*sA#Ar-i zM0;EKW*~2KI&~!0K3h|jOi$#R65yl6F%XoYJm!bHWGm#9=toGrdr0~BEMxVOt%Kwl zyI``VK84?Am-2Dqpk^dMe^T`seMVeMx(dny!eV|7<aJ19%1~u$|0z8fXV=9h+yA3c zi>DB#&z;33qAOT&*_%z^ompdEfoEA+u>6!pfE|EQl{|16ah`lZ@U!nqFL~J$M?USu zsy?}8SPV>Rz+-I0OEb@9Pl=_Pvs0V{Ww+?p2qQ(y3)#3g9@8UhV&yft^0>FwQnR_L z&dnu-wkxW^nvrXjfM#jLQjI5Gn7Lxw97vRt$BofLV%NRAZo67wvBJq-1f(x|5)dyz zFSw8rBQ8w=aTDX%D6u+8!gkHOOp=gz&-OmWxtazryk*>NqN2N#F}!n?i+%YPds(+R z*{7Y}h-z2rkwmqzU_-1Y>v%iF(4|sKK?1&{&^w7O&_j5HX4I{wngz`5YEo0yg^OmN z<5H)E?-B5IlmC)!nx$&!nT=0eLxu=NmLRE=_-QgY^b@Rbtzks#g>KbWmijtsH#i<N z8&t7EGJw7LA=u3<H7}+}w=IuiH!+$*LNCF}IpxYmdD766Urjt8@VC@^4u8#)r_bA^ zuU1E*rA1-Z+aiXie}e<Y#cdJ4HVC&eF`6(0oUu9*h=lxYUueBf3w~Xjr$=DsP#x5a z=_h{aOexyg%O7T-`DUz|Kbt~W0y2EkuEyd2FE~gm#6Yo<!Z<<87N?PCPp-jRM7x>_ z*3a*#SQh%eEX`YE$jk|{|12lo0^)BN%<YslVX_Db;iq(T&ZjzSw^ZRJZM)L<(6yGY zQ>_YmAsR)jFQ?62(uw^PYx2FWhan!HQuCSzp00!3+iMFoIEC-M1<0(Hbi9U+<Rz(h zMR-cymMtPPo9c2aGNpl#?Yfg~srQF$A4J-ABZO+fAUtE4Mh@Pmy5#+eE5Y8}-gKi} zQ$FZ5p2G;fA$7^)iEWGT9M*quokTm`*>)_}6N4{L^sS*bUqY<j;ekc-Nzoxr82>rl zS|7TuW{STLvfAK5n?8zt4kQOe5kU4C-7<f}k)a#lXT6i;aqkv6@80z8J{xgk!zP5( zw)62kCEyqc52nKPL>A6*PY2_8L~z#D*&8kM_aV6Lj=M&E9&M*ljrLHa^w|D$k9uyc zZ6S@{_0%E_H>x|b?c!u8)gL$7LrQzf+3~;wz3N%61x3BL{BO>3anh2&q2Dab5F2HS zwvp1N8%fC<tJ{6Im{!SmjKsCChkcR`mF*3mh|ZaC|E$zEx8PVifo(16bb}i$sT6*t zD>Unm<2uVO2Q#XcF^Y7}`<BwQB_Gt&^X$jX@FM=RK0NC)IL>1_qA<8SMyIeF+eVI` zlGK35_YDBx^g5H5;$*`;u!F5Or!3XXNT%m3$D*v%Y<juoENu4tER&qX&{`=koM}iV zrAn=5f2kx9N1iM;OS?WLJ>-o0G(-N`U<iQ3FX#*ByO;7%sPGT;-LMb_aq9~Sv`)>! zU6S&4Yk^&3BgHwkShvwPkc4(!?dzG*PeG}_dN&eC6@QV!rz|#lo+;NkjV(moahQ&N zib|e>*m9F*@C8>b*K?A#9~^|*8p@IOMtM5SW=m5{{)IgFT1}692y=LzLz-Y%oNu_8 zD)zfi0na1)Za8@kJG&D5q|U1b_YIpX;UZjLUZVWHdTAnM>8u(O19R;XtRm7>R0xi@ z|Cr)a92C_+;NcY3&(}dnd{4A`t;NgTk&<R9J899Lgi|(1-p1o=vTA_Gy3FP}<i&3} zEE&^9)2>0e^w(he%K5<<Y~c>%Oz6MV*05xY3rH=jNTiotv4ou#6^ZsW|DCE;Qt!Vw zrP3XY^V^+x07^^2aG>*e@|6<e)zXY)RWCHSWiO&X$#hCBwmN4#rS(CF-_(qHl``gk zWKW}xn5W)77E6!8k!%qNwvYc*T=9!O%%G9_k6HiAf%<6U=icWv$pb~>DS3J`>?u3K zX?3&{5{smoGk0Ig@HHz79nr<UB9=m*f2BN$h>#dVjBC%ZV}SP9Sr9PGfe#bFw-S-T zES1Ak8sBV)_q0m9IQuebm5daU2y-obc8$Es7MK8ifm7nh<!lh=A_Y>-?Im@UnLjV8 z2%H!{KN>)4HA=t8soobTH^%~gb*$;Q4A|vLX9#36F-x3{Zray0;5@d5YBFcWa768N zBo9`M{Num#2i{O_&SH~+k)QPkimn;m@Hf}kemrKhuLr=HlxU=4EIX<1(=;cV*Pluc z%Rb*YluBEbaXc2_^4|6EsFT>Nyg_W0maMC2P?(A^J^LqNO<ev$qcndVHea?28(TB| zPr`7JjRVZg{jxZuki#d4ra++>c7qry+IM}ImhMH<mL^IBLi5+o92^`Tbe$hm3m*EC zABKn>_E*suGPw<31a=*KE8*YQ)c73pSTWD&E6KF*@Xpq?BoP8mRQ&5Gll*vm>j-P% z2%&adtae;Peq8$FXnf(g^1tIMlM|ONCi;x8;bVpN2H)a0xfjk(!b>U?NVtEWc3f{C zF%uH21~3WRY|;^J4Y7W2W7``SleGO>994d#bGyNy&)zP^p5?~mPQ20JQDe(CGeyo6 zhk1QQHC`$5yH-uCG9~r99`>1%y7>uZE%Zm#`sP`Az>lAg1<VCYPXf+TUfcgDXFUJF z^jDSITp?XD?2PZf&5KNSbH86Pfpry0*?EXU)3}|B^TI1QQHCl}WQK0F3=LTqQzom4 zok$Rx$wZ`<V)43Og_viu{MRH`O;+Gfw!stjt5cp85`mC&@FIDx1QAS``adyhYL7fQ z<<)5DxYX}w>a8KfmkNB$b%etgnt^qDM-hGNTk);^qD!IWE+@DMBGx662+Jzrm~+wX zOR1{El$ZSE_B*gl-A8AfewZuc#-9P-*wZ9+U;FxO6Uy+=5DwC=WCT*NN@=nMp5I|4 zh%Un}XDctgelg3L9$N?8CW_mS!ymxCY5@UM9u(A420kri6<dtDg4tIZEBZ8F4DWv# z0%otftPCUm>H*UFyq7o~X+HZrZKH6<>s0>+3hR4&16*7ezHDu`SDC@zMBbmT$~)@z z`DQ2Z)2wRGvr-x0&)@O787lJ{bV^TA_%BN66KM?LNy2cv%;*+(IE8;-EAN}Xb*9CQ zfk_chv#d46H2jf>=_1GUF_jk$RZ}fefbK}OKg)g87-e}-niBPxuHnQEGW~E1_TDV= zylYfmTQxTyf5D)XDKgzrnGoWyc%oR{W>y;ghJ(Y(Hi7%C<N|5gQj&R%evUdOft=TV z<;c8NKVR%jkCe%>(Y(&2&K`XNX|dD)G}moZ(HT8kz370SA@a7vtx#~eFa2RF)mi_9 zghsR|JM)f^HO0$fwJbAD<2XSu=*heI`#qIutu_W}SH`HOA%TG^RRcG$@ob)c?mMH! zM8OiRb{oD2h12}5W8}BB)q5!yZEmY?Pum8*O|=rt`%3o?FA6ow1%J)nWnCXd9VTq) zg}!t-ap)GQ$Sit3wFl{L;s~v}3<SA9RcH7XJ-CA^QTH#;_x$7O{;mA^lro2O*jvs^ z$M3HIoIGPSY!c~TYPgiA#3DO+>S-eVm7E_$dNwqK1)~1~z)-9$hXA`U#zg<4QuMQq z>G5&fUr3VQRJW&-nTd<;748$B0*Ft8OYeKKBh8^xE<;RHT{{xo0@FK+LVmr?t{~0V z*-*==*3KPb;TD3RE{U<K#@y`z=ORNR28IXYo9Zh*SNC?Yaz@RHb7gE1_6I-ekr<DI zr7;tdJ+J5N_L=baCQ3N%0u7R<X{LC%Y8N|<QWJ*$76$sWJTnGh)>H-$spGsN)8un$ zYI8&0Yb#4j?GOmW!Q&cY<CYL&ZRb;W{mCls>THylnY6iYlaGf)^Ok0&trClHiQwH8 z@L9J#A_sCrk!Hn_*AeNCvSinhopVoD){U(%^qeBAV~d?a2jp~OUf4m4MvoTVTOJgg zVIzEQ{V_$^o7btM!ug1WS;65Yvf0Ye(dHU^t(IqOH2a7qy98ucR-qXWBpIG~fYqj) z6B;v9Sp>+d;mIFhA-T`Fi0~R>r}dyp=b=QCs>VTL3)bZU*8_*;k63A~sx`H3pVsEG z8RW)d&W!tsSGm@NNx#oF5RY(#icd(>#_ntVw$f^;3FVmHll9<o<2N~<(C8~?EsTkx zGU8i|FL#mU^!%EhScO~cBLAKENA$uDaWnG+dTxdxB+hUP7KLZsLgMSj^QBy|n!hRn zG@T5R4mtO$C_7r*sh_wxe$9~`s~{jwM;jGgSMVQ@UWSX2s&?g@sLsw~<(7_h7Rk<& zEf<=~YNKh{yzydl78^}{S#jL_s{HPI>nnr1(>LGP?tk_STfF!&{`=+M%YjvXQIFW# zq>IjJZ(;eaZq(V4$IM(=dl8?txJ3DB-787%Y1bdJHG=;HnAVGJwq2=9{3*5UCI!jW z7i4lsLfvENCJG^?wG=sOP#g28g?N0rQUVt}N-VP!jT0>az*ddDr$1LJl^38ie;+0S zGFNqN$jV}wvIj;+-;QbZuGb|gM2%UhTW_&RvEVCV>rW9!7Afv~m<yT+vfrV8Yl|m# zq`Bc%FwE&q5jtf>_z&d#V~ZDyJRKJeOy7Ne;vzqeku=Q;-m76f?;laI_sWd>yUU7o zJfuRElSv}t&M{i8_ekmjZcXLRDjK2JD`70hV@1-I$UTfyNuv8xMZf?^uyGKp+4Xwr z37Y<?nm}=5JxwFsyrGmgHP^^&6U_WVb0HhOvg^w@vy7Ky_r6!&KW3)Jz&C!Zse$a! z#>*YP+u}|$c$?&IzXz4W32u7N8CZ;4@<pD}>H~GLW!bSizv5Sfjx08*GgeK5^7jbS zr~~SX`<17U{`@h0g-=t7qw;h^And~(BT9qpf~O8j^ExUcKEfAk8-Kf?A$_Qo+gX3x zGJVEyO~O*x%dpXbLAu@FL{DCKhCMjv$hc@q8Y8q2|1{u}r{&=!xIrH8Q+{NmWyQ%= zgA$pLX+o-*v$^F<GY2I9^3qC!-%_r{{+^X64Z7JrzsYLe!n!#X-5S}`?BXFLEv-;G zquna{IZdceYII6@5?wvC$7>(!HA+Sm5)+)@DYe^=!Y12o()$V-HM^5W@L6}@?zmd) z<}AS|Z#r<(PUYDN)^qJcJOAW~$e{l~8q4uo>}k(z^$kBQ=Y)1QI<<Nm&)F{{>!KmV z<QA+v=pLRRi(G%=FV57u128<<a9*LdP_O=Kp_#`Q#kesASRWc%^E*kINHm*zZBL<n zLggBVCec0b$4xRj_l#=7v2-3gBUT%FF(D!@Ws!7pI@fQF@_$+?d3_U^f3TY`J9%m7 z@Z{f4;k!Sy{+>b9wOeLZwj)F&aeH!A21KvH#YO&46~R2jhHGPV1?GH--7X(twi87X zaOW9|1<~x>KvLD>P^Z5;)&4?tqg-pdv9xr|h62tCP*7GFikVe-{JqLS2HeZha>n}i zG{2Kn2IucRQ|v?agjT<})>DoxR9if{^&*#@-a}+KYwk@%XI$NjgTA8fImBe3Z^PfV z4&@)hkAyr&@Ez+2Cn={k<4NNzNQdKRyBeY%e(F7zKX90KsplFtxtp$e&Z`zXXPS7& z@rbr>ilBR4vXK=DL61b|LIW@7P9V?y(loZxBSrt<h4>j8w^J7uuQb#3lsc(c%cX6M z`fPWr*C_FtirJT2NlD9%>eu~o(H8~3_U$NZbuvNxnhtQe%x@4qlM=QcqN?ug87Nzt zQyeJAlx2_<B`s$%KO39=<tEjaAQ?wEz^g$v_@v!Ee%<8@5Hq2VPp`IkawjA6avT<? zdhs^p{l7UcfqiXq0j-~Z6cFlCJ6C@F#sf}Re(Fbi`B$OFi^;0YUP;t+er+2EUa5}z zQr9#Eo^RHDaTuqU$fY7Boh~EhSU!_=O6FF4*$cVHPZ+VDQoi~pUmkXU;4^+TIDGHi zCxT7xk(sur8SuF+9*d^qaZmH-zp6S$tY5`1Ge$QF4!hcny|EoU<Kzsp+Pn5Er|D!> z#?&m0ZAx<mUd+zsP6@&rtO9#Ys=kp`Og<1@YE5(^<4jL3WBqP+vcv9bqfLxwZ0wKM zLNO6VbE>40wVb5#Mf96G&ue}Y?c%$sjWgtNrm)L<QmWm~5_Y^JWJ$&%yn;_0Emx+$ ztWhVerMG1OiIGZ9IG>!}yW7!8M#}JTlU5gEEuX~vMPo{SyMQ#m=ToMzUqNr4Ks(^{ z0XSbN;_l_w6#b1n3oe6@f0sq76lx-FOaD!4*kgwd89EKqjX%O_p)rl9V16?&Us4+C zpjKNlfbXNmoeQTHYW!Uz>+R5;=B7;2BI@jr=-!Vdvqn(gOqmZ#WbtH|T*HlCOSthQ zkhD#cAjA`jV5hzyZmOY7FCy5@efQUv*{p~_5=aR3q&R`$Fm<c>?b79&4YMh$Q(?Xk zJZ8Y*oQO$m#7pua5DXqIr0j$^Nb`P4dSHO&d%mfk%hh&fdL1`N4Hj%Ol#L01%PA|# zpAOb@E6OS>DR+-6e;J`xN+X}pRNNbXjWeM<q*>k7t*We*YfvdC-Pmp>b(5+#%cN$o zLStgrPxNd^?k{ackW^jC5Z9an?q3DYIAxY*Nzx&Oe1k3tYN_QngAvIw#uB3)3!`={ zSsoz#)j0g7W$i6E{FN8HjqnXYHm+oUjG5UZTO+yS&+*P`kNB}-t>1_e4UE1}Dx?^i z?3hlHSiq&eB6E^{B+rn@lH9+cq1aTD^z50$Z--8Be8u)OviO0s6D;hJ%Lm4Aw<|X5 zzI-qM)35xqu4VXnNUnS6eYIk7^Y}cKUd*uqvC)XdUoq;Oaq90Q6!F?OB)Sx&8q~q? zOh^33;W(~CtzBS-7`u3RGkg~gl{d?{&6bH0Uj{jz$zwna$|55DC4)?hxFg$otHSTh z7PR|r^&acR=}BnV7**O@;^&>}n{f=1#gD&HYI#2@{xP=wr81l&TPDA_r>&^v-JC(k z-z-nV2WKfoLM!P+5h+6-!^-<!vfADml0L<}X~p!44g1FGG%Oi2{cxPICLeiEK%?9- zzCv12NSae6Per~l$=Q=)4=3Tp_qohxIuQ>DJovjQ8bt-8%HY3hvm#t07%Tiy>A|sJ zm2c|9%{5d54kXU^M$taT14;rO0=V@}V(t#gk<?wkM{_!OK#O`Z{qgUSq^;kSKQwPW zutw&ka3*zVWO-<&=K|+++zlZ#y@Mjt&xQ3ShiZEKjhSc$nJ86+w9-Ne;}$JR_QtXF z<<$@8QsnaFR&jM6kHoNV6)=NTxFrVl8Qz8;PkEZDh?x<U(4=AiBYwcfaj5nECt~`| z?op3gpQPu<L}}b42dz43l9=s;t2FgGnj&pS5|@50yf;!O=c$cIgFRCC8-%1oZjY&h zIb&JVNuH87ctkF5q$^#I2xZc}H}KtEkArLp5%nRC)I#BOY_l{?5aY50k7AEpi<SSS z$uzO(VxCc%ED)VcnvmT1!DxvO&B1@2)kQ+wSwxUmJNgQ1Im*01;l*;-_pWhd{U#}x zs(7&lUWlQV*Nf_8EK3sTWK<SSeKn+Z@Yf{A-NZsfYQTN2vDO5y_Crj%-cjia$xsa` z-twW96)5_Hoa2nN|1hqGm1)AbPVK14KQq&OO)_nWDc;9h5lH?7R+5qyBm`pRBvXZ> z!?aSHEd1s+wylkHPQ8`bWV_oXBW?6VDv~%$;=wT5Ebg!<Nwl4s#eU$ypxsUI)6+;z zQEEDZ<3;SZYIeLffvs~v*NdFKgF&>bO!MYC(r8s_!PNM16-+#pfbpz?krwF8C{hNE zn>s5NJl_-7CUmxnUAB@vjdnb<lJPa<jW%(bk>+i#2sZ>D6RY_-5s#P)N2HO!-Fn(+ zh(n!Y=GO2skBBg9wlDwc+VQSwyjV39h15o^_O^T|F0(>FrY+7i40l&-qu0Xo(cw-c zVQ=kV9$FPn=)+*Nu`#5M*WLkwR>0Xv%&=iasJFNZ%y@NhGo`elxmdfcDIYS}zAL-W z&-Z8uyXI5paKtM)6Uf`fE6wDFv{M&x5G`W?(k=uVGpyR{NzTBRN7)2pyvd_@Tnv$M zk48aEJGmjY3{E3yZ?&m2i13p^S)R@WSmB9}7{BCWXy-gFXMYB7SQxKzPnwj}S)udo zS4CIjeeEI98}dfz7!_MfnU%1*@eMrF)!N<|UoGuPr!Oip>`oh1Dz?p{X0H7cX_Mf4 z&X$^{^r5ZT1sS#nW?L9z*V}tYYz$e>0#lBESqKQQ1jeVxs<ZuxM%31G<w=Xz$+ult zJGYb5{Hs#T%Q8o+vporNC6e1bh;Gi(#*4E4Tyv)WV*T?qnf9Nq<Nk+9>80iC6<zHO zqEB|{GP{rrba}{{rN_k1nR9)J({i*E#mnVFR+spFXPAl=QKG%#T=%PhfrU;LBdpIu zq6F`Xl6*LmL)UVFB0?t)8qER6Ofy`DyO<peClL={-ap)(MEGZIvlu?69gU9Ui4jLU zYr5N8_R)EV=A+iU4XPfMDq+@?7oIWsP6T<=Pwf5a>;bpQTk2N3%rW)4^R)+jEunls zR^GhZnOT9nbuzEcuDl?{mR(BTpB(ZOiu47y4~tmtBboCliT?!L7g?Puc^`60w^v)8 zNpAK?RJT)&?5m=k=o6g?O*R@6mML@|Qy#2XY`RBe*estJ*_Ew*P^_xO<|TEZjBbBS zsZ3aEM@UJ8j|rd~g;UUDr*becR})qzcoMqPIb!LN-6Z3u5T=(%ZhciqpP1$gEh6$8 z*lfJbZW=TwB$1OPegegExb);qHFpFsAXuU&0mE1ox5if5Q3~R`jDE)f?*~y9V+u!c z5@%{|!q;4eRPro&>|tJ-sGB0V8Gd>tHSSTB9An(P*A@kvy*1sY{N7i{V<+PO_UH?& z%=xx$R9s-%=wRCIjeL9i181wZUIn3FHAS}(bPV5>8a+yi+m33#NRV^uxl@*AYGh_6 zb5L3{l^9wVpcj+YIx^6lMD@_!?C@QTV0KBwo{Duc<21?bG<&JUA>yv{wkk)trWNK@ zUTKD_Q1IQiIx{8wK-?UWFGCs6kjCPV$V`M{-tOup$HBwN2NJ(!HbUF$(&N_fa?N9| z)pE1@2@A7nqKmNDXOkI|<CQR#o4eAD=Fktp`(BX8UcuVFE3c0$MbV28-!<r&MdDdO z;#u=Pjk(?TN4vASjuxLKaCQE3Erw~(62h2&k$AjA=%&z+D;&j>J6-SNF-Z7jg76~> zl6_wm_`N=2p-Fk>UC`c2JTlt#b8-<oSE|Z0iMBu8UT<9^c}IRREt7NXcPJq)Eb&Y} zU7(tJlkt13Sju=M_UQ;?g1qN1P~v*k3ARD?Oh`&12!F&W2CITXpC~s1^b7mObK|Ac z@}@t<p@}O);sHATKs11o{+x>coRU7kViA|-QGl!eIRkqDQ(-p9=A2Rd{6PDml$Q0| zIfx>VlRv;BCV<5zfCqy)XD<w()V-h|4iI?0NjDroS!hK6aej>pY+@u^!$$P($5DhC zFC}T&oJ4lPOwo$|Gtbbn0liZRev13~C!@C{2@;o*{ipFqo(ax$e;X50`iYA*8sM$A zVCK{gGFXCO@>5@~EP=cff8LvA5JM*r*<L+1;F<mFTSt4aiVf?}=_F2}>TKJjp|AD% zFe1H=xi8wUX3gwkVEBfQp6%sj^Q{KZ{S0tiJ?HrrK=uCI@pl04$LlABfxHBvta3LN zDP$n~itCh&U~|HRX+qM7P$K&$Cowmvu{WMiZqko#R-JDS!-)gJZq~wyz344H215Ow z-1xBn4xqR6Tdjmfd?fKW&wADn*6q?!36*n?u5CM_a!LF~F{AzwiwiUJ+2eKWe+T40 z0jrDfCXSq>SR34AfBz%~ipA{%2>UNAcAtdCv{X9;l0%S?Q(_fKh4aU+AVRRfxaFf> zSkRMihef|blWrO+BS3*+RSSQ@9)!^xpUN>26~8fm+FxWc<5y)%Jnc>lB_Ffkjo@fe zi>!v<H9Wto>33=Tmbx}_*MQ;OS9HjEVgA`ds!DBVXdc9nT1CrKZPZ@{8Dvc4aG$_W zq1OOJ-+D7~sXzmGmCfUQ_6thvevUg+Dk82j329m-I_{C8JTH3uh2RAzgb~hv3bLBq zCiA!?pCT(F2f0#vMN^p%?m$ba3#*Z&1|Za<=sHkzjq|@o|9?Zb$9+Er+NXv3{=6U^ z!1k?vLC=kFejM4DjDMuq2s4*pWV2Rj{+mH7xcnq~;njbyZT`y-dQ6y7FOtjD|Ke}; z0)g7EtQqm%8C}na-qamXOU~y<9aJVB`Ty-d#k~4mNUTV*u6()n*Zc7Iqf}L&Hu)$S z<PaZhjo+VRG!~zN%c#+xb3BopT_ar}z*Woj{>mKH7{L8LlkHJ#sh-igs>ijSkb{n? zM|b|6ZE<{}6wiFIEFQTJk@3EiC;#_9T7N9o4I>35H;s_Ng3Bd{6Kx-%5Fs>Dzsk#i zDC6<mYk@d?(b*-T^}4x4QDG+8GpTBkf!9|9T_RrxL*=M6Bg4eMy^~#hy@wR>U&!T+ zVJbfklbk4(q$E%gDLkC3P8WBpFBbGZ_)sn>KDR<GIaBH6#CFDb3-<9S7V5)8E_It% z#+rA1Xf3Ip{QB;d_@q3Q*lZuNM&%_b*)7JyINrBQTaa1ob0Mnj3A+xJ((fNsH7S`2 z%#n-Bxi*o*%|B%v3U|Mb)%PuX+}$B$)<3qr+R|I!|N5PJ*?@1fkKOLWeA1U-(Vhm< zIIIHq%J|^7vQ-JgSiBq75=5aE!IahRO9{q;xzv7fl7w_#ycsgpX$E9n6i>yM!Wo?# zdKxTU)dX$aEIw@OvBody(<8EUL-S@-uQ}G;ovJ2#(Q(@4SKmBMVznruB&#NzoxK!1 zt@J;+*d1t2Xw?)Ve8xOW!!`4*zP$R}(L@Qq;H9I_;;oZ+Dx=As$WJi+XD486o6xlD ztT4#`%^}eQHzQ>VqO+H|!&*xrIqunsL8%o7rt+28M|!(FhF5P;ItwPmjFY*3foU>y z_)&guk$)!1sP_ln@t_*L4R44gBJa;~^iS}B*OxBh%xc%wD;}jUTHJ&30*!N8d)J{- z`h8zamZ-|`$Z+rhtPx6c2>>uhE87DPzlRN0kdKkB)yd+);qRJq)T_yHZKP+?c|a-% z;IE)$HDkKO_#KT~dl!hLd$Wt`Cm1zGqPtwuS%Tf%KJJwvo!*82oF%`Wuwp2%$z9gR zy9cbfQem1?8>7#ZGZfSHQ3+?hP5q)B)XAk2UjLC{*_swI+LSM6>76jI4X?*rq@G37 zFDg)UW2Y2fYnS@=vD#z%>T=X;7i%a{tP>Im9jJNv7^gST{iF_E$B$yVnSs7~TM>$p zrY?u8Ze`#bGd=8^>g;A}k`FNC7Fokp<0mL3co$JM8bd@{*J1!ge0iMODEu9TN-6-y zk&d5W{z*}e1Kg>ej`;gc(~q*fp*-7T1KLkVItT&zaHQes*dciQxbmahowl`q`FQ$i z?Iv8+fN!<()vmsvoI0D0^4bp|Yc6DxuIg!7Nao`f#rB^ztS)~Gb{kITqJwn)(=M54 zlVWplnAno5`b#SogKq~>Sx^H>D*uW(>u{t!g1}$si8HA6J066d189T^J4A0pn<iVq z#a4|Y6|h#F@*gC#$Fd!p-c+*=&lZ}72cLpARSzWNJde2C)8!|X3;4z;Fm&b~G08fY zgi;h#<$^{Uh>YKj(4to^#y$(x@6`wsCGsgXsjCc@KdZSvG70d0o_f6fRkkiA{ul>F zQ1$uK&30zv0ym?bq{Hk@jGFoU#H+g|I5x>ZmJb$QtN>-4<4FJxs0vHY<Qdj-q+Vhp z?k?e_v-(ks+C<&i4w+af0dH$PA@D(yph0s(t^MhMCEY~+sGbXvW>uP!qdVo?bdr$f zK=+G<O4pT=_q-1J;|cxvvR2;iu^R4=V&#)LX5inx6rmq=yBK>=##wG+hxhfuT8r0) zp2+3XO2)v`AJHFYs2=nUw>q^dyXTmhka|u32iGFS-FQ#-5}PcVNe4sPUbXcDKZjz2 zh=b;m0X7RzrXC2A#g$S6%bqcFaZ|!o_aL1guKuWKTPqG0JeY2c`cTXl3;IC!_)mks z(j~Q?vx{1BQG4;@B)t5^X}W&6@{)@qpmjPB&@@%x<N>v1SXzNf__ucY$|6fopIw#` z<W5U}9NG>Dvkob+z|hf#of=2G2&31_y*PL!XUY@e5)-Xs@z>(FrR8B63~cTSD8}HT zw}VdP7o#(5ft|_Ogm@}Oy0c!#I0X|lgi66`-Hp>Y*lk+-Pq?F$?0>jX_D<BP2CpmY zd(KBR(eNGK2xYO5ayM*nPj!s!eO&sb<$PssouYUx=;6Lo>WNuq7{PY$Oiz*Q_tN+# z|5ewqI{-g}|Ba|*fzpRaxRHee3z2kWO@~~dPL`LY_tsUAP!AtS!izGl#r+r38f`%8 z*q*OCa6CbadQN$k%H|$YnWe!Y%8-LjBIaRUzK4>B2n{t}-*9FTpm4CfEaJ}ys|g+X z<c;Gw${x1Fl)o=>xhHZ|)A1-R^E`G>p?d3teQ<7`kUV9M@p69$AFpoy6#wFEFO8#V zQsUPVsSp#>b6f&!b@q})j%v+9wF~uxa8AJXl2G$|bxs!X><Wnqz9vBYLV=f^5zyb% z742>zJ+aFGU4HMxdB>s{q~Oe$YUVGd@OyR9RXUWeNY}rB(myq{F_hCR#XNB6icXxU zk>4O72|Z{?mkg1zmzk18##7gONKi@2>8+6A)_)u?@?tBR*R!T`&y!~5=gaLNtr3?_ z-_IMgf68deun`v*iCbThhMR`i>+ni(j*r@_BK0s@V(YEl&>(zat_A>{e{hM|fWLqU z@NoHJ8)5bR{{sL904M+;000F57(f^Rgu#F?6c9!L!YDu(13&-(0tO&Z0D=G@C;)<a zSaAUu7=S?m7y^Ky02l^90ss;WAfW&f0U%KT5(A(C01XDv(1-N_K%)RO=Hc4_1`J@J z00seIPypuP<)Lmc7=VHS1Q<X)l!1i-urL@b3<V1#z``i7Fa`_(zz{GP0tG`5U<e8f z!GK`^7zPHzpkNpR3`2oo7%&n5Bf(%K6pTcGkti?{14aX2G#HGAg3$;t8U;pUz!(6G z0fRA6Fa`m}pum`ic06<&3<aQ2009M156yxK15jZwR2T{sMnHv8P+<%d0ze^PC<F?H zAfONw6oP@m04NL$g+ZY(1QdpX!Z1)I07ZhKNGKGEfFe;)BnFBGplC1@4TYi+P&5jP z#y~Lu6a$80pim3~ia|j!4<UGnI2Zvy5dZ=KpdKQE5C#y!V1zIfA&fu>qY%Ov1Oz}p zzz7Hw0YM-jC<Fw9fB^^?7y*MKU<d>Zg@9oYNC1HZBal!85`jRX5J(IH4It291R9D! zBM@j50*ygn00ah%z(5fg1OkIXU>>6XFxX%e07U@^6o7gd43sc{5(cA$p(tSlN*IL_ z#-Jbo3Iaw!peP6e1wo-87!(XZ!N4dO6a_<|U?>y}gF*r*Bp8K+qL2s_5`{uyP-p;! z2BXkW6dHj-qflrJ3Im`pU=#+5!XQu>6bgg+|B3K08V@0PXxBsG!&DFkFv4JrFcc$< zzzCx-!Waw$z(Bwl2owWBU?3<A1cQMA7#J7>gJNI^3=D;VVK7Jlg9KxcPz(}*L8357 z3<eEg&|nN2ia{eVXcPwh|CK#Vw1?4t2>C<5|5y3{X8r$egc#sA5sO}X<!BrswUFa< zd)0Unh})o4ucLZ0jREZaWxAv0eHMpiDvN$+?M$wKCDL)Gvu>_X!p*{p4-QrFy!ZR` znZTESK3X>5Wbe2OYEq?=f-MtydGw+7QJf-#>H5g3(I{J0bg=u_ti`FvVm>mzd8G~7 zTJ6NtEAqKZe{}5Yowe_m?#Dkr%^UU!ee3XDy`vRg^?TA8OZlDkv>;$-B#o9mQ8_}) zc`gA1<x4NTeEcz!+w$GBqV9ta8N4{q&sJNOtJn$TMvA{0d`jB`e(oWHZv1L+9DaXd zeG_*2?b&mJLtn?6fY{#FgT(oJIp3|>206Lc-LmT2ZG8?HT{c$b%da2axD~3FM&5m& zSx?ga$oewk%h}|8;(x4|zdO6<^rf#3vHB~*aKv;SLkM0!-HiR2y;>3b1I_OeyRk^m z5xc(M;1YMPV!NG4PDNOifE{}KBxJDX2yLM+<3VlSy?B*t(z!^(Z34cr;`UL!soyn` zB9~jSki)lI$#h!mFUjb8D_;vyVI!)uR1kvfSwG?vtSeAvTKCAald{_{vLz;h=Bla^ z?G-{(kLwFPs2KSQgL0anrQuB4hvlK2Ui&2>7J>~Gkz$NTh=}^8#;Ry8gg|;4n^03t zp2i7Jb&<)yetqE%VPm~-ppbXnFmFm#629vDsuy@tm?Q5LniDynhg2=Xo#>vI;lgc< zy-2p#Z;5@r#gEP^inO-~MV%srb&9xJ_;d80buPUVs&1X*`uwc7+cmAacOdY-CAA|q z>a1@!aqe{wO6Rj!$JSB^wIsq_O8?!TA9HQP|1O%_MgWSx;-iG@E&d}U%&1@E<hqW( zCWthR0><eb96KhMpQ0qkC-P3X-!Zv;=@>zb=y%SD6rNtZ7mp&981Y)_?nLqTkzRg~ z|Nf<GPCCuI>mx0_qiMG0WoZz~P}o>{xVE~Er?%gComz5nruO=i5T#~%^W&s=8J~Oi z3z=1xjJKanpfzVVs@~(DLUr7jZA|&>hK<eF&RQ{LkF%ra?kxEt>HThX!kH07FWKvi z+}4xa^1|Wqx?;<F#*o*P2l8Hi16oCfiuEN%$ez5ziiX#b>iHj&2X*7W^?&4Pj`QQ$ z>*>;xcWQI!eq-_WFmvHYCoRUcD9Jm4`RohP&%d8L*y;c3pfsBl0zY<@ub!^g<Vjh4 z;eMxbxfUi4I?JBy7tFlUZ^%9Lv7{gVda-KyKy*HQKK$S9&!4X_z+MG_ksAT17G8d7 z+BARpbOiqcMWDWh6Bd8C8iBQc>;$*PzJTW_dEl=&dQz9?QboCBslVigIk&&Q3mT(~ zTu2ZMHmohasHxe;6_#FP@e8$OIgm(7QkftFFo}9vk|@4p-M=nWDTDy;9Vq#BGy^O7 zXhMLiBgvA*l{VK_L0B;$&E|>=G@4v8N$Zi|Vzk3hwKlHr?2&Lr?M5-Grz=~3o;o|d zO5MircKPdKX2_5$$8a*UbfpVbk`WIVKWCy0F%>*Cn7c6eR#&FCL(HjVkB#Whv`OGa zZs=b&r;T8G)jzu8N6QrqMuar34B0Qc{}@vfxdPIFS!ie+zNBkA#e<NA%oP-eb<+{s zH9+)gaIa4Mm0%*@)JW0D%oC|7#{bz44v9RNKnBS!kLJAUzjDC14h;WfOo&-xd5Xnp zQ!DmCymWSvT_FR<^!b!{fpIA=(0+`WgQMLFR}|R&FK#tD_m||2j2bnbB0gLQ?iG=R zki9#(QHyB=m0_<xC4E6u0=>9=$-^T+3`Q>4ko%W|@+*RV5PiT&TnXmN-7u@q8;{$< zFZsGRL!79f8@u(i0C)R{k8G@;VPOw{b%;;AO44xZPacQPS6vG?f8%m#T2AdceNxi) z*w)u0NR_jB{$d+YgDPz^k)#h5qHDCG@_9;EEth`Gp!Iq@d8SW~m;LY5Pw(io5F@w; zWJS}KKec{FKXp3N_~;FHR=nwelko+v3}!vS{{%0>tEWgYSb<`5q{-bD)2=7#Z*C<a zhozI9BW5OzC|`$TyNFsnIo2D-1b*uE*cWziz$sj`N-<KMsl2PCL@{(X75DO3<XUO3 z#z=JQgU^h8iXGsG_}T-HtNhIB?sa6YEjT~nWqLMX^KuF9;xCZRnSHPos(8^lWa+}3 z=RKPrIT6C%;>+c<szkdfZ=$nmNqyh%kjJRKIwH^0UVA!G*S0y*5#v!$*<jU+RTAWz zU`!}Z$s*8Xe>qM;-XWveQg>@{!*QzOmYdvR>R=ySllh(U_uB6_t<ILDEj`9E9WykQ z6GZ~U!sVe@aK|4@yP(C!B-H|Q5)P38xhuVkoQk1b0pSQntIeeRh9Ob`L&iBLYf0&s ze+$3sOrgGzvAcatbBlR#i|NtK-}ja^JY@T^H-L`?^Dm#3SGMW<Q2*6W<BCN%ru1yW zfA@sa)X45{(Y&n5S!ozTm-W*{PS1FrXoX$>n1%MwMDd4=@)QOfgTo$<2p)t~UPtFp zf=mrt=Cc4C`|UUFRQy9)<HU}oPp7DKo7Qk|tm57t@%-2;%mDbf7vZPQs<{04{<7*) zoT$<tQ>A_?$>LZNYdgQX5D`(Wfr1&Ohvn9!i)%@$ORavITHIeR`msRxoqq8v_Z+`v z_1=+GQ_!X6<Sjye?uL`l)UwFV-~N+eVnf-V{%Dd@6ZLw*%e(tC6E6y9%Fp8U?31+- zn*mv`Y7a+RKBq{>w+k4xajClI`tQ9%!?Ls7Np;MMvH!*E7EQI$iT)R$X}6M?>=B{D z7qc02n#UnmSvE&NN@h)s`@~ed?e6u}S8vs|4$jBO3Ju~z#^XK&PC`iJc#YTKQhp(M zTe#+dVZbqd*U=Z3+g*dk&7=9oBc^$xzNdCq7yrGfm-|NczR$2W<hvW`Vr7zQKRhMk zyC!2Ae3YTGBiZ>qKz>E2Ng4<bcNyX2fAf&N1~ScZ@qc-xPd;@_DW1-#<u*%KMqKbc z`*xK*e4wr)WjD2}vSrscv=ZuQ3ACS|yt_d2^8IIm-@MT1H~3M1-Sd*0)pHZb|3j1! z^A>+;uuBN1B=+C_<c{oI|Al4}`sjV3znZAQBU$~!`w8(Dxl#whkPTt=%=x;MaAS*~ zaSe~JSe|rALC3|P<myL2Ug%wivdjADTF5^8{p52#QQaqwi9Xga*8tbPm<bxs8eYZx zMUcF@E9^3Kmct~4nx=8rN~tesPSW?^r1GOBt@qY;kFbEmLO+88zk5*R<(B)s8A(7p z#hAo%bq3;-DZ&bV($d3-dl1<h5J6I*U!yKXasx%Wf22D=*6U9^yy#)j;OESjc&8TC zkmHPj1UT);hP<vKwY8x=0Xs+1Gp}g73;c%39WiMp3NXpN_)zC-yW>C08^|Q!Dee9^ z%3NbEK16Z>;@<1LfDWd<CbEr_k$V3`crWZsow}>msC~*zMLkAx1W#^(P%hZ_x-!wH z`U&A^D(R;u%Ifl?+-bO<oG$rY`y0ImbsszR(FD_SBVhPpP{mx{R}taq*pfzGPkB=7 z%zWR6Dw!MWXqjm7<5%~{j)llE60ocCSXMF6TqUp?YdJpo9WS)yVLug_yh?sqK<e}> zva5qoPoCmuKgA^n{@e(;g)PM>N2L3&$V>l7uZ6hhYWO!r_~VuM?#Uh=;6(FY4`=H{ zOph)FNiR3vl!+@Bt3EG2_#%+8>BTqgkoZs8(XrH#(44muT5liD*$D#P73ElIC40&8 z@Ck-<{&AY+XGU}xH^kYK2)F|6>d!o(VU{UJNpe{Q*(q_{P4Q+GN3mKfG_Qkk#HO5~ zD}2xi4xN2F-s|YaT4g0lDV{j-=1{q(flAs-T23Cuqq435M@Ww~4b^SZ=NeK+ZFx0b zX-!GPQcoJ2YX}D+%e{0FGo&a^KdwF7#HucOR^9PaaO@CPxKnoi`#t(o^_<iAd{_-6 zpBAUn79#vB@|e!!&Y5swgi!M~?rwoxVS&14fa0Q`6ic7FE`qoP5uO8!aPh~%JP7Vf zAHb$?Qg=8-Ej_+Gh}e`*&gRCQ0^v@L2)~y|^q&chxDs?ak5)=FmR1ndrOf63?KG=t zx-@CF;_*bMgCkF){FOjx(h*(!QL2$gK#9WRUP&5XuaHrEV3(GCCfhsjw!#)HH$5)9 zsI44C?{~jqte~X?tI2RthssM57575SLTtCjolRB~LADxjB1?)jEq@zXwjOMxhJEpL z=&oL{DrW}%R=(nnlPPEPyq@>!BLC||NRpnx+ZZeJ5T`Ud*M*Tv+Xxn!TJ70N?I-Gj zg8gbc2x@$_n2g|O<xS}Zd>&39BJXy;Q)k?p=?ITx>N}3CI|+){^kkUd$)#f;9C;9a zfJ7v=Bn3u3atuW5PfX@-P+DUbb*CmzsSu?i>CwGfI>(reQy=w+ihjc1xGf%kEl<9X zDj7}7BmTgPSuBi3m<dPdNGl}2^lW;In?diL6EU6o>)1)0mKCu8>D*65ThXaxCq8y# z#$yPN3D5sY?KG>+Jh<Ze(VVsj*Plk4nMT0-PFkz{*vTRwNOekFGgo&FzbPlDP@Y)T z#gludp2oP_Py*joUMDVrGCFoD<^@s8-zJdQVY6ne{Ss#?aUKnZ?}^R1K@`0Mvo^K4 zBJG(jHQJjtk}uVQ7AI%H&{#6cB^BqfXO<ewBdtANVZoz=u^!`JNs$8!$K8(ehIwFl z)w^!h*-S_JgBnd6GhS^p_%={G@@1Rfr2k9^oS$e^Omw>n%PvuDs?$goqqp4kEbm<` z)K7)#Zj?!<7196E`H9F$h{$~rz^j!K6kb4dq@8DHE;mRor52D)5}eJWWpKY_@TI`f z;6lgj+%2c6hD6=cBL-o;Ewg&tbB(5szeUzbT0U48*e+@<-Z=Y2;M7jL5lyK=>0j%W zI76aBI_ZpDT^N6NLa1exoO~GEtShrR!{mS>dl}pR14lr(zhGBd^Yv2ZIc8rKlwubY z^dJVCAcpcVZ}pIQlJ|OHiiC+523+t1UnUSyh<f`l3~8XT^N4u=aGHdtK#?>-51HVQ zN!BJOOR~-ByKVPlO)^W=X0P(PvMsq5gjf`BSr?Y!nZt;wCy6Al7=4KYlJ6NLo`MxO z;5g1?L@Jl509Rp%@qY9-IBs&0I`N`Axru@3PnyZLyBd@%)~Y6!dvF7AlxdM~a&e2{ zH|#Sq`C?$Mx|cdS7#0?R0q0AWhg4J5ZF1O=D*(63$B7(_Ae$;jftD6`7^H6Yq<0ot zv$J%z8j4?XV>vbu*$IvBT5E=an3<ptn&6AG_j+Bnkm|NsJMqKHK#>ITkZh4|uxA`8 zo3c+Pk<nRU#rvf?@to}QoaE(W6?qfYv`f=C2?jt6jH(p>ICOh93$%rbazL>Htmq}) zDzjC~v^N<PXAH-QOMEiv6Ns6tYn#BLLUCI`ogfHb<#n!c=_48Ba@Mp{REa2poVf`s zq<DgcS=^G!u)a2tYCaY+f*f6Y9EfK|3<;c#Oa%Zt#m1;?%BpO=NYWF-<Rdmay$0aN z@#TihW=P3)%bNAb<mF3dbFAMt3Cf^P@2X3q9LFnaO<vm+ABJ{Vk%EXNbvhfxRu-SX zJCRPYWT&gA#5=sH_+(Jh!xXs;^Z*UQdu3IucwlCC+&hte3~&HvBbf-P-^XoAp>kmi zwt?cwij~GhDI7A&MA}y>aG8owwNL{M$1W$s2rbS3F(+^ieYU1Sz`RVu^6bL;D-ev@ zsss(u`1(f0e0xiqVt3dU_=`1@497W{#<UF0J+ZG2l@QXryfcca(oD8LL>C^N#xhEx zTE#@tj5qT;JEcTT8^w`J;ZYmqB%w%g5PD}bI?l}L&8~T}_0VNjcFj`_$749CRE!l^ zT{aI1X2(mYJyF(WIMR>%j4YHj6-~=BP0y8DaA_sK@NCdG>c}PhfCyp9(7VOrTe6tU z)}5SS`8v;qdThz%&w{Ou7tPMJ465(U*cUA{dwnT}JkvQe$_gEJlycWT@}dqg(%dTs zldwprok(mA*QjO?QU}?PZB~4p6*rMGG{)Bd3W3d%ZD!ScWm?v!fI6~M++{T3r#NC| z!8_c=J70t9BW)tj?0nPgBi#>-+iE@8(!JM%J=v73*?=5VcUV*1eVv3|-jc1|cLTRM zblqS%*n;fRW+~Uy&E53f(L+7o<vrOgJkQj5-#US-m<)8jW!^9{7CVI31iq<Cdxv9l zg5Q`E1r5)u4d2NP++8-+TJ~jJ)^^8B)qbqo(Fx8Oe!Ohm+d15)W6fp0izDQmc>fL0 zDI?E>JyZS-w+P<f@r=ys&AmNQ-+o-#9o^qLeiPUA$n`DCJI>1njn_5q-`|~zpk1xC z-Q=Ln<TlRSk4s8OZspV6*ggK`Twdk>75(IuUFJ(M3G+MUV9wrD?&C?0%w{gn4ld_Q z4(9j$<j>9HI1=MXVs~AR<6&ORDWlCf4&?q#=;;idhMwmR9_9w!;`Bh)i6`k%7US4m z;<aZZj4rY_-sG3;=>-SsSpMUB{;Gv8>U!Sjajxf%Zs>7N>L<ABojmHBPS8HF<f3FF z{sicied(3G>s4z;yw1Hb*XFhE=xd(l>V4<5&fg{U=8azHL!OGvUg}K_>*PJ`%su3Q zzU<MB($cQ#GY;%0c;b%-=g-LO6G`dI@aoXc?dbm2`|aw)KIv)g6q(E1vJT-h-sW;1 z@2F1g$4>8y-s(Eu>;#YM2oLc8O;@$De%}urbABGA{?6kMFXy@LWByI>=$-J(uHIFC z*Z*GTeD2_A{_)D*>Cb%=r#|Y@jw7mG?JuwG@$T@}Zmr6m@#4PoT#obV9lVha@3Efh zRg2b;p6;98>@9Eeu|5oB&F(7xoMUb3osNDtPUZt2>K>2n1+VXTF6uH5@FUOk4Dag( z&+|}W_Idu}tVZoIXNhn=-87!$2@G}79;*e9@~g)53V-tup7Jpd?b8kJc#VE#{^u(H z-y^T^Lml?9{^vuE@{I2HtoB|wg7;;w?OwCv#NhOg2l-<^Uz6V9Wu4-bzV1;U=}SiX zQlEIBKn$zj`ePksLtp#<VG--r6EOR-`vb%KzTf-6?=QYD{J~%Rzkk}sulvb={LA0` z!2kTrZ!pY1{mmc!)Ia^q&(yW8{MPUMz7M^7&i%bl{Jbyy)qnoi5B=w#FHLvfB=h^p zkNynP{pmma2ZQ|jQvcO2{P5rK0HLfNw1LDjO*)t`Awq@=GdY~}X`ix*%k){)1QFrE zh8sI}d<b$<LyaLtLPU9TWTs)!EWV@{joz}DF)7}hm{Z`*dN^-VthW!^zMMjX3MHC! zU(lgMn<{0hv}jX`Mw1Rb`qb%Gs|2|&ecCiESFcu)A{}`3Xw|f5t5z)<S8LL$V!u)) z3b$=tvUHUyyGc<0Akm{&m!3`A7VlK2KPL`8?ACD9q-*=0C5)CU-?L-4W+iObY0!ZK zd1CF%6m(wJoh7%no7gklrmHz~UhGwDVXb9F2Neh{c-z-a^+gMMJhJkOGwBJInN%Oq zX!<BGCO&;%%<a+kUHtC-`!c1dJ#)A2eR}kL?2%KS4pSM-Xg>!!7wj0YQJ$xF+83^; zo&W<ZznumoP%s2b`|mN+4ixS`zy$oyGz$srufhoroG?ITJftwco&t<;A`0~juEPNl zB#^-sH{|fK$NF;+#uY_W@WTfq+^|L+e{66+8wJye#28xyGQr_AWbwxb2lVkp4tMfU z$P-iS$wVFhBc#wl5QVgFLnsN1@<$POs&T|4gVYefHCa@XLKaOVvduCtqH;dxmVu@w zi-KDQut4d-5=I&46I95W=F>+{J!KMfral8z#yMpm{WH)kJETdOMtAzNv`HteNv4;4 z5_QbLM%<K60SOXLr_x0ANlRE6M3qJ-Z-sT$I<sW(P@N{~RaRYZMO8sBPwR3?W_e{5 zT3(k7cGp&YS~b_D1WI+wYOi%M*$aU~(^_SL%5YemsvYiEX=ydq*g9SHwp|O6HH}_Z zp{15zEs4E1Un(z*SKN6yrDva)tou_YXci8%xrYgrsbc3WuJ1lmYkC;ZikhqS(u+%- zskxfPWStl$h$-gyRZ(fOn5K&wg_+QSX!?^*KkF3CCVFY4m)%WiZT7)5m&9>NeRb9H zMHdC@RcR(G%nxM<H$^(&a)~}TT&<@Z^IH&+wKZ(0qiuKKe!+d#<sS7rl-Uo}7MMu| zNql<fDbqZA;9vCv*TcB!l=|s%gO<DLzO`oCSZc$ZNa9ZGdk*K4arU^~JxkpQ(u$tD zu;kz*W$<#6YZm#^N&}_W)R_mZ?_Vn!t(kSzFQ>V=*gKzT^iTn9v?n}gX8&}<zN`KT z$9va~)k?C#G#be>rBype!c#1=+x~cF6?)~jOwrjIjf@-KY#)O<?HSQ`yKG&@B)oeA z0S0n;`o+)sNBR#<wRtR)ev)vCbvWmx3rvJtpNh;?t~|x5SMrOVnE<yd>~-iTzEabn z1VfXF-R)I3vB{z?RIv~Bu5yI((u-mS9h-UTRCtn9r7|`#i(POcC)`q}?qj>0fk}k0 z>eLH$NIn^^4pw_|;Y~2dI^>lm69#$6L!cPNC{B@zRJ7t1v3SKPW>Je=1mhRG_{A-f zF^j}FpEA5y#W1q5jb)S~9M||nH<FQ#cJ$&L=P1TE=244QBu3vTa{tFV5;Bg5G$bDF z_(wznl97*mA{w`*MmZJ|j)^>DA;(C?VPqmBo-`vTqxi`v4nq@udYvgX`NdAM1eBf} z2F!|hk)DWdhsbN4r6vL?hY4?p0-+q`V7I7`@yV97^BJdJ2Rau{ik91}#}lP8O=?!t zn%Bf;Hnq7;Zc0UsC#uIMh|x`QmeZW)L}xm=NsK@?NSf+|XFRnD4M`qKobtqHKBuXS zQ+99}!x(2gC22Yi0;qQyLt+SDLaK=sZ=t9wW}h<lBS?|%Q50Jp3XAt24qA?KMjBBj z^f^+J%2OGcn3hOOx>A<5beqt~#I;oFQkrfv6VRJ!O?6sLdjG_<h&{z8Ofz*t`sis= zMip5@A=ML=HK(J5QfQ@eWRo$;$6=j9paRu3qCNS~LOI=OSWDW@6@gW(XGLo_V=5xE zrnRObEmvFJ>e8Fm2WN6U=P(>)s!{D#QbcW`pFZ@b6m@iUFx;Iihv!152CAV?-4N<7 z*r}8WupS@G5?BiZmCAHBGoOu2XyLh8&r*}Lr?qBbNK2HP3QV)5y{2kmE83&f_OrI- z>@+vKTiwQ1Dzfb@XoDMC;40;&U~21XMLXNvViUNyHEna3JIzTH>b1mW?r^ainc^yU zy0b;CaqICMo8Wc0-p$0qgfv9KesGrt4I<5O_!#+!ZvS<ll9YNkg;<-&mrqQ!j)$Du zySZU4rox5pXm7jV?JhUL42CUlxf|Wc`1C-N$nJzS?A#1%Q^Lg+Ziq=EVh*P^#J)Yu zTFVMy@PZb%A7-(MHymCDABC(FnyGh#`(o*u6S_Q>Zg^2zp_#r%!>jcUZZknBMAfom z93^j+YU$8s0$6Pz6j^-$)!)<+xS%(p6jPr=B__)<gP!`}PE;xy(bPpXU5UzG4C5L) zyM{PyhD~3>c^Nzx=PNfQ)`w=A8$NSI&Rr=qq7}X7%h0*aWVy~})PffCIAxqz!SkVY z^Ob$HHZY7%jiVFYXHtVkF{4JcYpM${XkggUasMWDqHzOju;f|P;R#PYn4=!`v?nQ( z=m}p%s%uoYMLSwaujF>pJHg-yXA=D>2dDfKs}kzJfDs)B4@$d6eeS=)(dYwzq~1dP zhf6wA>2qD2&Eh@<$XR)?SAbk&q6Bo_^Y&~|EG(d5BbeTYsSR^wJL2ZrINzaJ_k+I+ zU9D_(F5`r8X~XN4wYCVu__po6|2=QiY&_u*R<e}Rof#0T`^dj-u)x=C<ki}iJlkPy z2P@_3+#W>?F#tdeXl`5ZESXQse%Ozk%`&47>gNMG)uMoO!$(C5QBY$tqKIz97yUJ2 zjtb%lCwifiPWmi32SC_kAO@hAg*GTBP5&mszV_=P2DC5*I{<DV22O`1pq|->7}mab z0MK17Nja{AKwarZdv+|P@v~;mZs|Frd?<sSG+$)%6#><H!HAcLtucKU(gd6+)iv;( z7jtXP;NA4FjkTRgzxYm@DVmKxJYrH`8_(?KD`hv1cM|p;q9~^**-=W8m#il~4Vyj2 zS%wO3fCDkyAO<%GN_Bkw>x>57myv?D)uRo*Ac_e_kmBBbd#5vDPH#k6FM8$Vi*4Is zNu<8Xj2O_+{N~>P0D<(&XjnrLyNJR6&5wco`;1x>jY(L6=W{-slee4zj(V#Mc^e8f zQik~xgX&r<gc~tWy9q!$jKaXVp#O+FvD-AuAT45uffxv=5X`v&tcpvs44?=&xC)Jy zL%GAKice^ZsNf6-oQn*!HycE$%y^2MVk^xcIHDK^Mu-6!(1avoK+Gt+D73*2q_h#U zLMj|F&l|C`%Rmj0!3G42tT+VZXgDnFz^5oXDpWkLBagyJviI0M;-H9^qln$RDZ+X^ z?RYtxV?Hz>2LB6#G|-NqNEm&qkA|w84WSwFbF3FR6Qa8aBf%6C+AAS35Gk=X9LhR> z%0#LAHVk=@emg^=m^;7wL;0hvAe*KexPfX~jVqjp=Oep%Yei1Gic8b3v8zRi8;Zx1 zl7QlisxSa{(+o;m3IhN@6#tWooLViB8YgFDBL=iRH;WfQ@~jq|!nRO5oNL8i)Vme9 zzcsWl!4SpRfQEL!0Z{mkMSz3o(y?jkMbWa0)T0cz=q$?UwC+(O3fm4z2m|L!gEmY( zlKTvI8!qd>wL0v*>4UB5aKmUqIzll%?VyP2h=D*%3jYg0g;5Uan*>V<I;hez$||T9 zI+LH6M58m50-;15G9Cv~BKZ=I+`+oRqDl7S78FUhc+3fnOo~#}KmHRHIMa<uxVbZI zzy-96su(*o_^ky@l};l$SlJ3<n7dtcvxaLe0XivDQwjhe3Ka}M{sTA+B*nRlfuRsf zyub;Fv%Fh5ivzo+H2*XUtw1Bw>czr%Kd2ZA|3d>bh=Bt$LHPsB<vOkvvx+p-hee2k zq@V{%fQChQz7u?dF{ln<$bn1Qg~^nGP?(1?APCGfvL`G%#Ou7yo5HPtLD`EYM5&aM zLXOutjsRmveHg>fR7ZM{%p4$(dFTR6*n-TAhI!ZmBRCG?goEMSf*X(lP*}{#jDgCe z2+{lwH&hsyTbSy2iCSZiz}t^W5Rc_hnE9gz?Z^b@vk1pL3{BvXTH=#IDWU=C9m)X= zE&CMoOQJqW5;0Sq^x03Gbh<=g5o3By_}nrcu@M<m!+j{lhqy}I^EZ6ViL1Pe$XGyo zoWPsYIeSEkx&PP)T-1xA@V^_tFt}igCp@kLc|X)l3$R2n2*f~T7(2SG!DZ~wBRs=r zjH3R5x3Z8zdiqc)qRK1`3VWl<r5L;abIN_7z!8l=2CO(WTP=bZPBC~xsi=ie*oS!_ z1DOZ|G9Zdw(9(TiglI^HF3pER(1G#rJ-qAC$zV+j-9o@46lWU-T+0maU<V-h4$It! zV2A^K2!qB91|8^=Fi?YNV22#2QZ-nLUBCf2pa(I~Qen^m@yODB$cHYahc87A?@-9y z>$L?v4nib~o?4KuE0y#hHtNtd=Bq`Es0Uu_1*GW|jCxIxF;MvIor3x~EweTWK_5jy z5(Ie+NdI9h;gAm!3DyBw#2LAo0s#!U%!wzZKL9wuS*${%pi0z0ynR>!5|u&{%*z>^ zh^xf8z+9Ip9Ha>&%b>VQxjfNIQ!xVRx6K1VFyzZ8q&>^~EDueKS_vpQC5XN3G|zLf zvWN@Ez`uMe*T>Vp&^S-}yEq1A#pZ*q!<-wDBAM9S(k_S{>j00%yn{Z424TnqKLyn9 zu!T^_2g~GzOh|)EAq<2xO}K2pH%koGN<eW{&-9Wy*fiC&NEl&gM|x-kif9KQm<KNK zj(l+1d7#wqpj3Sr14#%4XlR5;Xvd@whA|)ylHF1=IN6kyzTLY{-CGJW>@?^U#P*og zeg9xj<RUKVi$37cP&ClBxGmLAqZDkb&t(ggPAL%Ev5Bi&w$~iL*KDXMNt79RtTJ;= zM-k9O`IHUHRawH2rdd&MJ=f-&Kj#C0iq(yQds6;zzSRs^zfcXVP(i+1L7`L%7c5t% zkWuFg%EYva6x~49unbAV2_MbI+~w8=#0fPl2&zm&HiAekT3x(Y3n(&(52dFon##i% zr?>dMlWIQM{lmGdRwr^Ak$R8hAdf0N-^4hMEY*iI-PB}A1LP3X<0w-u-PC6Q)9&Do zaScNVgtuCw2&=3>);QncOT=L)4NzU%eb`f>FobA`hG2k$d0<ps<AP;K2Fol@L;qNY zc}N3c*o1jdgGdNeUXaBfaEg}Q2l%CjF~DE&u$bzkQiM#g=DRqN-435)ve&y6Rvn6% z&^uYA4(zPXCBt089jr04oLrT<praHg#t=jyTx9K!9Zp;=yAK&EvqiDuZ3B!&WU>}& zl9MXU)AdQB@IL_9kDVP#{+$He)n0bZKjK)%{}V#hXjk9$-AtgrQB2LWvyn-FQSCL& z->b`{d^3Jc<e{X>fkkAgJPJ_+xGP*udkm<%<St&RwVjNNs>p;BM7Vu8L6urwX`R;S zI1cXEJ$6K8E;t2UTZB8%wX5|^vfYPWkY#;nSr5kA7Ot4+D@0@TJlcEYBL8(t?X?cQ z8eEAK4`K^ji>OV@WQQ&|1>d}srmYSxxD<VGW&2fwOV|VnZU;u)2YE15SiXbuq-9@T zioT^%^W|370=7~e3i8kd0-=;lh|Re5*q573@=X}-&^7Y7L%@Y0!Y!z|(G>l>)z_Rd z(~&C5HIM>95M>2ie8%T7b4@MNG9)p&4MI?tA!VYROu%DBU<BaQ)Lv+~IlqHJHipa9 z{7}C@OQd+|yvSYw?8#9Uidj?!Z52wGYLbz*L9jzoz8g#5MGf2|1_MArf)GpMrRXOu zWLVMBhnVEkC1mB5$|(wE)07Cri)rV}>81E&x|_VN6x;&?is*=rcK;9qO_&IF9FJYt zg!V<$;RI7<5L2OGglZOp9N5zM)!+6=WsW?}TbaD9{ynd-h-kQ}sQaf>sg7Aq7-cYF zfK-n#XvbXu0_7}W6h2dEU<51Og*cE0-qcOOu8u{}(s>92KK0;VKJ4fKiu6dBu#L^# z?kUlk2?QRB=uqYHxVd3t)tQM+3xihGp<K)P+n^1Uj%IEQq0c5OR(uYg0?m=^-jF(N z=$!#v1Z6fgvDcd}J2Bvb8vqOwjDZ!<U9XVc_!ecIgKue+jYp=4oI`^ry1BW7(V+|^ zFg)Iz0{{WBzdtm90IzRJ;)yRj(tQ9+50zu{&WRHQWox2vV$#Uj&07~hOY9AQv#tKn z5AlnewrbslL1F*^r{t9w7)C{Iy+r9c@Yw3%41=+2$7Rqp65b9<Rp-deOpDlMN{xn1 zjR{?gO&u?ab>VRPuJ8Woj(Sk$)KSnnjE<MHP4TEhMz{gq)Q3rxgf7?dm)!@^<OMj; z2VMvR98iWa$W2~o!lunyU)}{cun0y7g?jK!Q>eA{l+`Q8ZMnthlk$oqCkWY83PWeW zo?~K7QQRbsVrH_o2x%;vnX19{6eN+>?h9Ndi;%yC*5{sFz+GmX|6yV;3`2EsKKm29 zz%1QbLp&)=SNlt9SRc}*W<aL~yUDZ{-5u#zkBhAcVx<NS4V>22C5^Q^>b*<LQ4H#$ zo=m7l>L-st{JZa*5UFhMv}oLF5U1W}4APB|!F3%r^C*aLoWijaz!aA%o4LTtPW8A| zPp_B`xCqbQd%07+&Ybx3n858M4|L;|MqAHDp^|L2Cis(4YN_a8Kh;0+&_mr45AJ}u z<w%ZZrqbLFuz`+pMi1j<D0d`JV7wjOSAXn*23nv?lwDmveAZ8<nwuz&^h6;P4<WDu zmE38&d9EV9E_SS_i}^5%Vu*y6p2XIi8#^3K^^j2)2oF1O|5Wc`iOO0rUZbQxF}QYt zweJc?>Y(WFHD2(cSFvGnQ96FWe92jLIl<s?#i9>+U@y%Bn^PWrmm$oOd-Pv=s_(Mf zNn9yj`!48wCWr*?Sa`3MewUfr;g6gknPD+>j?Z`!s!o94PAe}JDW`d5Xo=U+Uoy08 zjKQ6Hc!n;(iG>jmjPVK1H*|=hamKf8ey3-Sl+`;Vuvk)kj?4)HCy$rre7$;*01egv z#dM&@d6l#%=yuJ&ZTX8PK1~nMFP8D(f00jtk!fA}VWB3bzu67P%c*zrsLXz;ukVpw zS9ruZ8C`+kb)qR5_gWJ>I4j=0Z~Dzr-J)MjYk$%x|AZA4v;XS{h<ecK?Ne4zATenB z>M0ZGu;9Rg`-truXz`)JixTTOjA)Qvv`qArDI2+LSiNZamg!4LPohDCESD|3I8a|S zml9XL^tcZs#(gXuMtk`&=gOZsH6DFAQz^(yB}pz*mZ@G+pf_p8tVyt|L4rj$T7)XJ z<;9|EjY3`OaAi`NXuq0OJB%dWWtqHQgv&Ap05olZ`jtwO;j)p+qTwCM5U;+e%Bnt| zjF+lpyagLeHmR5@y{eNxL;KwDa$?Jgp;^v+8uMe;46oXxTa$0c+_h^<JjfI#aNPox z?WPNMV)3#D58haQgEm8nhFO!m3Viv#ieGb+{|y?};_-$)!|&T0Q}=h{-IH_g8lAnx zgmi^(^_z8VQB9buKRq54B!Eb9C6HG2uv8RRzy-+GQA91c)^%si<kwI7y+)5z5l;Bl zghSz1phqs@ht*I%c?cq18}`*9PdOP@R7siqc3gH6!sTFjrd>9YNyJGeT55O==UHj{ zRrXp{Afa{|b*{Cxnvf(lc^Q%eQF+;sd(ju2ctLpypF{5PMxK8W`WIh!!CC25Z|N0u zRg~u8HlCSv3g_mS*HP5oLUoeICz)z`R}e+#)uz^#X}u&8Nuen-jE460H`rJ{1(+M6 zzp=P!TsG45Ac;^JhM6XVNp$Ior+&C9|9~(#$m&=Pu1H~5lL81QX4ci(sfy}#l}VDp z?$@YlIy$)|v7AXsrK8MR22El?eir0mqg88~X$&=srB#6X8K!SsdKDI#;C5*)ZiaHS zrn=A&6KI#kk!M(C8LA6bZg+;O?sev(YtXy>vgYcVx#62<LuUS4lYF(^8!mfNiB{c3 zO?3$1Oc=KqnxqWU$7#kzacGpk>=LNfyVA<YCAc9+ml%S@Y3%aBEQ6^ot3w?(>QvCx zJoCmb^SmQytz9`>RiYuLSdU0ro7%)vDJGh+N~5OZ#8hW}^p)n7EN;9DpQbRo5F5O& z*%g}|-q-j(+~v^qc<nI3U#nen|IKuZmp4b{ntZp-b_f3U*<o90H>0l+19stc>;136 z;Bp-8#%p!xH_Hg>!*f+vX@2oqWq$<o<bFNaYP(^oF1l}%mmYFx<-InUoMFFB_AtT@ zOLR#|@{YB#!4nN+(U?tb?2(;OIWdpBzc$<80t;?C+SK2Ez1WfeeP^O9OO<7pgaf|) z_I!sQF60A?uP@u>v!DIr<1-|8)K;Bm{@Q6b-cZM%2mOCysz)D;G0Jz0(q7AEwjkJn z&UK#yS_4VfKm<V$LwSkO*v`i`!VOI_kJ(n#h<8EZZ7nZNW7?IbbtP);Cu=BtlJKZR zjDX>7df#GQ1_g-2^fB&k|E@~i{nqxbC@Eux_|u>c!S+M_$t!;ue4hpd7e6REE^wlg z+YqNV3>vPDhxdY9Okig@)A_GMdP7@khKQOW9>i@0Ib9hQ7{@YJ&VdUg<LmxcL^Udg zjX-o_N9du6AwH&l+)7qvDg(mLG|yUBf??Bwm%QF(26(QC<RPJviA+p_lb-A(C_nkh zPI5AolQ5+yLz&7|qOz5&eB~%#iAq>LvOKc9r7K&hN>ZLOmbt{`EjP)_RRZ&u#tfz^ zH4z!hj3gw;ET%Ah8BJ))@|dp7goO|}%~@L0lhEuYIK6qyVKAm^rTpe9m6<}$7*d3f zbWI5#*&|~a&yZ7F{~oe*M9<kpsZQ|mXZQXIFFz5qE6Rxwm=rR}!w8h12R%-5fD=)O z3Z$S_OlUyq<Is#w2}>CLXh*aI(vfmBkVb2iTSz)liw?A<8yyIO8U>^PNvfs?I^AZ1 z7d322vN7>=(mW0MqhnEvYP@46J|X$er82dtPJJp=qxw!YO0}sAttwWtx>TxawX0s` z>Q?#bRj7h>tY%e~P|vE?vzB$OO?Bt6Fd0=9I`5snW2#W=2Rwbg^QvzBD_{c~*tUjM zu!cQsUlFU=tcLJdY9;JqtGZ9G@)e#*<tOvrIoS&>^@Hm~D`Pv`)OS!Rd2J<RX-Tp; zBA$k;eobt(|6;2+*{XK7{N(DpDzn-{qV|xpJCYiMdo)7!R*jWmNN#;wM1IzTuvsLA z*4Rl^M-jtOo{{NPmf?=Wyvw?eROCtB5#8*Pmy#F!Om#`J-9`<ue$AC_W+{2R;vsUX z=1rut_OsjHvUXU<W$j(b+oSFJuATR+t!n3)+T{kRgmi5xJs*5hL@u;`X<gx4v36kl zsusD(9WGvWTN%>cmb;G>E)j$K7!tqN!w4Q?TXiee*!FhDxP44<O^jd}KBmX9eeHso z3giBQ^}Wg<G1O$3mn=@EtdMnTRfeou(WEzOC|>T1og_lI(xbb@xYBc}B4sR-8M4ql z@DRUT|7PThX1yF<vwE{!=BcC%%TF!|bS1;pB!^hceN5I6*L!E4f|;p|obX(ey4j&# z_NaY!Dv%>9*gNl7$TNN{R?VzrG8b0Tg}w4+#;jN=yE)W#)#`<Hn;1%anyrO4^{fAy zXHF|a&0@xjt(z=os<s!wBp&ieP>f<Kn?$(54l#NkP2{F(defbTb)};%ZDu=L+0TY; zrk@Jx6I&aqKsIuxyL*{Z$NG^MChR`9y`<?jy4=)$b5xss=&Ej;)tJ_{j?xQd$=15s zj<zhk8*O3Jw7IKg4R$7ok#Hl<aE1#{_`)6D@Q71<;tjvJ#4*lrjbD6^8UIAaAI|Z2 z-*LR+BR6@-EiUqmv;5&6KRL-)9`TXCeC9Amxx{B~^SfwbiwY;kAZG{)pcBLAMIZUa zw`g>Xzr5kY7-Z0szQ>3!{pfeOIMkhf^ouV%88h_x7JEL!pkE#94R1Qwkq&aFM;+^7 z|GCEB{`QS?yy;|bJJK62_PleP>_j)>AS;gdv0HrZf5-USHR1KA7k!UQPx#&cuJpqX z@-9nf{N#(i_nd2e7(-up<q6O7i8r0_H99@&Q?L5fv%dANe?9DDFZ<ckzV^1iJ??X_ z``z=t_rCu<@PjY>;S<03vBp0>@{_Op<ukwe&VN4iqc8pGQ@{GwzdrV}ul?<Fzx&?* zKKR2g{_&H){N_JD`qQue^|QbI?tef0<1hdD)4%@qzd!!-umAn?zyJRKKL7@x01hAl z7N7whAOa?!0xlo}HlPDOAOuFB1Wq6YR-gr5AO>cj25uk+cAy7-AP9z_2#z2LmY@lq zAPT0S3a%gvwxA2XAPmN!49*}8)}RgEAP(lB4(=ci_Mi{`AQ1m99~ulH5f-5l9w8DY zp%N}36E>j}J|PrFp%hLb6;`1YULh7{p%!i-7j~f+ejykVp%`%BBm|)uo+0iT00#<2 z478yez9AgOp&ZU39oC^8-XR{w;SKCV9`>Oh{vja#;T{GeAr_(`_TeBNq9QKhA|@gu zJ|ZL{A|I~dBnn^|#=rnxVkTCiC30c_YT^c#p&AMx8xCM8lA<R9;3=XaCT`#=0-z{v z;wXONKFlI5+9E90A|<wB0KVe?`J(>;V=$)TFA}2#f?_WkBmW8GGAd&;@?tVVBL*_# z{vl&7N~8Z-<24eXHeO&Xq9QI1V>tGoV2mR<>Y^#4qXwN)qyBYc|G6Xo!DBo+V>QyF z1hQlP;UoU(<NfhtKiXqH0we^=V>=3@{SjpTA!I@t<Uy)q29{$wn&bXKBsdZvMY19p zG9>*e<o$7ELt<k#YUD<W<O2F*{h1{Fq2&Cj<VupH{9WWjx+MI0Wc|_PNP^@$%H&My z<N?}bOG>2v!DKN4Wl%b#D)OWOvSj@Er2H}EQX*yhIptI0|0D%|V>G5CRTgDdYNbUQ z<pnC`PHrXsN#*;IWm!Tc`<Z1@qNVx?r8q`pR}y7FiseAEW%{XQTG}Q0;bmUZWk-6Y z1-j)q`sGRL<@tdn{2}K1DW(DPrTRJMT^gqOL1ttUW=%@wFp2>hOu`Uy=4N&#Xnv+> zdM0UxW@(P5X{IJ>uI6dBrfQz%KHLCnz9wzXrfs_BZPq4k?&c82W^Vo_Zvv-o4ySOg zrf(K!a3&{lDkpN*W^6JibS|fKHfM7JW(5ic8fK?<x}Ie+U>O1dc&b5ojwcX^XL*vR zd8Q|NuIG8Sr+T_4d%mZ9#wUI51AW3Le$Hop-lu-{|0jR`XM6Ht46HyT7N~*3p@0(T zfi5T{uD~EFD1%0*B04B$o}(J5#Y|x6N@(aZaHxlZM23RshKgv1lIVv<Lx`g2h^lCb zvgnC&1rY4Rg)W9baK%#CXpI)cjp}HQ(kQg>=#Tm+jt1$D3Mr5dDUu%Pk*Yz3jvr<2 zrFG6@cP^kL*yl1-1&U4vV_Ye;U}@59=`wWbVtnajgz1%zsg{<hm}Y5*s_B`sDVVM) znR4lyereL!r<F1UoVux(rYW8FX`B8jng*(w0&1Mrsh<|=pdPBBmT5G^s9gSIr2gZS zzGRe6U>exxh8jpt&?t)5Xi9JeO<XCDcBr0)|0<}WXhDoBj+&~cE<>t{s!+6Qr{=_` zLQANw1e(Su5Ns%{q9};wM3{1FN;Jf$GRCY5g-i(RK$t3HpenMGYE=jYvl8pG9;-}@ z>arS0v)Zb$Hbjh8YFKh(lR9a+7Nr_=D3*??nU3j}b}3_QX_m$-ox1B}!0TdY>AIq5 zyQ1j3UTM7QYrgU;w6H6fx+s$Zfw~UtmFlX$-YdZ7>%!7&zXmG4%Im(?>%$gmz)mc? z7A(JR>6i)yG=wWwcBQx`=DFryl>&j42y3<~Yp5#gtQIS(4lA}2>##~|w;D*yQiiHd z>y_H<r{XNELW{1Ftbv$mjH&^&fT*4V|14rq>#36JWYp}BTJ5hMEv%X<u6`<wy6ULb z>e8+%*0SnKylkl6Ydyp$3~XY`F6PRD-;@4drlzZ~(ksZeYoS65wEXLurfJ7^Y`>1_ z-WF`%nknF(X`upa;tE8<j%l%?=*#kLm-?;6DyqB=tl+vS!yazZT(06mte7^gx`HgH z#^?dSr7XrJB?1A&hQ`Yvh)^8Fv%;!O(CkdO#L)IfuKw!$2(9fBt?a_gs1}H-o`=@* zE3Yc+?S=-h3ai;R1nyF;T>L8a8c1A>>Pn;pV!Vv)4hVwyZ0*8KjwT58YU{I_Y$wL8 z`!Qxz&h7oRY=$Z><L;@tQf#8m^=q55>B3H|{o1LYJ}kfPZ_?Q7maeKk@aoReEB}se z{<5n9BXH9EFaQ4S{mv-?->;*p2IclEx4P}g!Y#^j;N9{oh+2fG!qm}5t&#}E<U;S{ zc&+&sY_f_+iQ+7`8gGDDE$y~xthy_crop`KFo-G%@Y?XSW~*8lYiN9J$P8=Pt}0A* z3BM*S%!I95sOw6MYK@vHp1N;dPOAOE?-+9+{i5ltzA2|dtgHHKyUr@c&IAUV>Dpqf zjz(+)dnt<=>|#JKoq}jV@anfVFuUq#nHFmVD{7stE23VhBQr9a@~H&#Z6uQfn0B!; zsO|`3WGDZ}q|;9Bv}UamXD(vYapg)Z_HOP>{I8Ju@fSlZvsQ5QZmnfRL&C~2o$fHa z)+nwbE(~oMX1LP<!_Y9d&;<$eF&FbPWU3161FXQ2G)FTvPqQ`SNAA__WL|1PiZQt= zY?m6ZB}cEZ?y#`VaP%4oB6n^0N^$v?sZe0d6?^fzdM}1@uC2DMePXUw*m1+&sh3jO z!hxLUJ)J=VT|xI8C~VO}_gvr=T|*NC$VtV|K^)L|okdTy&>6HtGalq|G)Q-}NQX2@ zkF-gbG)kZJNR!0vneqC$bX#(B1PVrs+UP(3t{*FI)Do;X*YP?R@#%W$s)p=j_$tFr zuA2X%Dw;9|uX=Adk1FN{^$Nd>LMTH`sRU!#ltOr5z}Oy4S0=f7b2_TQEpsghlk?2_ zso!#{mp(1VCNSwrt>LaKwbCg$hb)Mebt~iPj6yO$n`*0K@N#j<Ox#c5Jj4ekgzZ`7 zRemxCey6t<Y8N~2B5Uc(+%Zr@3%`a-{~Cz)dZ|OO>L2eeyApQL?&!J_veM4-zt*!9 zD^tc;2~SiEfw08beBfSqwfuVDS3{{-qhh*3F^KkW7SB)6eyq^)G&!qlo6c%f&$7j` zwN5i^4wrRV^EE4XsoCl<#}<*5kWXs7(X%2g2wF$&X><88_EC~?1JbnU&NKDGYyba3 zY!EMTtpe;5BL*1%v&3$99M@@N`>J*rt)nn-JkN8W3a*XP4#5<6Of)gNB=$b&L+$nU zVeWSKq4zwdE05xEP}eHd-uJ)CvB2hWP%E;0fAPPrEzMfS+9odlMgw;1YhELWx9%_` z54NFjOiW;m#v}}GL-Tpd^jKmz_gVNb0>Pp7@vIKFBLk}r=j*Kc#XmPIBLD7iWARUO zY@k~2IWKpN{(z`H@CSGHgDZnN!3ct2LZ0~sF}MLks4xf;1BF-kKCD0qx9$eEEVmM? zz7qEfS2=UruNzBs#p-e9F0$4Z>vr!g1YdE}UT)Rus)+b39HY4$iGdh^g);wWdd9E> z>gj_Y005~w08LCFu;})0ryr7+U#s(9rn)Tlf-w&7bU+UX(q5?`FL5hRwtdTR&{~P{ zI;=mVZech1eJ?}8vg*9*tDMFZa<L0faMGrq#%5-MePBm+=mQmmLUyb}0?4=oQp92# z`Sz*z|7rOC@p)%I@ZXLGixPVQ^R&V8u`EX{y*n=dDlNzA>7P^VcsH$?y7lj7=xGoz zZ4~x!d?rhzfh43s?s&$j*9f<7LU!as3q(Uc<iP2*!vpL?KCl2LsDP<w2R(oR0OWwU z?}7>-fVc0%JZJ#`2mmN30;!Yw4~&7ho8K^OHSG!JV7jg=+9wdC!Fm7wfOsbTc`AK- zj;GNpJ=7Qd(oem3K0Vc!rx93v(*MAE8vS@y{n8`7dlEg<)2DixCpkGrT0FcYY?35! zrbzY1>52LsWCt(k0L*iIjmX0TM8iB#L5v1Nxa&h9#KAu7!pE~i;#&a7TY<L+0|aD; zB6$18r=KRE0VAM68fYdOa6acx!smbHK7@W~il*s%=IIk5>aV`)w|?of{_DGb>c@U+ za%LIcKy*@P?(hC|mZt5SdsBj7#D7jn?89e@K^h2#1dT+fk2<L%z$yHM&ezC1Bml^> zfVb;I6`aC6%z%uC{Lb?|>M6cTD1yb)!}OmYxo_w8t@=^!XL<i}y?^ef*wep%*1vk< zKY-3Zlgd9p00E)~$Pa=81s+uRL*Nf$(CR@`woe(oXcp<EnKVg~vWUy*L0hJ8**=pd z^-&3BavqCl`BVS^fFo492m9t-iMCH4piuH;$`o+Qq@n;T_wj-O;Kt2;idN2x2_VPL zlUK23)w-2ySFa{B#W)ayY+18sW2}gAW1m{IZ{fz3JC|-<yKncUy}OrhU%zwNuJ}5b zaACuT5gSIc4+z9)jv+#eR_}4di<Ko?jC|QKXUm!?d(K=r+T_s_qm4|hFWN+rtW~>? zz3+8v+CcWHSr&~Xw0*mKQ{=tOx3bb7hm8cOoa97FXeR%mX^rvXNUZw&Y(lAM)4Uue z+2xq`fcFZb`l>`5Zx!pj8R`Y>Wam^-oPGJe?+a!jaex0=hv{#Uy#6cDzynWOECvJ_ zY|yX)4RBDx2`3y7h~1RIaJOZQTV}%!Hw-Z~4O<h@!xB+E@x%;E6e&a&IUI3B7hRN5 zMG-SpgRvT8^f1E^YozBxO-Smk9*-ar1C2D$U_^|GJTi`+iLOcssg_R3hm4(s$zhnA z=ApufeRhF>w?bADCV^<y!OgvB<UxQpMa<L(Dx9|5haLVX>{FBe6zo$_2_YQRPy_=# zRMADVT1*X(TB8i4)IPFknMxxS$s$N6y;RdkQ?tz!Q%*(QO-SE3{0&OwSXGrG<yPI4 zGTd~l4kF@0JGCBDHOz3B=|GB%7$pbXClfTpNKP4&EV|B*pb&^^Dj7mqFCQx;p~@<H zv;aVclJr>wfCG@KWu{E5*onLQrb3`3Mi0zHpTr7<*WSSry;t9@^4-^81|?xEwGLU# zutpd`Jeb5DNkmx2f;AKgMB;9w_`?(}#<;{ZcHDK~fmdAE($<K9@>PA(5F-;YAeu;J zB`J!ip8w`)fxUlmHi?*<3+p#$eFt3dXMckp|JrE8I0oV)Nl7Zn!&jkB)x)NnhB`y4 zpU&{)skwG~GE+m%^ir`Ul{IY2pqw=~iYJn~y0=f=?Z{<*#Ynj@bQXi8Oo|nQ7>uaw zPoH#;{#O%v67#umMHOG%(8VHjTym`f1|l_yM{Ev7ts!oD;8#mjHFFPL6uoPSg=0}t zib3ZZ#8+K}5knm<583ovQQVc_!!>OgI%QNIX=PAWK5g>jw+fJ60+D~5`Q`;J8v4l{ z<#5;EENxpkv@u*ARMN+WG5fH^pD}z7OUlr=whR7f!%a72I#uInz54t}!B5{}kur(7 zWs1abgEY*`Bbf-pla6$x=}j*aJR=O`{}$M%dPPt|jiVsWk_H>h^(bLk>z+tHqCF6T zFmx(fS_wNO93iFVH{ffX*<6>R5!C}XmOB!PR!A}KeXVKAcnGGNWfJ?H1R9$n$pt4z zjCmnOdProD1)T_}=S2}`mCGNczPGd>0ZB#1x#1NJ_Qmy)C~g=k(fYiX!-$zsQ_6t` ztwb_94W-U$9Zb%YA_BOWHAhxRQXmzNmYl>*5s?0AVj&H=kH{f%UyH#Fq{`SL+m#QJ za_f*5J+`Y6j_rnDMBA>=_L~xU4oQ>J<QF$ox*EbNHPr!~CUqD)B3&j*{<EJxkmNta zF*0X=THYdgi5Msb(<{RyrUdtq|Avr#4R^aDiTiAIqYds4d<1*g!p7K|w^>h)JjxiR zCZ!DAD04&Aq1eYR$vWd?LV*<#8{*t4BxXtJUB}dyyap*WdlqJb`y9+6{W&N{zRh6Z z6G<FNC#luAEtH%yO&vwKsTR8GX&LL3B;jToUUeu%G!&SSa(FB4-4I0T`(fIO2rK`E zlOin*D7=UvAVR*BUo)j?qilN9207|-6?M!CcZI7K&8?LM&6<sR6ixJf%8WoISkyw= z#d9u)GN-CvD{(c|O|{aQ7<!1T{uj^cFso$|(W#;|5je%<^sM_Z=1u$A)&^M!Qtr!G z7&#=j4Ka&Xm+_Fyq!g<7|GlQ1QR-sYmdUG6I>u9GJdsCjn9cBwC}!Er5Ib9DBzi7u zBq+s*TnD8*VY2nC00pgENqgEs*6K$vv<TW*I7WqSj+z&{V)s(m*BsK5mTR;vr0n;` zwOw*DV+<iy^{R}+F$W}2Dw6f=w<^_A=vTj-Zh{nfU6Z_3yZHKOPm9{C;-b%LPJ69h zNhl;&agL~Kv}UJ1RMECA7M57FUJY+G&EJSbRm_!`GN9zgvPMQ`VKr-a8APOfcGt9^ zZ7_l#w6?5P$5NJRA!fjMF}%_!sY#Wt*0?6hQoc4t)8ubB&q=GxNorNGn+(W6RyXEC ziNZ*dr;Q<uAVD%Q|Ft*e?n@z<V<|Q!u_-d@Uc<+|i9!sjLgmzikIYdOp^lsSgR#_P z_5;TJNT`pc<|hYsI9tUa3^>@r4Z<*q;@Ikj>J@T<d^uWuPWQoWt@E3^Qavp$M}Jm( zRsJ?9*^hiIzHDnD2^;$=c}{q$s%zUeYeXxj^^ldGs&9;Z_!^gCMGTWbX*&;$=l<Z6 z$G}u=kgxk=QJ=&@v&GeWIV!3XpICn``pDKqDaM}C*uzU*PH`Vfu<l`qBD6awu@idN zMEhzvBniW1nx!%ucUETCA)G!4L7r7>C8mQEjCSv=Q&n%9r|ByjR>6F!f{kcmWBiS9 z^7^6_Rd{S9|2pMDS;)cn;hUbjsUeF!mM|p?n?poO+YJ)<zZ=-CWfxH^PXe)%UD#*a zS`o9HyF2cE#<k*Hapd|4{p#?>afQ@jX?)Knw%<TgIcKB{Nrx@lu5R;37lsmk>kYz* zImV&LVKZB#)VAL|msz%{Qo8if1*^=XTiTXNP%PjblLTW;Ey08e9Plot1HkE1S(BcY zB7jiXDJTH=L4G7B+QWn!uG!VD#zk!*g3KKu2LVDF>W+|v2xRYi$2&pr&Ud{NgdqqC zd_s(1_q?mY2zyt&-RT~9gYaEPbf3IJ?mqaw7o=o)jK&r&QjZ(pAPi`ZK_>913<6&# z;_Da_c25XlpEBJiKl6zC7<f~Ko8*HExS=|4VoxRr(0=Mb7~D#N;gqMWBp<k+oF>rF zr06RNS<{bx^`R5}ecT{A*^hqry&rz?kN^7Q|9<(=e}46gKmF`qzxmytm*{jK{NZ2! z{q3Ls`s@Gt_}~Bk`;Y(nkN$f9tm9D201Kmk{0QMBLJT-96O;pwe4|RJ004%MC2R&K ztl$*pAy4GN0`frz$m9*i04G@BJgR^LGjJX@umdIT^}s{h>_j`}K?Em9?GUiz<}3%Z zqH;8EAQ%Gk{I2hWun7Au@Qm;W4+04Vf(ez72%(TxqA&@C5D4lfQV?z;7NnN8ZxU?7 zWU3?(pg|FE11I8xC;or~^P?R=unV4H47`IkuFWUr;SBZR4?+PZgd$B~AOK=O`Doz| z?xO;^uAYoW6U4$V^5QQTu@N0nE>?go9&r*W@e$pQ2epD@)Ic(112$-5Hu!5bY@;@0 z;}buTHBbW-RS^|UQ4}BlEjWw=7KZ~>Xi+$H<OgO^IAn1bUro%WWc%)hIXq(f;Av8< zE%yYmC3Zp?U2q>hkREb?7xIt>Opy7~MHx*{J;=Z$<Ut4I!6lsW0<kSBY;Ya;B#>lk z2TzObXo?*>&Wd&@vABrfEUIBlq#luKM0{<G5(`8^F63N<I3x{6?lB)pr(~Ez21-x# zz-lC9pgEX@_2ffN^q~;oK=^Q?_CSydhEM8X;v#v0JSuWbf}ta;LQlklA{F85p29xn z!TE&Y91n4c4g=Mu%O+2)06Wf+JV!`AOr<<%A2dp(I7fe)W4(w{r3lMu+~|~e1$T7i zDV-9(+RTHFGP+>@XBiamhE4)_{0K^(q@`5v7)^o}a6=!u<s|b#>GT8yPw+mrgat7{ zTUa6t=#uwjB3kxATx8%AuI*0ra3&0KXsV0H)X~9oGN3pP6HUTG`pO?=2b~Jd#csrW z7N#B*CS(wbnmPzFxo9;c%^w-Y)x4<SLL!eQg&uG~k38ZAzH(+JBp))ct=MV7-Yzly z3GVQWCr?C3w&$I`hRr~QeYQq>u*Nv0rd3L_I<zNhT4jEW@~=9ihKfstfXyihiehB! zxhx_J9S(pff;uQ9CmiUdx~<e0>=Nk=H&@MyN(|5r3r3g;eMpHZUBq)@=ydkyi@xwf zK*xS;E0w1IW}ND=bKsN3d@;Z%f(ug0NL;g09*!}yA`>RCCfU=Tbd#8HQbLm{H#SLr zwuh;zsz+c;KiTJVWG5@Pr?1p4MDWwf=4V73?jxuZoG6M{{xh#+EUdOKfW#mM0%!|x zpy+~#L%A&-)AKOp${j1tk#x;BJLoez<k;K?(K^IZ_6<g$$+FI=j2h0-uIa+atA3<u zG_Od#h-0}7EJ9C$xpv7&v!Y~dGu1Bim@-tzDu+@IX64c=tLh5GVrh=@M{}g+bpSPL za_5`a2G|Vr*k}jZvS^cF)TA2pYSPAJpu{I73Qi|fij=gi?v$69blZ{!l}O2a4#s>w z#*-TVYraZ{Q`&}57j@WR=X&r;bUbEcJi=2XO&=|Z(3H%{h{R3Dia0=uxgwHNv7&#h z3*6K*Cryn*D~G?H%0o&8+Q4Qxa0k<j%rY@1g-WSx97{ku(=wA2p>C0uva(9`Eyf}+ zDHkoJ2#mj!^(vHTPH(bKiD^_<%}HbD(9DP*<!v4(>Q`@#w<O9(2vVC!>Qy8~I3(p@ z0X9>5)klhIbY85&w27UdBr<MHECDM#L84x-0s@!kQ%g%<gDF%Y%tG`u*>2@w>4_vL z?0aO(Vj@#RnksD6%VB~_o74xLV2qwn$=EtcIoVBB)$JitvuSY&)Z{gfNcJSo(?U`I zR@_upRG*bY9Vu=kB~^_oypZdAO2xvOR_JzhT(<~dtH!)21-M%1oHR+&5Q@W66S3k( zxmc5y&;}x3O*p33B!;0vBP?1G({SaAWf3e-L#E^^%5iUHYj{q>Ms7t2Z76BB($GjU zJBZL8t)Lh~U=pseyvJc$^a?@B#)_4%o^}`mH_og!<Fb~K_*K+25mWPRR<&uF5XN;@ zE>i+dRTc}-hzgcijF}XwXL+c5Vrv<+>`}1FGfAkf;z+r0sVU2fvvj55LLzYYK~6F5 zHm}ylwpKz13Vnd~#bCu&;f6({7h~F}um-EKZ0opCsf~s<Y2$4&sM9A~=qU3Tvv*N< zRW$1&GAjbh99?x(6z}&Qx~022mR?fnF6pH~azR8%X>jT8T)Ks&Q%a;ImhKcONof`M z=>GWr=8riuXU>`TzW3fUao^`Y54kQp>ucY6x9jg*Ce)v)BdsXG%DgK6#)g`#hicn) z?v8D>6%!S;50ncO2<5!P<%%lFhWG>%=Y%nCx}QAah1!G~dW7+JpwFfQY6PB&?ZM=J zzNB@Vm||Y7kWj0v8GP+@m7nUk=e=~vc2y?_tJv8LlRnyIYD1Lo<H^1SJDQ=K&0x-C zf3VGa4HefYbUjmxVV$XLQn~9=U-`HbwQg4HY7T|#3+O~M)}z(qe})Dby~`#$tTNT} z8yVE76mQ_u%903LRnwIwpfek-&y3Wh36pg5pWCM3#3co8({a{#!*1M?&@?>>UMq8o zy&k4eDQI!s6o47rsYXAGpv8XU<10rxWpD8@a0aER{f5G{da3cLrKqi?1vpA+7-aR- z<S)eHT~^%iYI0?F3*IoutT{?zMaEmb@e6R29-^w&aCs+cD(CGI+*$QW>+7s-+w0)g zC>BYvkoN4))fIvtZ|Ho)S+kxGDp+ovaWqBjI(l;tMxBl}oh9xZC!=%s{^Z<NmM4Rq zh3^tk(WTPGas`dX1m(ue#Amu2-Eg^I2{y7&>ERI&->}VG>CoW|2wkXkm(vpC;*?zp zyE6;Uuq5tWz(}rT@?IC8t|=g(q&SwmdECZ>9R7-!%~Nv7W*!rC+1N6UI6ZmT4rkN@ zdX5k~X&g;zlxDSi?c9#^Xh|)c<N2?!haFU7-NsDaw~M-^=k;sre>YS9QAO0Ptk=)w zHT>vqxO!-qasO8xAd4X>-C(M5y~Z}Hpz*RXI-pIfh*KyIo&G++y1`yfkWGGFg&AQ_ ztwB=qdO(h!K5c$ANRgo2TVK%@#;>)}X3)d0YuRql(`NmmUGK5o^aZwKe#hI#_O~xS z8RfUzZScDW2~f>_3V7^@+W>}lV{i$Nj9XI*Usg6aRJVFEVZ)q%a_}0nJoWvcVH@yB zc@W;BJ$u`P7*gRXpp6r=>o{j4+bAPj>-l`nCbT*D`5>roysXjNFptuk*|uLns-w`1 zi*4AJcB1aq5lDAhHE)aHE*WgrE0b$M8R(5EpZqFi^aAMEODzf-Ig0}ss~^Itp30us zUv4ai|BmO8x+y$U2)@r}`^Sy#7>!1*!K{*^QT(W7W_yOONK&}2Yr>{`==et|m7W#g zQV|}bEWmy%%vJ8<Ocvqr%W|Z&z)1Xgynex#jqx?a-dbcElH`e}DXW+|KO+rY0F9-L zHHg$0K>N>77WWE}P-HfN-LJMFuE>BE!FV5<;oqzyg^;%Kl^G)8;qqSj6FZPN)|1X* zc874zzixS{=;7b5Cu%nP^d`q~WJPY#x+rmphTRBC!U$#waj4#jv(E;-ln6eim>0>M zSJa+Qb5SVTlrKYT6_$pn=t0%0!$o_8g|jI02$W|FpPrnVOF2F>?in+vJySI#Uzs9d zrwpOv4)!|*!q8^6UO$ig%`&jX#(P&0+Jz;dvAkn0bYiKD<}x$yPI=f?Se$HlKV#eS z-#(&!54oh#v*;IK&X}n}VJ2(esE}71f9v=Qx6nR=ZtcwQ{G|gQ%!(x{8yGWt*lbfn zWC`R-wyhgD{>_s+n2qzXSq&w2tvt7ptiHGY@>f<Cgeo$|U<#}=rv)Ajm8pyzidLlC zg&lrN(EE2Yc;MjqwVCz>Q22GFavbH=9${FrC1d9Bq4xuBTG{`O3*}Cvhq=o+l&c(1 zq$}83Y>eue`tuTwpK6~Yp=aZLXH);qa<KZd6OK|T&A$dR1GdcgZa;ry{XFmcdG+t- zo!rHJ=*8cE=j;_ynY2bYUoP=bmqhYcq#v#*zg%(Ki(n2pLPy2DgttLk`>4Gg&cWjp zmAi(2fuH}KK!iNrMX$Xayp6iP{ShUpV~=hg!5!%pXD0v42z3{LzDxa)<4BP_J&Z<l z;CC46ca;2}uwojyus<>K_h}#Qv%cKJQTK)N52dIN4>83w)u@L``N!rDkL_O`Q@-5K zton8pR*Cj0M3>&QZa4LZY88au<iGqK(}39hz)Zrua{S>Rw>@;{+rQt%|IpYhK8H;F zBI5TKW>t)upm}bE+iW)+Lk6OY^!4~A8gf^{yU?a%K9<I&9i0fBcdX7T&2F|jzUI_{ zgI|wk2HZI5X1{o|Td_vwGLw@ZjV>E6Rx@9zlRv@FWlY{2{)n*n94}tGTyNDA_!nQ| z45ImHA1j+6QE$=sdZMA8PdMXi@@;m2v6_&DwG)q|;6^Rsce%tlDJrIF_qCnC7y^)P zuU?7V=LCB1$f`ME*>GyG;a@9Cu^)3~+A(r3QFP)*$<#!;4Ikb3w8CjhkCRLuFWx%E zv3~hWB-45MeK;YANEO+6ec-;4=k&~4dhLh%-Rp2hDdEr2Ygd66Hj)=_Lf~NSY^%`n z(GZ4LLJbqo<s5%U7+g#S$y@yU`{(iW_sq8s=-3)8Fl?$SJioYuc1A@)DvDL5+5af5 zqo{0R?L5cqvh89fO222vu!SyB5e_(o=e*;b5--)D@${osN@b0teRHy<Q51+(_-XBJ zUe;H0b)_mb^E6o|TH16quJQeJT|PV~XyTH1qIHu1W@)N<-%&{@dng_>cl51jVlK2u zbs5b$9*^z4`%5QN-wnGTTfSidZ8@niOQysq$9$qV5~uisPjLG`MCR;j1!+0!Y8bru z$K~mL)V!4$Ch^CW8S&7kMYwseoqcbVO6seUla94KM8m|1Tq)t6Q*C`VPi;)bS^1%R zvm*FoLf8OwMI(T32;>s3+reB>?-~6~=K0YO0nd*+X@M3atzTx)X#4zE#T$Ve^~IZq zSb|-<*^~9|#R5j0je+oo200SZBWg(dc0yy+m`L6QeBthmUH$-(QM&IYsU>%_FSZ&V zgwPdDVHl8^g=dDhd`c4r_C4xGqB@*i92t@%z6CsH>70+Jz!RA##yWaM+w-Wh$6rYZ zjdA)}Y%jC)J0B>I%JoL>de4<ETD75ar#YuK>$(0>z2s_&TetV;jx%0K@TF6M%SF=I zL4>I;$4guG=^QDYt|*r)>=e14>!<#h{wuKceL2am^EjG;{uRlxHc8~g^@HhKv*W#( zVO+uqpC_4s0kQsk4(j_H$8lIR#}l`=G+jnXm>OMr<h1lrag5x<VP5{T?xTvvp8=;e zIZQ838vR1MPZ4{9kLPtgeJO;sKjeC7D(F+NuSXLUbrPG_0#<wpoL6%E;Rd8Q5rf7} zgfA3qD+u;)+|Xbc@l)W4w>=yrL=SUK>@eQ*YCr)Hpp_5}4U10@3F1Hf(SnAh@AU5l zT!E@xV0w{IC@^3y{1&}*J2xKX37Ny8jO`%ym0>Z-I^FqfGr~#?#Z_T*gJju8is!ex zgwL~6tw@v;s{-F)Jv1AF{T;*_G+|7Zupv3$=7E5HTjrY*B@%CdNV&kC$%KWD<W8BL zOJLOLeeJSCgIS4d(q#PKjToB$eh36|XegPk8`4g8k_JI$iT$dz<SYOMRZJi*GL;5M z?tez}WVcE_&R?Kkj@5*d25&Wn?d(s4h(}X+`xCq7vS%dXh%J3@BR3SYE5%k{C-sa5 z#<nZ0p>M$%oxK?&$N`mSOHXl7`H%ha*W5GN>*h!cID-I~Bbw&OE2sDDiM$jKX^Zcj zJIoIiF>TUzqyuB;p#aLE66dC4Qf)J}`AJqzwdVIUb}ZlXV+hOU<UqNDAwB*>G$kS_ zA{^{EDfTJCWF`FS=83XK7Q`XbzSZx}omreC2<3@g1VVm&<d<}b-EhsO)?2D&=d<Uj zj`pD>cvr?pSBKB4(3RXwoBpI!Y|q7;ox%$Bicwxvr<5?GRP`{fFoWZa#JZsQ?&wo{ z%&N00;0-@!-d3EmV~Ej^5(Vh%Fh|E`tq4Dtu(qA0`Z)WQ%>zFyB+@5UL6~=L`D)(M z0!!L;5n=izFH1MdId2G2v`iSC*Nf|b{Xn`QxBdDhd(%+zFLHa)#c>mP>>Y~V-=px+ zJtByH;fch@Euw;%jPwSrs>F>A>XODV=sFG5n%xtSg5b1@KE+wZ*BrRh(_=ZtNur*l z$_mWp{R1?*w|sPGHKD#}IEvZcgp|g^DnAsXRmsw_&ioxYUIt+P)}(B|KT;Bdf|h8d z5@cbqYH~gvSpof5eBD5$kuvLMKnc~Sw|AwG$gugwKK#0UfkudKtniuCf-RQOQT2ml z3T0$C`@j?Bxo>GWMs+{#jejL%o;FUZqBTTXLyfv5jgaaxi}5Ui(9W=3o}VxNL!xJX z7vEt%eIZgjmT?y96NiC}=T<ZcC!v*vjILYpmQmNm`$jy6sm_-rxksVd62MdB@pmY0 z$HL^iP{KP1q#5EvFo1Q3Ci0}Y%j72R$gpqsm65=J*`Xwc&AWFG0kA(4O=<w7suvNf zY!v!xPCQ-=&F1(+qatGnQ{_@TN4Vc~TjHoN?r%oBD3vz?^SWClSK<v_St99T;V(lv z<uGf3?o+F1mIzYJ0DeK*c#<>!bPkrm`Bu@ugn6}RxOw-BHw(0$#tsu~(Fz859%jmT z%BoSEGlr?MZgm2_A75x~kde02Ci1=GMMMN6ZK-bx6|wN<zLuP`mz%C(@%*q;28I=| z)Kk@s%kv{N3f5LTL!#N@a3fVc^t)}}?Y*~NH*{)M#u3_%(I405dOq0``M{#4(Lqjz z>fVgg{XN>M@$mH-CN3uXX*KZXnoN#O35oWpevt82gm@3%lidn7%4WO+(=i(mtWR^E zoZtI6#{gol8`n$z3FV#8$NF%W89A}mN*wvTsg=-ewps;pJ=c&Ock}tk@)aUhVp@4e zM5ZjXu8>$jp}*^!@AbR8g$)C`l`Xm~$Cs$t(f4Ax_y*_A#xb~>zxczm%5SCp%S#iM z2Fq%qT-YNDC$$17a*yIKFY;@}E_&79(Rz8#4gO=}#?4c)$*-XZT^=e%2)`4J!PyDn zi|uIpd(^xtsx$FyDgRpkP!@5x;Ln#xBSfhpdu6bkxteuRP<W;4RI&2Cx<rcbL?45& z@|JGyc1{D6V-J5i>Mv9CWcZC@jx1jm;$n(g!l0x4q(AFqaOM;GU)=oISx!W#%hg8g ze33)^Sc}oUh2}nWbKA|-XVJQn4Kg;I!$6d~e1G&+Z#wQj>osZ6og-8rQCMyv_o-)> z9G&*l038=L3;8br7MwtaaQ2mOL2hS3j1|uVGFq4yU2Hl_<FarB20c+E-^usTvjME* z-(jwvVyzP4-2Pk!dw$z?)C3s(zPqlZyCN5gfed6k4F)u-y8`<n9Mlm3D`le6Y>|o0 z5hY(GI6pEgDKQ<}M=J4fN>tO)u&WJU%jApm5odv4JBD8$s&7Yye`&_+y^3=1=bDOe z=k$yYV;6Gyqr<oteb^$J;N%)5NrJAyi>X9e8S`ObkUOZ1N6au1-GD>JjGeKZse~%( z6phG;m7|y}f_s_s{eY08Mx5OhpQRZp4vxzhvfxgb;mp|_{hA{pKAinPgo9Yh%x#Dr z5=L7)M?<2fm&6LrYL_?}jK}bdJs%J-sEEN`q^tB}4mPzf7*H5lCFP;A$gPf>>?H0O zPMpDIH2SXNz$wJ4=+9YdQ;qIrC`y;?6q}&xLZ%q@pE4yxh36BGAp2gthG?LCI$ai4 z3T%vaR-bbNO|e!|oajJdb}XgA%lR*E>Hr!MffyMRD?b*w6n32Omp?Jpta>p^^3Fyi zHDw<RePTb@OHnFQ`u>U6F^s3i@TTja^H@ltO`~gKrB9bi9OGf-TZ5o!#+~A1fNQ9X zJd*_4Y<xsbzAL6@dGQA=s9x=(B#cP`PYKuM^niSBc6Mi4+*R>-Qdg$qNH=hd;i8#{ zAK5LN5JRs1iv_Tld7Q_ubX(1A^MSZfZ}CEZ;e|}bNqf3-Mc4l@Vjfv(u+RYe61?W> zWOB2Ye@xTca(UvN?KFAxqRe=hTa&zF({Iw%n&x7Q(#4ai6P;@OuGHW;HIxt~e;+h| zf>JiKGESTbMj;y3&}jFM>1-pN)DE0v4<vw-0ocDIuSVJgmgD}#Ft02w-`PJejFk_k zHIJt`@3&e3?=C4p8$AsT)74;ZSrnZ44<Fl~0<o@Gnz``MD+OXFdrLO9Msq3$UZup& zLTk~YO~u3o>F^A2+>tpddp@_oe3c&GP|9<GwX20#N<rG9U7@U{ARU)=vowr#xF~?S z@K(A+?4Fb$ys*BDlkpGRJRT#+mhu*cv12aXe4mSXCCJAs)M7%7gYXl@D|3{lZ2O+e zXX5>VU2!^&6&pq=Vq2<7PBb6OM{iNo%oWYf=dPaN{Tx4asfH7uPl|!B_%wiZ`!(gH z2gd!eqR|*wJWt<gDNE#}ylp=bf}de%lt&jI<+A@Fh?VUfIy0q~HuWDi=M#OIa`8`L zm4{eLZ}C%m$~cpFizQct%jZ}%=nO;^D(}mP2`aKA$_uR~z+`A9UnHIsVaq%wQgX52 zS1t71zsxN}i0$+b<!v+=e!(e)>5A&tgp<tF@af>_T5rhMF=&Rx=x#9N__7lxQto!D zYbA@v{*;(!P@eUpfBJ~KCdok7O*sK8W~?w@H>bxR$q-X#<&Rd(!z^u>;LAR)n_1Q2 zq!RKAj9Qu~6XDP@Jix8s5K*<o$^`%^nBuKM5RbU+<$|2%GUc7VK4WAlPc|5jll4Xu z5zDT1-ydWzDKhKvl62_RZH87Tg-F=2mco8LX$H0<wLubvNQ#(|tuir5L<8GMozkrw z`lV(mg+YR_$oY-BR+V*b33}CmJ^F@vgOBE|H&Dx|G>4+CpOm6)3Xl3X4u|^G$F!mc zS5l7rP){v?fA-zGhXgWHNvz-mc`W&;c_Kg2|M6Z)$t+Btr?h0PCa`V=LKUglO9D}E zccX&@bB&nZ-Mu%4Se*^LH!%oa$e}#KHX3Bn%5XG#n`yM*tf+d5r5=QDpl&P!YSYLf zZo@LVSHM!}QDhYFP<_*^0PBRe`EXVgiA*L=wUw?uR77IDu@)zOq%-NxZhNrB(jI;j zo3A@A9BhIHScr(?G*|o~!>IA41V4Z-k88rT8e^0#p44S_zP{-?Y@ujZwE5%)5m#x& zQfLFT1~&|Qv6@YOyv&KTF!r^A3#+g?b)SWWKK*3B`dn+I?~L}q@@h2!K}*rg_FlQ} z0LthSm!2ONvRhpT<&z#N07+;;c0QSXZ(ZQ*I45y9yTZ{nZlU2IywB=3E#*lbAnjlO zXj`UTZ%KKp4<<JDzAVclQu#u;Xs;3(dNcdQ)F4>t#xzV-rH|W5P6GR00mF6DppV*y zxWG{a%g3L>Y1L_PqC`WL!y|pzsdr+aIbBx}ik45HfFc-#wQF+J(S%|FVM}#?TdL1q zL_ZjmN#ej4Co-HUOyo=zk8%u4GKqhIAoNcX&sEm+XpWNqIcWt^dfu?dD-u52<dZDX z&UK>n2yb1}93Tttsijo*n|;UhpIa{%@foW8^LZ+U2^C)GrVo9BCXz}*4)d)%Ch)*% zD-itj;q=zm()ODKv4TFq-s9IZQa`Fx;urLz{W$L<`3(h^-Vv&4s}D)&>qOfdw=@1R z|4CNaI%oKuUO81cn3q7SSJ*g`L{mjuB_2~V-Gl}U8Gl;p^;wb7ah<ObR5B~9CN4=| znw3~~;@TLa=p^$g`El~6nos1;o1qxO=a+=9AFVpLAVXgXARmd1xQUS;38GDKRWMAY zv8^ZXh6Ze{6H@!WTfLGe)UMFM8tK*a@tf|CCM4V%zW1tZVHlCX`$BeBS*27%LJs7f zbn%nm@sZdZS_E-IjFTcUv^Tg@Bm<pMJXLSV+D*~8jV7kdXcVI&dYVn2TK0UqJBV4& zf#TH9eJd^YJ(jLPmVGf8iLKAdD8@|;tbZ#8X-_eIe*uv-p<#8=+IX%d^U_w`8ST~< zD@{M>PZXfE6-4R{=wbq*u;mj!XKbxGb{EF~UPp!H6*j0L>{y52d@qbF6_8}X2v7PS z^|B}oLvBHmFB>dA<?2=FR}%Ea_DYTPr8Bwg3XevYHSZS*zXjq-s;u*sOEmL+vO1<r z7Ua0=MOPs6YSin}#%x(<`t&uPqrMi`l>#DuVu~u;3c|e;9U*J64+y1t$uE%+T_}?c zO|Z?RZ1}^R;Ju5t6h6Xgm-R_Y#}y5z8wTk8*A!dmD?0eMEsi%;Tk&$m;Rn_>$q$vt z*HOZv;-3YC)?bo{T(S)k2^--SFRuzy5E`5m3O%Cl{QOv1nLc^Q+vu`bh^hDu5|$Ij zitWQ74X$6A4_Ud8-9bzCqm^@S>n*WRO1xCsW-8kvVxkj)G5#qOT9y$aaqLQat;P^4 zWXH3219c|I0;kbf6x-V~v0($3>BJ3$NF(Vx7tX}`6!W1qaX}ELONCAYq>1lMnf=O` znc77e--HJSt0JMuIe1V*iqE`NrnPjL=l~JE=G*|;pVQ%ubcUZ6|E?AuF&AbH6L&Ey zXvOpI4=7w&2gMD@xFBG~GJQXy-f>6&(}@fHk&t|p7<!bl%^2d%S-cxN8MhNyclhSI z3jPn`TUB+(vKu-O$g|EW>G8a{{6#rCHVzARx%Wvm`}5`o=~lthcHPrFa_l+M#;}LA z<XHQHP%b^fvo_<M>zXXp=ZUoTC#hSkBn7KTyQ)$_p`Ii@l=PYXAY>&}o2jpmn5<^A zbpP0zA){%9t%cCBnc-npP)o4j+q2y-4d<`W>rq!sMePG?tGv}~iO1Bt2e$JU!_5j7 z=oU#dKWQ~Dn9wJ2P+M(vV6*&`h2+WnDArG2Tqr??$<*{e+ou;yO!yb9X{T4Jq5Hq` z=x-7EjMu6HoY){C?7a=j+f?j8(wo<cR}*u*7Pwd4TdsWOKeLpbl=iOKElOBt#EO0v zV<%ty`&78A%U~1Q_US8b#unvS)3qWo74H`YZi-#VX^o|HrP+5kQ?yyRJ*mFL%0b=R z3qSCiFDww5E$Qc4R%hbJkMssXa^HU4x_B!@4F0wtl?+Mohq+%3dQNd$Y%zQ@k11bb z;n{dSLz(kuKlvLUBdK$p+JT8%xxa;C*rf%^ijm=yQt<-|9(g5k(yVbJa2LXXZC9f4 zFnjI3blvcUGy#zAX?n036EbsWnD9{g73waM+jUVy>3~vB6Eh`^Fbpu3r}5Dub&z+{ z)|k6&1THc7mzt9)2*13a!T;T?{?`CATM@lU7jmVN3qMRx5y~6?=HFYkmUuuK6?${V z$-!td^-4Zib-pfA^ZXKcg-J4df|pp8GDpN<uS84Op29j5a<d~-P%&G=t48$u9F&`8 z(-z3`yK>EJeqS?_*8pn4rN7pfBO=d7Z>9(DbCR+yTU@CuDRm(gIGdClD$R->WWrpk zOq;6-aKJYV&^I&~3N|#DuI2M#EJ#9iCm(?*oWBX;l2)G78fI<NxJ2t7TWUiNta}6Q zejaSBTx{vXZ?XPbu3p*=$59GFH#;v|?B<R}+IXdZw2TXThF0X<RBDEVm0^Kf447G4 zd%91$TRrEL7M&LkC!3#y#Kj)7&j~bz5XvIbvPwbE^^l$-<lt-ck!p6jm-IQb)DaGT znl6uCLffH+<S$)v1@<^nq=SFt?;16{7z|~9(RwpRvfU|oE@utB6R^nE`?@AMD*Q6- zCEJ60Ekn5dS9H5%Tu^cV6xWprR5l)i4Pf!RGO@5B-sVUidb_ERX>amS*y|X3s#00{ z%#G-{g}*MDzBM=$%@Hhj{+NNfy~2QDu-mg%2iHkCG27xVex<68=9n1!#1*VSn2Xp{ zr;*~AJkr`9#pUE1^m65(6=$;N=-TSvR8Nl<+<QqjYEQD)npDE72A}p7BL>S!_qc(_ z4cGOs2g5}YI+7y8SYb5TgEKWz-TqL*K(bAZwB_qkbO2!JoE8(1YFA*w`(1i~8z6Nc z22}6RmGcll6abJ=5vxPdy3OMI74nPyyOo}wNENtF?0saeT>^y49GdgK!`!7fOTxnS zV|#~%TjP?1<-0;gY>EQ=c>~c2E3feuCXjK(P%JjC7PA7K{ZzZq*8A#smqP=^B^<7~ z^YSp7wPCd=sogP_?@v%}ygb!ju^S4TembtC;0OW)(^gvoIGWyYvzjRzbDftfZJ_+B zCEs|xvMtF~noK94Ak(>h`PZpCwnVFFQfl;}w1;AbZ=8FzH6W#cCDr*HZ^c?E0K_Jm zPMUhGACLaal~R&cEu+5Y@ZnA45O$DT^CZ`!Tk8VT3wYz&zh7_lV>Pkgbe~S2PG?Bc z2e4#Jo*T3UBV3-=?(v+pG|ln~NO(iM4&o<rvTM|HpG8?>gY#(+e>z2J(GoiKGsiWU zHFwfg5=B-i8oAP`dRU`rL`9B!dPizWzfL@lr~)g}b|p6?@g?Dgh2we}=b-;iOJEW} z%zs=A!8Ha|+oGaHr#^=4H_O#E|8q$y#H`8_P!wJhQDWv}N!0=MY{>Hq|85L@&9dE+ z@R~WT7Wu*M;r<gd>L1$Whez^~f9M(tm`wU%7*-`{w0{(E)Mh_G*p?GjqI<l?arNf< zjk+l)`WB>c1?*l=$x(?=E5!;6xVnDD&_FNp+^S|_DYbhUu9UichV8)8HT?`6oxvx7 zp_`Cql+xFln9Jd*w$sH}ax};OR0ZXKww8$iY|%m%%Z!HgbAaTw;$TW$g=by(2EVWX zrL19n`qy87U3ypR2k^0h{Ap=pubD$=*l2w?v>JAQtM`>?I1&}uvJ$wAVJeZNMN*WY zW4xE2PQ*chyXVwpz1Y}w`Xc@Ed!L{u((?L0BQnZvD>&uH^YxQk)T$hvc$_LG3~lDK z@-~UMLFN<YgP5Y}-)#>cD46ICJgh#j6AC<6Ar=N$6d&{>fo-RRXci;5iq|H_>@3_u z>!(^k`ew1OH?2{FAl(jyhPInwhC8(GMVz^_W^|YeforNe6*8mqnvCuNIg|w3cb2Co zkAHe`r_r2R%7Fd#Be>d12<q{aXrF6@&z5tcH_!j&*HTQhF)pV)I8u{cH%JXNu3+Un z)_57neeEc$p1)Szz=cLuaOoApinc3>mQC(+9Gl(~XEi#?Y2YHJq&o5E85X_k;*CdY z(Qj0pz9#HYuUhR+IKR_~gWa5%1)aZExSrEg^%zp`OId5bbz=6#b-AhNJ(%37R{Ndv zQt|b?o^ECZ<dkovb9%|wFA8M+jnA|X+oUmM>(ut@WCefTG5;`fROz65%G#QoLyBQd z7fnKAeB7tyJCe1;3pd?2`KYi*xlGr`l>KX{3ZmAjJ`TXw%Qz=0yJo1+N};n{Z&~W# z`^)>&5yU?5E4yh(z|H2pvDFtQzs{I*a__jF%>g#k?odN)5!}uJE<s;WudOVa`TiFf zSC_BE_8Iliq#9ChtD;4dsztdxF(_5{3aKjV&t<$@xI0X~JgO$Lpy;fRmfv?zGYX?% zX%-p4MpphoSZz2#f+-GYRg@IFu9zp-4%gIwkTSF>N_taeV@<R9+0u^f*+i{yg(8_t zstVn#FrHYG8KHoUNRsn^_9FecqkL2t37%Ga46Rb{h14*zOpJ|3T&q6)=(hI#^XSNP zid7=%wQHjZ&4Bk0*K1K8CA*Q4k9T4s3#9dOh7xJP8TXUjg&sDN!4}U>rnwF+ydCa+ zonJ^&aqWBu7v1+d%i~zgOdNR^5frK@GSkgQ>)w_%>bT^ZRdu7vy<S_|+j;Ne6&d{c zD0&z)un>sN75Gy0<I50N1R0%EmAIZVw^f75$FF6dKsg1@g|7()h12tNXLNKNH?+g9 z1Gpky^1U0OY~U0mb;74iv3Kt|;{Z{u&lHVIt4q9{FkUZRwP7PP@BVTBFh40cUdS=- zeG=M&+5Ra@Ojb4Noxi*^#kZ@Ly6@eV*64ie%hQF<KAGoXt2u3fr%&jOGSsG^`{8`8 zO|<ZEN!;VQIjv<;qA*nWD7Wc$n*0fJX=T4|w`ogWQK>H4LGt{0M(?EYuePrntX^>+ z7^ZIav7Sj)U*$TifroN&$?6eLRie#d^yN4qoS#+xJ;aWkKl8EMtuFOAtxxm|Tbvr| zU(<7v&T)La8UFNdS&Ke!vH92U*Q5fc8tyq@F-3dBxrm~GO_pa82=MG21Cj5(?Jz7_ ztQ13zcIJsg!xJaU9%S-I`m}djvm)k4=GFC}{MH3SPN(o~pWhel-m?VQP~{$S)dj3W zp3#ig#vVG|s<-uSuHQ0;y6=S-XHN;@qb!So4||<Ecu!;B@7rTRz#<BiHrv4!0{<Op zot=??-MqaMtJ>jPEH6(dRIKvU%ziZ<$4VIZm5?i$9q+R`I&Ow}BpqzrOGe}j+x`!l zEQj4+F&=hWD~*V|FXf5CiJRX={gt&%`i@l1<e$j>7^>xHVN!uK*r!IgGT)=_K#WeQ zk<2u)*9l#&4m1q77~&++kt7(yd*Bg#1$!P`c<kpsy9Qgt=i0fLR8q-a1iv{38)d;j z_gvngQJu$t?5hnfFW#P;(-(a=9ev8+SIVub$|=%&<T7)z)_H^n^m6ROvYXn`!bc>N z8DI80(?x)&98jutYN~HjvZH?NxB~c5l(jWAFJ3c`UOytl76)}I{7jG|^DitS@Ve{j zvLHmi|JnEpeoO+J*&e(8uxQ&z%-1-?J~6@`c{<AAyj9{>eT636oY4t#TZ_oKjjEf~ z;hucL_F6Gnb0r>zkx$BHq~IY@9aToL5%GMP*PtPfnvQX0RT<3g`PQ^OWn!BRRqHcV zBMvcJ4zc$)0_#cwkMlTmI-|94NghJg#oZS(ENx7~BfF0+NKns+R?6j0`&%70Ioi&? zJx<6%269L0nMIe)MxmllUO;Tv%O;uel0iQm5~nA&#LhV3S<J~7@*mj6=)cQMOBK=s z)nUfi=!=mei(l^&&=~Y1;$FyoFvgx<h)E?V?95jmAB#c#*ZTGHQaL&d!=GYAb^{#O zHsshJmS!aL%xhS+sbQnLp7y(Fq2Z`?SB5FQW?QWoy&`qq*^@rJC@Nu)bT8jnOxY?^ zd`MZqhTw^Oy~WFz|EQI8p6=`Sh{3AhG3!O?tvzx+ei?L3tf1aB5lk%k0*0S^QEZnC z5dL~n0-0wFpMw)$e56&;FNqNbuxxCLKiCa+oXG@4Mhjz323bWn_YMX!=-B9sy!fxD zev@$~t+A(|_w9cwYO!hGCL}mth!jVXqFx9yB|cH(>CADYZ44<I4Qmd)=_}c5hm)vs z@~g@z(|+I3vPLqz-DrjO4ApHE#%%~16yVT$Xe4YDqJ&`>PPi&AB}yr8a_Q4zPHa`; zPDj!!aO_wpVlc4e>eNMoI~_aGB9UKX_?2zj@L*@U-xpu(3G42QB_AxlaEX0^9jUbK zsF~5*=klMZ7ps_#ibVEJBG~fNA^jAk`E!c|?s)H>0up^JCqjBmHFcj6#H}>%K7Dbm zzQ|DLsD+aH?Fb^V6*(mP#z)I`QI$xQm?M4mZN=aN`*4a&jBxd{@i93D;LGisT*5-a z#y5RVJ5hX#G1T?)Qc~k5t+@XsJj2=#@A6jJ)=^@@3Ky=EqngU0Ztt4j>8GW~xDk$I zs2+ah_Tr_tf;bH}v2i;o;|y*vw|Kb_*9oU>UIhwEfV4O4^G9RR1MQybAS0Rcgn6W% zEqj|c@7yi@9O2X~g3y5G+UPcS;x=QJzDC6WQ;{RRP3CcglR}T5oM*O^bau5ZT_L4K z*nop!POodBdLf3?C$`#KpKPfuy@WVsc2PHK$xJ}=jU%u1f0=%)gIT>xA*qEf8L}8r z<1%jvU0f8cgTSMMEyDCB_fiB&G|QQ}q6+Vo-cZaC9(;CF`8<EB_Qp-kXmP|tWQddh zv+a-p1EJb+1?gr_n{BW@FQJ-fl&M`OT6~R`zx9%OyD21UB?L=N^<c&S?Mg6bTR>L4 zfr_cx)QY>RvF$Bo@}s`YX$D#3@@VYB_O2f4vvfmdZj3%2AkIRVd_W;&_}LZ!d`rzT zZAblx%)A&)4a7`gBL?2}`u=~HqZs?%@f*3lH9f9a%=ehJUX+DznKKB;ZsRdQ^0mnR zikd{OWG{V23>z3Pn(I+mfQi(qD#@?*#kF3Vk&3GpClQi32$N&BD=4lFR}1Q2a(2^; zt>sr^%EtN9n1|>S#ms8A-Hl^oEtYJp`&XJjwKU%duYAHVYpPs_6{-$en{h4<1Yxab zy|jWYnaUrS4o2xuaGDnXwG4Z2F(a_>m1wIjV>5@b`NZopU+t&F=X@Dv?Bb#Xp?NXF zBx~$(#V@2AED5;u`P<WNxmLGul{zs{zOV?@qs%Qc9Nqh^9Xv{PI~)iev)NjVEo|E` z4d<k?2-B7e6o_$zMkGL%_1>1&nuq8R4NxD*O2Un<?5FG{hdJ|P9lwXn@lW~vRn1*` zGH7uk%RKaMjcNbYe^?d_jMkx_O(vtP$gp<Gu(qaUH`jaDhg4S{WOpL5Y**T>w5BWu zqGoYJ^@*^}UNLq^IV{LE7Ye?>3nal9oW&7L{r0PrfchP?%b(=3TB8;1ukz+}+y?9f zW-)1RagKP)w*?}Xn=C`v;%i7rZp}+YTv^*o${u5jimuo*JnTz7teaU9*c##q!tBeA z!b3cgzbO<q=<B~0*!q&SP7pnXvW(iq*EO4NH_gS`D0O;?{cG(pX=ki*f~azHT-J6z zYVEPm7SnfRifBs_x})N|XWNF{MAW}J6{q&y^72Rx*vTnziAi3<wbrLJQG9h=kFVNP z##~}w+r-8`>j>b&qG`5O_0gnH_90>MRtB$#MUwExQ*I$P!%dnCo8vN`f<^ps!JX)) z);I*VF``vbWMx<foLP9ZWPeC1owQP|$0FBV7<fH#-#kn8^E~W%Z?~?W>PYpiLX&-H zJl>`AaQ%|j@lT4DxwE^?Y(NkB7~`t^KL>)ooqtoN;#>=poLixz>p?b-kyFli$@+?d z`?#_$U+*0Jh_-;`AGL*>DA%mL==Yjjd!N_XKK<CkE4H=s`nMY-oo?Hi5+G9gub)J; z1HZ1{GJ}V`L-@E27n=%*icL+eD#;1HM89IiFZaNmvyEvJj-~lWpx4?Gt;O3pWya{c zbmD3KUp3qS8$ff3^=)DkvM3J*_Nq$=#0z5hM85^oVsu~9<|N00TQYTtvOtE1+S2Gh zAX&A);C1@gHM10$Qt5Ri1mDePUur~;x4+{3&p9%A<x$*4p2;P$YHg_MXhdQYwzVn9 zc=ol(Y9#thYI`rJ&#f$8mE5sL5~JfqJu$m*@$XsUj?k1ngY-lN3X(Z|s9}1^A>OeF zo>MZmqaYr1`GB(~4@G<hrICvduTJH$OH7SZ>in!wxIvhyk9iRFlifFVrIVtLg`&X& z!gWP5J{G3ok+-gp8RD_46&ER`|3h0kQ{?&aGFAe+U|x9`i8^mw^`CdQAw>;>v9wL@ zx!XvmS<IklmnjM3FuDDA^=<}JKSmf=k^dYpB{zZJXOl&1qrM*F*!x4#d(#IiFIcgg z#U)qi+DSY36h$J%(zpN6u-oW|0i9@ho=I8LF_w7gqVv?c=5J58V=3LQ5G2^y0hxso zrHC3zt=B)S20qqgyN>98TEBK7qHFc5-KBAf<@YL5a&gj@PAW<xY0<#Pghh*_dzNW1 zmq?^0>C?TuCq~t>mKRBr*sT^7;o_f*#9f_VgTl5c^}PudUn!HGuJx1jKdYYZaKoGV zG4=NHtE^)r6SlpJkGivuddjWZH#%ZxD*K&04QC&XZ?~E_9>h2vx{bFw7q{AtK3Xw8 z>Oxc+IPdjVd^ErL=;3(iP~YjJZjG4VYq|UAxl2!0v>*KAt(G~t6o@-d{t@6&B`L$i zCzLGG<SrlnQ%>uZ<h3=cK`J6Qh9@*BKqS`W`^8;APStLzg}=#2)3|MN{d;;^oAuQ- zA{cWHmvna~WDfWB;1kt5DX0Yq+$rZ#yr4=a4E^v6eLM!-lALaavs(BQhqTgB^iS|k z`QtQH8HRl<r{oTvj%=*CwTJr{NZ#qW-zE_UBwze7zo1K%zc(*_Z>|0wFugMrdaw1( zUkB$h0?ryS{;c3DbA;k3B^O~naXdZZzEF}T1_&&jxi9gHExXt%`Ithhq_!aZ@DV4l znwhYgIuM~3c-9}dFdN{=fominQMIgQ`iT2Pr$e=kd%Fw|U}1tPy<R;?i78GhDSBH? zdz||YH^3uE)eQedjQW1qRgCEk3UK21mLh6GSVlG&ohOl%kw&R_4gU7A*IIyrHnFmi zJmPg=*-UUXcjB3FAouBi5o@uOf`9W+!H)k0SAKdZT|osbs@n~9K5UEQCEn+zcm7@f zMqn!Ix-J>AG4nSg^_An|-*4`aEy>XNm5>-3S+p0`CO1bvuz}S(Qc!nUchrH-QJG)B zIbVs_FJAWW9~788OB;f8IJ1#ePXbgfRYHO1l>PX{vzfu)VvRf#{S2kTgZet3OTt#U zJy-_9v5Bb`ojKPP0;ouo5_vq?M&hZ2?2*-JwmkL|zm{67-I<lcIn|>nG-h_jT-fpY z>dd@$T9R;#@Q3lzOLX(eJ<;1&Z$8e1E8_{$QzdPyJKdGcS$4P8^f}$uDFp>m9A?39 zn5c;8f1S#OSV5^ERhs4tArsk<_v=2qVzqMx%ao{EKcR1Zp(x!=F`WyOB9aJ`&3GE& zz0qXwvxpuY^QAg{?w%!!PhOu>Nbk_{jxVnqVs4E4zn_wVH<0=lzCX_%PPFDb-1nws zMKTSy`aWO~zw<QbT4}zLYY%GYJMSGVzKA-Ud%Jk>vRLh{g|+DI&+RYtXJ%9~_t%F) zCkt&>UB*rz%P&hGbzIMHei1jcC&<V>)|&rVz?cfbAR9B~fiD`DgcD$!G6bUp+L0d? zRmT`C2-DSx!^ykVUs>zeanrt~NjKY742S2I#Rt7M%u1LD*)KL(f7x#DM;M@D>U=%| zg}X7TIhChkUi*GeRcFIX_wlO#wB;m<&SPhX(v-_CvU=yF26y!A;#_kw4#(T#8jdut zN*y-if@iOM9?kSDf(OutuZeT-S}(OnnHB_XkJ4KOqidCjYQ1$X&3E%1wK55NZZZ>{ z_cylMmrc~-^()2^$C|3G0FIn8c{SY9MD%y-E9oZRoqm+s$W=PmG(vq!(wgQUa(!My za~R%=@2Xmcw?{{@I9pJ~LsDKW<J7faCw0}eCIw*Dq`Z}=<g1x+U3?v7cKjm`@x{J} z-#sDPvO&*voZ22HZ&3^CJk+{fv^b-S-^^f6CvdNyI@u6XgCob-#U78xURC{5q7Y~w zweDcf_F!|<Pi$pcn`<X^D9}$ZwCQ5@Mos+1@f^kEy>UTwy&H8M!#!3;3g`W|emyy? zU&kvu+^fy$&VHkl8b})L89^h7%NQ{$xkDoM%yMUz>eYQ}GqF&q8Qq%Ia?Kn5U^6b2 zRxM`8Qfq3yOM2t#Ke+>g_Zdx7zFZl-Tfa8k8~yZO*a9R9uGCl<07>^$ITirmdc?cW znOSdj#Czu+=-Uuu+KS!ORT^@o5-*B|XOp*f$&FNFYMGbhRBD>z&9grU7y2;~!EwfQ z-XGQxoX!cC)eb*b&LfZLImC<ptak$a8T@OE-ZV;+?wwA!+RY63qW1=f?@f{6A8Uvu z#W(@0O;sd`U3@rweg7>X#>Q&-R0>1jM|&{F)J?<6t$w|pW>EkYT%ia{4?6i}dM^|g zFFl`)n<ON1_d_N5*ngKF)ANwTe)p5K>Hnb|WfJEc9GFQl=%mI5o`ugwOy3wN;gaI~ zGO+jJqp?D#A(H}R`lF;tG=%MWWK;nboLQFP9qiu`l;|Z<kG433*IYd<mrXHhF6yKh z3gW)~cBDYR;!B@7W$r@<Y%#a*GElSZC?8L*vnE#6bT-zkDVG;DEvbsjehT_lPAsY9 zYmbZEy?K!WZfJw-Cnu&EvUHa|O<+cC7|uX?XET33$^Nkg*Vj3`8ELz9%vHf7p=cGT zwF^rujnw!!EvF+^G)P0Pmxhq#Xejb=bp#_)QaQw!70t<D7%vKqN>yLrY2BNZuU<ji zF4dEzlV6)MlvdeS%9HsfS5eG|^#w}p2_U;2;RLGe>QPX6QgepK@C&q1)g`4kyz`tJ zUysf1u5n};pDlb469MPoUfNj&txYl<i8<}gIpy^i$WaB5{NwZp`Du$Qo8FxLUvoz4 z<E4cq8JvT_V*b@}vp#n|8#eRSj-AU9MDcKrG6ESvNQgH|dN_biZNZwiy)i=XE1g1B zqRJd^wlCwul4|Yd&f=gmrbE!OU<*^NDxDo+oM?%4+8?Uozq65Z@lX(sH~u(~87rrA zm@OlFroL((uNYo2UCH1n$EUde51*`Jrf?ek5A0|`OVj0#JyXxmx+S;MB8U3?EG*H- zz-Hxnac4N5Dyb?>zXUt>{wB&+jXG<}Zp(|+jLDPb9w-BpL{iYso{^M}+5gs(mPWIR zrBW?C+u`dWwxbZiHrk4D!3wtkswL?38E_5Wf7esvXd;-QQKtS~I{5}l9xK}9268HE z`sZ=x%8>DLMT<<mVTrWZ$(l#83vB%tYX*GR&*+OrlfHxI8>)`kc(lo_7~MG(=5#;y zA6bQbL)5VX2Q7c^NmwWDoI{4cbe##=BlBNTNpA#&hFl3BiSIrOGdJW=vywJWf7T&d zDCxDHG9O96(M}*?8V;tv)&iEdf2{4=SGH&i;}C}SgmjG(sy7dd<Em4E(llzGAM80h ztzrU+F+RR07v;&F`uQ34Xvw(0@7)tJyHJ?tG0yNY|0~x;BggHq^<m~*Pq@oU!z{`5 zR3<B9Slzo~P7xl|wbnrVeM;XUe(~-wNkl2$TNkfG^!Y)SXn`;vtUJr$Z-Xwfj7Q}p z8w6@GcctOaeoM@9*Oe+zh^#XRJ0{*Jz_ck?Rl=n#;F-Ekgm-qa+)8;=E#P6^Yeg)T zpqV_Ufhy;iTv$Mz1Y1^y_CO1VUXb)?Qs4o_C?<IlZw=fexlErM$IvY-GAx7n#Tdbz znk^sUGc@CTbsDd+)L`QQkNeBP_5l(=gWYp|78};~+kn6e<iIM-s`7XG9OlzQ;{MDm znoZ%2afP5%O&^xq?he0jiYNOH#d-CWir6rn<zA)5zX9^5q1|UskTJ>P$L&^ON;m(S zuT5;-Va<8bl|%EDCXQElyB-BRyhLtlKW^qn-gk6mJG_~kJZgO7Xj>`}sYN(hwd4{X z&N4p7rN=gyWn`Pop=H6x0<hj=;xPgL0sO$z_7+_S?bH7b05AYR0RRpFNZ<*>00ICI z7yv;55F7v@0T2p+000CGK%f8w4nU9q1oear0$^YO1_fYn0EPr$C;$Nf2rz(v0th&O zKmrI9umk{0U|<OfEWv>#B(Q{fx;KCV11Knff&(ZdfO<N48XF7-pkM$F29QtJz#sq& z0)s(NFbEC?A;BON7y^JHU@!y<hQPrPBp8AM!vHW042D6$FgO^71jA5Z1OP^W!3ZcA z0S6<HU<3-h1b~;o;3X({2@YODf|pQW6aYqn!6+yg1qY*$VAPWxPtyiN0VouJLjmNI zSx^uF1%aU;C=>*Tf{;)U3JL+B5HJ)1g+ky^2oefGL7za_FfbGbg~H%a7!nFYK@k8H z0fr)=Py`%`Ktd5H=n?>30z;Re&?Pu@2?<?7K~Vq{1%{%aP!t@BLPAkbE_m`d7!E+; z02~e=pF9Ew0dNo)4uZl#a5xAF2ch5)01g4eAy7C34u>G&5EL8+z+qrG3<`(A;V>i| zhJqsiI06huK;Z~D9D#%*Q1B%Hz66FZLE%eq_!1Jngo2|0I0_6$LE$Jk9EF6Vp1l7Q zY%mglA^|uOKt2Tn2?CHHFcJhsg5XFH5(z>fApjBrMna%S2pkDPA|WUw3_!xbNEj3e zgCk)`Bn*W_07wKFiGU&za3lhWM4*sM0CEY8T!JE(;K(H;atVb*0Z0@WiGm_ga3l(e zM4|qd2v5;?a><ijPZyt30R*5xU=#?70>M!rBnpH=K>!p4jDkQ>5I72gL_ts}7=VI- zQ7|Y921mh=C>RQb08j`p3IRnS;3xzVg+QT}0Mrr~wFE^i!BI;{)YAV3drGvYXg|69 zY2N=o`2T19|L<^7z;8STji!=;2wZYLtFflip%@Z&tpbhavXKNDu<PbnbNSa47Ug&b z&6bMs3?3td)p$$gWR9?dp)pq~RMzG3-SP&`Tkfe43D1-L<5s9{scam&c;L;^bcKAx za|qqtk#V(7nw&s)+p&I~b-UqIU{>v7BecHEny!O?qg8WYaO=V3?Pi<J#qyN)C%$jZ zZ&w~DK`ZZGwS<$NGM;67?)E28GDph<2-;3Yp`cueIX5;l$?QgbZn<rT(@C5d&<*1q zqZRb1XFAU>KfWnw^1RrGd;fY@j$!$GnX$+3?3<fA&X2cNzdXY`>JOu*9wp!IOnj7- zY-p2E{NDJ<5~a?>D08zl-Q$oWR}lDcI=&X8KEoIquz5c682yhC_22H^6?MUfA84J$ zei(x4R_}2doVUX-(pHMYe=c#`g|E+1vxKi5e6)+Wk~RAt{frE^Gz#7K&#U*{?MF+7 zn&M9625ob<8M-ZV6zsa-U&icj<bGA{>54v+Tr`x#HeXD(p6kp{`t(_<0wT+VS7{{8 z2iZ4~=i;r*mZ4j7$}|@>Kgc!1$Af0b$>HtiK;w_Aa-7I$xpKVIYoG=GbgDm!d|O^0 z<i9uM{a73*NP7eisH&+h4Pk@xBqlKN)s$x{op6-p>UJGe<?P~CSH1P(bFKWs8CM#E zE%&uF7)um&<QhkDBKankD;ak;q&?Ih)JWTbU~2e`|K?ldz{GR@raHc$GXzL2m#vOF zUBj(qzK^f0ev)m&t)tC8p{%3J>#;7rIXvk6(_ZvsLpxG!L$G;g{yn(}+)-4s@BZgx z<CnkJwT=A%@qa=CxXg7P{RH&L%b{oLR+qzg$~vAy)RtDw!}QKbk)h$t6ZSqjht1}G zc)w=LIDgLB^;e-FLgD_`^KC6i?oWg_(^99Kt&?I2uB|ha)K+?F$~OhxNNvzdu`d;6 zl^hkFFW1OL=Ef`Tmib7P6Kic^BE{c4I$n#fFeH86(1n(t|B`bZTJ}|Qpf}ayGXL_@ zVD-EnRcMnIGWlS{6-fQ=kD5O{950l)QpaH}#v#)`HBw!0VgDthf%H)7^}8;WT<zyo z`8tU9%pb)c8v+%xW@5Y5BfoXdaMVV;<JfO+Rgto8v~24!{QM(%_Gb$v%04&7HH!Xx z6Yt``jb>)*|J0DmHPT))twk$mYvq}uhMVktvNx-KLL}#DBb~g-x0)X_e!MZF{<3ww zqW8o@{lopszdsijA5g%4F@Tcn2gqhaH*2;HLY@1ur-{8Zm8{XY{S|ObJi>?B4G(x+ z2A+9cMo<&lxr^pz5XE0geqsH-)#p7(6*wEk>!V$fcU@lo9TOxr$MDYAjNwo?CPsFc z2tY+^sE8oBV%7h%Ba6cYI3Gx2{|qFd#U2gwur<dRG1yaPm`Q`4dnTCPvXKnL=8sT1 zMcL`>(v+?aY1%qPos&Bd4``@MR9(eSjIEG2(tKXnnoEA)YtQl}mR_vHjx0upgN>Ut zS{$D&)z^nT$LEi_ct^9Kb=^J_-u;-a*L8;Pe@xcvKGbse>Ow~g#WXs&6!tV}p>6js z$?@y~F+ktfHv(J4zKIx!MI*8&i9q|+9NyZ6_n~|LsdbAtnrpN_w}1SVXb|oHizW8* zKS@`5ODqhef9SlmMA>(JxuA^-n`dxFV>PW1oE9pWm}8bs!q9Uc70P~DfC)4mqb5_A z9C8+=nLV!mD775SOX=uTD>?rk08Bu$znRYRDdd<9bq&7i_CSHC5S;?qXAFD^n`ZL! zek3F)3NxzER}OHV5S5>E?g`EVhSYQ-liE<Gl*5DI2AkdF$qI%!M}pvImIUGGCJn;4 z7|`Sf*Ssb#p)pIw`II0=-A7Vma7~^x6(L2XNem3If~~H=sy*$^Cz@9fr#=;{2{CID znX|#4pl^w@q#{Xyx>nhQ4vuTJX<GM+*1i@*nZN|*4VcJN??mr?XI<z*&uWlhI`*-U z4JLBbx{qH5){vM5rVoiq)Mf%8i#Pb171@SK-r$F-zch$odCA305w3UwVJ%c&=}5o- za@MwG<ttlT1DDZMiA+App!%Q@%owz(nzkfTlT=05fiSd5Gwn@lnp=?P21U7Ep>9y6 z`$jeOQX$p_j%cR>B_b)~2G9-5P|jE?pM0&nQ(+sFYRZ**#C0F6Z6aOQI~CqIPDa;L z6Z^PZlo>_Wz&IqZr0m3{uin71fn}x<r&P89n{#c2O$aX$94M(;^TQ7gu{A@irT9|z zAnZM3lZdfTTUvCZj_VQk*!R1wU{egNwM{j#$rPZ(m?*z1o^}C{T<+525YecIK9*4n zAS}5z^holOpS+VOD|s1I-iMW^ybLHy8OvQ(F*JVsm+MBx%-jthW6z6YfqeM?wL_KV zYBo#f9`5A11_6L@p2|2pSGUfl-EKnk94mpG?Zj~7>Jd*&S^SvIHcsuFcbP{W*7B0I z!;~$bS-8SdMel|$CZZvU7z0Y@wIF#UnKG2Ivb=>gqaKcIaRXZ6yRZ@`yhOtaT%2dd z5=W`n1ol*ez33$F<d=;ACL__1>|j0wCkAjfK{6rCobJY)Zas)E0WjF&@UxkDd#!RQ zjhyG6Rt(YDhd$D+ZbL*P-SW5r5C*btgw*>W_clnr3!)DeijtJkRqx|?3lyXrHqH3` zFd81rTI}wrH$W|Ed?h90?~Vm~1IBJruF7B7z*o68X`*FZ6((JJT)oi$K*KVntETI= zyuUWeBZs9MI)eU$N0`R17A^j9Ls`^@h-G;_CV}38?35rkpq<MH3=LKj1Yb`tulla^ z-D*DAu_0cnpF#@f8R@r~1BG>Z!=q`s(v_DEuXsb|OL6H2v*_Gm_~S~b-ssJ!=o-xl zw`W=O^8UM~H{T7%w@ajT>thVjpoc!VkcoNgLm7*Z!5E;ih+xM64)h2^404coVZb3L zyMV(y5KoU`aDMbj4#w#bFN_&PW6Bnt3YP1U_}3qJxuvm*<BGGOtm9aApk`cC0I>1u zzVg*2CjL$atI()!y3a}3X!9c-Xx;#o`3a4Iy#~^{vnm6dg8k*i;x@~;@<WH!=*O3E zKrKo?Hc99E#4oHjoLdNW+ABeh&83NWO;YcJr(X0NU$Zi1!!KWxNqJR#NcDCfHfu*x zHf;A_+m#8W)*!^U9d}}JVz+_B6lkL*I+f87I6-27^LEN0PKgr~sN+;Sw{y!eZT-bO zKhi|UR#`s*0EU-tO6G3+5PI|AWcyGHaj*}<FmFK^3hKrPpC=5Q=Xv`O4Z9ErhnH@s zM-Pan4~%enWB?7ea0<WCWlE=RU?zt8KzpZ>VE<KdUE(%%uAvNAR~70rV0srD)J0?{ z_kcI(8bgLC8aI5-rEOT^aLOfe8YpNqWL|qwLd%48G0;_HwqVfJbQARnSc5e($6qVt zckMwFv!qP0#!x*$fib`ZH_!+-bZzyZhHIi<2*HXB)?Yk9IKd-}1lC>iCt|p$X}U*V zUAGi;6(gB|26tvUlO=z7c#HxuOlfB%iltC($96kWO-4jcL?;HKwKl?aHyH;XJ|t72 z7!>q{9Zf`BU-yJ6;AL9IdWhE!^Og)<@Orbc2uL^&@3;^1AO_384pLYT!615M@Otxb zdTG#uZ$Jk2m<Ge324sk3Wiy6Rwq;;ehX1uk4-2*<1;$QdA{|L31~c+<8L52VMRkPM zk$r*_dS;Tn#6-PBPHYEpzL=6!M2KlNBqk|%A^Ba(CmWfwO{are3n*d$ut98SW_MGG z=!Z9tmXV2rBdLT?pXh=_)D*6C11`p3X4EET#2`lHSta#-(WE>(5i%r$FROMpXL375 z(nMWlO~E!|03da>RumHWhufnJTtzrQB{V}ZOPpvFSM^mO2psz~m>X4?gGqz1kxo>l zeab;x)^vir0eD@JmB-{4>_L+3gq47!Rh1P3vRG9s@OtSMW%^(U(7*^o_=Eb;4mr>h zqqz_AxC{YF6Qy|yteJR{fO%nX1OGB`1Dux+WRMJGkPoC61~?E3PbN24_GAy4WD}Wq z`!I%Z$#!}4DP8e>JBCd(IVndGlPC9G%0o}m#Zc5`Uq-PYltP|=D0YYF7KG@EOl5JK zIbOCg6m4mB!3F^16(7lwYLxh&STi@s!#2@HJaZRr`_xT2L_2_^jbTA%I57#DwpCDd zSm488PS=JISVE8qQxDiga91`SwF0U_TAIjq<4ANqA&my$l{(^GPa%EHNNU&7C$5H7 zhe%4jfmBg-U5i;_(7>Qrc^oyQMarN>UqLA;xIp5W69zzmjdX0Dsf<b{WnB;nYOrqX zU<CHad1Z(b`XG<`Fb}R54gdFuoWc+TI1mPLFnR(p5C1rN!Vn5@3Jq{doTFKL`an1l zIeR@ZWwh6v%Ndaarh7jU7sPN)uY?BJlsK0Xh}9J&FIkyw(U*OhP%C*xG&zWVXsNvf zjTdT?dB}?J>0K`s9huNovgL-=R2DsvhF)VE1sHgNc$M!HUCKopy3}INQ5Bd3a1=!w z6ew!?G(?{1T~cv#KE^LYlSkMFsgjbHI0`;tXd~jL6iu{CFa}~cMuUYBeS*e;d<lvC zsSqybt3!fX(jkfplobCaUsv%;dly?9MH5jv741h8)oK-bCW=xO1Cr27O)-06iUVF~ zk3fKBi?D<_&}Fe1rvGrD50Zd*1mS~ffMo$`reffwSIByB5U5Y6jepvwZKo4lCXrG0 zjPHeV&BUlWhGX=1k()ZHr9y}<7gOVCp0?4KNs4Ai+MP6um>2m*@0pT?d6Rr`B}9pH zc$Nw1MU+`lH@X)xKyi@^bde-PO8e4E+?HHQ@<vecW0I+(3qez5ftgm}HP`sH_0<!E z_^PEbQx@u=SkXk$_F!vy1Ek1f3C2EV7p_Q~U{!l{vKCBYVHx+bRTDNlU27O)R-liv zcQ*i-S~XZ;S6cJ+Qsy~kUlo*M7Zmg$2Ad#;@-T1pka?2#dSQx$i5CW3@B?2a5K)MF z`!Eb?pt19ac>i#kgr`7}G(iuU;E+kyCMQd>&FQ;s_hU^mOVnns^18AuxfX<26mMA< zmf@Mhh^Z%uB(E5Ki35`F86=*96*u5G&SXR?m#F|(VTkd5^fx$ea*;amqC2^Xf#^?~ z$+o*1lq}Y&CYF0}18|gSk#BNwi{UryGcx&NV6M8CIyx8@7J&ihOO}UJQ`K#9*pVv$ zx5~$f9E>2FDo25q7Izq=ZuX>i7Fx5jbha9bUvgtPHW1kfjqh4(hJu)xpbwhhi?jE7 zUAB<wwplyz!^%LB1o4n;k#4YO94VW!PbQJkSz*Qdr8@DP?DL%D<zp3j6V<d!(>MtR zKn#qk6#qDMdo~NSg^F@Ou>!2<CEhBtRm-$D85Cy>$B9dPGU*eDnXGG@z@kENTS1*5 z2w&xOu5sxj8RT--v{O`xD1w~12`r>|f`(b#lFG2YHj!#R7BYeyU3(meXGRPOoQ+Hc z06WFTsBFrrY`sX*6T{>qHaoor;K%XhhRkM2$#%<{^~mJqOJ;Md-!}=$pil3rOQRge zD{4(%+Y}#$c36>uh$VG88^u-@pT9eiPO)UCtEa>}ys7wPP}0K`xeW9G4Z?e6Rjhbm zW_R2>k$wzt0B0ka2&v!4ZAzhXVGOo`;>n7Y#zZL`GRj2SS1NFsicqys0}aP6C&LIW z&Hphca1MR8ra{2GOvCc*!ul%^jM}OM4bk}eM#X%4OPgYM*cSMUHIod-Ihn?^49z{U zuMU+E(!9JgimB2}wm(D{9-YQAN}^iDMAD2m^E*4GL`@sTkxSuG8|5USNO2H)XEQp^ z%<0Xpd9wA;Wmb00Qw_&sIH**N6<A$14+&<+OQ=0j)@3--kNb=)lr<Gi%Q8*Rm0ECV zCBN`&&^PMHCH#O0Vad?D#o}ACn9SCloM8Dn&xLwy$>q<2t&JDW&a@1w@66a2Ei`+5 zDTX}LIW)=&9d?v**FN&14l&Z)D+ZIWNT{7iYz^0_W)M;b*^q5ke4Q0Hkuo&K*8d8D z&5~_q)qG`I)~A3vvQyk;G~uT>Vr9WQ+{HUzgX$w~BG2r6)9fSN4~*MtJ=xN|*MmLT zl&sl+98-5#Q{8=?gk9c}t=)G6w>fm(U^&==?9yf_*VN73^xe@zJ>TU$*)2TJ)Op`J zfvcDdbiQTYFftZ9gx3VVsY-i?V{?Mvm=gsJ&#MjJ$qn3HHq~18Wn9*F$4k|ItlQBE z&KZ8ZY~9;A+^1vBWxk6e<eYf_4bLef&xAcw{tdSX-rw<z%<9d(JyG9&T-hDn-#UI1 z*Y(KtEy_F2%La|tHSXWvor<7ct+n0cpv~kq&fJenN=R<y)7{uT{^eX=<^L7^<dt3K zOEC%aJLO=`-c;`6Nsi2BF3%1w=SvRe_x<G0&Eq%{<49t6U5?{nUd$<@%{dO_{!QrV z44sCa=MEm`2HoQHK-P&T=}{Kr*j?haXCsU*vNzu3m+a{U2kKb<<9hz8g)ZuP-so|z z=Z<dZaZc(dxayre>YGl`KC$GYWF!6r=#_oxmA&g#Yeu}zy)oD3weIL^p62R(=d{k> zCG_TvUg$%fip*Z>O%ChiJ?zXq<bb~H(T&p5uIe)m>?e5Qj|b<^$m|nI>C5oy(9Z4X z{?_~L>cl?jY3&r5%iOXK;WOUmavtxfPVL7|?~C5*I^OIAkLm~y@c&I$wX%NS4;^!U z9;E)x;}0+Ax$a~BP4MWQ@XM~=Resn1Ugmu6;AsBw%HHYEeG{iX>d}rPs$T6cukG>f z@YZgv%AWD!zVlp;^XeVEkq+;%p6XSL){vg=o8Ig#Z}YJ}3}nsjD*l{fZR(wlem73$ z10U)hkL?Ao?|3fiG7s=0&-4uM>juyBP+|6Y{^P7h?J;MGa6a8Mp5zG(b<rNH1&{Kp z#`Fq*^AMi$F%Rw24eof2er5jWD*xXjukb@1_ObrwLyq!{?)R+rUO0mHWv}gCv*X0z z^p6MmV?SS$-r;4P;*`GbQ6K3`M*32pc%VQGtKa%#9c4pb`~P7P>(&!6`?C83!~4G9 z`@runzAya2U;Mv++QzT@$$$LI-~7P;{LF7K%s>6jAN|xn{mjqQwXOWt@BF?Gy?f66 zy-)nSFa6bj{?`xv=btZ4ci$xQ`^k^~4AcGTKl}%S{Q6S=)i3<;-|zsTtRA$1#4=4f zm@pwih6^(}ob+j*vWd&|S=0m(;lYL*J9c~sa#BN$Aw@z&d2(c?VbLtUq!*3evY0U` z-kg|I;LUnCZ&Iwc58A$*LW2q=nsi^#p+uW1WvaAjQ;J5D4n6wR=~k-*xh{R$G%Q!I zR*@ndc=c%2v}dbUEgDyA(yC&=QY8wvZC$c-l`6YQQ2!v&qgR)nP1_dlRHr{D4nFMG zaMYx0`<^9?mMh=0W4C4{Y}aYffdhGB?aUN(Ue=u@x3-(uGu)=DIdfj@Rcv9cWkm-S z2rYQq*G=_B3wk`V@{2R+36_~uAJJ&~C@&^HeP7J&(e_>Z?*02RrKmk~x9)v<^nL7+ zQ=bk~8O&%u2Raw*7_d>Er+3;HuBV;=11!It1|(201WWtxG1Cqd?mxf;{LeHC3GA=J z2@jkwKxI6nFu$GxjBp|f^$V`U0TCpS!4)^;@Uh4Ga}dTAMO5&^2P53DMjd}_a6cOb z(}~0wTLdz};WT9N#|H=W@kI`I@=(YVQ|!q^9seVw&_NJ|v~NQw35@bb5qGL_#3O^$ z5WqEARFgs$O(e3-GB2WXKIfK!rY4JmTL!Q|>A@048RrvJ$eQNUM^8Ov5_G0M169U3 zWgz`C&@4NoNts4>`m?l2C#^}QmwXa+%)mz6luiK&5>BVmMD<BaSQ$i>MkjBDb=5kv zWbja(ChApIU2jEIK`&41a!F=+WffXpmkf5-R()DE*QEqXb<1k6burlsfkV?;Wr50Y zSe&XI?pJAPHP+ZVUG=tI3z0RAURR-|mR~K2y*FPfFN{~*c{!zLpO>urQzmE@4z#(4 z36-g0=Pa)8K2vLY7|)8DtM$^0OP#5?n#E+D7$%4*=J-`nX|kB6iyDQQ(1B?BlTJVD z6wD@iX{49kO=)fR!8Dh|aY=o3)$&Cb1?yF5CM(PjWe7J#I^c4NJ~&*hryTQJ5RtVt zY^bAcci?`(eb(h3^*fZ=57ic!Nd-xKdgv+BJbU0@^#j+#xapMo>2iaXyXn5QX4_b5 z!<<OsPV0LP=aO;uxZOQV-3ii)p1ZK*;3Q@6a*}Hn`O-=QrPtJ%2d(d4D;cesb=5DY zxw+UopK0_^0d2G=JZEPAbi=-@{t3r>*N)XnvcWVO$up%@J4eD(EVA4FcxDxP<+n`H z*&2<E8{TXmgF5XQ(RaISUB@K6djkOma(Vj2&-zFD4^6dsER%kcaEf&}=cNlwgj=7A z%vG*D#i>{Fi=LSPw=3**=qJ8X)1d@IlZoB!RX4H8qApai5B08cg!0mhVg?<XdFoVn zl2oNKHZhA`a3Uw%Qm5`?yPSbZgs|$=3w2078Lkdidvf7TFvmLNl_nDgdB{Vc7{w?~ zk&0Bb;uW!Y#VKY{i(CZb7rXeyEs`;d#5kWayjaCBvayY2lp-A0_(V67k&brs;vDBF z#y93si&i8?-zakb$2t-+j)ycP9_{!?L;{kLk9;B;x28rp77~t$JYylpNX21fA|swO zBPXNy$tVs(6MlM~DK+`UPO=1)o*V|uig=Nph;E0-Yn`Pg0x5?HZ-@e+9OYoQsE_f< zmbCL3r(Op-7fy<n+pEVDr7}%wR@0i-#AY_NxlL|LMU5w_$0vx<O>&mgoaaPmI=M-V zKsHF4>V#)JwFwPL9!i|@#AiOIsf<&0a2dlGXFMfoIt~J;cN#-t2wy^~i4||5s4Hfl zGWH`#k?v6xTOA6E_a6>gj&epCQ6}^`Qj*G38JU=tNK3j>mbP@8(8$EKRO(WiZZi|m zn`upTT1|TY#I%S##V1TNbwc{+X;MZNSwkV!6O}cmql8jurE+AGG0DeaokE}j)it6$ z`OiW*-Dy}$+Rhb$Rjg-4Yd2#mBD1EorXnp@Tixo?o7M+say{oT9A&Ce?Nw4lZK0n& z^rsYcbagP?oh*mvLZ}9+p-<fq>Mq!+lnJmNAIuV13j>wPbT%`ejZA3axmnLrleDL` zW?@K6l$#1nv!%VJYGEtdqty1Zw&m<JH@jQi##Sn_?Ja178(QEh<)&b2>uN<i+uULk zxVSZKbC)~KNfhd}#AWVqu^XA<DtEfGMXhn`@f@4rb-3Qm#KMF$M8SS=mj(?Y&2ab_ z`G{`+b)b@zdN+kwo5+_>Otp@OoZ7p&VJ)V@h3;r?yWs6EH^B^sEpNFS-N^X#K$FPs zgf;Bk3~N)u#T9OdNh4wor#8gCJ<M9m3Ssbq7PlW}v57YvUIrh9tP`54cZ2(4>6#O| zJeF>FQCgvyzDL8W^$u<`K`2DkvSS=2Z<T84&}ITyZ6Fj`eE`+p)DgI#H=-0%pF<@k z%QAzW`ruAfDjLz$MKxWC%3ciP8alg%IBbSZU&47AJQwFHHzn4GW||v5b4AWwDKw%L zz2?i%xy@v`&Sunt7V|h|oLIs0p>^|>eY7?(j82WC6WwQ0gGMo<Mzw3I3ovM4*wJzS zCUv5518cD4S=8YPPd%8U9`&>*DU;|4Uqz~GRJTPtT1l_ucG5e+;0b3E{V4~h{1dAZ z>c4;y9S09eyGDKPzrxYz1AnC6Lj8wJI#TI#U7XG0J_X2Gd9YW2Tw|gHbl&s!Y)~vL zpkX7J-iN6Tb7ec?=Gr*lp;`BXzYAThY<4c=gmG!Z>y@>(2*dcc?Y;j!Z`5o&;Sg4` zl+v9U5UcyhziqI<*KOq0+Lk=qVQmL1<?7rXMGP?jKn!SZTktHIPs@JTkDSdiqYmol z13J~BfONx0MG8?+V=|(MZp0V;HDZnm;t3~up_5MfEI0>1*kd3DpqPa=C?`$-Cc?h< z>mmlUFa<jRZXgCuhb5q%*@qa`zIOo7T`oyEu7f~b=|+2YET!?YX3lQuIiq|igPt^B zWb+jP)q25*mx!$~eHYRMoG8^b@SGQOYt7)@^stS!ok_p=PMay3jXykMQePX-?B*+F zH;#7__8p=qrzqJ`N|KkXCq50EJ;qsv3T}V{G29>qHwa2~eEsW;2HlsDg0|J84Za|X z2}Y3O-hF$gGht3|L|HF-<>ZTP+hIwhzR8Rj(9rzm-v9uC^vh^iLlL`(!T-&Vf&Kf8 zS`&>)Sb^trKAe-coB)n`s|<M?3N=!O`4fZcS}TMbF;BY*Ks$`Wz`3CRh&!>{G|M0@ zVu*nl2&fRuxdE(-OS2512spS3jg~{X!>Ec+Xp5-e3<sQx474{JM5)Ypiko69%^*0U z7zRd&0U6MQBx69#D7z@M!49Of5wk)n95K%uv9rrS4UxeH1dFUV1mtKqEbPFiC_5@t zJg*~<!br0B*gfK)h?k>?-McBmdOhuUIh$iXG$0253xhP!j-W^weXEa#s+<j>8S!(h z7daE6y9gt}6cgGjAu$jsu{IpaI)BPUsrxnzd69lQL!y{FzxzY^qpcvDrW?3{YFdpe zoQUTmyLxLyPP>Xr)2^|rMTr}V$CHwP;)|*<0Cv+1N?Qs806-M~lZu>LEs+{0XJjJ= zv^_VA7eMl?7M#MiP&=G!#a`6A6}Z1Ov@pRC#n^y`cEABp_>M(@gXq$+Y3fDMvWwKC z47lhl%ILK2Q6mc54oL_D=Szb&Og)nO40jtY>%g@-?7iuOt?6*XXhJ$dF+S~}i0X)e zKuik%3qXZY4(Xc&O9?ut(lW{_s1`btpO{3WGn4|ML>)372T~&W5{}%#y1}AJ_Tv^5 zNw;{+35`sOQq({G6BRhqjY+t<Gi<;Gw2P`3J2d#M1x%GrBRN>v3SyYMU39aCYb^mf zDN|Dl03Zq#3_$(^I1D7kxr>3J5KFwk35c`2TRDpZyQVb%Gz+ajBh%`|!gxQZ7z+PG z12l+%12aMS1I*<*t`)P2G}MPhh=Zh{2TFj3MR>jwe1kEl4q?cFOWB3Vlz~u~hcO@s z%rvqmEIY*Oyw01#t$;z<izY;=l#@b^*Ex;=V@G`$!_QPldXUT<Adh+I0!-L~%#4P4 z*a9Os4&sD^;oO27kO5Fw%*l*_%A^R<{0=u%7?@j_>UfD-V~@bwk4X@Z<xrUUqX+HC z1n08|$2<&8;E`J5lR+t>0qGse0Sqns6!c4?K1mWWQ=RnLPn>kRL}3wQdQJG;G9IxJ z8C1i4D8+}kO5F1|e9Vcfyo<<KKzp3Po6|XaM2flp*auwHi=yzq8^AEQV2dX_t^;{L z)JzMoL@@}&KxG&^x~#!v?9d}T!)J`5{(-l$kV1O;P${CyEDQ>JqspZiyZ>{_eW1V* zjX(yhI5k@>f*4LQctfeEg;3asc_0Is2m>-8ie1psePD!WNQN%WheFVS@$fyo>(I$y zO$*&Zz#|lA8wOm<4DVnEAovc;+=pO@1APdC#ta4>=#wx|gJ@uf9H>$?Sc+Z10XU!s zG0;+B&;jwt(tXH>E~SSrMGo&!$ldF;1w9TzB#NF|kghA0^dL6s&^6|(MT@8hUh4&< z=@g85O_4EB`0Sm6`Z+DLHVHu=ML`k-c??MZVJzX04-yI10a?Tuxtan247tpSC#63C zIKWw~LZhHc)Ihv_SOF51LK4i&8Jvi##JRv+mnj^i2_ws(xJtP^(MnS>0_nHS13@t4 z%O|8g%lj-3O^aFyC^;pFz3ep4bFs3B3&+5}d@I+-)4$L-Px`w!24%(OgRaAz8<8TJ z*xb@Ch#l(ykHx%$K7|Hh$OJzH)bFr`P{;?%<b_N~gG(U{gfvaKY``~54Ax3OaaGUs zk~-Kl)wD<$VQ5EsXatIA2OyXSF7S?gaN2pG)bF5FeHa5t2nA?pgh*(|q!5NNAP<t= zQZhK%l$E~SyH4F(3Nq|8=oG~EnALs%U{B;CF6oOt;LuPs(6zWN)lQ=nY^%>@3zSYN z5Zkedt6R3$9KY9Ws3}R58F{QSb4^DP&_wx^4a!wn!jPs}QExrh=9@p~1AvOvje&bo z{&2q43|PNV4XjW>zFR?|R0<a?SEi6r=L^cjw2BnnK-RDfNy7;r&Bom2)&|50H7p3K zOhYz;NG)1jyjTk;GKdeQrz@Ju!x*Qx_`Q>AKH2@lxvN$uavG6(kK`baDm~xCIF2mU zhcn&OWJm+#5Yyu*Q!d@qX8_ag;Er((LkNVoTB8W7tU%T{-{DKdVJHnyUE6)wQ=u?~ zXo!YjfP;BpR9)kOWk?3gEKfuKScZ8>17X;Nc~FB$2vlB>#UF5rmfZ*VrH3)VU+}P) z>ZDSHOtI#>IFa2BpJTGuyA@U)ikQ$lS)>l^tj;CFT*4i!F|(XpmAas#6eq?IL?K*c z?T;N!TrIl~87i|yvEpq5j74O!7HX1{D$UdNNuuyS0N9V69ZLS41l-kLcFjNHSjPVo zLe*$j-}T*0pubT}&9t+TNq|x9HO=3v%cOiWeof?|q{@LsWT`v~Q3SXvTuplnsJrAY zUa7U6jEt(tgcC%#eK<jtT3%_L*6276?$|wcL}e~G1zlT&JJ7YO^-Qwehh30meP~$^ z#@ZIHnCL4+WAr@Qd*mYjbxQ5E4!s&&i4+fF3tNk*P0M75E;t3>yp*P`4lcM9eQ;&_ zRf9{|1PN{jM%@Q_FjQE+gYu+hUtWs7rBd_dR@MTxQXLBN&;$aZluU@txb@hVn@sXe z81B$D^0-65g(1Q%sJYP;{k+xJoHEmqD#|sG0znXE1zdc_=P`3lEz>e2F}e*xP?sTP zqMS^?V?|&D;MCM!Xt+7QgF!Zi%hmi)zd%c*c<H>zUIFaMQ5K3>R0eGoN|<Vrk+wmw zLsGsQOW#Ee+#?19KtX~KOX8*ICoN=H(b0#P<kKZ&<(0}Q3T4xj2*itN=gaA(_++}9 zysi}70|Scah>mvu5Cct^2zDHgUD$;7MbzO0Q)LiSp<sk+7K0qv()iWi_DE%pJk48~ zysZ8`uds+{xT&c7r&OtqSxp#aFkygHk1%M*T>t{*EMXKrQ)plWE8T@SkO$t>O~I~? zMbOfD2m?O#;9oxM=m3iJNSLsV&E4)P(U}PZ9*XEt<?*<=VPn;qiA@WGR@I?g%lX@& z4U~>%ZVaK%CM#Ba4xR$dk?h`(I&J8k0bB%SHZ`%=n=U&s;DQ?f3=@oj70_L;klpwe zWu1d>X_Sperih$FgD1MVxr5Q63?wi--kbvf0kOY7G=KoFZ%N{bFFewH080;*WAo05 z69i>zqHto;$l1+X7eGtw4S%z({?HHci<`D;-GxD7005`tl^7UCMQ*)B={oS(>fsE7 zv1`X=&@~d?4oX$$$jnTO*kwwMhE0tLU5iZ}FN$^HaQm+B{^^c-Q0CN8&^nBcm$Oar zs6$4$0p8SyNtJ{y*YTI#2hrpOIM4@P2m>5YhB3%ZUTDIm&01gH1vsz>MhJy^@J&;w zwe*zLE5~iQ#psjriX$fo*;EQcXTY9gVog!pB#vTcvbG3mESs6C!Sxg*k=E`DTqcW< zzlGN4o?O6PW}N?FVlNCsb#XrX6T84H-C9FDDNI-UOKMmj(xqlVrv|&pv=`kS=~$18 ztq5YJ1`Z9J*48DBwL9v)OUqFV>Y|=Zs7C51k3jsp@0<{+Z11#a+-eY~-e(NbjgY~0 z9X9hQh;W?3u@k@)mnxgNz{^hcxK&TDm=3rI&)$2vQ@zfd`16>+?IaI$<CR8R&qkq= zY_=x&lTm7^=wLt9Kk?8*-4YM(fVt&Jj%KFP+zzmTj&ep1<7Fs!Bu`+x9o<)d?12Va zpi7ipT|a!*Po|oiD30_*ArucGumY9bX}fu@BEBwmtf-6mFpFY{gqEJf)|?wV98C3) zQ5OggJ8=J0?_r6`S}|Uuq(3pZc7e6;3P<Xo=<hXN@S#_+VR2D9e!zUmS#>$V;BdvF z4|!lO%>$cL9(|V~%#wTbUwW$VvfD{qDPH?7=zJ!K1nyXPua$n6ncCrxoFJKDF?5d4 zcoM2kfZt9lFBK`Ld1Yvc*U?`xv}}yQoqBkNF2IR}5fF^=3C=fkh@o-Dw{3o>XO5KB zJ0!4JQhkoh2?8gNm*#xEdXNAO)&RwHpvQTYv?%Cy&A)B=izYrz56~}`@!)@vPl1tX zUHW06CZ@mH4adu=ck-yreyOkTkzQAL#5oyVf#7wbDH-=#6FWF7-o0=7%~IW>UrlR& z(kTCg6&17p>j#K>(CY0|R!|@@X#46Z6X>wuz=HdT?Hg$Ep}~t1>p6^QkY2P*^pq(Z zxolXyX!@4vOG!_nL4z!pExb5TUo@8zSHASP4<yEYEFDIB`7!6ppE)%ieK}Jp$V??k zE>o7NUQ(bpX~wKcu&Y6WMK@Z6DzxRrqH2voUFvXUQkiJKnpHcDB;IA2yk3OMG6n!N zZGrlgN|NESk;<as9mx={zNyNpKAw!1s${$c8%s8+m@2)hlRrcI-0*T@%ZZ^`&U_m4 zW7Z6>+N4{PZ^zuVYfC)H6ee)p0+sEi3wC1hvIY;{Sbl>xLy3l2le`Li`M!!@bCdrK z8rI_RhCajZ+Z$8&cjMiYbMG3Ry~Tudg>Utnb!|~in5#cM9uy>iNO2{QR`sw{6j#6n z$ktIrEx6WoXU*i-Px`$^k5my(_|}9&;a8wXF5!pOP(FDGB3&Ey)gezg8CFzDnf!KK zb`rwnV0orpHj+uiNhVrqcn#-SY5P_7T2&ySb{ciAwYHj&BsF;%k^@nB*^ztE7oB)P zc?q9G?(s&Re-Zi@Uw6S-=~Zv(6?9dU=HWJ;nRN>1=9t$})ZRjMlE){RYI;`?Md#I~ z)|P3#BoaxXDKm_Q_VqW|SUv@q8=}9lxM^HA()1vSP#K1qCWA?I>58X*xGMjEFgeKT zSPia7VONs^2q$LN)!M0w>UEV#lELoRsA@Voxg@ciNlB%n%vuIbVnKcu<YA*#Yno{c zHH)QHfchDxZ(Mp67Mb97X)bPta<rzp&=3=7m&K81SY;Wi3s!D-hO6#%=AvuRyZy4} z>YBOXn`c92{#%oLwcQ&ods2y3-9=4x2;fW@w-}nF4ARGG#zk>xl)vl}sMfpE%E%?S zAxD=Og2id<^1&>FsV=KS9XIM!(A7Ni#xC=`BWSH%Ib2nuA*NW5NLriP#8W9Inz2fw zrsKp^XMOaQ=9MgNybGVEFuM>Nysz06n;qWQ_&(g_(DiujFu`A|U334<bc>faN9CG) zx6O73{`T2nTWL3=uMq=w;dSf%ufgDQ9PP$yb?7(C2<pRgRaa?#@mghn1oPy6J=kiy zVX7{=Z<CiEa%knfHkq7ZzfJZq!VXJxNlEgKwX(qz4P?=nO>OLvol!Y4kGsD%+u#BV zZado4-+sN=k^g;XqAW|5WtW5lzWw%mhaWEF1B<UO+vT&L{o~^^BzM$SooD{qX*b?b z$DarNe`2afAB-`|cZ||r%VxG9*n!S<p95M0N!LIGK@dZEiP6~3$2P(ZO)`(!R@8`h zLE&vJFHK|Gm8NwiYV9X$D14Ies6>o_;ca@~VqFFWh{N<T?r#6CO5Od|_O2)?V}|(C zpbo+IL;cAse;ItA1_c*CC^{~1qLbSYr#1{4u8oKHf?P~sXF1dPuS0r6TWW@gnjs#< zZ3Q`985J1EGFHxk3nb&~{#QgbDu#_fbYe&7p@|_rrheQ?R%R*#!p}6%T33Q$(}I`0 z-em@Ou8HI!p^=G9OoEf1>?9~Z`N>XlGL(}rr6@z0%2lGWm8^W_C|`+6SU$2mvb?1$ zTd7J?o-&rX#N{nF$;(v&^Owd9rYbcN8Ow|$B*-kLFnt+KXv*@KuFQmm5IN0RTGNxz z>?Sz9dCXxjrfa4A<|>t$Le3acgpYJh2_M-bV;RqoQ(ONYvUEhx*+r>N@bPE&{s}KX z5wt7Hi4d3+GReaTl%NMaPI7<~QHTnppjAw0K<VSqj7|wl82xBRv;)$Sax{=eYm{3^ zI#G)bw51yz2!a{~qyR~(rUyFRW`Y+rY)P^)@pRHW4f&&EQHyH4V<tW!`Oc*>wW&^h zDpaHTPBluksSB+tR<pWPs%o{XUghdm`RP@tf_1EBRhCfCs@AiXb*)Wx=ddstRTVn# zoxWqLQ0oUgeZKRmZv87@0~^@3hE=eJJ#1eQtJtiD@K|ak>|(3BPp|S7o=N2=^WHhx z3oZ47>qIMKJKNNEP$_wBC1hzyvN$51hO2%}Y_<Plt2o)JcDDTF>bokl+C!rDkh43I z8iRW@LiSdTm0?J3eOp9+)`PHFB!<@5NmWM?!%?1*=~R~Cj>Ejmx{p-kN!=0M?2?y~ z7yL|hNwVEW4Y7XBm2GAzdA#Bwa;oM{q_g(3+uyQwSjT1UUCG;{?fR~r_pGgI=b75& z2C0N}Z7Mw<d{RU%w0>z_;ajnGVEd{TxyT(ZUUpj<(%zQ4j}$HugZmf~zt_VE9%5T{ zE7sWdcE-4UOmR(&U>QE9$FY6wf|&~A{(|+r${;b+WSEyMPNuAob!t_HtXk2eH)<$e z?u(ryLb%eSyT!QDbEzU_ERz|s&^_=Fzg+)j<cem!9A2|}vs~t>qzubXE(vrc!__2* zSj>G)))3cwXP$zYsf?WPT$8%lp<ec=eRe94BP-ZD?^wt)ek@katYk75R?>yN@@2-X zSSh<X)OFSBg>{=4N_(2Eg*Nr8|C(n`D?`m<#*3|+EN7~=7r`VR@<>pOVk(<NxWNuF zdLK>XrfPcAorZO#qb+S_J6qY$hHa*w3hEPE8>&Dya;Lj{nNr94kryWHKDWK3={CCD z)P8eRn|<i2ZkyGZ*0zq)3uVdHy4sGmEW8_SVbip^t7Q##CWw)6BhGM!3s3mM9p3PW zQ+(nLzqrIP&Tx%ie2*FbM8+S^@ps>Gyy7D_dB`m;@{F_m;T}IZ$yXlnk-vQAFh{w> zXKwSmXkv>BC&nOW2nwJR!{<dG`Ng+rbd0~e;lmhY(38H$h%f!<ceyy!oqqI-FFYAD z^!XNhKEt429qSEmI@pm8a;HZf>tX-7#^3(-jdQ%|WN$mt8!q;|bDZo%H{u{Gj`y)! zeC~h8_}ew%^`{qok4sPZ-T$ui!w>Q<OK1G#i@x`qYke3)UwGvS&+>^ko$xg}J?c}h z`qi_(^{#(C>|-zc+0(xEw!b~@bFcf|^S<}K|2^=7FZ|&Xzxc7nKR)u4ul(gRzxmF8 zKJ=q6{pnM``qsZb_Oq}3?Q_5T-v2)M!!Q2vlfV4tKR^1@um1J3zy0oiKm6k_|M}Cu z{`S8={`0T@{qw*7{{KG!2A}{AAORMj0UjU%CZGZ?AOkj_13n-GMxX>vAO%*S1zsQq zW}pUcAP07!2Yw(3hM)+JAPJVB37#Mdrl1P0APcsj3%(!>#-I$&APv@_4c;IQ=AaJl zAP@GS5B?w!|1KXI3?UH~p%ES-5+<P%E+G>(p%XqK6h@&GP9YUmp%q>s7G|LqZXp+T zp%;E37!sivaNr~ap&6bb?im0F3PudHp&Py-9LAv>&LJJvp&i~K9>(Df>_Z;*p&$Ms zApYSV1|lIAq9OL-AReM3F5)64A|pN`BqAaouHhsKU>U~10A6AyR-z?xVgPF529}{3 z3LqN}U@4NKCj#Ipq9P`4;3@*3C~o2?e&RmNA}!h?EY>0=wqgLj;{W-g{{dq#rs6LW zqXmLuFB&8N3F9&<V>9w%GD0H;GUNUsV=hXg|5@WT5}-C-U@W2{E)HWj_Mc#kBRT4# zDWanWol>Lzbz}dzBmco;JUU}F(xU{jWB%bI{^{fW@nb*QV?F{T1j=JO3Z(rJWd0#! zLK@^js$&M0V>+7S{y`)-5+FsgA{jCy{VC-Aab!bcV>W8!MvCMD`eXf>B>kb}{Hf$h zlBE1y<U_h7{CQ;k(d0;i<U7jbOzPwT+GI;gr2fHVF#=^!I;1M{qye&I{Q0E(G38Ps zW&1hhQ{w+51%6{RrXy7rWmamXMH=M=D&<aYCH_g}`;lc?LM8i|Wm2N0`U#~tMr2nK zWk8DMK(b}}sbyN)CHmoIUeaYpdZh)r<vIH0N$TbKfhGJQ=KCq80rI8#Ip$p&ruji; zWD;ggO6D+%0UAug5OU^bb|z?krf7O5X@+KLj;3j*CTgzcX||?np5{K>0BgP`ZO*1` zy5?=xCT{NL5XNS1{w8k%r*00XaIU6r7H4oKCvhq#a@J;SGADE{r*t-Fa{^`s3I-Zx zr*^uYWintH0s(lcL3oZQ5Qt}alBap5Cwi{udA6r|x+i<Sr+mgIeeMH&!Y6*tXMWzN ze)j(-fBt8C@?i|DKqMBZfx@AH66k?0C?u}HASx(>MyMh>C}y6c8mPrgVCYI{=rVAq zhk`_gg6M{dXor&Mhekt)qUeaKXo<4uiE;%H?8AjFhCpz|QrKvX7Q~I}XpYh-wD9PU z`Y4VD>5d91kPa!59_f*)L4}SVW$vYQ&SQ5jpd{GmGE@bMP6lIKDYRf|(roE6bm?Mz z>12fIm5!;FmZ_L#X@{!mnX)OEt|^&v>6?CO(%7e!G6bBush6fHo%U&){wbOUs+j_6 zoYtwI7V4lLs-c!?G{mS}{$r&6<CMN+lulq8*yn~CNKViwiq>dKa0N|VDUWujo`(M_ zsG?{=j4F<rs;4ePs*0*mv}&j3#HT__sICN>#wZYMD6FC=h~`9?a%xI6#HTXGtO|up z2<t$YDr2B3vXW|52nDke>$4uKOpNNX8c4I+s<Adij8<w`a$}P^X}K1q8gwX@j;WcB z>6UgWV{B=b#w(q=>tw*|Vrc2QqG-FK=(}ENyy|Pd@+-8kE10?{lLCRd4(yfcs=wYV zz~<}1(rdp4D!$6=zSir*7HYswEV~vgzi#Q63I#NTD^_-;xF+Vg=3kWpft3hrwkm6= zD(kEkE2<7Fwi4^GN^7?oNX$}(s!r>b+U%#|EUZF{u9B>Qm}!iv0knXqo&x_YVo>X; zlImpC?2lUQuO2O|nkue-Dvi48sMhMzt}52D>Poz9sNQQm#3&4GV#+S&%7WjM{$Hl1 ztFY25$hK>tLJPF~>zbx%$98PLj_KYOY~PwG;GSur0&L<6M8b|~v7+e9@@<#;t;H&; zybi43x+%jRZqi(?;zF#LHm<sYET_ik0l=j!#w8^J0mO#J%OHqQ9K^H2s!Y)AOt{3* z_D8P%>ih_;?Gml*!px`^h^n54*77T_D(mfr2CxdN*)|03QmtJ4D)kyjT#V{Uqy%ET zjO`8xg7|Fh!c2}P2=!{~vzlxt#;yA?W>n7Y{k3d{DlX&hsk%~ZqR#beo3iP`POSaf zsh>V9zwU3+*z1<Asy^`Q&eALYj&A<4s{tc$()=&~{_XwFDFNTFqpAkw_A9r#?a9I| z%5vb{@+*j1gs8&Q(MGM32*u<=@8o!``4()libsj!EVmkOfLJZ<wrQ-oE0d<dyzVfF zDhcq~@U&*DS{Q3+d~L`KYuK(TOmzvrCN0c_ty`$;N{niankk;TZ(dHS{lV`Tb0Gbq z>8!pfr$Vf&`fIz+D#p$P2Ak>HVyuovYy*2KiyG`=KrfwwXhHDmw>B`l>S&o3YXmE5 zovtgQUa2E9GMn<L1oLeqlLVM{u`;Oc2xDX?|Hq`$PVTg3trBN0V$^ZvN-Xwn?o9lz zkoxf#LoBmaaP)4iWkf^5$}yepFuc|%t|BfBZ5d{`(*eWKFt^YJ3G*=*^D<<r3hV={ zz>zdZGc`}MHRDI_)$L?nYC(!Ixhiaz8m}csud(j1u+DJw8VDkHZTL!Y`If0rV9XVJ z@w$31hH|d0wyk|)u2$G_!``WvQrW_Roaa5AK?7Yu_Z%o}(L(oJ;1yj%69dRe#m_+; z(0QFjPqfe(v_mr<<Z(1eceF@{G)a%NNtZNApY%wR#O;~!`nhyla&rU<MvU6%KmV>D zD{j;htT@;4Iv4Tjdg-c$>}2>V!%nW6|Dr0IG6t`DZ#a)C<_7f&zl%aBLrtj!W7w2J zcwoTT9!yszxq5Rts=+ODEeMnI%=)R{a;ld;EygA==}N8Pt}C_DDLIEMh?aFL<LQh- zGC!MYt77nSamh^FPvJbo2PTB=S>;uJG6sI9w-#y_JMSWE>C4<PP(%yAhD-k%i1vD^ zL$K-}?=HI%cF^wVx)QR|&ho$3vlJ^+##jkYR1ATz#Mpe`UU;?qdf!(=saT_8x<WCC z_HP!?Ptbm>(DF1nt81IiYE;j%#j>?dGi(l*by@Q@D|e~c>M+L^k(H27YP`|2A}t77 zN9}2I`7!oUl5qplwCK(=^}=ia|3YjKFLA8`>=Ppf82_`xZg(8lX=MAVb{MUrFmOE2 zbD#>YjnWRm6n9KCF}fu7KIlX3_4Z-zcK4z8Jf<s;;&4#cD%9Thzsj+|=5bIfvV4E> zzpgFKTE^NYF8@XYcI#_iBZ#-|FeDGQp>Rx0V2s8j3~od7dCT-zVmS9%_%H&&q4x2t z4!0u%s}ASutop@2H!C9l?r>xAPjhUbTJJe8cZ~jks6OxqclLuTgF3+of?z_P`35n# z0Yj)T2oeK@SNJ}xKnb_*2DU7>605!v_X}4!bK9>QOLfKSapo?v))wn_?=1vhanoLI z)#|E<_$(Zwxg3ds7=VQ`|7d!~umtMqgC76@sXG8oOdzo6_HU;jl9ykr^IxXAEcSvi z4)1h84+zp;sUR<LD^Iq4%W%+IiSatDKcjA8H~D=pL&CD^yy~l*#uRd~3r}#;rk}=U zW`ccSM|S7~6@)@|tV06GxCBzfVjKDPsrUbB`2O*EXFu@Yjs}Yodja#b!Sb;zM=ZTN zF8?Ym$Li^yQ|x#*t(m&@?`G&}5HM{N_HcYAOQeA$q(Sa@#;Ml`w{Jpr<U<QYLq6od z>9xZH>_a}V04At_sb>d0fB^vHfVl613Lt>D@54N30RRX9C@2D{lll*gfw-IBFl;sL z3FctBt}EIn5TwC*|Nek@CjEITeS40l(JMXF7yZ&ty?8!7)t9FcSbfs}z<L_}cvk(= zBfWbPJ=4>tdYUIWIYwGMyd-RrBygrk^~ULm`W<8kFX#Zwb9{}+!vjRaJWxT521B^( zLm|Y$KJ3EBvqR!r0LWW`w+90RWQQVn`^KlACZGW$pg|gFCK_-)=TE}tf95`ferSrO z>3ins6CvuazUsGr>9hXpyMF4&erj@N8Qws2QfKb({&be6?VEd3f?&jdPD$*;XNo}@ z2!;fWM5vECsUyHC{DjWe$UGzf$g_aA>q8Zs!aU4?jEDTr^F8V*zDg*9#nZ#|pC7qz z=k~4oQSN7X|8l*5?x)z(zkk-hdg4ET&OejNKR^Hhq6Wwhf&&E}RQN;S4`R^jK~uI* z8NFy0>7|)8Ns_XN%jiK{rf=CklP2|131xB~i)i^&004j^RJ#ZJ=3R-lPamLA@?^>s zaLS~j04w+Lf&t*h&3%ei&Wi~k$Ig>iv1Zk}m1|e8CNsr25QA)4vu9(hh;d_|TC{KB z#+5slZe6=?_ocnNmv3LcbJ?!=I+$=_!-o+YMzaqH#AuEoLW@@Kam0(2C0mSq*)eC! znkjqETshk0(G#PMOsy~4M3JmjyN<o@b!*x{_NiGGjU=>vyL(gQz09|=(jSM71gV_l zL`i5S|DkD(@#09V`uuD{sc6%@946W2nD>D93ZnX|L>q4v>%1B21?*(!R8gFL`M&Q9 zW+8EZ|5=CWZ<4(JE6~6LPg*Pn1Q~45umKHlP{Ii(91w`zl)-SfWsF;9!wxqLF*OZa z6VbyGQ9SX)3`-O#L>4(5aYPqglu<<yGgO1I8e{Y@!w_qv=R-|M>a8A+AQA(OG|*r~ zjEOulj-H9GN(rf!PRWOiorK9@n49LI!iar#fq=I{RuU$GXx72ay=de?fHy_V)CVe@ zw%msu{wVBIll~O!Q&0&Z9Mn(*13gsHMYCE=4Ubx*45ZXPvS^t~BNfRaNGH8i(@0aZ z%@k8kMcqwE-#GjYO66Epl_KR<-IOxibgK>`;zB#M9#b{UaG2>pii{W~2izwUG{i_w z8Imlz&X1rFh-xYsLRl{#D<q-HDtfd4K!%d^Sp<Lskg8>-Osv?6yZfd>pd>~Q%tW8W z3We9+!4kb!->vf9*Ix!DVJx){S<J9T7(qOk#2!gRSjK`i6bVG)Zlw6b6fMTM#58u? zb>M+lT-egqh=KA|ebNvk6EPr~NM$7{im0Cd=4pYwe{nX6n41ghH)nkZT<~XqgC76d zXv8=M;v-2(D#^oFp-$DqrkjR3L#m(7@Z_nvc6u^XL(TM3u_cu?Y|5aVH8+YUlDfLL zPu=avWq!p-xiEAVgQQG~6@wUzsO(RlbdUa56M7Q!xo|}lU)<2eB6M7GtpWxjHHk-T z4n?gYZhGKXOH?&;4_y?!Yl($pQBsOQ=NiOUU4#)s9W4*p^jlHfmEglQZ5cXcR32$% zP*y%|^5eG(kX{0jf1LT|1uYu-$sOfz*WWB{TRF5bTpd)>$A&Tcu*IJ-d=E>?(73h> z{%FHZH)J|h<7mD5{7Au1-(rz6iMeHp#BhT&%*!L02*Z<(bfoD`FB3c?4CMb7*r$3$ zP(qEPAkLBo8_e}6VOi^*NIs%H5P~ptDq30zJ0u(-rRF!_Yn|C#m!c8X12>jC5{gzx zG46e>Y07vArkZ6E`<(<Dn<B{tCr6BVAx3&gWRL}&2&m^p5oeXlAEmyxv>*XVMaH?| z6%F>q^^quU7%I{FyqCj>nNU;8fd;KaGCB>V&S@P?&XghoxR^CZR!CAH6_1vj#7z;9 z{%K+%4Y`lVA#z`f!40I!*dp7N50Y~0kQP0*s}YXvhF?V6uF&?I5_t|ulhWiDH&nVB z!YVb@0i7mw7&{_eCQAOZpFWV}Kg2OIXMbAWB6*1zC<fCj!z88z_mTgGkbMnzyCRAE zY;~gz?hkwfd)UIp*qXOlPmVmw7^Wtr4BRMlL)D?!$1ce_<77gC6%iZa+$khxN$Fk3 z)R(*lDKvW)W`g@1%pv_bC`Z1{VBix;97!js)wnH`oHI=wMY*XKy6R~e>y#wnW*c60 zC`B|Bn2>UKEA8D7MC$ut+KLD(|AmtxEe$BVh#??CzLZ}xrD>yVdea6u>T(rz%nEmf zs}{|zl?Bb3jd~PK^nJ>VKqXkzLfXZ1E{8Iws$VN{HPubE(wP`~h^+n>&+0I%Wf9S- zqBIdW#pLv?`!MEB``Ok8SqM_@%UBpWB)1JQi&vNNkj$hMs`&rCrkqjgV%V0+t4}({ zQvicNe7|Nqkw<Nq&G3yVX4%XTJ6mQXdM;}uD8-0e2c<k=vh}P01+802d)h(P>PIlN z2-;XUMulyTnisob_fpu`9MY4PYqTw-?DxjCU2-yG3?Wwas*J-i2P9A`lJ)GjD%Dcx zSHGNYf)sgOle|^C`1)v1i`uK=qR(nhd#zqcC?r>Lj;L$2W~V+>(Y7rXmRPi24R1Bg z--tw2%$1ljpybE0Mn+~~HEVYnM5KIn*R-H*FoGYnwyajiQkH5VX25tcywWJCNtLeF zxF*U{zBWbE<Zn37Nvq3AYE`kD49GxMH|9c#!bp;*jUkL6K{7G_wKwJNOCgwJDK;jt zDKhF_!^gdeLJX=x<<x|a%uyAgj+^>}vD9St1IGMFsE?)QCkJ*oTg4y@IM~7s!Z3;A z*y@Jr6>@=mIa+;A_rYzg^P9U;JuNOre^z@{{x&Juk9;h?Y-=G28~ZAGPI#)SYuh$! zL@THDkd>aQZ;X8S8kb>343j`<I}eQK{@|0xz*KFJulr+BpTt75#npQ`DykEoSbr}1 z$ks$D#-7sH!%JOGaUV*s?qP@`v^yxV6MEM~`)WBP3BzTYr7|0LR%X{BoIVIao>gll zrh^oWcJHiHRd1W8=_?yn!F;KLjc8(H{Ecw(`l1w7cx)v9I^{xH$iesFo1VL=A&Whh zFeM9{Lqtm34HEdj8`!O77f~xu0<n`_*k{{X5wo1TJMMkPwc=cH<oXEx>hQ*Kh16kb ze9tDf-#}A2XQT{Chb`N#Zu3VMh7x}34Z?{z#-YezGh3w8w%<ILS+=QCy7bWntIVTY z+LlUCEZ`lJ1Y=Dt!GsDN@GhnU!0A(2lb)6$fKb>eC;<3Dek3Q_!-N~I+10MbMQtI1 z%pD;I0YVz;j*x^1Wbb;%J3;WycfAvYAqWY4LX2SdysN<odsn>O=^l84@LflApS(iu zKKQ;Dq-1%F#uhG8j~n113}}u)Ch({X0$(TM>lhPuPY7Y3GTkRX^N9KwcvFR&<bw*h zp*nA3PbLV^e(FFN+)9Gsl&7pDAGn{KCeYBN=qm|X(~o}jp%eXm+#ovHkAC;PAAazU z|N7+re)-XVe)Wq#{p?@A`Q4wF=yV_a;a~s#?Vtbp>;L-r-~a#nkN^6Q{(Aqc<50^0 z3!{Jh2;n3`3^*+llmm}^qe`d%0EUkxYz8N+;1uQ|PvpS@@<9j4<PF9ECs^P-s(=GC za2__W110YDz(d>YL_6j|1Sd!B5U}IsEC;iqax`xs7y|SBuJ44f2>UMZjPM5!0tp3z z36+otp^#RhFbRba2<j$M5N;wCq?WdC5^Td{sw5DgK@o5RC*p%A{(uAXqa8r73!Y&N zyn{Ec%_rvJ4E5m;LIEa(B28c*0AfJ-XyFd-qXN0Eo{UBl#KJG~;x8Dn5gk!3R)8%Y zaS|!<5#5dlwSr^RKr&<lHfUou_-i$6qc&vY6F-qPPy-ZI5fx2Q6d(UBIE(`phXYk; zQ8;wu2WC+?WN{Z?P0Xfb`|gH0JYxIcX;Q2$_XM#ec0w6la34O99&&&e@{k5hkonR@ z8BI_<$iO7zK?mf)C7kgBu`McWa2@z0kYs8HPmAqniXA)7igqZmxQO5^s$oo|9+7H9 zd~J*p3q(RL<XnU}Bn?OIF&{~%WSBz+N>B8_Y9wT!Ihcj@<U>yMp%CCe_;8~3K#&TC zPwHUeB6)#4DsoJMp(Cq8PsD>F72)fi!anA~`Gnyd4{?bO1J$O>CQq#ZJI;|jM@T+Q zr95aKG)kp7M}L}Qy@*n!2+L{Q=#+Q`cXZ_`of5y=%!7_Hx?ulj85Hn_P6BxR2uhx$ zrBv@2O@bD1Lm#^3B=bS(^aKP?@IJPL1u;QeSRxGQlJ{gHTJ}L)WZ)C7?N0P?CJb?C zs*A_e(ZO^wpg0Z_O~OL@${%G1oeIsxZp3^RrXCe0WDts)ItVhkXf-6w9~s8gyr|$p zB9A789&kX9JmLnva%LtZA2P75*lEGuE;0QH?(mE!Pee$z=bgTW%|L~Hwnlrf#yF*> zRZ6ouv?pp>WqyqEuR5fLic5un%_#|rVr1;OEFudX4uB|vIw&M39O$LGt<)Io66p*# zSIvq_4A2e>MwkhGNQo(3#B*ZkboS?qzVJgp$9`-pm8Sn@oa(W2;FHCCF~BH-3sTBR zT(eRhjxn<$6DF`G+0&kMlbCQ)LX#;sHc5WAhpDQnM_@}o+2?a)Co8w7uhcC>@YBlX zXG9zBBd8OcD2iA9Gp}SUthO(J#2^L&XbW(l=z@qtxh);j^DyPg9V^a}bj>$A=rcRy z*xU!vI>b`;4Mw2Jvd*cD8qU$K>B7jXexzwMuSmU!W4R10LQjIZcF9PyqGW6{)h_gy zGE~Sahf)q^<<cvw>I%eSX^!$obEM{V05xiI=bP9D*bMa8Xb0M|Xp>;nq#E>U(#B+< z#3v;RPA61~l(enxl$V%v+mZ&ANXdK-#(X};lN$ePzDkEv+J;aUb=Y9%dhkkgJZ5A( z!c!zoA1#T{l+4M9#7)PFI6#WIB9c?FqJOLl+|)BCO^rh<hrgc6LrMkOz-Bpc2h)tq zGBGBFN~vrdOF%o*GLsXbZjqL<vP$(W#v(8&7cHd-jK7riDwJqWZ?aB_X;fFuNn_{G z%!nW5Z5}7;S8t8CB+5q!QkzKXRU}0?B;{ZMHdA`lM~Z56UaZ2jiJhP%GHy&P0V_N~ zqF%280+;7gOG{saDO4fMLi9A*ZslR=i6kiOdt}REB2z<}Ds0rtVS-AV)CZkljGj=* z*g8o$*-cf|?IBXLX>keE<TZ~-_9V{JLQ(%#+*DRnpOr%$DQ+YsRgEgVkn4L&#lo6a z=yr8nw+LXX#=Iy6xLW9(G)dABio;S9vEoL#Sd*5}1|nZgIHuMlhM__uELsuMaOH|+ z5iCzbrsOKhac^a7cuvDcZbb-fC~3CR&`2^nh|nIbpcq4760Whl$6;FZ3PH-oij}XP zb{GRU&a5`$vX+tfRn#;QQ}b<BwP~3U#&uRMQvyy^77Ngb3YJ)mnG~vLd8m70YZ<ic zQLxH0NvN*kNV#ySDa(qpbfw`!B5?OXPBHE_uhz%5Rze2~eSr4GV8vG9hDD<nW7?>& z2CK1b>$p&<jfOU9<83mi(<fW#DDxPzcTsm$H0vTVD+0?CPMMX*zU{hd_n034_|51_ zg)XI<rYx_nsg?SuV6`W<-bU9}L`HuV(-f*hn&#G|rZ=vNi&kfg$R`@^C^el+3`kE5 ziuEhKSHVULaY40w6L)qItlR`Na<f%_T$RrXOOizHM+oh_8jfM6>gCu5mK@7;OQJ@@ z6?KXd-+W|P|7Tc$XA<}ZS-es~*%VH3ke`6KkRmvk+BnB5CyYw-*sQ7MFs+;#GLzbd zM~d!#dsA+f66U5?Pj|(_NToHdDoT|$d)P)!ISU$C#;ufuNf?1QY<SV$6eS1|0Q8av z*(rhZY>fd)aSLffB{XTo6hxe|YTPY=QT0WJ4ucs6Yjk!#5zS&+r+Ux-NlR-KSE$vm zOtp@*va$f^kFLTYaY-zl1u51++j6jKBW!%zQIx6ZjUmj6Tx)lEWI4kYs7PpTGFLux zXneS)w@Sy*V6<s`vxOixG<~&}y{M!vr}G+gH6fKc!a!Ty>?E**;$(9t!iDR`u<VTB z>5c*?yzV95Lq8IL?1JJA78;Nmh$ef+hkKZZ&x(|9Q}ZTo@h-0*7EcKa5A!0=@k|;D zEidmzx}zBn2nV9^FmE3&&mfH8?|=~UJep~r>)Al6W)TNlDVir#!X$V>1hLIN%&{m| z0zHVLB#BQyfZ!#C`U00PBN2%hkcCO8Z>!PZImV!?nIt;)f%@S8udLh8tl#gf)jF-& z+Wp**{uYC**V?Vony%-%uJQV=&u{*yc|8L+Ij&bo^4TKLKuArmhIzC~o+U4d0vq{x zU9Mt2E+RkLL?5bR7f2AGX~8}$8<Eo3dqE4Mb5KEGfGkSev{Ab(PFuB6yR=<9wNLxC zS33q|o3?HHwQW1MQ=7G6+bn8(Ef&$YdHc4B+W^GkhX@SlRI`trO{K15sIze%27qVo zBq>xN0B#@w22m(Da18VT4sEci!$c;W8HqGuw(TMk+oBTLyS?oqFWkbt<$J!#qOWsO zniX>&V8B2)ww+ieBE(=B%B=Kc0Fq_cS+s*Epu(|FqCT?!QBTN2>h_@>asV15p<0}; zC7*g7sQQ8y_%H$nzw=wf{mGgUY(Ne`eEFLq{wD@xh5-{uA4HExpZiK!VC)J(5S`ji zRw7R3WcWgm8zBHDL@>w|oCa+$CZlL)5`$y*Tg9QAQ#Cq@P@KQp$=Ryo*@U#r5Dv!a zm7f=zlaT@~0U)9wdl6Is0sK-u2=M?mK_6Ct`Pj0m@e%;CE{b#*#P=b^omI5S*Ut?w z#G|}F>R~H21;$~#mbNgL{<=RnhQ#-2%BkGGPs_;%Ju&nFxfKWv#B2+ofeX+K2NrHM zBhY(IHhk$6(lM0MK}*t+Xh5FaKcWG%FgbukPi97_f-<~(FqIXW3q#PIRn_g3)t7Y7 zZ<Eje<5xz^DxyIQxI7GG;0A6$41Td9ymxS$+@dpD+jVL&8PnA-$eQUU0uMNov7%UW zxIcj1fr&kWz#X*K{k{$4a6XO3?1notC5O$OFdkiYg?(S!{j4mV-2uHT^kG;DcsY9d zSf4hft{s%SB4ChxJqtdd-d(OF{?Zd;Sjj3PT*HjH*E(J|sQF#L{XIP^|DIF>9(t@< z836lILl#qGp4U0GFk|;N8+f`La0dx@v{$})6nD9hB<Px}=mT3Kjs%w~0>A)lN|yfV zoj&S0#3!R9L#AZvIiw=8UQ?|ez?zHc!9MK8e(cG<?9Kk{mj%F<i|CLQS;u-G0AL>q zZ0_fk?(M$r@&4}hKJWQ{@BRMmBcwQ#8B+(p@CpC$4L|V_fAJN+@h4(21jA%z#x-&< z-YebY|Ks3`q?Q(c?!j<shd~oUfAmGa^hy8pi2)RdArn@=^;!S*T|f3=fA(d+_G$n2 zZ9n&MfA@2r7<B*lc|Z7pfB1#J_-+3aZ2ydHm)mJ7;|t`ZK(^lf|EHb2H}&&MeXjrd z&*=J<Ar!nn6qe!py+8cLfBehe{Li2K%U}J)pZ&kz{n3B@&ma8fAO6LE6YPKf^?(2Q zzyARul)!-m3mQC#5Mi-{%QO*FwlAW@i4-eZyofQQ#*G|1Qk1kWhR2a4OPbV}Cge$p z$}-i1wv1jhW%`yuqh}N6&73ytDTBB&sL-KAFJ@X+GpWs*(3tw%r!1OGh(L>4y^1xf z)~yml5#tIrEXI@~#hMKYvTRUd(0ta!`Bth_q%oyZJ&QN*#fLLrQhoVU*;JYI{^~u9 zIPqDp&=fm1iALq)$tht7RmS#ZUAQqf(<R(_vgo49Gzp$t{}^guz*Ijs9t}IT?0uVt z&AuHG<N@4yBdc9GtTSP%RNE>uZd~eX-pnmNjM>&WRJ(KI>a5p1yY{Q0hDF;>d7owQ zTPN+?9W+{|eK+SuXRTVgVXOMa>=PD>d{Jn8uft4z*H2J^ww!(j9%zwQ`XG2%S`1p{ zn^5{_f|D|Su@)F%)md0zMD&0GK!^ZXFp@9;=<r}rrmaTPXEAXY*jp)Dln)vE@RHw* zv4wJ!j%JbNV^HRew^BXp{e|3x|K-$ITNLS|2oMsjLt>C%(R0*J`n0yCT*diB*Mbx2 z<A;a{EOTHm07z-2Xq$Z1CRZTIfQBS#)OjZwlc0e{{~D6?i6@_X_W9?Xb_&X;pMV~! zXQG7$+9;um<~gXMhEnS2q=+iIj|_)a`luLyii!rQq_Rbre1N@YTwqm2L}rfnk+{wg z5$R&YJ|6;*!*}!K5K%A>L^IDA(Xb-`v04BSfUH(NmmFuDy%lC?V^WbLJHy7w?PA`E z*)4?OCgu`{(D~GAi}bvA7e!G{Nun@t+!}{Ig~YMXE)VRJ&kXzMLj{WY=%5cH(dbh} ze!)PHVq_FSV;WTP#n_or>-zPiA9qBQPYd5c89)xu5F#P~N3;V200QJUj|w3sKrFEP z1e3r%ij@3=u@&i4i-;D~daJGTY{9FqG7G!U|F8S7Gk_xa&ipj2H}|@aE+RIYG|^PI z{PK4wtL&_gZ;p$V7%`lUcG_yM&34;vzYTZXa?8B}+I7zzgLg=7=A~v+)%2=F`Ycj1 ziR|QBwGs2o@LfJE91QF(Z}eJhGAK@@?RN~uAV%O1`9$D#QLPJIT^2q`#U>GH8xbM+ zQW=pV`5~<EzWE$&1U<kaysgdo-EPr5`zCF{;kUwJFTT4ltoy%J3_A}Q&=@SwzWNxV z`M<931G_Fc+H%U^$}<f7%s|l2{qR<H7dYAOgBQ(11ImR{Vf4G0RQvZ)4Lj>L$03iB zt*ltk7(?{<r2+)xh!-#jzzx)gptIco|4vXbjh8eet?GCNT(Bxrh!mK#$Bju5s>2-g z$nc$Az(Hw}v(LXsm^2ht<X7Ke$Ion4wIj?!290}MKDrQ%7V>Kb^FWb401=IWO=KP( zn}{y(HMmeL&R36%-gkmAFNp}FcR}*X`@U$POjxIMZ%I;%s5QfcMMM}?+Jy=ZpaR8l z@n2(z#3pVhl^hg{Sjk!%%pP=uv#m!W!66-J;KHE{0tj_En#behF@WqvgccjSPXljI zvwXNrWv9@cKJ=)weNYmCA$kCs1h=da$%An=TVcrpaEf2mhaSe#qySD45n#l@coLaM zA0^_wh}a?&0lZo$G#R3mSuy}I|A3&6LZJzLND_?HybV1x;kWx)tZ&eOQAHGiL+(`x znDr_|euM$DmI;go{4!Rp<bi;LDS}}S;v7Yy5gZte?mtZ`-61npNhnFNiGqWnBWuX8 z11?Pm{n|w+^x-e<vCKx|oX9TlH4hT)0st{k!4axQkzYmPnEs01Gjui&AS^<XOq8T9 zHWo$Ug_NS~(7{3X0n#?rrkXru&M=}g7!6A6Gs>X|JK`x38&U*U|5_Ff(4>zQ;8JNy zyIwSEk-%h#kU<Wk$Wf34nr(81D$^uW3Fl#jhi-3+vD?@@;t3__QB58Y$cGjnki<|r zEooF!Dy)Er({Wa<UVqpaoI79!Fy;XZct9H*)daWJVd<iTun1ov3=1<n;xq@zfU6?@ zxW3@@bhNRF28BEm9S%_?tjn;F{zxm7Ywpu0u6jvWS1T3NnJGv501?&nL5SJ)3<1fw zLK3NvOewMeO+}R2?~n@s2b>aW5ow2Dbzv*JMwhuOXk1B+h&@q;Q*geGh9YkHuSHCi zXwpp@bQQ=m03bjaR+#3D6#oR<{65Az7yFAoHPfX<>h~)BY3+0{*xISkRyx(x2N&!+ z;EnKTx)H8$STMuSMZ&06tU8^Ag95SBqzZKO(_oUS*|IEtm?N8b?TTMK6#1F!Z#-#F zg%%9sljIXa(Rop|wiKTnzqmU{5wek20uBE5WG9N;Ok>)0WR5H&INb!Wfdk}PE7K#& z6&@RxzwD9IZYePH<BW}a;$kpM<R~K+F_KnQKbWXFzuoE3obL>k%#hVT=W;Dlyou+E z@JAUNM6H=uW9LA>&x?vyv`eb2CD+CWBC1MspxNA{8M_B`MBQ?usR_+Ae_F^#niy38 zry6}Sc+^JXiNz|dB>!uT`h7c{wVL(uoWhh&Fla_(jos2(!4O*5gf2|6kNqOo@_O0I z4z{y@GVGrOJKEHqwzZ*sZE0hB+uH7SwYd%LaARh}3-*a!%B-B1*m}|4SvQxXVI+yY z**H#tNd3-j>#zDP!(8&r#oSG{H*pZ)Le?`>*flZa5Ov)T`A>)8)9+OiJWkz#_r!&) z485fqUFNQk#pW~W5MwAnpBbG#A$;-sQZVH(KJCR=g-EFIjYI3Ea$q=&u?;7Z<!$1T zx_SQL2?hAi<$g16J<aN`)*C9+66<Gx9waYA{lky$_>xU$TUQ&{)+@p}p@HmL1t(|f zI;u0-D?H^5t>P-{V??#6!JK3?mytDep?9C-bU+-ro6%>FaMc5JZ$xVIwetuAvs4^q z)0pnS)p~hgihQlz9>_#L0C=eTKHzJ*-E^CO%jjgCR2Ix`5r{i7JsM8iy*d8tSH{km z{E(w{%n|dksWt8ME9OLYdfu!0X4Lf22%D9x2v)!Z0C3Pq!*6Sk$cjcgmW4HL=^Lm- zUlO~@n6amI>|=y`05onUBE`83Yg_|BI;o~FD3vS?j~!FbLi97lF_j+6TK>`GdMp9# zmAZoKKCw1AB94R!3DijA$1<DrM_h9NCG;SS|8aY;m1G*E6oA(xI)M`ukq=UJ5weps zDj+56P&2?aKKw#327@rTv@kQ$RT6<uOQvbll1Q7zND;vcMzlS!<2%lSg5+~FK=4EV zLIw1cgZ&ab!;?|M@HE(EFB_vTLj;86;{^qC3QBc7xCARVXaV`)LK&40RPcerk`Gp} zgZ$EiVYq`R2OhTffTI;nbyp!w*IKO6b|Gb476B!ygFgBohBsw~m2){sHG2laIe~*| zinLlprB4}SCR4RlQp13&Gc3)+J?9fSZ=f^!KnwUHi6PZj@kcMKL`4T<EW3~ii^W++ zRA1#25jW)_ofuWKlU62_M-j0LrMEQB|8yWkwuU`b4-=wmFc=sbgd~A;f*Z&(O>~0o z5J~^?2eCweG^hd&R5K|eK@=ogg%)vE2X-?ULd3F+6TyKu5{(b!Uda?oIZz+@z)rFA zT%{yQ^ap?b15WH9KvIN`W1tMiG7nUMRD;D1<24W8m^52x0rOCY`p}Hx=s^3jkI954 zyx=kqgofL}ce}__6jEY=hZLd%6(DzozgJ(egD?3|1-KN3%iuUvgcP8}M>Q0P`VmMm zFi86lKdRM{=!QsHCvpGc2PGs>tSAwCbyM<?Su)cOIY3L1a0h!Nl6(~rI2bJRl2Q2r z0C2QIbCi@M^)H--Qb14(&H|L5|MVU5kcAo;hRRh#MY)O(a8rkMUzu<)7FkUZI2?7C zO#lLMGqeJ;^DZxRfcU}-)<X!kvOEJB4e#VxLby3%@Fb?;b*aW$ti_Fv^iY>IGYlh8 zI0aXPkWiO{3_9=(K}dqmHJUdvPWk{?QwdB*U@zwsPnv`x%~dSaH8{?+gqJy+`(RyN zNSF+nm`QUvHH8d`Ig#2SaB|60<+66_(r;%(b29{ehzCRZzygt=0==^<zqLEq<3_~Q zhzPQR67e~y#Ts5Bb94B5lGjv46FVhjoeuB`sR&&QSd2>3p5=Ia)3pvyLzYf7FT3(o z|FV~4s4KnVVBhgXJF_g5|1(z>Ko3?B3GAs4-5H<96(R?a9~&hD6`CRy=X%KbKJj)O zWR{5k1rs%45(ZhEJXIRSMnAK~Yg_VXGs;tXXoViJefcGIAo@jrXBT$qaH}F5CXu5b zR!Dt8Zlfbq)q!FvfOs8|4|NDzX2+xN!ym8~qyA-gC^~EE!6XV+qDy*#RmvL`Nv7kH zdu)eh+UR7qhHIbqazRxXwxt}<ai+Mj32k_%-SQH8wrTRA6mcPGvo>W{CZ<aUCKj`& zv(X)kil!QNp623t=k|7L_EnLYk&Rauj=CfA!>Mh8C6Gy}8+W3cL1^oC6mvJCKcSNz z#}l7A8k>*|uo@?A!q{V=@g<QKCN<Yun-(B>xnZ<A851U~J~C+Waa%lwXqC!kExLB{ zaj2eGtd21@12?S)LLnyC83MwpkfvIxS0TFAZ9XP!$>tNw_KVUcuF;ll-{x)Y3a{W6 zukR|a;wElXRzI#~96@y&{d%p6QE~tJAezTFs}~=IX03|Wbx1K2@@8ttx^)7Z7mX^h z400rGSFoK%7ra`cz}8=kmlPE{v7#li`Y~>i>KZRXsl>5vEw~d}f@bcakz87`Vo|OC zHA@~!W*tqkoDa)&lBQ3X+Fv_~vs%F;D_XRpu?!b$su0JK=3;ADf@U|#B}NxyNy`<- ziM82LNWW%dN;<S|!LgKjmvIPbo8cq%aU)@~ZXUX|%yFd<x2>cajAJ@#UJ7<{=wul} z9Tag<6A=ti(;RBTCKG3-Z+ja@(rMa67yk8gf)kR!g^NPAV_(O5ANzTVIwlVWE1ZkC zBf&nOdmHu8f@210sWPLc3mQ)n2q`4EM^>l^_kz_|F%%XoPqPcQLXYmaG$|8(Rudx4 zLWDB|GvF5@KOi$tLOAdj3^>G8^H6_A6D)GIGy;$eGNUg@`(isPy0Ebz<B4ehsfTEs z_aya&nwnF10MI+Y%Pdo+e7>SH?EpQ-(tOa%ENqLdE}E?5DIY|8zE(v%PN;|Hv@OB3 z4~!5?#sV<v!+~08Uou5J>ySlCcrW>qP`mRyx-tgPU<l!(z*I1~Tn0_j)V;Eic28S( z^0u5$F($1W42UCw`7%5&6%mV|RwGzGAT=-rb1-U@g5(jN|B|YfD~uYVdm&p9wE{Ft zgHbXxCG?b_gM*SNB1A8wI?XjhohS^>8wXRAG^xl=EtEt=Bqc2L22MO@6kEcw5lu&D zce)l}F{oRA$cJKBHFyX<b=*nuJHM7=R4>UJgGdpd<6l#u!X2wWgTq7rw@aYQ)JzDP zBaHA+U2symqdAJOF<lrU?S)G42a4iVOu?JL1w@2h2txVb1<ybR_IYPs!K}~H5-mXt zpFj+mAj_Fh%ejopyR6H-%*(&*%fSrH!z|3jOw7k@%*l+*%UsLD(1xvnU={<U9||i- z)RzJIF@S(eG`tTsjLppGj3UC2&v+x36vBZV0~5p&7Bnrjdupxab|_bi5>X3NWi0X_ zLODglQrs^%Qa-@NGQlZWe>;^MWt9-zOF1x7%~M2s^eYZEymwX`n&8Y8P0<%^(HV`= z8?DhD&Cwt2(ILIj$#BsmJq)05(kD#}vucq?YQ!DKv#LUj#zm6<ZY4rD6-@e2SvTcK zD7l5h@<|TeM~9`oqY;xcxeq(mO$TOo0U~cmHztg5N@`o6Nwb*+TtXd8f7TOGHgm-~ z6AY&bSpB)02#Hw-BbvaYH1d*IQV~jNjMUTw5$dLHcM%;DbJvts*X*&^dCk{P_Sbmb z*Mkk%er?!<E!c&P*m|wljh)z!{by|mAZ<1rD=RT$f<%6FFoS8q^isp&!`X$2#qw*I zh$&BssU7w-5iVOlg?30Ua<z~Z09gbuB{L%N<p9J`U+0BOgF`GVV9y`Zz?-zljI5j2 zHImEHUh~jhz&V=NlMH5=ylI>nhwa#m{n*&8-GRN`)}7t|e?8c_<<wRS7=VEk^>E%0 z5fl5c-WDPiq)QLxtq<ru-|D?(?G4}g-4^Ga-t2wfTjt*J{oeaM-~GMb`2F4kPTvb| z-~O!{2_D}B&fwEwa~XDJrY3<;BBit-CD|!YeWVY=q$}msPQDU}+j&)4^_|%f#1kTE z)aQ1oBD1!;Gp*Z8g0;pG;mU1M6TP?$5C`N~`mh}<<U}66yw?^A?j%4l-VWR3PwwPV z4&_rW<yB7QS8nB5j^+M^Dx<2U9y=EvHfpik8D^vuk11+;m_2@#;}TID1xr8dJ>R)? z-gG|a_kHJb4&Qoi=X+k~c<$$U{^$PvtSiiWNFL<>i7vZ6OKz~{=!zb`i!SMmPU)-? z>6adN?VP1cDq@y~XN4#qhYV*=*XBXt%7>nCkdEl6-sqPORt>99P9fxvZgiCn<Vl+9 zjyvfxZR@<g>nzgi!2at-hhcuxc=r?PVm@kF(#|)w)RKDPrM?n%=IV4y>(*ZFSvKsd z(cTlI<dObk!oj#rr>TL8Kjj|o?M&|GuI{zV?&%)x>wfO<{_dEXaVgths8M|cVrzr; zc%-w9-zvw_eiEl{YC>9XG`6oZA?vP6eJui1GvObDfv68Z>gkf|<c_-b10c}MvX&cb zW45Z6ZMhw}ZyaZG2bZYd8l)roA0J<RlB%zr9S8GZC-W-LZ<3Adf;UzuZ)>fVVZsRJ zhP2)UZxU~AxqoICbjtA+GrKbSap!5O66jh&<#0|mxBV*X`U=lozpADNs9irCCcm#* z7q+@5VlmGe6hHRdnsw^ZXYxVuo~I<hrY@A)w3iDV6>_9N3#^%%uz{9ODu2X{o9do! z^cle;g}-60+GbKe_b*bOW7Txpu4;((v~HInW&iHu{R-fJHVik=Vw3jo{~-)Bz`u=) z@^m2#nh^BL&<>)%Btvrt1acvlJ37NKFQKmqNQ$y%#tR~|rmN~Vtk?R+@n>YuCC&_X znqT&&`*{7nBDmG~h)8#dUlKb`^Bw8V+z&XzVf)9?xWhp$#j$u{7v|sZYOLBK5O0A? zAM35<V}<AX=SuT4Digwx1I5M@a|#g9l+{xfjh-@kjNmMz7fsnfW%F);f~Zef7*Grg z9%Q%-8a;;4G%kXptlf=J%JeO>sF7tsgv;3FfC%#AGG+T75;XWwp~rdx2@VvhOk<c~ z4ucZZ*$|;aok4Aa)VI&-RjgUHZspq5>;G4<Va1NcIxHm9oJ1KqY)B6p!If3X&ZS$| z?p?fj_3pJAirB-7IH|tWxb&e;wH)0N9Ew<{#-5CeJ~g`d@J7f^4JXF=R^Z#pDuF^9 zh9gZF9GV0ULoFuML18z<NTL}D$iYQGJWn+WZISFB^mw68qb!+>NvJg~OD0COFflPo zuDmJoAT&m()g%jZT81X0(8G)YMUa<l+RALJ%x#fqTK2Nj43jM;qeX%r1uk;l*5lx~ z)=G;d0_oxFKm-#EYne=N0_?$u4ua?*2LanBsC`(<uqq8TjHVuaqS>dReO4-QnG;9+ z(8Pv7M3Kc6HOwh4ol-OrMi*6Fs{h6v)2h)&Ab%7xNFs+cvPdM4R5D2>RWvZCCr8|8 zlVOZ%i87AfL(DM3+#*aR_=XA!KEy!sa;1Y-dP*^vh5`v8_@;8{&4UaQ3?c5+*ax~$ z<`DyqJ!u+7j7|25q>E_Uv5%fGUNb7Dv_M=Wj(w8JA)0x@*n~SE_F)GHP#6WJof)Fh zhom_v15u%UPSSHGQ2Ydx7eQUyr<P0G!9f{f8bxcudRSt0P(VlQji8QB{mZGrAXW3A zrb5E0rw9QX3fP^p4J}n}A$|1Q3d03VTnfiEw_J3;RhQg#A%yTRD?2jNBL_u72sFtq z3=zZ_Q#6pJdJNidU=Iy6b^jlM4}Nh)5i`8d)PNsWabglfq}ZyQ_IXR=3$3chV~{%* z`Qwp8Ci!HOQ!aUBlv!4}Wtde)(P5fVgvKulp@mc@_ZkE2CedQD3@2$@Vv|6DG=d2y zH8Ueq8PAAj_9cUQ>WMIsPD*K>?}WLOo=i9K`Yo@ap44lds*?~VlG>6)jEPtaWtn+W zyJ(YOWQ#$J+pM$qI%P;A4Tr675c}(VG#z^xVa8xDj>ZM5j4ieTkAt3M3{TpkI&D&> zkWlSZGe9&yj2ASy6jXin1T#?=>W4mplb|eN&p0Q56Q)?i8~eQxMG`@x_(kAFq{>Nz z4SZ`~=KBp^#GHD(5dWGQJ&UVqi!=`E`i8Q%o+a#a`aZ<&#or$M^0kMCdsEF{AN}^# zXW#qttD12}4eQzDlY1Tf&;O|jjcE=-j7DVltN{j%PF=d!P%J_%!9);FMuW+Ov~?}o zWv)Ej2}R?K(i}T{3MU?11~1+~5{S42O$hmkFjC_uP1KDdx{8&3Xw@(Ts)~gR$&_ja z1qu>22Z%UeNZCr5hDaEp9&OQ<Qv}DFj7SJ4ZbArBC^s1YFp+0#5gzNj_{F>MN_LD% zVQ(lTyLq*ULnU&a@!IGw-x1G7abzQgl6S}48SG#B2pAttwJ?6E=yz-UomDzyqnRDD zkOV`dAqgo*M*l8Sk&v8ZiXutLsssgR8d+gao&^)90L@I5u@|x+wLr=Q?P(GmibfDK zI;mM_LXLUJ6)7~27^p!R!k7UxWTgyR`O-PQaa=@XlM*n6CNymm2BPFfA6>eTIhvA( zbD9I5zlp1DnTsY(7*&#B!jPB+kp~W3^PrbZC?RmDN9HyGHQFW3Udmv^U!rmoSbjt) zpt&a){rOL@C<8p5fzUw?Lc4NFj(R+59=~#AF%0d<jTkdzigvWIjYZFo2D<3<ruQ+3 zC5)pO{aEyLv?1v&1xGO2V@j7-yd1R!r5XL`N{iQ0nyM70ES+gdYicw7xvpGCgOk!+ z5+TXK3I9%@fr)$m*2G7>2~L%JPqyw<RHbU`L2KKHal~*M!Zl<Vi!i61TsWH?goF_} z09r^$X_VmrK_6kb!D);jk>n6gAM|ieH0Z+xIDiIl6#-@#fIy!~h#{<)3WH+Js@U{E ztq^P#T0$Q+oFC9oilI5EdWgZ#)1gH&Hpvgk0D4-~S_NJZx#zUTCChpBE~X6oSWY)4 zu;`I=kSGnQ9}9WAkJgAs3#BQKLdr1=ktm|nd*1GxyIkisx4F=j?nI|cz2sU~yA!ix z_XY+coK?#sfT>gLQst$|^@eD0%2GTZ1)Bem*C9p~NN17ysQ9)isb%cQgBoU)mS9Cq zS^tqxAucCgrMj}BSeY4siNU*!S*5*MT}Fem;vTHLiNFk*lvD*fp$7Brs_8;eCdOo# zw%ExtXz@>KUHngd4Afl)UDHx4l-t_YR$p?gSd0kSFXMVNV0yfxz>tgGg#vfDI$my$ zO?2CNj3FAl2!$V`yItjC7t31~GMB5{<tvAIDIXGUPNG32sPZI2O0(TnB}8Kh&6mRL zB`?w3lVF1qttfZ85}PHnRmtU<t2f@NyJC|DIbW4sT;=Mz22J6oy31UImUL{SY^`%; z)m@!&pwcpN&lD?WH$aKhLSKAp)`6$S$g)?s=rlP#YOhjT06+i`os)Uc8UO+ah5sF8 z6kLp+h(lEo7{Fv5J>Xu{r%e{FhGe~>J_dysDqyP|3%N)o<FAp}rf7|>ZS9$5d)wf) z(T>QMycLB))v&v<R2@V{37K-eQmfWb@r$mtwbCuGTU(YKly7&9NrE><XuQG2->c9# zX>>l<QPrtwHrt!4V#?OUw>7T_)0n*IN)<vA{H{o0CP4nlo|OiIYLqL8R}gXtdu5kS zEaC1(!dO8lO0<XvRB8+ht;$9vR<WI;h}j_}^1<w=WRfDxp>Y{<O@WNCtKhiI!A<tY z4yi^S7u$Xh`xhJ^n#X4Q@#`lA?i&qMBQz`X)k<x2yX(C+0KS~<4VSdR5C6{gch_0d zjn;Ig>%DPFXSL-@WAvu&9aTkRI`C0lyrcp6tu!s(e}7j-Qb;Qr&<3SIrOrw)D0LOj zr(7$U0>G~Sn{pW=v}xN)<$FIyK1EP!MzLoH92Nlp1k5cMrH{kGa7}9mpokr%2S5Ta z)ysMW!}#+kRW#VK{8A-90m@JW@d5CI8AMxP(5MCREf9=O?L!ep*hj7b5d8AbASb(k zzVii;jOZ)>L%tU>^<XqH6Gc?S9tFB{gG{0tX|DV8t{v$=-+Gbo^1F6Xm(AKQP^vdd za}a8IGuCsvWO|)83pjJB9fy0f3gNp}N*BOmmsFv=zI%{s!Iq8tH~(eQ7D|JV$*Y~L zg1d(x22CIxc>xW<8V#N}yQ_#Y9O8o06Fq&9GSR!RDq%OsiyZ_rlaD~RdYA_mD7Jmr zg$f7;0RRP0DU}gXgiWwAdeDM6(1%@k0OzxS@?)!c$bm|sf}C4JK9UDBT*HrWLjWU$ zJ4iz<^CNaJLr?j>h0q6GFamnm0zfH4Ou3YKu)}27IYT&wHEhG26T4%ps6tXBt(!WB z!Nji{wk1=#Z=<Lo+dob;vYglip<26Zp+KxsCS+;58DqgY!$1n0Jg6c(y=%O>6TuiH zG*&b!z&k;78b%o8yI6!l2uVS}+bm&3uya|PWg(0JDYd2W8~>*0yw59#BPc)O^TT$~ zf?Bh=eb5Es3jj!D!+i*boU1<K`vG*!3U(~LBbWzp3;>&}z1t(4aV*Dkv<h`hLjbda zXwZev3q8G94$iVMGnubDD;JTGLYsq_V6XsTcmNDhgyql&MSz1Ckq0i6!e|f%j+_TX zA<1aig*PY_=8FdBTRucV$xC60*wY8*BbcgKL*b*yP8mob;2M^k2P-fIlZ46RLk2cn zNti4MLF%KPYMw6JI%Tt%<}xnjVKU|-MKaqM0+cQ0$uWcQi`5D|TQtE<`^9Gbz(S+6 ze$&MlJUp_TF<p#HWE4ThTQd}FytXW~#$!fVTtR1SM*n5_v{G}5)?y;V5H0~j6nzlF zKir3W=z<cdf>TIG2(SuW$isbDgk{JF8YmGvv<gMAxqL9ftq4uWv;vz8hRO^E7SO_# z)CF-|giy!_FEAA<sLXuO0RRgG=c`P8V1yy8i<OHBd!ZJ++&n!ph-47R=s8IXSO@Y8 zn9D2?LMXihC=_9^K6?y3OG(5=Y(z{^fo}B9F-QggAO@ZA!Zs|u9MHn0pvTg)fIfVS z@f*H!?2{b$&XQDt+|#-5lro2^L|Fs7qyr?L5-H)bIvr`AJ-VZe(K4*#F6uF|hS(p& zd&|7kMH!T;z~j5NyfL-pH^<AFgX23B<v6(P(Enge(O^VNZ&5%I&Ct7(JYwV(!6c9s zf(vQHQJmlk=wt`-^At+ahfBeVJ`@pMD3srvO*TYHBh*MGodK?Z(yTbrbwESV3<ZKL z5nEu=DtrSedraODNPQ4UdLYfbaGmjjKrEs+{Ms0cAp}5S35|>cc7T8xS%i#?z4DWR zXpjfv!wT7?$&$>0Na&MZ0>V~F0ADiHO_+xOxB+6&NI+Rb5m8N93kLFIhYF}d6*vGD zxT`?@K}WUJHDo?t8iPoPgD6u<nd%U+lS&b3x?k(4h>1|%Ql9$zn5+Y-2K5l%iYODw zm`(VLuxv%W)IhS7(ODcz4^39PThSVgOaDR(mt&p94IELqWYNVlMq}JoaOFFD%9g6h zB0Hf9GSLcsFa$sKM@oq@tC+S(&AD;JOwHuXd?15)(9J9@Kk)>BBE<^R+y`EOfqC7N zARR|7jm_Egf@c^5dN@jS)Cb<ISA*1x1`(jQ`k8wnC1@G0cBnavz&TUdf-2)B-oZnC z7=}{Ohe9|+1V{!%sg$Es0Ub!hN|91%IMR8rSxgCleTV@~@WSKM30{z^fHBEELBp9D zM3+58Moos>)Q3ilh)Y?AAm~}$v=ku|Q2W~{1YH<WTprq@5rsJ^-4a`-)4Hak!v1>; zP*^v>bUauD*Iks$zO-9`vO!`XhW}ykTfo(XzZKlR9o)aogud-t#0A`8(1gOZ!Nz6W zzIEKgRouz-Tf%kR#HC!#?cB*7T+1cg%U#^fja<GZ-M@X@$4%YTy<FCXT*_748{{I< z5s=aenjP5+=)4MBn9PX96af&CBURWEVFXB2Rs6gPKFtSooJaxVQ;_tOH>^ynScE&6 z&fh%VLj}S!9a9mR2Oy{gany^jtS?!T7dL&B;j)TkptS%{1A&3h+=~l#w8w^!Ur?X| z>jMA_n1>Z`O_ijH@>{<D<wmQx0YVtVo-I8GusQ14g*bQ%d4Pbe(}hlfPX{Oz|Ft<& z9RrpSgJk$$Oz8rVK%TH&y8q+qu_emHvJKm+JTi~c9+hHBV5L=J>$+GAg<(M4$aUPs zCEd$ST*MVzAI99oP2AMg+#u##Vi@Ao<>Ad`Tp|u!*DYcucH9zSBdFsYt2h`_`7hr2 zVlBoY9O`1Ivp=XyV~$CkgF$1c>$x@dVqya@gn?tLpdL34k<^(`ju8<)_TxG}m^03b z2^FgXF$f(*i!BN@3%iQNY?#p$k<lza1TYmvpx!Ob%*|W@+?3K1QO|iG1L4I|<+V9^ zsAP?V08=T1dt}2Tt=>)6&D?ZMPo`Mj!8yJVsLJTCacRhw_^><nsVvUo`D3tHb7V4u z<SY0ucEHl^x{CZUV_#?h+6<9Y0_&LkX&5-2nKF(rlX@uuOJe{`wyM}>eG%3dd6-OE zo*WZJVtYN{>DmVcsRfPagz>rDSqUonuhiifjzQx*rsFsMVv9K#J<eh@E@MFk<T=I) zp7Uoej{oC+PPnTG&T#IEiEc0u37KK;XfxJ|h*sk%)e3qxEw3=?t}rc<ndpTwX~7Jj zdwNA2tq849ga9ZOeei?*wE!|y0SCwgfmDRxE#BFz0-GzshB3{2_*Vq5Fe<&3^8;$* z0fX}k1)-kI%&fASb4*0Z2mSRvtDuE#<cn*)39hme2!tnDdyA@>;T1bT7SSF)D$|W{ zz6t;z5b2{l`lDE*<_nQjA3+~<<D=q&lD6KEg*iLoSqYs&o_rR%Kl&&)$`NhL7`$HJ z;=vIlTeh|JE#8t6Sgm6e(c#>=<FEi@lD-O*uIRiF<OLIGyD(|l#){Qe9hFw?v8e5n zKK~HimM~2qxkFwPkx&!OGZC-Qhh_djQa-}Em<Kd`<Xj$x*Em;#f;YQFBi@QN?3&|^ z>0=y55jpB^ZkCb{*_iD5n2Pahgo%NH=()w_x;k##kHL`bhV1TX+gP1dquXwQ;g=gO zGLBjirwgRuk+nc-sD>KQN1B-23NAhhg-_dy-o|aNxNWh}Z3|~^4Hv!7>cN?g>CEG& z;|7HPl85Eq@UbxQo-G!>klUoXmWAt#H<^}Qtr5{#wgxZo;<|5e2D%?B@B_$-dcc89 zn7<s!Zv3vsjxjUBmawul(7mqb0Uaq}))2Nfm>t_4pXza&bQl=H=l`bRjS>-5ME`L! zKXWt}3xO)REdi3zdWqakb2%5Vfl8xV8YRy8z>k2gXbZdTYFi@1>wSrDDohxX!JT~o z0Ii@09GKKfyf)vdsVq;iM#4m4i{XqRk$JA8wIy&H4_5kfm>jXK=Rz`IThKcSiejB} zR&R9_H?bY0j#nJ+(1IFQXZ34+z;Yp|8CNn`oz?BuKEiJ2U_<o=_qL|<k&RYwtPtA# zUOKRqZ?>KoV6)2L`b0sm_Gi=b`t~}x2A>iUb}wIS?F)2|%IAI1;Rw5Rc5nB8x>3?0 zicmY(a&>nzH;92k6Q&v<8dEa~S>FO&Ye28#Pi*ip8}_MV9@AzCW{<i?=l}HLsqrU+ z_DkOpWz)pacBsupa_0Ij>M89->h`b&^|9@?86mUh(VtJScb0GY1ks1TkP4+B63LK? zj&S)64@<O6!Flo)kJ)&(-spna#7*44{Np)pHg`RW=Y0tB3cmpp(?lhUY%4puhp~ED z%d%xNbz_@nS?#*AJ3EBWsbQ58DIX-Jlpd5qa0s7poPT?`7xHKjOtc{G^vWlxi2IZa z%sV+Kdnt-|8VY<ewj^_MwbwQ<)Gp2rZ3HE{ME441kO5ogbFz<TsaqbZJNG6}P+~84 zP)z!$JLk5hBLFm*gU2JE%fwG?Vf}e9y?=e!&kC~`IUGgg!-NQ)i2walGm8|{JbEad z6e9{np7Vw`?P^9(-DhqH_vqwres>q6qLCJJ1rQN;{(thTDkHU#L*!)PB8Fh~7)WjO z)(OeCew5Q;^H2YF|Lx7IU8lhNjZlAo0*|PGCx}4nA0bSoBz~>HV}RHfjov<GH;C;^ zsBj^}h7KP>j3{v;#flaqZW<P?-o=g{KY|P?awN%;CKc+_q)%BrXf5k0)3=PCOO`cZ z7HoNPC(oV__0`L?Oj*IA%4!;=7mcVgddpV&?0H}z(0v?<K81+`Vbrc(d4}Tpbu8Jk zX3s*5MvUper!$wng!Xo2OQ&e>o>j{-=1jLrY2w^#lq24b0sj=%izcvWJ()y_-5^?c za@kOsBva0;c{5&mnQ}5^+H$7Lnr@kLPA$^&GPz1cLvzaX>Fn34A;w6kFCjsK$_5Tp zHdMy#;vqL-Hm-a*^M{$@I(1y|?@ZW#n`2)XZ5ZjmuV3>09{Xu_0EiV6jmG7M4E8u~ ztUoJrpVI6i!zQ<{fB)TO8l9E~lT6f=CYnwBHK)mM(b)uEPDnMFpKinqqscNTQK$(q zikWrTKG4u7+CiGpvlfCLWptv7D|WTkOYq%rgBUm9umz1_$Oxlc^PQ9r8T;@O3X35L zMc`=k%;wmDJ6_0;J{$5TS(A8qcvS#6yq4RL`h^AJmiAwQS&=^5Ev3{XnM{)AnQF3$ zW?fS*)D9Q`1OP`z!2kfnUGr!G0007<(wTx03fS741GWWNLr^NTU~HH1mI<R6Di|p- zLhYkZF}#72>8A7v$)i32>;{c80b~*bF)nSzkTTp+b?K!~tu;)iyveHAlak)LPlcFC zMvstTIuyz<#3Gw)L;nqg#w5-{`)nr8y7BBJO%2qLJS+^Wh!NQ7GX{s0twkGc55iPe zTLDTa7H_n2DAqi1?gOQ;nZ}zCQ7e5a*^~NaN{ol6BBaa#Fe#&DLhdL=Pp_he@}#bs zBm^Z?MbUSmy`eT~qOuBYlF3FN|C79BV$U)4tQcspjK<0<yS(xwu8pf3Ax9`g4<*se zqk^9aD8?rM4+Nb<LctJCpCSO{01Y92`uT&;006xYJ222WY^F~`ZA3d*2OuOna4Z4< z4j1YIb=djLa5T{K7@esVJm)YjJ4sIzjXpxjglL3qG3EDeu`=YaUHWpE-^KshHQ#(l zUdZD<ooY%SG%FMofJT|hFpOLy2K*3a@K#(n$GXMD)xY&xPH(bdWm>ZAD?TY28ViYm z`$A|0=42ItGL%o;!2qF;7IEye%LDX@t4|dPWU2`A!dQ@yB0>s(bn#XQDGc5UU7u+c z-4o4D*!#>gLo~V!%g8D7|1@94^6={#NHlCOG!OI^ac3H$NEW1TLn+kZ7BVUN07oJ7 zP)IUz6);UyXhUNHm{E$dt62ezC;?Cg0F==V4h<s!2vgVrb<-q$2uUmqqfashm5>Tm zC?OPE7<!80E@c_Zb+g+ccKovxndFWsVhGR;j50)+5F~#ss98ehK?cPH;|TL$LC~!5 zKBMj84P!vx5~-qyO`z|I`v}Ij6mmBweUTw&3`X^$7Ybe6AybQ3Mm}_qJT2aj2D+J> z6YciBh@5OFeG3h`P_v)}7OrN=7>L$>!<&3b?va^_+)ya!uT3FpA2-+_#(;PkWr$&4 zpIVd&SI4^5=>v?S|9Z-&{w1AADr*zT;2|yd!<_-4p+PrD7c@eN6EXaSiO$oSLh>;+ z0W4!41JD&9Lcz9h36Ez2U?MHzm=7xWNdVo$S`7ZUk7_1F7~CwMoe}~^U4U^PjEGnl zo-qcv?IR!J%9Q<#=_eV4Vjj!0h>Hvqm$zUGfWiTwlNfb4)s1pq6tq||BqteIIc`d~ zg6NbKT99SzQW?a+0pdV~k`qSEVz;`LG9=@#3vKRRzG{+$kd?z)!jw5=0#FcJazvLD zktt{ZoRbKFyoBU~k3X{71M)#d^idIhkq8Anj5d!hq9l#;u%p#<ur0;N0|ICS;}o%~ zRd%#-AB%Wn{~Yx(N47~KVr`r19(guYdE{Ui`<#eO`Ug<Z1n@1<>5i8g(m+l0btS_{ z&Z~&QD8Y6Lh7h!n#4M>BOfm{s6B-5%GLeQ*PRL`8dRM)m0V`aAqH<4iU_mNXF<t49 zSern|;9~09)YPshGn$c%X0#qLtOo~S5QAG<tH2e6Y7u&Z8&-7yjY8Nd7+Teb3bYDO zeG~$DNVA?b=Ly$&AV6=5sM<ml5l8ImjSxiBhatpPH(CtK5bx81R^`dFdFrE{b+cLm z^vT4CxG<nQ+DlucBbu+cOCP|yh>R{PiI=rZ3@cdKfnC-z2P1e44@NM88|+|~rJ=!$ zK*MEQ_|{+wLpa1B9<hi^OyUtMtR$9M%xhbmnG2z;Ah}aW7#v-7R2$vX4lc!tdvOaM zoI-JjVxbhb1gAiO;xF#*DN<a5Yq8>12wDQP#oZlBfs&8!w}0%}J$rWN-kI5RcJDmT zGnD$akulbCQsgH2A#vKzkXE&4q~Z_q^yIbSA1_p}6#=`|#0t26PV$sMfE^&NLl0{l z2FC)>7ZUJJ+v*S*N3k>kRSOt0Yi}byW9?qpV&)Yyd@QRDL$|f}K`M<l{vF5HUP`6Y z8u-fpG{zR^kk)|fKNBZAVXx7d%-V#h8PzHOp9e{{a*03<(@!1t$gQ<7rG0rf$0Tap zaL43*+Y$EfV`DlePW3a2>~469W}dcW{Fn|g&j9@5ouY$e%repcxD#Eln=NsK_I&D3 z)kF-nNtcF2m;lUwG4U7yj{si4^X7`Kh4%IT4*(zl015!W000C4fC2yk03ZkegaUvt z01yEHq5xn301N_vp#U%p07d}7C_o4R5CQ^(Kmj2zKnMa5f&#z+05}K$hXUX*02~2; zqX0+%00{yhp#UTdfJ6Y0sOM(`P#^#b3P8aCC<FlYeDZ7?1Oh-o02l~>c)kV#0zg0z z2nYoMVIUv^1Vn+r01y}i0z*My7zm62fl;6k04M|m3W0(`V4x5LC<Fz913+*P2o43o zVIVjH1V@3801y%cLP9}E7zl{~AyFU{0E7a8P*4yG20|e~sOND!Pa6aUK%oE_6o7ah z78D480zpt96bghvfe0uN1qB13U=S1xg@R#FFaiojK|=u05D+v33JrllLlDpq6ci4C z!a-0t6bgqy;Rq-k1w{g&NDveWg(6{4Bm#;=K~VrG3Is(#p(q#>g@B@-UGVI25DWl? z0bnoy;@KlGAOHpg!GKU05C#JxU_cZM41j?_FfbGbhQYuH7#IZ$0l-2)un;IL1O^L1 zz(P<kH~<C*!QfCB90r3UU~m)+34kF%FeDU)gu##q7!n0T0bnQ)3<ZUuU@#N{hI;n? zbFe`O02Bd$ApnTyU?6}11Q3J(LJ>e10*F8WQ3x;q0R|z!Py`r;03#4!6e0wG2mv8N zpokC{A_Rd5K_TD(1RR8bLlJNo0**kyQ3xaefdnCtPy`Z&Kq3%G6aoc6pg;%|6oG;v zPzVGH_5X?R9F1p}Jdf-7;&Unh0Vp5{1%#r2Fcc7h0-{i0016C3fuSfc3<XA@z$jD* z02Km4g+NguFjNQv6@o&+0Vp^K1&5;GFcchtf}>DK01630A)zQF4249XkpFM&Inkb@ z{p|ARdH>J&|FZsnJ6sgt4<5Z*Lt%e7E*X#6SVPfZGzqIlo?2t^a6C20X?d)%WHgyc zF^*onsq}j~mjT@DdsEp&wxF%PAx8>S#^J$j;Wv&e=VXwW$Km!tGgPNYCKg@P|7w4# z^i8-FnD%Dhuu>~kmantrK)1%cRe#byvwFTBT3c*R+s6C5S-pQ?<=)73xy9maVN&xe z&swAF;ynd$(ao|c?Bx-|ahAtsUp&RDsMmh{RuhpZC`Ur}mBn-tt3i)TPRs68B0C23 zx8b_MB6=i|mehHLb6$hT**5Isty>9(>7NCLu208nE+26AT+MDh!rE$gqb483UDwAe z#Kr4c#N;>XznY>{85v$*txR><X3OUJ-yePd8Lc|a5bU>nGW-zr#DIF-+`6F3`)?1e z{mUl|epNGXoI3l}u(Q;~FJY%hPV2B=vs6rBKX)pu!!KlvH=>A0af>3+eeNv1J6rdW z`s$((GQF1B>vWx_S#nk#(5)e>v+Qm8mX0uy_`JS2_WSuH^V#;?#IN5ZO2IOWcx48X zJm77kHyqq$S+8k-K9{tG-|yrY<KscoWo7ZUv!QVZ<=GHY8jkFbX;siXUs~n80-q+w zom_8y?usw|{51P8zw)Zeq97I+S3*1^PgO~V!XaC6j!wr;dG;o5Wx1;-k5gGMdu&lO zw(Mw8AeJy{-zk>-P~16&BMEmis5RIZSWnXiXRP~%@4Ob#KQ6`FP{R{&3<s*@u+(s- zskt=G_3#wePO$uTX=|~GFK+Abe5i?Q3=25<x)n81*NRa2&EL2_=S?OAvlCYD`FlE1 z-}~>fy1oxU{3y_m`>Mvh?*$#=e2_@h?0g7MQOjeH%G9iJh|V4%G&q!T$l60|yWH3Z z>r-#~&YOLFIVuo9AlT<P*V2UG{7P^&C2_ReJRuVA)I3c=W%f2z@ha~lLKCPh(py?w z##Y*{{gX^+_Iv5g0?$jugldcE2vO$;yGzkU`owR)b)Y3Dx3W%y3qC5gbno7ByzkZ4 zTRN#l<y)i%P23xB_*1#vsrb^t@Pc2JY1#gaw$1QOiBRSLv8@fRd$}v&=+>c>qbXIM zs|9b(*!xmZ=P#c*9n+~AvDQA#Rvqrfw%yvSBw=1}+R~-}Z7*r&w21;`lN0R}Nq4f0 zclP+Z@fFph3PQ0;(sR1GVDb28NrtfgGHZ{_)zT*cl9SZocJ8EW^@{X8X9KF<mCMDq z&jQbTA9|ne&d&Zr0k*#YP~v?6(wX4ps#U#U`#$U`Vo!Aib2Lt0IUFPRupw6c9WIA{ zBG2=1Dgx^d!a3=Lap&T_%o{5`9|tJ?XCk@1G)q5UmXvH@0!3!&-F%GccLk%PWrhd= zs3<ihAp}Q^>Z3JjEG~fko+Re3KM^fve~62vG1`FMh9ccq5-8;n|L&TFq(3Him;w@M zt+h#Av^1!01&KT%vnB3VQxz+}h#MbUB&(<X_G4u>$-CQzsW*mBq|ll)T8oW^lQ~Kh zpESkCi#6NpPF1w6k>9*#n-TBtn2zUVy3Zq{`7bXj*}tj+`#-)=YvGdHP^SjB{M9DI zvjK<zbbWlnv4w0JhygKZgf=AMXt#}F%^i6Eb#9jl{Kp-|G18aQ_uW!BfaZT)2)lWo zdqRE``_Z5FU;DKw%BG|Dj3zR4j@}-P`CTdhltAA2>?_GcjJF>~1hTaAFaZq*sEHJ$ zZT7t6EBDJgg{GZ32`#Nk1$)@kCHHm?p*LaA;jLU~B}qQ|PkVwuyj<wzRWKVH7d{9+ z^Nz^9fF$$F$5Xs1jHr1pmh@k`<r#zF>)5#~+u!k{Bvr%K?Xxg9_BjX#+No!@u@}2J z1d4<-NB(9osjR5#+q!EPh)^&qm#GsFG=$aG^}%IMCOJR9BdL(3sKyg=CWSTke<}PB z+g!?`9@=U2GlD3|xz*9+PuxNer4p<UbC)n@%-~GvEXdw`Ut!uQ#Y*b7F@=!BbG|d# z5_{np$xu!lt1%BnXNniU`%LjON_}-b8r~}sW99dKSnFk-FS<3Kq2+;EFUoVF4YC6? zHO0uDHH_7g{a$!q_!2?gQuVowO+VdGc`;P5MICga?fls^We;1q!=lJdx9mYh^hTd~ z0V~O&0-c?OdkcGpa6)&=nCDAiZMT6nU53+mrvH%ls~T4p^F?WjRS6xHMFX;jcGC<R z<;6Y;wuaK<p|bkbzQ#~U`O6B!HniN2u94cf0x#*gs!Xm1iHRCT6>G}w^lzDtWo*-9 z8sD0lc$Fj_z5KKEr>oY=fS{&TTeR`}GovAgs~1?{gO*};I=4kKTNy2zrT2n~w?q6| z?K164cRCl)kH&B{I<umifJ>8R!rVwmB=|A=NM!`EO!&%nI^H%k@DA0gn7QL5rn$#> zy4`_|7UEtoF7f)^*QxRqH-&3@U})aSko(r*%ePwZA9E(fbWZX<!BiO*F4I~EGx)x| zZy(TCK8q6IC}xhO#?aVnW%6T#31>7mbw`SpFebTpV3=%lHIQ<4D-GhC<=Kyrs#Yyw z-WrB~+h;r7&Q1hyu+F9&TghT_V!MmU3o|3~PDk?GWMTx+1eZ3?n_+$dwVvFGd3yy$ z1hY%gvU9a=ib||2m+fdI*iCK`^AAja#MF9T6cba%rDe>5&$fJDkeAYnP2T+zq-8{y z9G_N+%ken|va@fUC1C|%jJWC7jax4Dz3X^h3V@hVaG3j>eVaka4GNc4mmjrt_lk|P zMwih^g*`>6=8V)+@;!MdzMqeZf%wUAgsz4jXE2Eu=1<@d5E_wTTD}#izpuMqagtqX zWVV2RQNZ7$Irs|0i1hX!EOG3d%giRK_f_20^f<t7-e0!9+tPSOjZRkX(@x@jwSRwo z`P5Y|zD79uRkPIl$d+KXFj}@fCD!jqktRN+pSrLy#%dHmbd9S>;F;oU-N*b~XCHh` z@;2GpJ@{JvSt#J8Kmv`D?KovVe%4Xy-Qp|Xj<Uwst+?jGnk{3WLa3PmpyA@M=Mu@z z@uY)YJyYq{Ij#QF;fj^PVHJ@17cVjN8}?jhGY>{?*uS0OO|gmgOT}p9{%E$l9G}J; zG4;KNA%Pn4JX2inUqJb!$+B2qZT++G3X5xc%VuHdpnzq%x*s@D?Z)Son6s+Bn9Co_ z-<f!23rs^_89v!~*nABgB6lcZm&%+ak&w3ux$+rj(upM_uiP?}{`zr3$o1dw>o;>s zqek!FpaG(?-86RH9!UJJ*6kj2UwAYS4+wscr^Y`V!TrKXkhkaeKtk9>f)kzXR;fxH zQ$d{I?r#SmY;(u&orP#rxLI*T-OB}3q*<ZB9_E{3-gQL;#_uQ&L00}$bo0t~Tz^8u z_h}WQxM;-#r^;N7H{HkCJ!!cdMC>dA^b{r{yoF}Kc5PNONH4M*JmYXt;ZaNA_NNnh zvgT5)h7nyE`B0%gEb$p!aWB`K!YJorOWgiAf(6Uh@)G^5@t6zdSDZHOm5!aN7Uo~c zy(m~=A=sawQt9mf`S~WG3u!spv&EI^x{mrt>uIYf=_qkx7q^NHc#G5Eypm-zD5566 zj%3hQGPC>>!LtrA8S#%<B)ZBXFhBQiZp2lSAU<m+zGA|j=p)iMChlkQw>$U0a`$(f z3IFg6!q34TEX1~pfj~e}dTkIZqbO9XD)EapR;&>n8x{t2c5Kk4Crwr0nzDDqLTXSL znLjk`+mO;XB^?(WkDi<~L!}r;F*XivU*^B&<D7J`X6=e_lNVezfChON2k0k**!^hn z<gC=#aMr2_-7ouLO7rA(UKso%R?vA4=n#|2&U^NopxM&b(l3SC!Ud{*#O*z$mFJYq zA=>?7HUK8?RwHuKyXfB~1ZK(-a_l0CLYjFF<nM04Ot|z9A~|&6oN)E<hEyHHvY>H! zvjwlPZZu!>)XdRss$==I<A}_V5^yF3Mw2lZc<z5d3Awkzo$13>ybHgdA(EUSE9oG< zY$rfdCoA*AuYvidh4@*!W1xiHG4isB?NSKrQiw~buq8<F-*Sk*yR{>R*^$9~9|WV^ zzx()IbDLiTNk?gmNOG&bOy~S#KCbw7Zdi97VyV)|l%Y`YAD2(`K4rvyoEF3*SJI+Q zh}_lDyB`~{Me*u;s#C_@7h{n4*r3>~^6QUOZV&U?l1kDcC5hJZPzfQt&uw5`Z{zhr zE1ktC5@UrFJOkn-CHHq?jIHQ!1(VNXK3i&DvdoFt>zPuU=5LvUCe@r4XF2Plz|m?N z-$D)byv^g^+syP88vD_UmMV`IDqG5PbGOTF!pN}YLKD4Q3aSz`I3VUEcuoy&$5xoP zV}6hrvU{fFdqLtlDnitsn7jcJ3<(l!4?%x)A!3w-{{RWTJ3gViMqbJLfO|QKmy!W8 zLXeilya}3AjPigtq*O!h+Vv6GOBoW`q%lYeHi7pr*V*hKm@d#yMMN?t*rDnhW+IhS zn%`L5`GL6r1p{mb+_V#gG^CVCjk2(%!=m;L_02pZGapx`>zucl)}zS5bSGD)Bj<9u z7f~uWFxU6^C_5scn6A2nU6q!WErBm<?ZCQOPOjaeDTr+&p%NbXGAL{$G!QTLv5JI$ zuUaw8<hg!>pFxh|uzYu+5kO^1r%a|NMRB4^hIFFv=ZMp%z(||X)D{Y`j>E8UNR|tM z#5Y7p&OjPz%2Dox#AzYEm>c0vArLgja+~$CcVqtUB$aO~6aV{F;aWjv#*wObn{XEC zIXP4*6=i$<DK%HBs!Sn<pUPm%p`dLxTRje{`YT@~K8NbB${8#z(l0&GgIy{1qi+`8 zzH-KUJ@HN|VL6Y~7hb7sN*WJy8p~N`8kZ`%7q)3tB`@R+AfYg$4bjEB)*B>Q#2vg$ z$l$q?f$^-;?5&lvA4chzE#8PMl&VfG*9siq-9)KnV@>m?2}~v?ZSG8MYgCxr^hq3$ zV<Kv7_0Ht#Mt@flYDtk{Lq&eggq_P2bt(AaCdDu9kH2+XL@X7y**S(K2Z>&c|AQcb zV`1Y}j4#Ulb3}z)s)#%>Y&}JNfrC@CY4V`U^^dK#u;x6p{<5=)uY)qenEb<gs;mvz zU`!QfEL%NwP%K8;84X)O7=`${#FU*9Pj(gHopsDb@U^&vn`f%jMX_{8Z0P>m&)?g+ zXft>h;2c>2?ilVFj;S9!J>oaSk3qtJZLI1#v!$e{DJetI_B6Ai4Goa4o=d4fz}NB7 zSo#E}TprcXEXq&RrEa&SpD0b5o4wj-<19UGCB;a7;w7G$I7fx$zzT^!ug5q4@i%Wv zIc$3`eK9yLmx_6j;*#ptU{BAT+w_(rb@sjW@I#r@Mc(mM-u8|yg&!HRMe~OQ9=04o z0-PKr;T0hEq9roUQ?3!cW}khPrx`raB2GhYPcRy*87O=}76Yqs&h0B!@GzCnXTr7I z@vieYV5QmiTxc;cjO7Z;>%ikJ^$m-9znnJS&?A=WBugnAMsFTKA7igVfR~r3g$0lv z9;tL0hr4`Jn<E?CW)+kEhP^&|u@i-Ws(tsF_<S?Ay`u^JShFUMH(vPm46a#1KMHix zw)jo{D$2(=H7thRTZ(Sji1JIXbgE9HT}5@pkaTy|ot^I7AbAJDHGps+00OS@wSs<H zmQD>Oa0l2w3*}a=jk;<Sd0G>+g>HV2%N$YSrWYPp`t^>-9TunCs*6E5%Fj87%QuM< z;&dkpYAcuT>(&~)JRZ0Qk|g|sV-n8Z-Kz`-259Emd|INsix*8N7?p&Lv=B_nG}aSk zlFW5?gW{^@wA$V%Q8DI^2x}CZ3@gngh+j!dmnmt}4X0{u=+W)46{&fU_}hb|rVs~{ zb$(4ZGY})6Ndv-BTZu};1PWtwF=9OEsAi>%-U38oF8LvWH$#*{dqP-yI@846k-hia zWk&pPjQueL*ZTWR*YKukQx0MwKhNr~)O4i3%lDn>u-Zhb$*C3s_!(k}iccgUh&$@_ z4@r@6d<LHk&qdkGVj`irWgvEXgIZ<2nhW7#C6q)T=VywmQD8oWc&f0-$N~yKbTZ8q ziVTF9EL4O@H5n{JL^diUY#{y8%fr%^;fJiQEYrt<KaN>fh!cK0$^4xAwiqt+Go$8b z2))54V}q5T{0Q^awAz(V7+)p5R;(nK!j9*l+>7&*E7vQtiZW|EGC%oVPtW_UNrhJD z5P0=KRt1GAr6U$Gd#W@7qHRBht>utm5l&YVu6-w5HWx#h+(OJ2d`2~q!8N~U@up~k zyIod(OD<Q~PC|O(S-10iQH0antkV%P22X@vaaY$a5)g-z-(>XGg3W$1tgJ}|lP%ti z-SCY|PfcJaE{dM6t>woRn%B0jY!^;$i%l&jYig*u?fh6-l6l%Ov)DmV{M*hn-_;bt zyOQ3qnp!nH-BM3NK>4SM`1dr4cK`g_o}S#2Al*{4`DC87Wo?1rE}4`h+J4gBKOo4D zD%c}p+{Iqmyp~&t<vh@%+*&f<Y_(@i;BOLN-OfHfz`{8+e%kVXf=BWn`mgSL)a@m? z?R)4Pa<(7lzdp>>nUQVWF1BNR!radcI>`KX1a?;Gp86)VxZ8TV?_98Z7_`?iwZ?wE zn`p7GSP+M>IMgOO+Lk#+$ZUu79M2}s&D9-(h>kgZH<NMprpJ!S)DI@k4`-%M_Ma9W zP7a4;4;)X(VH3+uL>r*hT~EfdN}ZEYowNAWL#fqc%;ZB{;&YVtyVj=QHDZR3!HlI( zQ(MFWdmX2?Pul1E`R5aLtKi^8l*Mk~>AJ(y#rW#MbP!pE?BQ$@E8OBlp#J3I^nAgs zcD&$Xv**ez>FSW7JC*3HvEUFKzmQUJn!9?;_u;BhmcVZEl;<hW*7YzyDOg-*7vt3- zWAX`B{h2TSp)m0|>-06j*%9{im9F)z-_ur&%88JDth?-rNWnH9f%hz9HCFOv^~g2; ze^(?0mqNrRKL}5K6N4d7dpxK$*7|crhTF!cJ;kKUgwsDYw-yp%e<1ZI7R_5j>(|LR ze{J7brmt>5@;5VjPW4_LXsX=nfAKApBdA`xw`G7RT0WqxUmh)x2|hGEU<^L=tUdId z3G@g&_FF#o{`YI7{^9%o<e>UckBAR~h&TTxU;UeZ^A9mS-&*^)aQ4_k{4HSW-?z7q z-2(rR|2-`d|J(Z_p#5o$?dsus@)N<2e+O?Kal#+(^-)NH$MdywKv4~2OX!fWwp5NF zvqIDhkYwJq<Cmt`iR<^zq{of^C^~7MKwM9K#YARh1tmXEyK?JU-k#ED3_w$k5cg_c zj=}n*zr+Xqny<vadh!&)@!3CnSw8DW<?=w_Ee-~8D(OTr_wxrv)tDXpLBB+J-_;wX zvM~7GI3Qc>tBv?*-#O30ZF=?D@xQv7H+g09bgAp2m}X1fWfy4wraUvOc*98~d%WO2 zU+Vl&z@Cr=Tx+)d3T1a$besvr@UuBVkb7Ay<g<Tm%UuF3msd-Ev^WO4Sl2?7aVT*4 ze19)$-zdNEf8BH$4?4ihf*HP=b-3pe;E)ZnM4Zgtnm?ZYdk`+Gl==AeG|2xt=s4Bj z3y}d0!r={$6xA_xgI+<!r(aZc6$Jnc-rjs{HeEqX&4)9gA4KG*Z~8DFr$t`i9oG-w z5$6fYL0*>%_7<QgxU=Bjyr>&Qd&!p4Pa(d2-Z*;ykz|BI+3<W2hjqC@h2cLJ_cwG{ zKVpZdO)-W0H$?0%MsaYiFO-QsUFwdJ861CCVnDH$&d8HQwtP_J!b`YRefbIQF~k}^ zPtqs)-Y{K(Qk$)5QdpqaQ+6*aw45V8%oMvp?x3Gkg=UY;aP0H$57oCa5K^ylSq$)q zB!uZ7Xogq1R2`=B>Atx|owHWGJUfuo8_}n-oS}n;N2*gXr*xyPX-uP(slxdo(i<t& zY<I4k&v6JgGXJ0qmKS(?<f#tzgHV`QWE1!-8U>k%E|y_xcuzRhdkg)15vusZ1QI&# zZkz{aIDO~nD7vsDWq#9U{vuU0(c)cES(YVV>^E^s9)W~+%YKq&_FuAV9t=1fD2ZA+ zqVY1TZ1#BT&SVXo{i&zpK3Ct&#cSqQb$lMS%ctgu;oiLi>p3>%l*iLX!e&Ap?$dSN z9FZe9{2fcPSF{~nZ~H~Ehdk7Sypfm6R9Ht~M-Cu@7=kOVEVb?#D=T4ETS0$iN|M?t z>QY(a`e{A5KWJfx@kTo1Coz&TM;%K&(0`x%$LoM~%NvZv!S;iU`vcGLtgeHeR_JeI zr@=h6O`W3vqP;Ya+x8V1%@w@4xPq>R?R7TDxo4U)<=;6CjIzaf7*6e(C6J~T=8Y7n z=;&CI{^EG8i{{$G`Pv?e@*3=^e!?3KSWH4{H1&(neg~C-rBw$Ec$<Dd`9dlDcfM-P z{-jMzpj&l$6)tr`GyAE_#e9^lI{*U>+tcrUc=}%To>;rpk2gIy%{|UrVz2ClR)p!7 zI0U%v^>Ed@%lHBq;4ARhd!MsM|3?v~VtVY#30S=GdojOZBk@h0XT;@PybU%(uHT`d zZ<=A5u$WN1xjPHzvVO&>ZC75XdPKwF{0nb2S(-W`qX5qhZNX8g?Mx0bY`-zZLh4~I zozytPmQ9LA-(ha3Uc4FR7FE~XFkhNb{E);K;cnw$!KTJUNCpf2;+>LsT56Kd^(Oru z*NFJ8Uc3>T${Lp^YE+6;I4N3$jq&78RS7*UH93%l_G`I{BqeE5>}y-*QMF-fI~LXg z5mwHUyYE~?ie$n5`P`y^hjp4TGYaUj5plk$1u<^XW6t?y9O&H9cpqZWi|BW(zE&n* ze9vmRqN%WWeoJ-YvVK>Ol9dT-I~o1>yf_3EYwgf>(@;+2gpYE@%xZgP{m9!>vX|;m zPmmK+`+OK-|GE{AP@PdD?{dgqwxTM*z{j0tklOw=yQ35ldgUitMH^g81$ZpQhoVX# z^o#H<t6J)*9=Rz4e*B+TL?+J-vT5}=t|j%;#tmp-Iaz9&o%&gAUb!=4L#>8~`k&oE zWHY&r+TJGG{-~jr7@1*CEs(du{l25V3dMUxW+YjrXhlhczC)R(UAoZsQR{q#LUg2P zvCQ9T1<4ghW6fVv6rtc6du3;FTb^g$Yil_R-#gQl!@1lA9D7fhJwbX1T<-*|ujE?v zMfSRa+}q1ra5<khdQYJe8(#Ewh2)TbsVW1nf$<fB)c6HP=D3#_=u4uO!$!yZY5nw; zidLw#nr22WzE*SDw{j<I;IEST+vc{NV-fK#)0Gh;o~9E%hj2QRb)KDaE2kqTW$E9` zHe~JXqOKpar6<+N4_k*Ir|yk(uuYy%oz2R%9!D4Sx$EBTtCK?m5h6<c!S31Ege;Tp zchrAl+)&<yX&L_Fk;b`W*>9iKSEKWOb#++tl@COoI(+C_Kj9beCy3(v&_TB{c6Tk8 zK6V-*db~{FY%nlP;TEILYC}{ZHq;}7Fqy!&J`bb(`U=_@D^72L{VKAC>~qzp@CTcN z&t#piv)p|3Op0JVs)N-xL~bB?E+u4>Ej{~(Os9hxD7vvL6Z!if0CH{qWqYA`F}cAP zMRtw};qZd{bsa+<+Sz$!QS;bw3xX|Lsjesqmndz^0Y948RC_>i_JwHZXFA!B%2Vdt zBE=Nnb|+>!Cha<=pz~prR}zps<Nm86@2kw97BRsDox~Ed6?^?~6`>N9R%iGNK?kd) zSr63n;=KokbHn!g`3=0cGC3uTH!Ymp>HBz=%5Z1HugcOU>h;?`bJG3mc=n|KxN#~T z$*M^YdqZ9_;1FwcsRW(&4$SUj{8zfF@Gn|ZO8?-adEVrvEY{e2zlL`qX12wcUaMEP zF1ozDh1RS&tI<`2A0g74yT2sXir)VT?|orj>*B+|72)AHc$C@NhC6uIcJd7+^I_iQ z^#+MiQ^s6A4N3LGSg&hC-=ga_@>kaD-`1`;z@5WoMr8safE<B?o9Q_(?CnJGQgYs; za0$`j9)=XMIK*pERT*DT*H*YV#%+k|pQud|{w5x$e^I*5J+B0g+>$L5c41DW7#F8D ziesSX_J{?$MG#B+S=bd@Cz`#m;Ab@TLeD3_j5)u$WL>zN`GHD+4{zB;Gjz)BK(Zu| zE4)C&((Z}^4e8$>lO0nl6ht+Lna70`J<p^1=sdZ;a@~;Fny=n_r<2S5Iq}VF8+}W< z>Em4>L_Fye=`BMsR|VHkJ&m;N8ctclT$z#gQTT2l|0|`4<7#*Z{yR#*Udc`kYeSY0 z_AtfasibVK1_e}rtaUypy%+G`*^YPpZLMC~^F4ujX6A8s4FCweo^UW$eAyM#kD5#l z{r8YyLYAm*9J=>WHZT2a9w5oTn!t|^UsONpFIo7Z2{3|A=xrCCoOHrKUq>M-M!NC0 z$OIFgO-v{?ZY2q#1Fa@bvzed}SE3z1F-x&yurltgLww~r0Zv{#L5nz@QWe5CF4qP) z$s|!sjja-cMl%z^W-Eu_>f&nYCn{}u*{r}rFEmZp*gPRenA(qx8DArTx$Pjqd)!yS zCCy{_x}G(8K&|P|lFVjdOm<1kN*DKlzs!lRWUj5O2opByMYzaJQlT1kP<3(?Jdd!5 z=Hg=wl_Xhl7cOf*IoU5Dvk(b)qZs|T)PLhjRS#kWeyPFIip4q7y$_0iOKO>N%jw!f zolFvec`<veUH;C>I$d#^Kk6E*m1F7RM$^+mHsj%f0G}TO8m9Od06B70dR(3fUn(u9 zy&Wrdi;Q?YmE2_wW!^xWu5_OBu*G~AMSHJki(o&=@KQ*WPam4@UD7jmX@9QK@lbiT zDSp0$pnacre81&Xj}`wnkvcBMo@Th1mQ30M!6!QYqrO(D<8KGywFmBl4hm8VLb4}? zF^4gsa$5MP7jlt$L<hN;ns`!`bHd|1m6THHUviX6KpE&oN({n`IQlGqNt2fQJNt{( zZ?`DP)xY{8@DjD+^yl9^kx@weNK|j{0J-#GwZy}zrA6*)v9vOESS5{r;@jkOnR_)y zIrE`OaT^%m1DNnB2;`nHBna4sJK{r&NHn|q@M4;~O(o+oy2?dRA}?y?SbrQ25BR>R zq{c@nVu-|qVu0lTVjy;;>L{AyMCPNFW5P=daWq1rlzn^10>gzWiLA#$HGf8a&j{7c zi56nQMTj(U@=6aKbx-9E)P~6ajOTbJuB0m@ElMT<Y*mA(2d52H{ZkP1Ov!%x=vqr* zh=eG=C3IE^qRoi#jpZ=96f|AqXXTdA@lxE`M<Q`U>KxOYL*G~v+vL9A$?7D@JGwc4 zOK?ucF!!2qM_&_Yucw-9rpt2|qa84eqY>~ukY8&S%c_$K8RTF8e4FRhsbu}q)?fQ> zS(vf$C5_==5Z7>YyT<aBcpxISx;uW%SS}#1FZYLJfKprsY6-_|KEC+8m#$B+-722* zbsdJ^n|ZAl4N5||Lvj#m>CT#d$ngy8>p}a3;-}EBO(_cg_qyE0<Gcj;0VU&Q)Lp2L z<3WXeFB9dkYa~QX`NF7mgnSjNDkF85qMvygFkB2_ra1GNxo7H^gIW~-WVFIe=*78A z_tDIEEA1C63Vp2P_H@{069i{gI81j$6U)(7F&II(;Ufgt4EyPVy5SC1(e#!2qQ-IN zeP|MeI6^b})-z}qV{<`c(fno60?I^Zx??LxtynTd3T$x&CMk8m%xfmG!x_=tYUTJ! z9E&5Y(gX4Yf9+Hu-Mi!buzN|qW-&bZSIY9Fn0^FmC~Mx06k<}m1+@1=G##JO(Fi&a zv7BXZ01|!gYZOWfHRk2IgN)HgGZjb?6Et}-)k7V9X4%~IrFg6ph3y(0uV*z3gwPMZ zPGZOlZclKQ%1k`)5^Kks;BiT^$9y{$nf}<=6!T)VuQw35IQpY^M&j*#mjpIscsIOm zFpn;k1-7(2#~;IR1V|q44wsF@wjRTLgEfEF5cy1=o7j%jQVZ8)CWsKxZg=Su*Cbfb zkn;dfU#Ceei6C3lsI47T{T(pl9B`O&aQM%Y0^NW470#a(8U|5gsN-TeI7Fy9jFyr_ z2{93;t>_C&{LIMgS?SVQF~t`?7TG5sy3Iibp{(9+v+y6p%dXGpip;dO^C5Lg$X%+Z zAulp?xJiCD##WoQEz<Wcx>RzjXVCc72!GU8eL17_H-m5-{C*&%{Jq`>nZ@1QH+vW% zamd8b0R1QT9wdQruP$MYu6&QFe32nO74N(96urF{<3lZR<STLu4Fu|gc&{c$mUkAg zhwwysap78uVqt20Cg$D7FSvwbh|4N~pT`HOE56=+OLvm}`ERhJ+KAJWHq}3Qn<<$` zW^G6!i5D3STA8;~!`LSIvBhP;zcOzR_;I?P<Uy#28}Zeo1h=|IZb4#gLvzTQi%{46 zchHhSkzj;FOq5kfxSy4w`BoT24SV9bfdI-l%1;f$dMUzBH(U+Z&?05{m3v&)3eH_w zv{0Yrc|*=&seXi3<8GHk>I%^p+or`X3L}QNoEho&r9{UyQ|yCg0}M4n&3R^-orNXj zoFgPk%w~2c$qYJXd|kveJk83Do30oM%63hZPHE{plRs|Mi_hNxmXh-sG@kM?mys4e zlW#VSM^I!6NQZZ8H!E6&y?R=cEzPOwA$ljzJ&>v=N&`W`+S^5?<DtrSRj={&Fx!D< z+5rTWUEBN?Rjv663GlH9GNtw)3HeMD3&;G0eF>t|B^e(j2)_iDxoL#-Ol$RxR?|wf zc?u-R;XU!lFUq={eV~%<_3K{&+bk$=jgwZQZ?tBy<is{FOyeuHC+wo1?_BH7D6b{r zZzm6OhdhA8HJ32)+;CJ@aQp-fjeEi`OCgpPaXn@FS35=v=xzE8_?I)7=tUV?F_Y~# zOWC<vm)g{)GoqL6ihYsH1ALVov*iD}k&Ai4KT>(dMN`n_Ng!Befg^iDAGP^@2(t-w z5-R9Ei_aA2Y4zDETVbxx&s#XOOZJA#i$zT!A9Z`>G)sLCy2mWgj=$?s#=SShcBRnB zaY{>VlW$Pe@1fINQzl$y#m1164<pgsEZgVgvooHZjn3Kr!EU#cInIp_`H_J;6z{k< zaZq+=*O}X0N4|`K5w{<c<bxu?(9Xg2p-(nninvvt-@r70kQfwMML1E0(=W~4A=hrz zAW5$$O<~<NPcrolF%Iojl@Aq$RY~u)sUd>aA%@9<4x{D(^c`Mna#;fhD@@=@q(lnN z>b!P;U6S(5oF6WR?9IBR?D0Mz?piIUA#rl$lzSG2hshYXue)>6-eGNvgvDyV2sc6& znN9rtT}b$>S?xwpG|d4t3M48(pG-YoO_6fl&qp)EgoueYF6Qz}3$2II0SL$vLMdj< z>r+<lC?Wab9~?6hRm)@Y6vH_?J37K=iwM{RU$5q20MHtH--v_&>OZJ&#tOWi3j$~o zXWCv(#gbt{oQvIU=Ei<bno`MW9uxl8T>CUbd=a19=Cl$iZvy~SY-dtat0=pDQ#z13 zUpm|%2yb*Ah0KVOt`cd0_r?%f@k<bm#3=1VJo9*M27x&54flt-v!{b3f8E`Ay&0*5 zr0izxi%Lb6cC^*`X!Xnp{>6*z6`a{^EQuK$3tS9(-6)|kZ3~Bi@<|iRRV;}HTov3% z|8s4F%GT=)ByiNVV|YLPGLDrK_opGgqJ3Y1t&O(cGFy@jw5bi(kvA6x@4q2uOI<j9 zVa5@k(i^$3S76p>4$VVZ+XxUSdV9z|kahL(u9zsk=GJ=mpy_1%YOV|_SApI2y@hIp z;lMaKz82S}44a5BZ()Hwu~qu;o92Wb!C`TMR;9`zXR_R5*I6D(mCIR+!?F`e#i~8Q zTw+SUH-p#}SB!h!KqFZnc{WdON8g0bO*{B)eGXAO?(}Lvhrze0yt}KMz7sZLudPfK z(`l8WG?zAxyL3ILs(q_B$Tt@=iYuhVry(6XYDv)Yxn-h;(C7bE;w=c*C$_g%-3%-5 z{yPrEHYwE1FgJe_xbU|8b1qlXwGuNqF>?cY=CWg#UmZ&izfVnN{9nO%o0y2Kf}w>x zI%#^Xn-o1NTw-Z=l;N3m?6`@LMM>!!p?06p)-!z7!@~VDQH%4Uca7E_dQ!oCf#2VI zOZKn34;K^rSqV&H<QgyrWiunv0<JCn;b%?1)y=pq9{BeIIbtwRjeYAggR^13Hj?w0 zVAeujNz=ZhaGj7f9iRXOcZDCsA$D=rQn<w>p+Dc>H;TV6Hu5D&!Uf)xxK~V($H-UL z;0pVs45Tz$gRy>45&{pMGdX)V@SA@MfN%jY>{U4Gm)XL#?=#u!`Zu0KR-1T6AnRiN zztp#(sgCCN)<qoUy*~*@C#pVORw9C{>d#Uw-uVtm(wK*?dlz%l{4pVumH@7P`*1(0 zzfx?e?fl;y7b=2+q8W9B6XQQ~cw%6r%OvFRaL7%z->}{n_7HPI=WtQfA5VHDnc$FO z(V}&o!A;lUV*JhFKI=eJ{cW*)IBzyzw}h^xNH*!ap6hmEwvixS29<!nLVM$1Bt;p6 zBn`O7wAj`84YH~%^b5ruM{3j?s^!C!#Z4l3T6Ttuoe~wy58Wa9Fo)jHVCe+5RS2xx zB4R=q8zABudY`G0w$YS2UcABZous~}Y8)<GkdO_x>&Bwf6syYN`36saqxi6V?rAd- zTl9V^koL-UfuR0ZscHI$(dAZW&DUe(9PTUVnJ48hd~7b7u!&cVgTuuXW24@ucjE{C z?TNGen2sW(UD&*ck{vwzO=s}u)7DD*$1~deZ^IE@ksoeyy<PRRbE@CSFp{%{sClrb z7~M1&lE3T28e7m);%i^<wx8Tye0%>*CE4($&fP+U;>No|RsM}=q^_(VE{i$cEt2`I zB#n`wI_%NM%!hPf$I7qVTr5p}NS(vP$(L~Nz2gJ;)&$H{<U{LS*V^_ug-z6tCJjT+ z?`LYjELFa*ydT~d#nTIwg8yFLQ(1oMe}4e}a6sV&&e+`$D}Z_9@9pL+>dmhzc&CkW z!kqlyktpvW%NMd7zp;_37jc6UqHb@*myBhxa_EYC8`~Yt#OAJ<Vs&YvU>xD<UI%d% z!R<V#5JAbYLu0~c36Xc{=(wEF1>~=)xI^zu^|b!e#Y!hBsSdWrJazT55`+o1wvBu+ z<+gPR*!i;~foOagIOLwD{DYZ41to0V$C2MH%Cn`sbB2V>A$vI0-WWmye_`bIDXRL^ zd$-tmrt4qR?&0T-ja++0=#y!BVCxDUe}I0h(TcLRH}1L?^;hc8r37=Mjw8w*4jH}2 zq?HR@bK_&|?aZp#)M3Mp$Cv%Q;Z^+AiVWh1hBL_5S0nsa-K-9^=8|UMV&-z=WHpoA zUqc4m9G@FCO3Jr}4DExiGj}t2-MU|VDHrS_q3f>yNs-I2x_BqMyfbs-dm`9xS#ACi zHR%<fEv~xrIq>VG56;u=Pis?0@sj$N7(N@`NB`>k*FEV^Mx4F(#V2qN2S0+}IR;;t zK>owL+76aka_X{%^LKto&t~*=*!d;~%d_s)z7-rG()3bSzf5Xv>L(+#o6XU7Jx<Nn zlN3ts>J|IFj{d^!SxS2?_}fw{D#*T=S2Gim9f8sF?=~>{75_Fye7(T$o#rq9wzfcQ zpXQD7?Vo-*im&R9e!=<opAB5~Rf5p?r-V6+31}PBQs|WT7Yq{&^+h>Mc@jmx*x9A2 zQLzC+ZQ<mfM)NVB<TqUT1hj2`WtMxhJDqSka|NcIS1KihY`FTb*_dNv#SC5xow}jw zG*<pC+}3e%+eY2}C?x8?Rs8oI_#aK+7i=u5H(XNu?#1c9Nh-t$XzLQA|Ad)oS=mee z_*<{&uW0HN74w;yamW=*(wv5ZdQ{kGD)a^0*3r{DB~hNJL^&@T)%~JaX4&%KWep=J z55~Z>$h673FzX*-+1;xUY~Q-rZRVoXSS_uv^nznHt~Y<b>v#%hqzjgDDZ<9V#Z8$t zfjeB5u^Ps*O|P4}%Ydd;8u|soSsg<=eB$3H!01=mBLw9<qAzJC64=<rc*_NYXtW*1 zFLUY;5s@U4lkZJ_q|Y34NPP1{SPParmp$(CWWp4tsP!X~y|nRO{baSJnNBe<MKLyc zDNX-WuF^Tbu>bRfC-CNF3vfJ^B!^u1`yg&cA&!iWX9$^I41Q@LSj$1~U~48p2Tzmw zpTlz_h`CfxkrWl@3{y2Jy?COQGCBs_Fj}lqfI7S!M`{HcMkVT^-XwJ4HTRnEZ;7p5 zyi>O=hb;5osWRc#DxDx6!;*U)QH|EB7qvV_&7FpDr`BqVokOF)2jI#u?;0pLOLrQ+ z(46I6tL?qlAV>qIkUGonv4!g%;k*v&xq`d>16pCwEwx2~8=_=fEMHbH)kK{eJFy?z zRCm6uzoaNo-{HJkmHhdF?<V|631}<*d;XIyx1TG!ouhh_1WQ3wb+EQeE6S!?;wRjv z?Q#3Ci>LXQV)1QCvveA5cz}q)tx;m8wVGRysZ#Jlc*A?PsD&kUu<FY}y@J#O!>o;@ z!S0F9WW#Osm6t2WY1wI1k6Pa9O)Dydjlq+du262j?oDP-_^x(o^KJ9*wI(0qQOJq; z_unNa_jUPyYHFSKV83>-t0KHyd1PJ%>MQZL1Us5<m^S)YJ-{hD#u)f5d`xNPR<pX2 z$@yP~KTwnQE)L={+L(F+7nW{)M%sh4JhT(6Xk^Pr8-q^5VE9{4VK?8#nS|!;a<X}K z%4<@*oxo8wCbOmDPFxnJ@%d~D?Q<nv!|ih)t5_hs=`>9<GUp_{W+>=(9P}H#MYDgi z*=|)S!NgmBJTLY^BwMsGB1mh2WHG?LAPiQOkaupD-ubi0;<hr#hbM&<xFmgMJO&Ep zHJYrk6Q(kni~M#88L2Vm?vkAMMjl3b=Td6~e6EcYyQxNfw$}kFPTGvb*XHut!`rC( z*%&X?bQ5fNa+TWqiG=)LX>XT1`Txj|@-8dkbA?Kq{+y0-E&qalNM=e0mlN}>=n8=8 zkKU(JaU9Ej{Z@J)*10?%{LwHsXdmvDi_BSQOPYHD`M%KkE2)jQo6gnxM@vUFgwTg0 zCe@vF%024E+q(gV)$<sGz)iy5_93Au_e9IUWEzyx$g8P~Pir3Co2=q~V|@IV3C)ii zjBg~rzhk^e?G4-&RP7kDcf0Cxu!+a#9AUD@#V;fq+*5w_clfJ=S3+<1#vrxbOnT2~ zjKIJBPaP8T`N7xm0<UR6*MBJkWCsf^8IA})NG+ujc~+=099g3}M%JEg6F+tz*nN<m zqvOBr{+M^HB)-W6O#0Jk8hHBO=-qG8jhhOppk&RrcPps6>p|j6eogzw?f9NQdCo!9 zik7}Rc+;1$;`!&IQZk1I_4ml;o}0S=WR7hG9)AAlxozu}IsI7wuyWP&rw1i-9xm{> zLDqZMIPymJGQIwB2h{s_>Oa}*5`ljQ2EF$Sy|TB>_5V&j_CBnlWbXzAo-WdRA9vrp zx&KlBbkp4X@ASVnk6Qw$zdw4PZhPN6UDZG1{d-YQs5b!YLI4pH8f76GBNIADAv!-3 zhFBqnEEA?mA*K!!mQf*=1rs*35ZjFj$EOe{m<czk5I2blFRKu*fC<065WkM;MO)#E z9wvg3LV_tK!i7S@RVJd{LZVY9;@d*vCngdU|0`Mo=9iR3FBzFhIf_X6naRY8$Yhzx zRf@=Um??~kC@h#Mp+%H#%v3%_RKd*Dq(#*3>ui`sGzHA3GyoiY6@r!`x*lfwks|sj zW`>0#hE-<9kqyFQMaJ8rS5M4LPaBNbEX<U}%(oj%jKwVcn=BkGtg<X@EG)0;HrVj3 zXh!+~7B(D4#q6Fo0H;mttRh-`CORT3?zCb~^mXoH77n*{9`r&kw@t3#O<4pB-!B&4 z1s3);8$iz{>TfX$%~r5{Q-HJtE6hfKmKBA!CCp<By0j5iV8s^RdSbTa*C;`~-x4J) z6tl46eYQ_zD{=e9DuGq<u$a5J1Up~9<jLC>)xnDDw|y;TD>_$#*<|~)!TNNt_3y&= z%`aP7bT-U!TWS2#e=qHxnC%p3x8>os*jctxpSPam*(6Arl$%&+gxUUaZ~ybKQ?#)a zbJ|vk+eW{){Rd<FSG4_DwXKm>`e?qb*va<jXZLS*TP<u`dVE{!a2xHHou)?VQ@@=M zIz(5hl;^S(t;z23Z|S4Zjy?<IL2}1n6UBxVY%5aE3Z{e@Ih85X?qKok=(w>zsqZ|b zLf$K|KfoaR#bx(+WfCfO??@qXaXWHNkozi#$uIW%4T!}YMAg3xt8+*4en<Uq=Wi(c zBlGS9cRAW+*}dehIc@o0d8i#JR9j<LFb<7YYk<Ua7wW^|5M1uy&*2yabxbOEEaz~l z+jVR!cPiMGT?RP!aJWvDyLRrnE^xS=?vji^-JUo;pjWsNRk+ucf1tE?=iv0<;q+X9 zx(IW6@mF|>*?&ZbV&P-cLMwba3n0Q)H0Wr)aCzS(PLddVzqAU!a!&ucJ-@aJ|4z<; zo{GQ`&Y)9_paIU{Df{5nir`xm=YLQ30hiVUHF9i}m7xPgA*B1E{9J5xeM~%D;VP9Z zQe4o2657gPEvtPEhkar9%IGkqsIdL0IEU!8{b&`%nBx5yxI=8yeyk@J$?;$$f0Ug2 zu>O)mBIQuxp+nLfSIhZ+@;z4)_CXRpcM1`A8skAKTs|`C738$cd&>3`e<9n_p0FWS zoDR0F8F!17<DAQZu-Ac2;DKGlL1t1_R#sIG)G-=<0BhpTspE!u9^?i)&Mj4B3S;JV zR%MrS=ifT!K5>7>hQrXE@)oMTJi{Ov;YC@FB14sCPqw8`TNyoe89G+9OM6kYYC1Dq zaSIL_?pWGp+{r$b1yLxT%3=rk1fHbN@CtrKcpO}}#i?R<s6s)rvJUg}2p5S9S4}Zj z%&t<7r;~=rP=)YF4Su8+?vY#$k8L4OQ<@VP7ps}{sF|@^E8(z-R;~FLyirUk!N|$j z(>7hov4gUV){84Esp?r}CCi7~*2OVv1eo7>WY>3O<8aVf?9f%b-(}(0edyeC32bQq z=5%tUqlb199cLcGdsl&dyGH|a&b`<?J>y3`3rB;LPJKGOU6j1NZU;H|SRxTXBcHN% zj@^!3%S`mpOkC$S9_LD)qZ&#eoCw%Pdeord{FPP>p&td;Im-NXT(QYpqYz)0Ruh`z zm;gs>38^eVNAcR|9#y3s+RYy)o1D}$^3{CisSD;w>^!VoIGn5FS!g=c=ys`Gb(R_8 zB5<)8=ieO<TT6ekEHAHam;;WrITtCsXn8#PT<$pP<I<aSuuAE&_L+OVz_AG3WfNa% zAjz?@cz@#3HT%AHm<QfXRI}d6J;>-bXI8hVP?IB8*BQoJF|v==SH?TS&W?^Y6g4uz z6r)Q&)I0#!nmN{LADX#Ut$R9r#H~Fctvwz<R8q#k3!)b;f%QB`CsEi9_|-qfFi-Vs z%^rDfXw}RT4mC<KZMqXqh;YO1TuuhGk~na0oQ|45yKs)wJ_tb#r%wL0x<v8tZ=F_k z>bn$A-8knq9SrEy{QFh)MV7bs^uyfJQC1yX_WW>a4v0!}dupmiV|AZ<6hJ+l{F~xN zTdOaDWAEGozjmH{AK)AJTwl2a#+XD@4$RN0)TZGMZ!4T_`_}%YbZLrHjosw^O8X(i znD3;`v8EH4Uf$n*Dj36qcmC_V1zK%F?d%ZfI!55URL7&`jn~V;hlr>(tvu35a7z5l zUC{Z#LI?h@|BU)0)4$?_njY>7g_`Pn=dLN9kts~<+=E{>HAyNi7y;bzw8u7b0{LMM z^5=(N#RR(!9blBsm_VoeI$*Iy6)Q+M_p%D}%9Sl0GsmY<xbhU&){YZ3TKYrhv;|sA zYR_*o@3Eu7d+T<p^;n;Be?g_l+ic{1?N$p>QXCi;%0CtCUf`-@;U{pVfwuoZ8=MjR zI)jCGB}8>4YzN0b#;EB_6;TC=zHJuWQaweU*jYHq#|d@txMb7Tv#ZuOo;Ea0xnI-b zvV3yA)A0D4Ri$f%pa{6=^cRTotgCIS4YH{-TJjiNt;*K_IS`t+CzCIaVJ`oNp37xc z;g8umg}EXb#+dr>v^@QcU%v9&mKmBBMG)h*hltvz7PV**_2d@yY!Qtw*J|lQC$NkA z4lh&BkC^x>3BUH=pz2-$-R4PaBo;5Es4fot58zS9c6U63I(45>#XO&dvFrUmNF?*@ zV&CBR#w&0sYFA;}E@deATJ<e4YQ5v=@c$?U@8|o-hns$dxUX9CglEh0jc^DaXw+`h z0bA#|C8K#`vb=#?2MG$oZ*rZgZO%PCzH2SN-FQ8O!x3@veg_;Zj2&F@mC}hy`i#Z- zU}9NFSLsD>lqQNc=GMPTvElI58Gje4&&=t5Cu!5%)Mf8NGda*;#2D|bAwg)v&{E*K zg>UPl|JpmnD&rEHP6eTu+Ygk}Z)bvQW-dh}tDSSFoD8R%hMQV-KrTet-tVtOfuE{= z9tw_9re>zRb?TmNX5qs%Q9W_|_*dvwFU<pEu4R7;bTi<LLMgbA2zb<@ACs|SQ=^)P z+&<ASI@&$JeW+_o1l?axe|-L~Nt`3<C;y}+BGk!tE4#0Fa&v3_e*kMhl)vtF_o4SZ zrYn!)a8TDO)ZX{M%CW%aaZoF=e1Gx3t}V@4#@Z$>|3(9L>uX*kh_~)ABoDTsa7;{K zjK(AkZbS2V%k)@cIQLojFap7$_VKI^w<80q4(IEv`o%vtD<c2yaAWaLb8Mhm?>R4b zjQ)VAKJW*3_Jb>fI>88nU_zex1~Iq+L#Qwa5(9--_&%&a3AgSBwk)?2tG*KV3s*UF z+pil-b;as&<}R|<7VCEJEd*b2(_U`X>Z*wNEF7b`9EpJ#fQ2&uXnMx51nTL79{>QU zI{-~gAh786Z>JxUmtU*%U#7Y&_JT1E?{q*92-04uATMz%Pqux_aL`(b@j9$Oqi$h0 z`F$@#!m{eT>Z_c_6mqc(PjJ$vpT=fpf_-2|cIX2YghF<#LjuUS1X9Fe8~OIB_y1}5 z{_%NdKk(m<28$AV0rRxM^06#OEWJA}|0*rV>gk_T?07e=nY#7wX6R`UFl`j}aC|09 zq=6))LGF0Qsn-a%Z$ftDLkmPhKIFjZwZjAKLq4zoCa8d^X9qoi0RZHHxbK1rAb_{; z!#rpK00;mmC<3XI`VWkOxSQWFY&Go(=3u(6E7~Uzq``Ur{(yKU{dp>Vdyc2kD?QW~ z{nAgpcs@PVm!}a}ebWEHdK&$BR{hc=y?YWp)6=JVnkP9qMp`_)By5r-aHdH0#_5Ur z9b^YD=m5-fe2vJ%14P3-P(h3aL%8chA;iHx?83*hL*iQi$XkK82Ll9Tha!0U#;2bq zpaCPGK^kZ#8gM@6Pr~Pa=01deXo{xkd*<mAA?mNb>bHLBv;OP5e(J}5YI0^7-avFx zXYTL*be5*=n|o7&V8nk;N$kUCia{C(h6Ig7sE<0SBfu&AgwEH<JR|_fvw*kjLlvCD zJj{TMhy2d-J?bgGN+^QG)5G+iAGvSm_O1F+?q_-ba=m}<r`XfKf7ZWx;y-}SKa<Ko zKmY-v2FMSB0|g#b_(R|iV$kYAQ?^eTy=WHcrI|EIlCp@)=s{biZ`nSRCiPJXWpW;i zX!%qC0DvP@y9fK`U5U0&AD~e3WXcq9%A}$IEBEn&0pP~XeTr7jiwPjd&XZTMX4Sft zYgex(GsQR%gKSx|XJf30aburav~S_Yl{=SiUAu4hrM<hCZ(qN2*{=9Hm~dgkhY=e_ zvkwTwXpSL5i&pP(#EX?BTa0|!F=xw~DSOUbIojmW6QhkxtuNX{k*rm_j=k@7YuZ5e zsaY0{B(#0IdsF1S%(t@AABT+ushs3QNoXejp=pir;z+Fe{A@z0Xw$qLCfVhf_ki~b zqWY>t8*dfsycy~R>}2OuQJj7GzV8cWA#s2IS%>LwlDz&a(7*#vS}X<x8Enw70S$0a z!U-oF5QyEB!Em=_j9X^I4mS)jH4R%6(Zdo^Jn_T~OB5+Y7C9VoL>FC@QAH6mRD-b^ zWAre?5No98LrqBPtsajc5(AAi&|pN2i99lno{6qX38|J&$%l-cgvnu;o93ayh<$c} zfVV<c5+;FY*1^raXyieFH$}|U2P&Ml+=m_hDC|>{{uJy}PzfO%)KCNiJyg*}vsz3I zk6NP)q|`pLXqieQ70Dt<C%shDNK>=T6jM$`-Azc}IQ$Jt<ycjfBIQ=ylrr3Os}3UK zLOZn{Q#H(RnCU=@j2I;c+$R$>#7IsVk}SH;kDw5UYAP8*SuY<eB%#VGdb9vQhLZGI z1b_pOs%553tk{XW`=&ymBt{R+M4!Y8h1cG}61`X7t@7R1Uj`*%EVT|<%&<lnK|Gkm z9!W%4#)35z2}I&<r1--WEylRSG<Mu|;DJ|M*wWUBf$~*-(hwsPF(8^qWhE(!sGk4k zX@R|eaW;vVn+xkVXMG1;@MnL69{<{C#5e}xBS}dr$-`HnPSwMvn}#|=s-MpA<f*xK zdNNZ(&Gb^SC6zU7%AlMzH;N~cy1KVd-R;O_e#J<+Fmx7!q)dtxgBXmc>`$L`kN#H^ zdJ^-wa77hg+|b1$bX;<+0tO;AiAQV>MXe!jdf-<}R5f!CT@<}*iG^cPQi?(68pKy! zgb_m>Ef3lBTT$GV;KMa-89HTD9%*GzRz7X=<F^WsUILMSocZPjEgJgC9p!M>-z;rg zIkYic9aPfChB5oF#h)>J4@=6>xV8)aXv0l6WI9#jXubOUNWo9vVv#b5xn+vPaDz0= z%OjZx!;_A5r0GpB6Fegf<o_1fr+P(DLXD#!&XNWj%=IW?S?iuiKB7Gkf-rO{T3QJ^ zBpe~7<~QJLo!MNMq7l^tH<mjRidIN5?tQIk%6JH-nq?CEodg=2BFP0OM~rzPMtVqO zkOiFxsOLoyXO+tzrM|bcAOT55#<}4Y4fe(Lktl8$D$)A9m&1seP*ci*2CYOgIt``H zX&p??lp+GSm^DXMNKzmbkCvRoO%ag(X<{J_xsS*pa$k$V4W!E0BHNV@l5*>i7CpAB z5svMKUqsuk(Ds`Wc@9aF(&QI6RJt0%DmB#sohEe{J0e{sO8&E-K9J-;#4$2we_Gxm zd5IV(2Gc9UB&G!Sk^hE}eGPZJB8mHKb)yaL4}1iB*uuuxnzva`jy%d3rY5Bf+$eKH z)uGtOF3CFMWI}-z5gX#%DI{h|>0QUvm%IikG<z0ig8LlIA^kZhN50Kq;1fw4Nhhh* zxGj{NGff>uxv3Vq>S-D4lqBJ18(wuNMKlzckaBn{?cESW>ic2ZiU=$Jg_9yJ4Jf>b zAs|A&lwUKYX`^g<(*`-}aus#V3U`I87R{}d1<jg`dK69ceaehLC0Nu#+QoA&hcc(C zUn_An)lIe1nHYMAto|3z>M*Ni5z(olG!Zz(<n*ljFy>AB+13VG2vY9LSQt4Zw+%6i zSC{dS%%l{m`2W48oKfmx*p|twPddg^W;~HcZJ5pQjVNZ>%n&<UW+ZwpYa}Seh+GGy zJYll+tN;bATS<G`LDuR=FtiBTSU5(7ZH}53yJGiJ*w-A=la_0=Eu`%C#<g8?GGh!O zR`sfk!!ZXWP%4u3?6)e_Qs`H|oNj^?d0msdRlE55XitmUtKy>1YEFBtUP&k<S8<N0 zYqVykK2*`REf$tov|bHwHO=3ML{-d{m@=T`$FfF7W??mJcNs*ae0JBgplvXMAGEft zR>xA7Y9VI8crm=vD5*)6uGY9F%2K{IMbqSOIL}F|%Smcgv6~FYKvp;ALW#milBbO! zj37ZWG5@tU<?c%%m}4n6Cb20p>R!Xgy@^5$szT+|gpbTo6`_us`h&65WcCBb{79&e zrRFCGb~szbAPhLz!VSVOiQ?GmhUyh^fqXeyeNOkmZLRa0yHY(ZE=PY>dsY56DcO&F zEWT`OAqgA%DtS(Ls;X<-HfuyHr}dDPo~mz*eE1rdVMPp+KxsP<jOYH~lgGeRZIG|~ zV^N>PLbJuydpRnq6Q5XrF8avUL@CCe(%8dGT~2WyO0e!>h$6H*D6tcI*F^hjIV1_g zWtycj8+TS_*CCuf2tl4zYbB<G6pVK7tW#BQo2Th38&<)5se+AYVq^S`aPs=16jgX^ zB>y_)LRrYc_u-qKyQv|IJ(e&f3!6hkO4|(*_`e(2tz{QcD^CKklU>+n+gcH`oVz>j zea5xoTyf<32>t5t#&LzzVQGBNCbr)|Q#og(3`vJA+pcc&M;C??e(Mdwi8;oh$YC>E zq|~<GJeOIvsZzT1(FLo_qg&dRN>D7|9g_rOO)bHM3LNk*rUSs~Q(2RqmLh;q*eNIg z_(6UoC)&e=8?M>auEs@eA%e^uAqN3M8tRUaga~BsddE9K@XmL=6NDiM34B6~VE4SM z!3cX-yxr*@c!Tg=M|7XOLhe5Jz89oqd5p#uE>e#h;2;cWjzK2ys0;#MC*tcE6LwDs zVV^SHCqMIu`WSdqg`4Dq3b>&<Z(>g-2+)4&Kp5Ogg5i{>tRx?}pPVMp(4^=q30c#R ze)XXf{e9dZI@ynY_q`u}@Q?rc<o|y8(SLsRi$DGBU%&a?pO@%#AN=88|NZTs|N86y z`uN}f|ND>s`j7s4|E%Ls%K!_bfBXpHBti^0EfbUjk9?y_r~m+lk0opdC#>KU<{?ky z!2<F@2gu|N#sDW+;5@2;12b?QHn0OF?)AV!+w4R;=0OA}N9_=><K`>}v!Ze|Zy*=~ z^Zc&wgs=$vF7S--2M+=X1%e5ckO-lWR-!Nog%AkpCQ=Y?A{L~Uwr>(_!(^%?5THR3 za04gegD3ug1M{ODK(Gs*VGO*3H?GYm=HU$W;SWLqCWInQU?2cuK>29l4(_7@xvrj! zMia!sFY@9q7_ku@Q7%@1Ego?aDe)2Ajt8}ZW7I%0WCJ#6V>b9}HEg3cWaAS*ku^{Q z6jc!wO;Hpd|1CI-0~Ut^RcKK-bmRwSQ8;9A7hg@xreyo>hB-W9``~F(tS$Ehu_bmw z8C`H6K9C-AfEV(R227Co(nT3fP(8@NB;-K{<iRDJ@dB|eDr|5a_#}{IY6nk??P!V} zJI;!BD6zPR;4G?POr#!>YD9c(j1mh(LN4T7gg7J(NA58nNvC9(Lk3Du^uTH)WS}{i zh4th^PV}J=;6V6rqV_<L3WiVWVB#Wqfjla5OoE{!t3pr2gCZ5->z=|s=E3=d;T#Wf zi4FtRrpqQztpGdDkvvC8K1`)NXdg66r8q}_nq$3)Ql$vXY24_Pcm;QK<td#KzuL@$ zjxxGn|7RH#@P<wTc>D-To}{Hz?-)&j7H~r!y5%JELFx1a1W)ijwuA*SL0ecN4Cs>g zWFlJjL0n|u6Rzz}^l&B&acHWG$JEimbTXhg4iinnLi)-dWe1%K&BboSd={o26((d5 zikdnIGP!6qB+VZg#?`#2;6fsgCWRhwK#x4)2EKA;CL|v+u&vl>!QL)0{R!^yj3-Y- zNVeylzJ|>}g?+Y0d$7hhrKVL%vpTdVYFcG}jPkEKq=t%1g@DZ|35sH5?71u=3mp!C zD1tgDBqto`rMj)u80-@13^!NJib@R74hu$@34KV3DP6>KV(4`C=Zn7ZLqNxVY%7(f z|7M)(v2);)#e6ZqD1r-8%1B(ZQXY;mvmz5FuqN5lo^+F#a8g2(DK|Drezu3Hs;Wm| zOF!A?b7Utgx2LbvEky9s%I0T88}1{h6PzfDSN=1vWGt+<FMz}#1_EdcaG>adh(oz8 z9n<qL<;oo^&XIJ@H#_JvJLK5h2hlpjQuYl-pvkh%sf-%V(XQ#j$g6&&X*91$y@+GE z3@k!Vg1L6dNVB43Y%|p^^q4YK$SQ|Y4rb-jE34`X#A0cV@<(%|=5+uyYI5hB*ap}P z^w?+z+OlYqVAP}<^lH+^WT3<+B??X_REm_et?rbUm~`8c29-$3d=AEZKE{(8|7*TV zhf~^yP#1OBVCQ=9N_0GCWIV!CBuyVJiO`hH$%w>F$BH;Win$_^Q?a6dtP9-KGbc@r zLo0{Bp2|Z?1=_%7IdBKljLb4ICWT6=Y#d8KJJT|g6QORAma?)+^)1FCFew);r3j3_ zl=Ui<XijgkPKjw$SItRd=g`cEALVTxC+b&kjkhGqM+j1zNa|H2MK~noU;#E$deujY zYII(#!nBE<pd>PGOe_H_JVByfuL1&>=Tl2dUxO)BA<RPbG}&(DVd;q^DC~P=%VHu^ zLz*gV)XQOlN}JRNonVZfP|4UjNjcd~Rn_ewQnP7s3Do2@k4W|;&eK9s|5n^oR#cyr zLmeq@BqddiD!h>EdrHN^npWs`bzHXyV5`QwC<VA$=$tf3(h!QnQWLS_M!8s%me2+w zUrjis)+C0ZLL)3%5z}zxie(WjPeZ2UD#~$hWovj&!$xjJ2yG~7w$ji@GCPRS9<87l zLtqlFvAoA&TJ#D*%EpS7uby@o12@jBHsi9Ek@!{AG!awtZC15unGnWxRxVQlPE{5Q z(1;3_Sd5tzs%Lqqdtz%DwCqu^$}>r*uHs0!aH%QFinDa3;X)#C_d!lE?l!O1$F^2N z2MT?F_QhbuR^f(4qZeb^sIUgBv25$OP^pcEHfiH+GN{uhTj(hB7_)a#cU3g&A~Gui z%M(tSmB+sAx@z~B9{>2w=t_kyrJANJudb<;`lw*FC$`>3*H%PEe-+adszaLQ)}*F4 zu8NCRXN$-u8ty1Hol6WzPYjCnE4^32MhkI4wR{tIb`h-H1T=E9ReoHR&k9SDMD9lj z?YtU}VW#Tk*ansy%XCYkM#B|#iW1*^WLW=aSb%2|_y$?LQbE}iPH~W*fVhw%IGEZv z$0{d`O7qyPspc@PoEkEd+J;Ap?tXhyZk7_}rdLmQ#llFXHLfa3l{S0WMou{k8d%1y zl!Qqbfj4Y;(cTm#2oV7Ek_Xu-f%9yQ0ZDNSX+tG6X~YynoU&@%Er3z=MTQQ883t=~ zc0Li!Vp^wq&;LnFYZO<g)vrvoj<m9}0O*gd!Xa@<ES&`@)<N5HuxcZ0eA`i!spyR% z%!*uVcX?zv!xpGWXl^oBK67Y%xTd#C$IxK3X?(MVAU8C9wU)i8q%NoP8gw-wl{&&e zTixs=u!G`cb0@-u>&CF`jNs{x0w=ugCEi0n5`gT2;tduWkQ#_4d&Y-*n1|1bly6h> zCU5aBuOJpr2@4PNBG2(m8VW5h??$?#84m~tqVX_qA1==zjNtEp5b`{lX`k!aK&oaD z2U{tcCse{DctHfQ%|6VrC{_YJh@vEkPd|X*C58F|moFm`i5QTDNvLnD(cn48psSfA zI`)D3;Qz0z+s~}u@2u52t=ZcB+>ibigRIxut<jpU=en-(`mWD!{-}9912;LYS4i^N zBG5ocO|OP|v`U^OFNp#h`FUNgVm>Y+KiWhes$v&N5TI$nJ}euN(%5@J3!`&TL12I^ zO53ziyDUyywNbmYT|2c;`?Xg)24tJIZTq!tJGWDtwPD*VYI`jf(YJZ~wu##S#Nvkt z4Cqv|kDX1Wu4AaPaUKSMXYM2^R3HFuAOQwZC^&Eo^Z^cSu&TpECY%|GG-0;wA`;u8 z64|@G?IJJS!oB5tzR9Amb5fcWb01*9KsdIYSSBLGU>VA+^ke{%W!PD?gD0TEu}`8t zvj0&}$V2M(p&fDn8Y7`voUbLHdL5|xf)@BN0tUbHTg3gznh|V34nTbQn<D-v24sc- z6G$IKk4T^UN?2g*3PBK^+D=v?PUd9zLXaCF0478*$Q7IhZ7?RIXlD|GWA<Ccp`24S zI*L%7zuU>#s^i&&w9F6=#_5%x7n_rj0xba`q9J<`Q~&||QauRq05(A%R)G1~va0bC z0J1KMbQr|<A;q0lw8_`c4KT!`yg%w;D>VhiVZ4^MFqi(iKRAZO_i4(h+`doC$p<|# z^Z~gQ2o1z+3!s4u&<qC_ZZ#v&drdZc=@im2l+r;<(vfIDp4>m80kbeUfJ9GbMyP@^ zynHZ~6`Bh}(4AG)?UdD*bkA>-&;R3BM$9UrK@7M&3}oO2Za@rvu_C;8aGTtsGg{kq zYB3qp)i21J=_UdXIFqrWSaY~PfZc(KJ%Yd;wATH;4die>jmGSTJ2NGR&7CkFU3P_i zU)%kxES=o}y({!#SP6JJdiq$OHl?l|l)EBekbON1KA_%Rt|b1_6JuD(Dk5CNjJel3 zUN@-uUBCT3JuCm7R0AG*tXUZV`%*&|Q)8ajIkhlj_cj}Nx*Tu^33s$tzIhaPxsW92 znycsoTOy7Gmns6l0BlN@{^^}Q>N&(Gqa;J7Wa>GjBC=jntscOdi|N5W?8ScU$-eB( z{_K|pz?O^XkQG_SdLIB_9|~;l=aug5zV7k<?)5(J`F`*H{_P{AIFuPv2fy$M|L_ez z@ezOV6~FN(Vlf26WM;-SaxmU2-Q@q{;ESY|7Ju%+aB7D^6GDIVMZfe(|MZCg6o?@c zR=@RG|Mguz_F;eaWxw`m|MqP^_i=ysbDtP=|Mz)6_<?`;g}?Z1{}XKgjBS_OX)5Cj z<fK5h-u?floxE30Bcr9RKl{zfxj@^Wd`S86^yiVM-~U4yFe{vT<5bk&SYHkN8MA>f z+2I@xumFp~y5FCCebvZ+x-3620D>5_ddl=Iqqoc;y=V&&DrBf^U&MVBD_XpWF{8$f z96Nga2r{I_O!c54G`TFIGJ+6W(o-2tq|BK#YudbtGpEjx(02O#2^7t~7(j~}#h7Lv z44ldYmORKX;X$YlsZKqLHEYg#nIx7Z_^_eWun8w>J&QK2+MC4Ix-BYc-+{MuI|?O= zbJ)~|Dpd|t_V+Kto^=an)$}r|!H3GkR#jQgu;j^<X%aJAIWtnFn(I!Ii!)kRlTinn zCg}h5uSBmu^^MslEL3N-(44BIs#@9LgM#VJ{tdit*WjJw;w66eE>3-jQ<hx$7j<KX zilJkq2L^z402V|F1E2#r*2}5+jy<Tdd`$5&^O1oqo4tIB!{-}LdfYzH&r5G|T@4*U zra?CqX#rlOk0L-+v`%;W)uqfZ(G&z#dddX&S6Kx4W|2NrZ0Eo-5AG8Tcq57@(1~xw zB?B6gq~RirXiS0z8fi#kV~jP@Xd{j=zPMwJH|7ZBj6(XTqmexlDI<?V{@CP^Oa?jR zJ~9C5B$8s}xFs50b}3LpxqWq7bbTS{M|`k#x6Tn1>0-n_*a473O!MSGQ7{igGtd7R z(Xb-`pIQJAfSM|1L|%X^Eh>>z6fU;RdKKxDCPnP*d1$7;k)&x_LUo!MNd(dp7(rn1 z_EmZpDac@V!ocxn9QqUz$3D9}uuncS?Bij0`RJezBhlzng>1n<km;uu)mAELkm{po zqtJ3VDHZX}(?U!M29N_ZifjkK5%Z`300Od&tKFV==85aK+ZEv_M*1v5E_ZFd>E=9P z&}k>0B;u;;KI{wtNv$LrOi_aT?xV|g0h}Udc6H`jFQ)ClP_Ch%?$g%BT8R-u$RdwS za>*v2jB?5<ugo&bD~SAZ%P~j@88lQ;H|m52VK(U^;C9DOoD3T=&kQl;!@~ctc<%B> zoqZ+~o<)~RI${iB@T`|uw?R8qSddZ8s~-kmN)aKoHb{{ovJngMt-1QU3lOdiTLq^3 zD6&beyJ9pCrt?@3^qX+ZTI(*z>Vqe->H^EiDe@d{3&a(fO=5St#K%Y|gxiYjy0*$) zMccS~OdnySpMH8Yi8d5fVqz&Y7S9w3Gcnp^-yMfM;0h2*pU{jk&wKf(U@k?xz!1O< zqpKM54IS^ZOjj75%KCJQnuO+d2tYhf(jDS`(bU1m6b#WzzwsKcYVR{X-~O^=!MzNN zYjmzjugmmn`Q$K9c=`ZxieFizdsNfK9eA|}KFQ!{NplbRgk~wbdF=mrsH@<{GC>wn zNrhAbIu-2rR;<}MXcsCtfC`8vL0*j^5}Vi`L-^;Xc?3#e2>_dZZV<Bi>_ZdK8jN(v zRF#DUNJJg77DWgsj{$&<76*il3IY%VfYnO?3F*S``m`Qe)M|L?qMAMi1pp4PV`7TP z9k>dW4=av=9x<eX03@f2I0UXDNi1OA_F;%qv}1RtKo<b0=tL+kZ-TP3pdlYb4^2FU zbyW$=gr4&ij3~lQ6hWIs;y5eW2&0DM@)Zqo<)=2u0|CQQ1hNigwTsY$B+-G!s8UiM z4PmcCerRHXHi0cK65?FmdmQ`TBQOZ;Zx^AUhrbeZE?`=cBD?>n)!%FdfEcLY2)?w) zFz*nsUwLjGKd6P|j+m`W9&ldE=-WktXDJ8}a3AtWA*ghC$ap?z7^V^8>$-+dF@=wm z6@lMH;KZvz;Xp+CSONF&v@U%ZA{w<IUNXF=B4t@5YdA}lL>OaH-5`hxcbtb6PN5IV z31f6+WFIL*s;-I2LkIbw0tBLwk9gsZeG~I%!r~<l2MJCee>fmJYUm+kv5`-qbkn>B z$t#iK>T(om+^i0`jvBg<o%}l~A&?5H6v=a|^NB`t#4@1gNaUW3;;L4>st^ka5kO!y z70)Q8z4+)uV%l1tK578~2PESPF#S-*y2rh!Av0HgMF1}mZDp`_=yZO$8dQkbXVACh z>XQnMi5BHWS4GT_ob21zW9Ly=&G`%mps<1sH3k1qv#Rzt65=3a6!nxIzGOA4#R_vY z2)lYt#X=WN$ZGY$g>TmOCS8flaF08grr3-x03wsA%Cr*X0;L|UEsIw$q&1AHc3cRP zu4TLn-nt}ekvdxjN=So{MU^DHJIRDqpwm{BVAOQ%t#3wHY2W-B1sc`WZ4g^G7y#+F zCbcn0nH+^tm561)45lE1AAFPMKubDfRg8J#3t^dLqB<o(2qP`DLHcGGyqOU3h)>)R z<w~bCi!_rgjf-NAP`4}_q>hI<+?yDK*TFjO@kLk(Uk%kPB4aYKk13+M+&D_C%5YSL z5pv|?k|)YkmR@S4v$N}_N;Oor$SRwQ-d6wqSH4|dZEDMWVtrf&J-kWDNj5~|^PcKL zFLCpQ(9`5P>-j<iX^fjwvZyBCdC-IwbfE!l=tLuW(HBy5qZxhZM@zcVl)g}N9<>)6 zBY1;{MYBB5?CA$b<3AR1E`?Nc<JpF~wNZh|NrafHQyDqbsM9K~Piz~BoTg@5t}(3< zV`10APE4^q$gSg9++$}rLKD(5U|5n~NX<67o@Nf$pmk;W=9A0HwjhtYt>3Sfsl(RI zb46!;WLBnXYvyHgjSC6xPGth#@dmH8b>k5A7FjwC2{oyq4G}H>CCh%U_vyZE@bIb| z-|b%RBhUMoP^&J;j-=4*2&9jMPY~wa8XxX5sypE_{Ws$D?y<ES4(*#o>p-MKCoeRH zW>9w=xeI5jRb*Qojp&O|utG7gJv?wBL(<`@u2x(}^qn6ld&)BhZz2g^A*iRdb)B{p z3)Z#>2txSF)=L%6$a3wfQz|~|aA(tJBlEMbR>Bmg3a`r~NrdU65qASu5v+g-0N~(S z`|_Kg02PgP460BS)C;d)Yia?%RcsW=M>yvNfCqRBTtp)m;r%Gp`UN8a3fs;b>W3h_ zYA1d|11LQP<u`xniBEL`R7nrkA)l$MUfk&(CWv<}%b%-WHDn*T4sgdzrT<;+T;;EY zA*I%bzq;!Ah-^mIH?9RmHK~O|)~|v^H;5feQxZio$eVoaAxnf&)UH;1c;P?FS<<ed zBa!u04}?DP%B2;7zP~Qgj?w*17zWeD5uR!*0JAH-k}F;iET`a43iVAPbv70dQ%B^0 zR3LqOk`Eu{ev(BZKv03&_fndIaKxutJR}t;p>2u+cIU)b8F5Rz5<>d$QR}pUPZKr$ zWOn*tH9TWw)5C7578u#19oxe`5S1|CBQ<+sOcYTLMu0fBf<D@ESxbl!Qw2ZkP<pvj zKLoUdOj9TO12w#2TKh9VLTF4e0Y3$`HdbILQ*(s-kc34jZ?px1tN&FGx0PqHvtlGC zRvprQ&v!157dq{rM7;6`eS~|)^F%k00GiS~&yz@NMSkj0Jr-3&*K$9BXc6nP54>=Q ziP%!w!8>>28vRp$=i*l>bb6zAJCno?yVE;k@H=e8K2*R@3?oOBbVQcOKI!u}^N@l( z1u>eKJh%c{o+uld2ms2{DIXYzTlI6A_BwBNCgqnfl#?)~l{Q<{eigV3NMk1~kPtA$ zCo?oPnSw(xP#@9ITF}uKL)T~7CNF+)N655Jm*`C1BR>8DiYpWcF|{5g1%~^u4yTkS zu<}g1001Tg2Yo{|#uN#mpess~4Dm7#Ku`;YGLO8XQVtkd75~^f_9#{O$Uh!=TKX|> z%Q#%dXC4MdUelIQe6s>;!z${td$qy~xDrxsVmP@N4We{Xrlg2sa1o?-WxFOVsPb%Y zWkf-!IfZaQ+c#LFR7%ztHNv0+$v}UiD3k0nl{%#lU0^4R<$sw38>G}y;ek%_7Ywy> zR0zV9?k9iypja)1lfu}Ooimj>fDCmxlJ=pDCV5DrVrpqsl#gN^d^31Gmo|B$4=fM~ zDquHrGBHb7StNu254D%_(R~zgX|ZO4=TS30m@x@6D4<7#jfnuCU|Pd?kebteo^v;O z(}{X_SnFUgIdw^}GA9GYD=+yrFElJ%5EF4EFN5MV8UINSRuBmbqYspcnti1m2Ot{; zDFe;vfgI<T6+~*e;f}CnGX_Buym*<lr4OUQWTsIe)Wc%GWq~5$c;WeJ*I8Q&2N5IK zVq~%xG|`^*6%$!wCb5KkPgZiMGcJf368VsV(#0w8S$w&sDEW3>LFb*G_HVo9HKt}` z3d$a~hN1DqcI2j#ixO-B7HX^%b+80}7nTxav7yK@d@I^1C1D#ZmK)D<o&g$TCpTfd zwQ}S(OD_5wed(i}f*3j~OB;l5s^V!A_gwsDl&RrsL5g;82&EpwbsG|Jh}WHNS9MhO zbj@~@=Vp{ZG^L#Zq+@y_B50mkqiY^|q8T@$R<xRG=fOeUxhPv|riD?Gce*jPQ8O18 zYei<GF_wd}ly8efp97(%lu@RMIv+zipXs%Zt~7M&<!6myXn@9MmWpS6mR@_7XO|jj zq3UR&3TdNis-;@0m3AQ@N1qHQa(iK&jCvLtDyt{*bT>1nKSXq6@oO6N5*hWUWRhjI zDjdX$TD^5oj8tP)5o#y*VZB9|HEOKF0b|puA5F0}C+e$5I)2^iZ}JI^z={%!5vbPs z6SV(ouJXaEkvMLLM{CkkZuZF+HpX!2sunG3ubmM+$O;h|1&vPnuH=?)Md}z9mak~B zs0UjaS%aeW<Ptt~ly2&2(j%|OhjHyz5TN23nFw?5il_>U9L$nYyCraUXs1W^aU(c# z<R`F?bP>&D5oswOC9)v#marfz8Sv^z_e5~dg&@|5QZYtRg(|68I<B&WAi$Y0N{h3W zQLar(7xjRSvIJkd5q=#O6$latF#)qE#w=E$o%(ijTPm}*;wG!uMR18RgvT%r<B)r^ zdC}l5+VKPT7kk@b0l`2?05uP&*DvhCdIBQ=$pAMscw+bpwRMqkmm#ihrK?f*v%~-5 zl}FTf>(MaU@i3hgd3F*n`A1ZL5-5F3C>=Xb5DR7=<aPmvAYNHn?9&|y6+$BwoS4%` ze&Qj^vp)RDH~JSpJr|a=!Z|d>g1Ev)(2z%SbGuZAu8CV2AID<s))Q~%R$3bk<ui?i zGdc!D5sRQXl#`SH*iN~^ICNty0*RRz5j}UPjxF|LNNN#nB0ub~MP5KPw<Db7BtZEy zgn5IN=TuV`APjpO2SsBiU-(J-t1A;Jyi7v|?#W<?%e-{KLkb45X;l{eN*WtwB1hys z8^|z<896ZcQ9}in>M{mhScDFo88`T2siLeI^t>7|FAJ0>TjVdofH6@tyG{S4IbHA! zV}LmQctElFSd#)q79bDxLkrY&Mz#Ap4>>%=lMi0-3}oP%K9-<nbs6)P3B>RT#K6U1 zEXG|-#$#;8WsJsWtj1}~#%t`xZ4Ae6EXQ$7$74JUB6u4w%xNn5v6BJ_a$B?W5QzT+ zG1|Ki+$+f1GKhW@dA?UXnTR~dXdfa&LDHjXVRc}0DvcJg3lQW@I=N2Oq`mk%125+} zA$2ZMV^hrJOx<CS2x(3OlmiV3i@_6-G(}7S6J>ME%XRF_z1+*nK*qxC#l`%^Pg`$8 zTT%G-aKQRje3cJXa6s#{PE4f_u+T@|(>>d$i+h4NSR_Ma*n9JVLpT3WAGbwyC^4|E zbzM?ADU3iw8!IOWWmTA>3wM-9r$@Z^2R>L-Ig>KEwpkHj*;6z$EcE9>>k>3U#Sk)u z#lsa5>$P6#VH&GZ(L^@U`*6`3ozWZZ(H#xa(aX^y{m~>H(iVNv7;VxkjnXV#79u!p z#5NtS6O9P+#|C|q!ApzV3sQuDlXgiF`KOaS8I?9D2GvSxYo*6KL!)n{2m#P@9s(}h zaaVbz45p=75Hl})!U7PJMs+0{TqK(nQMQV8Nn7MtA~FvvU?;-kKZcMD8)>&aCJ-v! z(symwc|Fp2z1MnO(tHhf=@CgfYEfVD6$w!fh#e8eW^60L5K{k34~MM}i9Oki?Hi2^ z*_k~Mh^^SrbJ@P(*pdC%n?2c`&Dfxw*`rO_t8Lky?G=x$+MHe45;3)D+G?lEaEpN; z2TBVI0-2?>S+*b>zYR)uVuXpaPz_a?LdYJOxeuaZbFLO_C@QfsytNhaOcAURHK(iH z?XEkzZ{OXx;=OODp?I{VqvxI8>#g4H&ED_r-ti6J^DW=?{aRsirOg$w?^Uf`hK{Y1 zr8(L`AQqt;;ewK~%G!Mqj5}_tG1&X?;1Q0f5k27$Uf~iR85Ex37QW#TF1@?f-Q}Hl zIyjV#E8-&l;UTW#C|=?$K0Pk(T>OPkJCkoAI@7TlV~GEer6Z?gA%_|Yt`l`_YGK>0 zI!NRfQsPIcc+#un7LwxO&CyJrZ6i+QByQzP3gcH!l=^1kKcwZ(Oyyg?ZcedWa(c-W zw#i%y(_s3n;0Iqot`qatlAP(_(o5$NZRh=o=OupU5Po=JUTo5at8#iCutTGUPUwd| z<9l4_i;n0t+DMEJ>5U%gf<EcVIw5+Y5X;pYT~oCuL2H_xqDHwhEBT~w&K6A$Nq+HM ztgem#(n_w*WNZ5BM>*@Z{%l1H=mUZ1VuBu5n#a*dwXwA*y&>$_#%G*9;8&U<AvY?` zf*wUa>~y;9)0VB{N9=1#bjq;iU{&LfG2o#F4c&ddtUlD^#)j&|1>U75sn;VNOul9B zp5*Z!jiyE>fky8HLLvJe-ZMJt%$4kLcC@Y~W^RUK4LTvIR_`P@Y^6fMewJ43xbI%m zD11Q>oJK0?MNuppwl=01p+2^GOm!g#>gjG1m$AOOj^ry}<PyK?3(uW_*77P(>tUs% z|I$n22`?=Xas!(%WYW=Q^dJl~fXPdClu{uKnm}|D(hfae=JT)xchFYtZlnw`46rf` zH=qfRl&$y#4ZP4T7(3vLbfQV$?2)=PcZ}>k`xitD^r7aw)&uZ6AEMM^@-tDAer6`E zw4^aVsqL&NwSMn?|MFwMjw?T@0@9hET25i0^nC_xZVnZ+Q-|ujzDG(Ai~t7}vMBR# z1E8=d&=Llq@auYpqT9L%aG(rL9}3Z0XFcR+W3(vCclZ#Y44U6?_)hgN5e78luL<v^ zJn9f2FK8)Y{GfXL$sY=vu>8%>{Lk<F%^&^HPyN$x{ncOn(SQBhkNw>5{oN1#|KBhE z;ZOeKZ~oc82@}_3%XRsG(HHNJ?TBCOir<cu>i+M3_#l3i&{hBK4-oZ~Eu*JQ-!f?R zpbf*3CJYWu(3A~(C?-@vVK>A`%AqV0kb;YVB!or}VL^n8H2$E+>tPyY$z)7=sA*X; zF%gA{i2=vpNrVKIL1Xk#O|mc!WoR0>Gt3xJ0(oiV=n;rPk@}P=Q>bj;R(&ePq#34B z45(#V1(uY!C?~yWCQGKJdl0VIfd}pG<J;HoU%-I{4<=mL@L|M>`$A)?j2I}#kRK~6 zCfTyG#+pKH+T5A*XV0NQj}~2;G-%D7HGKxP>9lFsuTyVs-Ffz=+NwS0{|<GVw{O(D zgR>q^yEyLSzlGc89A}uaf?dCIO}KTsLV<XxYwuc}>-Op1*LJ0z{cHB_=(m3FDzN=f zlhBpLT_&F%QZ@T_hMFe^j{c5@5o42mBIzQUcFv+FjEe?>uD<iaiesN-a)@T0Fg8I7 zh<(_>0h9$nX=jFL!h%C6q3)_jA4dLb=Z5^)$pMu9{^KP;i}tC-!gg?Qj6s2}+p3<l zTHHs#|Mo$tI)c(#gc#_edGMeIf0FMjljwn_zPQ#aXvp={`)*7WQ8IHNl&W-aO*ZS> z%FQ;{gL6(f>wMGBIPcVRJwBmCNTB-u<g>{wzk^VpeGpYNQAQWl|7XQUBXv|#N+*q! z(MmI2lpabsMU>M-Aytx5NFQYs)JG8=712`bIhC(e`SNt1R$mQO)mdx(6jo7lRn*m8 zFI_azQ2dk#J@34m4zD1=e9ye0#&mC}_sX;GJBftEtGcg_-EO;jy6iHofwp`x6lLaF zN*D|2!Eh6H6JmF$MdDz$Te-fRPnkvFfQueU#JB+zib7dt9*C65Fc^(u5CfzwwXCn8 zw%}L@2XyDT0p51=$uQn!gc$=Xd&iInO)2jRDUSO#mWbSf=#!`r5b2{*FS_6Y^q}fg zRqSV=gBE(|!ZP90Ao=nl=;SXYDrg^qqQNdMs2`;|t*XQ2|1>SFq2BsYuH))D?61RJ zaTz70{)*Ow4pI_ruIO7^Zk?fFyK1!Kie~M!q%INeee}kApM?IdT57xL3LGxJ_3_(n zuLM`TaJTzbXmG*3vfS{<O&VPDM>jD#%ZS%I4@~XCOnt3u**o@R^}K7H+A&YB9ZcA{ z%YDr6T8;{-P(&UGCp$c>Pxxhcd81!LQL+oV7DI-pKTQyZtVbHpx^eGBC!SbJf#``I z!-xa~1$ms#$AO@ElTRZOBkK7V^}G6AC=9f|tS`HQ791vJn?)^4UHXb$<VG|ECQyM3 z?2Ap%6eu(uEl^pSAYWGGs<M?RTvoGM2EUdy4N|Q{{~+`r2p?rP?3fT(D-0E*uy(dl zL5fosY~c(|WhzdA%7z$}6|HVaLmT>#hcQeQ3xfzm9}>}sLTur#fVj6})hTAY8xNSy zbF$V=i;7`-9k#5+o~?L`cH&XpvUoQg0P1fZF;IgtgfRnX)JPdOiepZov51kSOC#t) zS_C85FM0^$Km{vH8-=kxq-;VSIl&223KgF_0Wujda$`pp<P$nl?~WsjhCFa!kwIx? zOyYw>Jtnyc+G(j=Zej$Ku4s~*odkT`q7DOXc}rXlh91ueWB*<TMpZ@&X@t9+;M~SI zPKgjvSX1T(tF|~5jxdCX3Slx=v^Tv#GjoeW|J(*Qh&IPv4sD4eW{D8T&AH93n2d{@ z+X`3Ca=P<y#S|yu=4m&<y)$xiV;toGH%_S8Qz4t+rCPS~r7r!Fcg~U)7Q4l|>?~A^ zL&{x5Bg(~Zxej#)<x`h%;t-6%Wf+V2Bz+FKksK_I5jmI(nqH>L<b?qU`Ut}f9AX5G z(F9}qphr%kQ5G&(EPTQgh*n$zgtAOR3?aQx7?x_%rB-Dqg<$D}^cSuAxa0@eyK0KQ z6A5C_k}kA#&s?gLkX)u!t+r%JlN^+ylS%1;kfhb#kSR6Cb#HAc^vc@yidL_r5QS(3 zEZbZaSi2E3oQ&fuU;6r3#~QYpd-ICU|H64$yrS){9}HUupNTcd3ihyf!_H+jYgg2! z?QF~R?A2Hs&|_9}AHCU=lu#7GVA@WYSX?OXyqMA1v5umuBM+a1`z=5{u%mv_3flTY zrN4Zs5G>>9#NPBYzBsop+D#NOu-R8xIcTVF;x2Qo)0g-}mmu|mWObtRroLd)x_Clc zCfeg(y~zbTc==a(*ZN-oALgfU3T9C3(_2_xEp4iG+iM$pxy$*run;D!s|GvTAazZI z*IY1#NsGb;V^AMC*vBqH;aUwdSZ#&<Yj!zkwgzWbuPxSaYqz#ww|Q8!(X^U{Elg03 zj`zS2)EBeBn4Ri~$)d!S-IApx|I8yl*~tfGnpFpNG%sN}BWbX$gRZ)#A{V($MV{{} zlZNFx!3oV<$;cSw$~ywD*+JfUo-#7=%KW-iA^K%jVgvkVKntcZ63dc(3=Ed2S?8`4 z(gFYikOs7wve5t#KqwN0S4_h&whLxlY<(=y#ELMPqYkKLPs?ff#*-HS&;jURE8}ny zQ`TseE!Mz!>jnE2vd=^@YB{VkT}O7-zxK7`JR8Mw8Mjaf;i!1!ywTon5z80#Epd;= zTjOHXdu-}m(vs`!K%rMYzwF<YBj_gno!O64RJW4beQpYZx7=A?Q<=J*G&MWM$N@AU zEb&4vR|Q(&0;fkNAh@0`|8sOY1kT&2*}(!!hvfk!8H00|IVxD6`mWd1w2W!IYs6X@ z$GG13rWyC#XCl_HfBkgZz?o{x%J^TOeQjq0cfytTHL)RQdEj8U=#7i6x(n@}n}m{W zX<wV#Nmuqo#iY6?N1IP#RyUrSO>Z>oORh%`GnS2x?<##+>g;~D1h2cMf`}5$Usw14 z_{_6rDI{lo{!1_>)EB!C+%Omd0HwL7_rF8~O7`he|LAikEkW|d&`?Ai8r*nxz(ElJ zKtL$!5sbb&-kbCQ0{}XLpuPhj0T&|C<wrjc5_RbGr4Pmflrj0x`(OsLMr<uYZ-HRM zZy%6QLtGmD0JNb#|1QB;eKgo1fC`~)7r=k*G|fiL#?qcIwC1>JQ7u2U>D<TB*Z$1~ z`{B_NYw%aEdexVH+=)UxjM-j#+1;=Hh+5a^X-XO-%by*#Pkm2wIurTJul}eTI{7#{ z)X6umLp(Oo7kzOPV$cMfv5TdtBK@iks_~0?a5Grpg1-Yiz|aQ_<UqmDhqfw|J0U^) zFhS1=tP5d*Xb7QQsDNM)08r=<I7$>kxPwti3oV$CNO*t_v4DM;2MZBG3ZViY6he7< zfD6e1tuR7ZxxpZ`kN_YCYSM>xP{JSF1;<+kT`&TD*g<_*z9qa6BV0mgFoaVOLVZYv zGVD2(i!ox0|3k+qA=zrC3mZ02%elMhxe8kwq2so%lRs#ay7Pm!_B$GPW2lXqviHL> zv8y*Vp*Q^zI|Y0;H8Vg0lr#I=lR<2@FQd9FyTq%55`U`;2q_Peh(PedySpogBM8FK z!@_oGv;eTQeb9x_3xG5vv3+R0eSp2b`vG433t$9*BbWzTw6w@u1OUL8Tg=5><O^RU z!bGuxXwZeb%ew>`zxOJ%#51q~Ixnx#hk0m$!r_!)umEB3!M$m`v`~anGADMJ0k4<` zD>wyqFoFx|f;b|PU3h~7NrnTl!if{Ue}toV{ErKah84I0O*k7NoDX)efOP<Zz0rjr zkcSp%|3P~+g?TuTe>{*2ycdH6$YwgppWB-qQ#og1rjDyV=VHk|lu7Wz!w@SGR2n}o z!@5T7$!QzJL-a`iL_nTgGf)&tbK|z1JSa5_N~O%YvimYO5i|OuzyI5cJL|K%xFP|v z7QbSyfz-es+=qPVf<&o;Q|Ltq;0s;A!F^bSWyl8_NE9dJ3q`QBeE2}XxJ$CM0!s^q zwG0Lpm_gyw1zTK%P{;=_C=n`H%Y4uQSP2B<TT2$%K%v2mw>p_$A~HwBi|m>Q7C?yX z+69V?AIH&!O>i7S=(}3%kkE6qP_R349KswBLLs~m6^O+pyuf5|vlStP2}y?B1b}^r z|ADAT6lCl>b$kGxQUoJlhu5q{A?(cx!OhB}kTIZ63-KXv(lAn^8jzd5PYXHgYp_$B zwUxWWK4h`*q?$jxN<GmRYJ0k&>_nt{w)uoVqg=bQ`#P%oPdzcfqdc<#rAj>cl1+R{ zHM7b!%fALqN@B=LQ+zMIP#T<BMZZ{w=QIMoV224Au?=JgEJV#jVT8mav46xseNY4f z(TCX!j1?sizYx)ASO*}q%TU0^M6rbvEwMLnv$Dh{Yt#p8qzAnu8m1^WEh@J(X_jzX zn-wjkwt>eh#H+?jlq)SqQ>aqEs0B+C$R&&f{(z%}RJ{usgGh)2A>1H%jKX~g{{ULK z0axM$4sC}DC@}yy02RO~EbI#*Ow$WInCz5+Fdb8z(JPblHEqhE*0P%P48PD~F-iTf zM`f_?B%GX-v#GSYv6C~W#LxOf$^&e~e47)Uyt-2TKLc#U0WC`Z6IJ)4I#&Xd{GyNk z^0(=LQ9~e9X`GM?<O^O<fdIGxAG}4kgiE>12Qruk$i&eg9M0|Z3%=Y3UVwpN^+93a zP`1p`!%R#sc!n{c2NI)3eUMCJ)kXx;hsR*H^`nb@i5M(OJ5+0j!Bmn(P(pp!f>6+h zH!2Z&V9_-sRDCFf|JVfqcm@)2mmyRE9f%_mO9m3rhhb2{c~F71M8e;+|1{w<0KSNZ z7)Y0a6owmROCz8Mf-SKDfCe_y0W-YKimX_cy-golF<?2Z>T|6{g{IDmut=>`o|~}s z6t<a!ruRIWR&B&jg;k|h9ZhIJVjzZLfLf{5gs7$3r>)wk&4j0YTCJ7ZVQAW^{aUYm z+NRA~t|eQjwOX)6Td{Row^iG-wOX|8+O4Hpux(npjoPc-+NjlAy=B|IwOgr;PzMyC z0J;kUvXT@E3=QoITS!ZBy$}J|8ydaEh+~8_L{t74#w*PSUQ9>k%2F2WkRx16zF34i zXv-4KTrpipBNfuUnFk>7(gjLVtIEWCGZd83v}D+VJmoT1NzUth|Hr<Q!Ei}V2LJ^s zcufGXfO%K}jZLYAtOt2Gy($QWII6f3X}mRDUgGQv8HfZppj->^Oj_Vj<keW{B}Wnw z!n81iWT;ov(~C?q&r5@pz+x>7<Dk0%mHY)K(z>kan^{Onp<`M(Q=2iy>5Z>#TeOW( zz@=NQ?OM8p;0iul2;N!^-r5VMU<}sa3;y7<ZIrz!VN8*xyz1CX%d5QNo)lIU6Sf;_ zQsDvinGup<6<!n>M&ZDLm7Bv9d&1!rUW^{bCwq$Fn;W4b{tJ8(sho+6vuc(CGF;E; zK(QoC49v?QM1buzT^)VPxLg6pe9;&ULNXv<Vze}Q;Nlg9mVgo|1Z5;K5(VRYSOLg< zOtK_nbCtLSng|FwnI=)Ya$y}+5>HtJ;&<W|pY!2d3&Jb-yNQ$)wZSY&wxAILHtmAb z#gG9i3>QnzD^Cs;?)keJ>fsRTi?Pw)T8k_h8?0zbA;GDe@${N`I-K+bAzsro&Dw{i z^)q9WrXl`2KVxEIwwqxdU}FwqBKEUkPG-MIW@fhkCu#NzQ0d{p@EI8W3+)n>fCFM| zw&uVCV$1A6z;G3nJdAE8jBXCNZ%(Xq&PtUz#r+CofHR1_41grj2R~q53kX9MaDYs( zMn#z15>3qOO_UGh%X}D41mLbR))4>zXlqoG&U1iJ80fTo%YB7jvOJJ{@LuKQ3tD)^ z+MPO~V4Ar@ot^QfZtA8Jni`xtN0n?FE0_<sn8?nNKA66o8+)d<(PY1H$h3hAQyE9a z(F-a5n^d{AY!bB}4x8>#WgJq;yaKj9^epL<Fj`5QqBdleBQ@<4oZc{%trnVNMk~QM z=D|qkbOsEy9vZgxi?{}`bw=gHXluj3Yq%!=40_On{=ylRfns-+JGUVWeRyO)9a#`W zpm_j7eYoNT>T9J5Be!ZwgfpEM+ca;AEUpP)W~%1C+7+6WHAdwcyNS6KDCdu*ny!H@ zt--V$G?jOXxeMwwP;t3Eq&3=>u$on^5wf`#s<2vf)DELQS@W!>9cK&r8NFU^!KmxS zj&A7=w6GEge(SUSx}qR4Y(V%sc~I=>2Ac1#*d$RP!PCEpO1y8ulJ9^+_ZBs~63;%& zH2C&pqTcLw+H6Hds{;rOk0pj7Hto&cG<WK4Qu}Q0)7hxjLsTnmjPop8>maJeHA?1` zo}Ia)hN4WU=J4)t5C3qY!3?cf8!IyZvONPhv<7h%H|(~O3v_!c^@9^hhRGT0D|V_Y z75gCCre6%(xw<MF5W_ST5Da>N2v>=4?!-eIho*8ma8=gvnKtm$x*V*|X{SbTadOlh zA8l6_Hl2ZsO#tu}A9FG<bH1=I_Zllek(lO!yP+_1INyg;EjOm2Gw)H0&q7q2wcq>x z?H7aX4|>ViVlCFbL!br>Wsp<${9zqC$H6g`E3dhWYcXb8ydOs=Ms3L+3-Z`5wR57d zBOG0IP#n$EJ|wuiCBYLoUhE)9f(3U19PV<sOYj`-u7|rzaCe8pb4ZX7+#P}?_woDo zkFA}Ws_mKXuHC7Y=TX&U!F~aN{w*lxp-Cx-?Js_GpZ;99rD^Q)@uM^+4EX6wXU~J1 z;kTQ!6wSA8yEcrp=aW6EqWq)sr~PUe)c4rknVCug$ageL4mqjrxyo1QdxG<&)nf{~ z%nfwjTZi`>E8B~0-PqSUVqe`=fgTPX7ne$;@33(c{tzz7v-&5?nkD@VtT)`y#iwZ@ zH+QB=%By}b&932A!E8B4lu*s0cYkJeIQqT?v7ycKRBL_5JepZhBTio3?lq9_9Deh2 z@s?w$l$^l>FZFARs<(SwShYO`yRI8sB#W1}_hDF=hd;1Mhg7TpPjvi2xeb5j9&d@r zr{Fwx$~iV);BkT8r`YMS@T<?(!TEvkJGMj=LFi-AuNcJaV|6b+f-1I5^|9dVWA)p| z1}@(%df#SQ-x^HcmeI$&UonD2ZkctyorE!_8OYfV=++4a({7Ki_^LM+&Je#ux+OGU z?Er6hA8%OIZ^Y@@(#vnw`FU37d8pTKWafE@3u9u`FIdPurHCB&JkqkwZ}Qx4{8!BU ze#}_e^P=qEY1QZX@W0F2e@D(^5WoDEm!4O}{5STWmw$y=JB#;m{p<LO=QRb3s0RmZ zQ*0CRg?{G}sXvq8BwJlMa~E@OS_v2<j)?dFCq|3mjPdPC)}uGKb1?Sd(fJyO0|}@) zvwy_K<pQ#K2DqpDqyQO{h_Hk_zCoAYIn(zCVGvUMD6V@m5JvF!bIf}e#^ERmE;D#} zeSv7`#E}G=t}3j@^5%1Zl#r|OL@cNAfFH6VhN{Vu<?uhr@rL4_6gJtg7`BuxoIu<n zgrr{benb3(8D1>A$HDgstva)*N)Ky3vk4uUL2uB{narEQTl7db;A#tIcN|9~Z#8eS zg>KOE1L9N-fLe6A&>ElHM<r;nw&{u%ZrT%92hqFp;@zD{!=0ZD`BTL^O|Kj#Wz)zu zIazA>c>%6lz20bcdzRw&xP=mUtH6#+8>@&|>ER*4efAZ++#&`=hK%@l=p^T+hVyg& ztx?&ll{N0QaeEvD3=CqlB~n%{)`he?(P2=DJl!RySBz2%J053y3k176`IR=bU%4bn z=~;2aQlv;cGD|A49=}R6VeN-$r64UP(DP%cGB-oeLUazdQv)d3ZVDopR9<PzMXoys zQ$;(}>rk;5wx!r}?@Eq{c7=R4lfglZ{!m8L@BB1E_Yfo!=}+Y|00gn20jzkIZ&KoV z83amFwN;8$`HtA!7MWp6Bzx&*N!X=&Ad(*hQ~-2<taLvBfNp&Kf<Xa5&EBFC`Bch6 zqp_63tnP?`FRbQh)eeH^!z#4ZRHJD4;lcUnEtDcDcNSzxY3jl=!7%4`RR=Nx>R{~& zYbq+9L2F((+v_8=iqb(MG@WXkv)gie7)B{}8vd)%&ALI7PE|kC0v`E>N%k!H2FLdw z<<sZLnF(=)&Wa+47Y;#Ts^8;Ht+f?CM*)}QYJ@rp#LW=wvk6w@KR88%Sas{{2jxmt zd1U5%&tooF+fhSlryJoYO!6=blO+7)?Gn`H$>Um5g}d(qL;1QVqA;vdWc{cHYbc%7 zL{wndxOIvF?*xmg*<$M>k!wg|iWDdw$CDL6l>_*c??!<7YT?=>3h+|v8nSG&Pbh$v za4mY$*T>ot$dJ=Sd@A)?Jnp2g9t$8SSE@L#w+}*_6`HwrGtv5yjTU@@^_rM(bl%O{ zZpxB!SK(3^XF`vNFa=K%?XrU~so|7-O+KP-@_s9jwqpjLoP>;yAWCnHx>p)iWwtA| zHku;jvEw5ZpQO*)*=SY#a)FgK5wpw*dO<zOQ6M<cO5&mXH6GEUHSzxnceyiKA2k!j zO`@>4VqT%LB{7|gBORsV28Kk`ZrY50fj;V;gJ$sN4ubw;DucTr{m6&Qob2f5Qj}*u zO~?)<$Sxm_=;hsnLK2Q*?QH0;b!KvPN-9(lI3_U*2H|8<cnYa|Kw3RTG!ZF5<NvlX zl;=XI$kK}O$AQ$DR0+T7u&59S1!JWbk|B)I4$1~hQ46-n6G5i1hc)^j0lIN-^yMI@ z(0Dv3_6YG_KWdIHioe+EFzpCY&s!3C;w-E!qE>#QHX((mSN&$(xvgDl2U`Szx<kBI z1;M}hi39k!aaQ*jhJcWBhS%e9s#jOkYxXjxSEO3J1H8=)Eavn?9k06-Koo<ij;4WZ zG5{26A!!_SdNX>A3BJ~NpNs+LV~P2L(lKCejAKHixuFx%#9HBI^O)88KGI8_5u@xx z60g=<m%Q{tf*-dsU@~JAVE-yYEu}`ks|p6_k;diO3&!yz>ANkY2!2V5WS|m<fx7ou z14F)0YOG;0eJ+US{A7-2vnngvMV|5J_q+-(*6^n&fkbD+GT|WMg}e<j=9L&nnKK>L zEx;g6(Y<0KP8BBl<*V`j9Xst7`y~xmejf7`TP`Bz0{f#<`H)KXg6hUiwvP(g|M6qe z@S~3tsFF$W@$GwZlje$F&B@S;oT5Akn%&1`^vHz-y%Ed8B*QKn_RhYv5&lkLvV#)H zp)waCEyDh>t1Vs{`X%O(-h74mw{jy&YAk<n#V1#8B;HpUDe9v`?0+1>wFz-j0+@%h z!TAz`mKLZU1nP#WZ`xQe*~eHbSED7t!!vy~;ow0iy#$G7xzseS787&6c7FdjCi%;0 z>nHG-Z+mX?--t(v?%WHB7vpe*1dkwAFqO;#&qEE=C^|voXH+GcHQ9i2zhI@Prt=S% zqavaKT$-B%o9WtVG!*MEAq!ZASUeb%|AidDMDgnRTjx;q!^HC_;`F97VH$4_+*cP! zW>x4vpy#?XB($G|C1tH~vLDTdpS`~-QR>qs?S^vslS}=2YB}n;d`14k3Q+N+pg{U~ zdk)35-$Y{)?8ot>0QW_&U|vh}GMY!8V31%0{V?#Nf6XU9g5J>hp;;655;lw5BMvJ> zVSU@qR7R<e7Y1;qgs?zpBJ*$n)X*RYDMs|}|5e_;mmIy;Nk&U6!1^6m58<1#6;6f( zdPh*9lv!iyFl;S9(An}^`cHe-HmDAG+%qK2hTt;zCHml*lYG8Rg{^*~ejyqSf7>7E zcjOYhcYuaD?&5Zzok_ftt)fO8qnuBGpgVMqnfXS6<Em11AggMrs)Q}+nx90%3EvMB zJS>3i{@w>wu?p=AM{8W1&^612PbJhwSekyulO5!y2QWOKW4{4B12_OLmjkL2O6&g~ z03ZMW0sz1O05|}E1ONd5AP4}20Dv$65Dow$0bl?C3<7{505A*yh6BJz0Q3b52LymZ z08khJ3I{-ufJy+M5(KD(04iaCN;ser2|xe<2oL}P0U%%i1RQ`szPuZN1Obo`01^g3 z!U4#a!HaAV2mk>AU?2eeWex-cfPf$n5CQ_iKtMPMhy;NFATS67hJe5@5Eu>uBSBCA z2nqs0As{FW1cig3NKhpJR0#rALO_);P$e8xi3A}4AOr}6fPfG%5CRTDAVEj~2nhlq zAs{3SgoJ~TFY9>OHV6WMKmafZ0RFNp2oL}Pf*?Q$1PFrw;SeAa0tP_9AP5)&0mC3* zI0TG@Kmiaa2m*ybpfCs&4uK*el>kU32vP}wRKg&Ya7ZN*f&f4eAP52iLBJpgI0S)& zAOR302!ez_kT3`m4ne-C;6>vg7ytqTz+eFQi$-8T01OC%0U<CT3<iY5fJhh^00V<y zU<eEhgMr~NFcJm@z@Q))6as_7U{E*=iiA}HV3i<PB?MLpgH^&|l}H!@07HOa2nY-T zgCXEB1QLb>z>pvq5&}cQU`RL&`J(+7V}sxT2pj-|1K=;lfCB+=AP5eGz=1G05Do_- z;a~t941$9pa4-xGhQq-~I1~Vfg5XdH914R&;czGtUI~C#g5Z@9cqI&835QoA;Rpa6 z0fHkSa0CpFfWr|;I1&Iyg5XF990`LX;cz7Ke~$2CjTe=?tm|d+#T9@6BoKrILXbch z5(q~Ekw`EA2?im-5F{9e1jCVFBoYchLP1C<1PO&9p>QM=iL3-5D?!Lg2(l7}tb`*g zkw^ppi2xxH5F`SIM8J`V{|S3>v=?i?sQhK$|1bRiz5f4iFY&BD*mQE=^ZSFbNZAd> zz84IJ6EP`d%heYSM^k}p*T(9LM&s!vqv+%tipP`RYg8JHH<V1KbDOJcvL--8te+eg zS1}#lP5FOtIodgFgs2pVM56NhTpvsqiv<gVX>JcR%asyE|LbTvRI4^@R-f`ot@=?1 zsVOw1Y2jFHl<yx{f7EhVYce`toKkFM|5fj>^hgd|ax`uTB0he7lIF727ft>)?2|XA z$z&)J!Wxr)Z8Q_dq|sxa(X=-m%Yp`3)!furLJcKQ622(2%l__iz5{c+b1XvB|FihI z^Xthkdne3&2ZKA8pq84wu&E~jhs}vH0fE}44-&uYTJ@2#Z(e`8UZ3tXPZ!Phc|0Cp z374ID9pJroI{Xy&?=|vyYx|Ni``bQBTi#bRPFVvF%v!6Bp!39~yr470JJX<_bCmQ! zE4yW;!IvUBzrzSfunIy^J@1V@I+_m<>hk=Sq+gomZjx0R=E#^-KzEu<cA|Hs+bX;S z0zcFRFm!*!8P2t3#kO_}7K26JV3%kJv4eNC#8}x%(mv6wSf=Rm>h5Of;9x_NMMbf9 z(jifYrRkO=)U4@lNfnT6FB<9nT+arZ-7F7vwz51QPU-`gcWFg=fj=YceN6Nl_KKpE z&qvIK87l3&rRiH(<)sd;?6xJnERhA_7^0&Eey@0u2ey%9M*?;ctZ`Ud{>=eiz&h%d z$~U#$ICj56`X_`rzE`vRo>T&5G8n7hCCS-0%=fSt)=V<4+P5^BMHjZTyFOJ%)d%^W zwr+<_);7asRypf8=RHVyU>3acJr8G-b-jPDs_OaxgwI_4SZ}MH`*3OD7lQ<{1{Xuv zl1eUvl==qsL$p?Kp24A%Bc>i2^R@auSf6~uI7j-))hL%Q9(SM3d{YDbT`S)8wBYet z<0N0SZQ~3%rGaXq<aM?iToI_u*IQgz!d%>@yh6$|H(q?Z$WAO7Q)Lt$!f*FvamBwx z7u&t60x3GZ6SW;&^pr8D)mCNI?N$D=d|HFdF-r8GeAHm|p>({L@uG!c2fQs&GG7Td zPw`3!k>y<2Q3lr%?+MyCwo7Fw3YTUnRW_&W=atp^NTkk0bjXJMYMWuM3U*}PX>ODf zG_2Ea>QwLEkDEPfAV->IgxiMFo~~h^Kd;umrF@owOI8TE&NSvOovak4@T#vd^@v<A zf8`=NO&o4xi@T98OWwEBpzK}0T2g&MZQgh4{da$U{tXG($pat-`T!)e0c#Z-UjnT9 zFs2Dz<v$yuyz>&r)N&3QVp89IZ{1JedJ#;CXX?b8k&GX8A<)b4d%eePfWl`sl+9hS zIP<Eg=r=l$Z;sB<Q-^MkJ3L%u2!8^(cQ^QkVlKQ51xkYAEcFbSi$vw=BgqoXqStbH ztFFmN?yDp8{*6ntiQg9au+E3->e(ncscnjMD;W$_o)}wZCc0iMDa##TtZdB2;jEkt zSI?I?XiSm#EHq4>>?$EFJA~@rdpY4k7m}}mVFVA>QoJu<tA@qJOakL_Dq0PR7SC@C zf0D^-KFD$%EEuonYQ|Gj%X*?o7;ZhvW<9V4Q}HZg0*0U%JQ4kXC!PM4wGc7uP4)Di z6Bbf)Zl%qgnT&RHal9A2EUF##j31HHD@wAxdJwm7(~)@smw!ZxxG!K$9P~R;Kcw}8 zKsk58CBHUdq^v5RGkKOR$BtZ(@I5x7_xsiPpHdsMSZHqYG5oC_$UZB%*Ww#j6{~QR zH4Hrbc1!<GJScrG`}w15Sw0r|Aj;^9+CwNv;F<RQUtwF}M0tnz8WX=IDz#bzH;<!U zB~E=X_x`{|6XL>?KaO9iJ7w@WI8qeOCK1#@SU8fO`ALF(8w*u4bEpphY&*g!w3S-+ zEA&>79@DJIOsL<|jHrFUeylB*Hf%xE$gxxfe%AhyJ>698MQ&$=OEP72cZGrRiuGIJ zAJKNko9`~l>=J(C%Ok>z>0>;{qF#sEpY>YOqf&ujejF&r#-^Q`g}x!y*TKL~sp%LG zcARxo-NgwX#HtJ{<pjL7yOBRzTH46X>^6Bb*%Qa#QETS$I8n29NmRTy7^l-w7G%ok zQKygO$5KzM60MVJrB`Yqbwv~_hAOpkI-7s_l35i)%NN-pDN*<6$i{XWN2I{3%&DG^ zy?#azA*b;>cH6>TgulK{VA_F`0Oga(pEs=>v&%>LRL9yzkGvX|PfkKhtU94P>V1K> z?EC^<n*<t-gL;MK7KA|?tWyzG^HP!=*N1IyT;lzESEKlczw50kEo3U8lotkQcO4(8 z58roVix3dU`W%>3Hv<L|eI?@=-+GUKv}s68N7?n4dl;WIX-KZf-aS=F>d?SeFdO2? zD&>x^R{etE``dG}YghqE4~tP*gwy1lD`*Q^SZ3$cXX$PntaJiN<W$K&<5g?93?&W6 zue?BuOuPJnkLWsZYU9F}_h6ww4zL|8Ins|kF+ni~rMOd%=wp)76wu8r57xFh`sms` zM$Ga>X)Md2(DW6%sGM1MTXLb^!jj70+k(0_Qlk%r=}}UH^>0szvZ<ge_0PL1Uo}*k zkMxS5|Hbit#fEkzQuJEMOn<!uO<A8vzTFdTWhgXt^j-sCp-BjQ-ti~$p&i<IHHV2S zEw8X27OFU3PppmweB)Q~kd`O78fZ*f^b6nRcVTpr|8P(?5<`ehz2v}^KF)wuZv<@0 z%W5BY%*1!1UMzuhJoiDKzWZoK)mLzRpz0-c=<n6hbIRiEs*Yj4Ok_i{_j(M6eeH*0 z)IHFSqG^AG6~ey)fzd+j!()%i;(9z~ly*Ki2L%1t8%U#%RJP~TI5P|H(^j9lwVZ8l zG%0F<gqp=|#0167_&_=<B06Z}EQGIvaH=|`KDUaF5aIhA1mnV>t)eOQSky5nG|~4S zc$?z!+(Y!3p_CYOt_`??@ZgIZDvUib<DD0nl8b>13BFvs{R*}AH=)M<P-O#}EWuhq z&XLT130hr@ZitJx4P*sF1Y9dFz?Lg|fWLQQ^_>a%oyXe!+M86nkC6}KF4Nkt5;E0$ zMRFg5+uH>RoQJHZHwxysIUY0C49PG38BhpSEA1ZGURLsnMBwpLh_&a{)xhnaulQjW z+Eh!LHG8IYX~vdro=>klEtzcbQ32Cm^mO*2Xo))dV7&qs;nX=IK@>A+k>>=rY9uLH zISA}<t3`tFksbIXmSmXBuWRtmYY$>^+(MWmK&a3{*i3}^M2~kd5?tWy81vnG0P3CD zN;vl&*M-|_PsZm)-0QIqt4J1O)&#fgf>syeuH)%gr){CYYk~w5f6eC&97=Gu-FuBH z^P%;t?~e~bD(Q5R#M+{Z9{Z`R?&WqmNv`+1E_cILTEtA+^9HaN%Tl80BFtRc3<X>i zA;Dof+pdS;&!^yTe1V#Cn#KzV(i{pj181~YXUQLn3M!WlT8SQ5fl+53%%3C#`?sUe z_Y8XLmELGYr$Ky8Jv|ib?Px+UJ|-Gk%4l6I85)dI^htTj1nFRfdcxaC7ns#I(A~}Y zd~1mfe6-oCt);kzBPEE9m;0q=^S_K0hp^{cYK8fPED>C!;TeASX{^VR6eK)tBfO@^ znCv4^)*<ZQ^tSl!bIt8z0}XZ($GFMB7|h2o8uNkmSt7M4d^PSYzAsta<hx>c3g06r zKBx!eCmE<TNc0J?ATUhg7svuKJg^ZCjNYEzUy__lqyx&`B!fr+n_oHD0=WteW>O`~ z_%-QDztA?hT6hX{EJ3^)t<4&sI!Ov6JjTu*feJs!hQyWIOAVvZ%w6VaC5CkwO7Qq) z)JjNrna!P<G6VruT&4q3y3)$Mcc$;z$Q#lmDRqrki|}-$1zlM9+^oqwGhFnC1N#`1 zp)l1T><sSrNuI%^s-gZ9#Bo2+!-v6<M`%WN8Rkq);SB9$?Na8oSYY6HpS?wkM-!~s zJ}lAl;Kx}4p;^+rcEXD`Jfs|Hfj3UMu2+({H`3G@jn^41Bc0G90nZ|VFrN}bkO)VS zRe%s?Nup~}|1R;VFM)Y9<_(x#nb%L++gA-$Gysj?QHPY3Icn`Ty4J<;Ho;}7;Qc~s zxS*`$85o+5<t1xr3>`EY1CiSaDNDc7$!~r$Zfc9Yl&1p{7#sX>L>bX(NfbJ!v{Aqn zrvCXyNdyF9qus0-5}Kou=w2+B<^@tsoHw-7{y-BNQOT$`%JQ{yj8uG|bjBKBfX(!4 zoOHY_=2Sa3tI!ryl3V<PR&rR=EG>fp1HWm(E#Hh(uNY77hCD?*2=~T7$P|#%A~#Hd z26K*)*|RVt!nTDvo|vHDM0h{Wl05=m(Al^ND=G1B<+2Be&;*GvTrRv(c?kdBdk+xd zIO5<t;$-Jh`#y>b8ek-fpd?PVTk0&9lmtb;VrRn8CN)Y93wL4X{_~#MR#JiZg}^FF z`D@O1o@8F#!gMdsRmr5`h^Wd8mSaAX`V??|2_9dVYYAUi<b+0J6Vv&ElM`D~lc^Hh z9UYiQ?{AAj)0~Z>rd+|@#~2<rz%ZAjxh%tjaguAg8NaBtRn)5pMUKVf2Qr9EpdUqq zo8V~0V+B!ahliAl-uzr7&W;|*qWf<w!>_Fle7}n|c&cRHk%LwumC4bP@)eaYeT<{f zbmij3#Vw;vLWB}5YaU9R^9hs0y^!dM!M5U-NV!t8z7q8aA7`RO1+UoAc8lzvWxh0t zd!C-2e7?^i0#8G+4jNSIJk0TrmhlUuyy|3|g1O^!q@HaoOV}|S-lW`uM&=BSrz-*T zQZZpX5x#P6o@v;7<SDve1X?J0#rqp^hZ>os6rM=@0M2OQ6k#kB4N3EQg$+bJV2WBk zRii;)y(iXyWzsYh4bsZ5=KWGLEhaYJXn7IluNGNN(`!C|^i^Gbp?^>`t8baTu~&3a z)v=>84kM3>aDjTD`P+b@EOAA*)r;(nNljpYnh-xO{tZ1w)@JAx!0A@aJFeBoSUBY6 zhhT7lrq4>GB<J(Qjb{U>M_$T#IVyydaVPRg5aPC5s4ubxc9e~^XU|4{#AKC^_!(i9 zTu`jwT8NO@-zE3Aa*H!h(g>-bct@e;6M0ghD6z$+<AR2;b7Qo0-Ix^Ji=tY<{uaE= z`l*Uk*o=Jr!AYB`s*IOc!Q#U_pZ;NJj?R~c`i>}*M5>_Q0tdca4_h9q_t65vRQo@h z|FtM4323UMI!qiX0P|b+C%cQOw81V#Da@4wCrt2bMZ}YC<AVEF^IlzEb3-;Ffzl$w zekW8M(bMq{kNMc0_o2fpp^qbi9}_Lbc@ok4v&BputF7pi7ZZ%U9KSDR6H{~rRg!+2 z5dCIb!w^kgdz&|r-+~-z4p2BYxU@|azw9<dF$O}TDp6xT;Wi+S!X;2fU8u;~m;<>E zNx3r`AijMPL7w_34Rl^6qqjADF<loQ$$#*<hwFDivxfz*ib|Nnbo|&1pN&75+5*UV zp(h6322J5EiU)SFvabM==_92|6Xgb!7YNe69VX|K@LLlArqY-4O8XFZ`<58pSUO0j z#RoMUvcgilKbm7hL=&pG<ae-U<$6=|vbGQEI@8DDgH?@+iP@wTq_Q76yl}cqmKA6^ z$&3XPC&dY8`x3NU@HFkc3}gyty0ZP?qfF)fU$1L~etdYA9wcL{l1$-hOm8^3EG&SG zb5OnptOxvsyCO?p`A=shqWyI`P>9O<lGypFa0VXvXO+g9+Z^<BR`N?K=y`f-*@;f1 zT<c4NPVl=V`((z~DYf9aTka9uRHErsX6}xdY1{!ZDN3eOgYi~WoBP7)$*y87dBE2% zW&oDAdNmD?)ht>ITPL0C)tP~MgbQ7rRRUA+u>@-1?3nHcl5xw$wR#caMMH&mlzLqU z1*FD|v$VjZd;SH|SnKmuCmN+9Yvm=LnlPtJ{;ah=hN;CEr9>h;a_81?)sMR37|XO( zU&*^0qE5%X@N*8bX8aUq@D0bJ%9Gk@lF#w*FYP>YW0-I0F_IJHO8w=&)>M~3h?xJB z1MP@bGRTnv{ca8e)0ZwpL!HYOcbys#%Yn%<YGBvqr(sb>%kHPuF?{3ELncm#xd*zL zlZBPWwYB-zD*`n}^i%Wk_)7sN>NmcNNuS07MdpHP*0Xh%<W^P^{AU-p=Pl&tmtvQ$ za@NTeR(}6oZ|?pP>o+$0Uo_A`(qv>~_&6soc4KF1MT#~>>5pi-5_P~-1<SqYSht1R zdP4tH%px5EGkbOFVT!u8lWJoMM$}~-YuORav~A$^_tR=I);hg!-w%h4|2S7XPD$q+ zHn;uZAkJ-0{Uv1V($2aW>c-}O)4xux;p^)PSFh_hjJB^&cZ%D#mE)L(@pc{Nmu%O! zrT^_9KZ<V15bUb)VqbjR4L4ZVcihv?-QlcRyL^T-y@%*-?EY}rEa=*H{kp>!uooH4 z#Fjkuw{-2>zovlP>CksS#cQ{DHnLfAw{8H7_36B`uMeQv*{EOl3U9WAbN3QAw)p>T zIo9rlaqb(}?#uM-!QSjU#O-G}9%XGDM!Z>8=R8ca-)<TG^>nkP_HP<Gt;%nd+Qzv{ zEp*i2xLYo|XOg?0jRh+VIQX%y@SL-g`DQ;eV8lD_u!`VRdV2cZe}{EFzgqt_F{xNq z6C8bL$d21MsQ!1-8E`_{Jy2PDq*{d+`p3r%!&vTdPi|mud1JG)=hwfp(Z3s~sBbT} zd(M!>xo3j82b=-$yq=5d=~-&;eNpz4dZP>Jv#}4ZhnE3I(IO{B(?<rJ$A1Y9M>+O} z&MxS_kuttLs@aGb={Y%iVgGn@{Oo_I5qClP>y*Yxc01d0DenAGWicl1L`ZD^eB+{q z56{H^Y~bnlb#062hJpje$*seMN9>Jz&oB4fi;n3lBjmAM-MQe*3Ffa;Zp7^p!FE30 zjYG?xY`~qq>TbQ{Zlc%GTy2Zaw>>@MJ<fku@852(ZfrTkAIQEv;>`L(!8L>Z_WWYw zN(OoSLc5xnTP{d=*Z=4AL(xt2(mgF<!}ZyXarc4j-EU>F^CDzfJ|WJK^J9MAmiVt- zWKjV3(-v2w7<Z%bQ|nvqW~Zkv)u*=jr|!4UB{ff7bzFUUPorGV7>!Txx6hMxFC9*Q zCkX$}<~^%yF*S(2Z~;8E%q+oj|Msdruc`iBRsHwV>EFZFN(<+|lbOG}$mc$%f1_fc zkzZW9-;h1V&$&5=_asOF4_mT$5E?!W^Sw=8L+Ip<(2o%3{JuyM78Q0m9&_nfEPh9H z?=Q>}frEuYQu16h-InZN-jH^+(gq*yV~IxW)4iUYr#p#l>?SMKd{OGhABP$?^M%si z79}fh_UFqrYV_7$pekl^wQ@dyeKaB9QiVoQmMU^~y(W{oHy%%j1A|)W-%0pDFp^p+ zhp$~Br?S~`wo>-|UkJ?WRIgL>RaObDcBRQk;-wb8LF$2exq#E&&LQ|e$e<UkJ^_d3 znND@6p>OQ7*D<)ov0#4a(EHZZe=h%ypqubsGVSKER<m-(iqF5{&=cIFT5@AOkd9sF zXjnO0C0!;^S4;QMbJ>#)RIT8!<Qtxi`lH;HVESu@Uu0oT-<bM2^zIM43Wr!0`Vg1E zGuBOADH^#ZcYTlZ&nhwWS2u(LuXYt*&a^Ju+=B$G`a}|stV4CI4?DC(k|gJi-}`3n zo(RRr|5Rc3;0hRguY<XQW`~fr_Rd^yfYldbkMvzULqyae^%B^$KU6>GBp_3Gdf&KY z*MBB!EUup<L8-o+q;5x_>!p6x#XI)TT{CGi97nUR&2mkDoMA0(1y|Ka^wWjZ?bX^W z%k51hXgc-EVqD}?Dw_&S@^oln^y439GO>>yicM{)M}BUs>nB<BpWm3<&S}t;-OSCv zr2c9OsDFJX18Y)W)#pBmW?^e(Yjt}paf<M(O+3onG-~OdfBdjQajt(brYXOBtV??O zbfXEWGFX6T-*na}SRE!;EaJPBq$+E*DpM?xVOoIn?Q~yXjXBKKv@F@O*n8@D1mbxb zn$!&wWv0FKZwY<WCb=&Vh$QuzQ8u(aG`({SS}qB>w2x@hevSCSqN3mHioKks&fdln zM~ne(jR0yb&x$zFz-IXwAdPkDYleS*s@I^;4-@Nl-7azcR&tidku-1{G{xk|951P= zA<_JjKE>8k5!~{q$oiJAWk@#^oO!HKcQ$XN9?MU=>QZk%C+^*Ta=T_1jiF&5F#O-$ zNkGlw*NyjobN|S9hHL8U<yKWEnI^A*94*o!B(V*JL`KeM!(tZBUDimt&o5Jt$!^p} zcpNXc1)O9I25xnNY;Mw)XunTSadjupW>SP9o7De#I<AiDK5WgZx@95s*Zm~diGOyj zSj=kg6y+@G)ncFfYj(XN>#@>~m+c(icX3Z!KXy{;u)5E0b@|~(n5TVm8=cw=zY*HG zc(AHU<328K{q(FqG>C3e4*$dW@F~K{QX?-Fbx4HDl1l|2H?PBp@%>+WTd``pwOrJZ z;_#^o*6<F)9TkChGRoDag!=SFG@k6qUt-)nuQafYKd>Z6eh<aY&c`Gl?ob(KbCnpU z;o;?xVuXB-ke1paino?x=B$rUQQ9Ick&}9_&J(4fR7hG?KJ=cXNSeE1i=s|YnupgV z#>~Ksy4`Dp!{|$_a!3*Rc7!xjR4fA|1-VUgoiV~QUmp+IF@N)_U6xBmnObkHi1shm zu=o*i)Zmzu6k~-P<7d~1r0QZ;`qJ-~cxcHHN`)*8Z1T!@OlB;aBa*g-LX>CIhWU0m zgWTy8wDTb@Mac!b82s<F&PY6(73GcJ6qXCLN3iD6W0<70D?vUiz-B@qd?iB4eMH-& z0+pD&746E7o(oyO(D(TwC0>eV2P1w<SqYb5$9{g4&pHaR`h-%1r~LVQ^0<-}gUFxU zyYF#k`3uR%UMorDdyXo=U~Gj03%I1qv}K%G$~dnKeUNaROX<8k>rVTZxB(F9SY^1( zM`87(H20jhEU9wJ9qKj^R9OZ~8zp3(JYkB8TFF6(3@d%A#4>S;2m0<Zj>Lgtk|j|p z72TYoW6GNlc|NajChgcA^a8?l%~I{ta>ZM7aJ46*>c?|=Y}+F^&9+IwoTW<Ma3VLc z0FgELUNeU*G<n#v()7O+hFp@;z9^X+_mg%yUkaH?k^0(vndX#yREvhrEoL?$^${J) z>-2HWw1)ov6Fpu#-7#m1#ytO0h=A|PxWcOvx`s-K^r{lVbFsOf&A}d}@#kbfT1(UI ziM7?!&-J9V*1hL=Kju!QwXK$x>Qj50$Yb4Yc1sfQse@g7r@_+1V(X9LGZ*crFWX&1 zH4`bdydFOrLZ*q#jO+}>?BtN;QMTNwGz$h&q`tFh4+nKzFKAw`3*U~_pH=V?SGdC1 ze(rg?HKRjnEo-7p9BYS5qF_T#Y<BCj3Obp1FT6d3c&i(XOM|cCYJ~zROz^|K2AU0> z`PjOC@2IC`<Epbo=)+BMRW;hlWL%s;1q>OS?}nijDmI|{GO-%hI-D!EcxwJ~G5ki> zrqvvd6%bp$t5Odke6BFpJ{y(zA;nY=t6+Y~d_1Ov<NG1D!TV&Ij=m9ix^Aq#iKL34 z#vY&R-MEby(|oBQ=5)PjV^%+7*676pZ%}}89`RIWLv{(<xF){Qd<>b`{)&DW#Z=*B z*P*biB`EVBs4&mB3k!++bGm@@+LY$?p#YbUV2?MyXNcsR{Q&MSG&QpBg6pJ)SsyYI zlj^uH`5Hp^oYSPz2sQrf^mkiNm-TV#czd+%Y*T}N`Z1FDIs0$nE!=k${GPT<W;CJU zVqMD+iGo~uZyjm1fXrbbb$}Cx<uLue^^KFx9L9Bz(U$i$ECSXm%CvLB!|%q2xUF=v zQ@;OuKOmTU61DPo8?NNHd4AWD03*|N?A7WZL*n*09qV6X`86yhs^l_^m8%1n-<d_A z0L*5u#zlv+BL`HsJ8nulMAcN8rLO!#-HR-Hi`9HmkG|bl>_+@7Km7E`XHGSu2)}}l zlLu3L(VQNm{@EAF-!$&FI2^Dbk-n0xlip5cH2FFdngy~Z@?As8_x!%!?oIa&AEdoN zF8#ISIKf*<^TOt00(JN(+uKcR$Nuer^G7xZC;qD5dDyp)lrG_|6TjB8VRc^vPRs9Z z3aM+z(p~Yd*Ij(Kh1R_^_W$zq6@;r6qGi{M%d$(nX&`i)NWLW7WngbZA^2bZWDUR$ zFKFKVg?3{0=<XgR%szkEaZ>d9K#gC2cg8JAvP`TzOuf!JAgji*KKIqOnfTyE_%}2_ zLh@B`yR!9GFCov5Z}&W7(a#?VQsu{<F%0NM(J}}X+&cTwTAKx#E#<^`ylTJW#63Wx zFb5OjA93rE5kg_&A8YJBU030laYL#4%J5R!{a0~>CHtH!J~dWGC%Uy4wUthwMGXoH ze)ny4o9`V9l9<0H$=D)@xsEh7386|rQO0U;_Ku#-CudT62{W{^{t)v&ZtJb;C;HO= zaE(_ii2jRP@SXkVGP%!xCu3^$qmO5+=|S<!<|1L@FVZE`8<M@F2~zZNd5A>$=))dy zgZUx|$|Jh5EaJ)Mg`Q2g9(b#3Oi6SLOTKuM;YC&93+2V4^%h<W6;&3LGUadnj0Pk( z(w6rISBdc*d=JWcm$xakq|T4Hj%?rV2<{9dt@`9Q&{|_B-6tr}sX-r`8N101uvV|} z-;UZs1`7=UyH0gl4d9Lba;&jiOk~XB{2+1*zrtx@oDg#vw<IBewRHYV_6q<dx9;U8 zt1sAYn~;n3>_br_ij#&0?<Vn7mP>!v=^iD*?d!xz35xgF=I}`f;im85qaQ@z3aMTX z6W9^xnoF)I_AIH#@#3*DuaX)_io#6dsKz8q%Eg|Us5ZrW<gLj9b$N@-Ir4pAuZI$) zfAokFlgJDK%@y)<2C(l)#JVSPkQZfdABb`AM8ewSN;ai<1pCWoWmqg?<>`C+Gh~^V z#mhIP)S9YM@CZC{CQ!0TEOv%;v!f?2@X|jghQ;8Np#$=WB%U=uBy`cVn^G}&lW=6) zfW_nId=5S$yU7}EK`us4haVgU*?9T)QhX68ILu)+l4w2XHJIi^qS3w0v*FSaXeIfW z3eYg=_dQe*fdW)$dqiP$&MAfwO4L}P-c)EgZSW*gg^A;VKUuvM?<uRt%EfdWl%UN) zrg2$nvi@VAXQX6(pm4gjIPU{grDarjOqlmFD$@b}?~vflwIJFA6g4^cST>x;Bx05< zj+Z$jC0JR7G3GL%4+|D@f<<s6C*~6or$jFrZUUd3MX#I?jpwM2q!x={Y+$QOIbV$y za3SQ9=ZN5?f7T>IvXhBplNjkWlw^^$29g?te9k=>XGoIn^do@({G4At@e`Sa%abx0 z+SW^(5z-$mh#5Kz#f!RGm<4uCjQD;>W2m2hRIsAKfnl|F1NvIl{tGsLH$5gjp(w)` zMLt45$DAE+A<X#aSfU9!T(J{b(<oMI(D&FGNQIXkHb|Jg7UzSd!ow}uS01Xi9PUjY zoQj3Udl6|kJMV82Vl5ZOITikS7Uej<yDkf--75yT^M#pNM1i`+G@-e-oWK)+`nw$N zj}<038_ul*H<?BGgN4Q)f#Eq8$PPx!U4BIeMe`v-`;Q#s^;jIo`b(>ty3f7(ukyHH zslf}tmy=D&ynMFzzXjt_;te!#bVz%2*Xk}J!i=nGlU*_(tGFwd4e?0251dQ|Y(=8) zh?B(Y<;^UG!!B9QsTUugNy!*!a0>e7ma%V>+iR|)=jid?#fsJI1kzfE^kyiy9ZREI z%x7e^w>!_~IE&@GFZnME6BRc#97v>~k{C29zKac9VD59V!(XJrGu7+@@+mcry{}rX zr_=9$)+e`E8-S9>1l8bPY4(P%Vm4MQ>@q4*&ApHRf~~!)+-FOWr3n9cp<zuFrgXm` zPEMeY73x>6WHc7S=S)`nUQS4wT)1S>nMrm0hgyAvNX}z&_$SGM2oX~qSs!ckFl$Wu z3{1}QI6vr5?{dxG<(mFfX!2OEtgS=jbYx42!g$)^lGfFE#dTAW(xQCT(?<uA|9$$n z6^$aoOvt_-elwKlu#L0xv1b+9P9+{}P_()c(I-6zj+p2{t`W|AV}Ghh0bhYLmXpb8 zXv8HF2T{oe_^AP}$kx3ZSU_Z1#q4oz>P*!Ntd_lAw76J)eLhv#TOU&qua{ibG0_q_ ze-8JePnBXC;#o#0wQ%?5`*EX5%pwpm*~*4wbWtnx%DO0$VJ4F}Qy@;;G3KAxWzPeW zTa4kMg$dhn`%~n(5!Jsn)<1GcW5M5-&Aq?Ak3B9|znhBM7*qEb)KF0l<GaA;IgRDr zRaf!H;4X<fy!i4ksY~)&;2jHw3I{(wbNt#uyXi%Y+HSW$a&sY%JH$F7%mf<jZT-Vw zJIGQlY=TTxQYXw?4$X8q#9J*`j!4r8F!EL$Cw)Equ_T=5z&Oh{<M2o1@^iEjRZlpr z?jcnJd{<(|8l10&?T9|I`+fS5uA%21%!I-|dbw6`J0@MRMfH#j7a=RTG(e6arV<&X zY~G_($Xl_@CJwy;__n$yt7SCG@euXpX+}3hMEcWDtnyDl*P?0xcyG?6zAAtA%&e~H zV!Hj<Kgv6hz?k6TJ|}dhwWVz2#uSsW9OdpdSFctf9@n?ow~E%)FQ10vSE#rcYv>jv z)-i@YPKW1pI!W@1lWJUQ=OFe_T+$=Ol2b6$KtJRoa;&-fRH<=2+;G#<-&vPr@hA00 z%J#A3hpJDA7_o0G7-}4`d(f(Pp2}G@Dxt8c35#$}!B-pZDP@)foX%waeY=0b!HUc1 zc#h#R>n{yxnua}Smp7Icd)WQ{IM?5Wm|jO1xUC+~qL)Nl_SF#RRH=Be^xVXDAC5I2 zJ4+hAX5iZ9rHV{>8bYwRt@*1LAV0lz;aHSr;1!o3!_rM*%i_&?7J64o!XYy&7aX-Q z1sacuRAu{8Z-TX@(Yfru2h?1D_=wXuG&UE3EnH<jc%W}!Fzll<oWC5o5H&Bak5wIQ z+umu2pwcP5pVX=i|89@h{QgJ^V}kB=AsXHKJaQHvrY6IvXDI}Z0K#=G=|#`+D{7cx zj+&Pu3dQv#2zIP7d1gaG)nt#CLzNSLN#Uz-gE3zCPh{>PJY#|XHUC1g#OqFv?cU-I zlP(<@>V!vNq~jc_Jf<v55m=i14#11&))_Sfpzau$Qi^I=o1g>NLj@Bs*N3J?A#u{P z^WIp&qAb5HN>Ao`tk`3_>qDEjOWCGOu`w}lcJeKcp+W|B;LyP4g&?hnN7Ye=wSvFN z$s=b}rgT#^qO5KPkj@;maiM`nx%PR)>@63|pmu3mB(gKGd(5^z<^24=bl~&imn@ri z|KUqPuwadnVtYfaGP@lzJN|7W|4e$(jy?bw{O6^okDnnI5Fhf%H0<#dB~v(VX00<k z*QVyj#a|iRMhqOTtIs?5$E30nW&nU%N-EW|G?Rs3;GSTX<mDz_aE<<`<rqJCTAV`3 z{^*cW`1?JDSPYfFI{o01ZDr-D4JWBM@}u%_+ZJB(l*j}Lp`UPq4;CS`v&#PYn({<$ z^x-T1Sjt9FH2=*|?miSts^Ha~SB!o?YozxKp=jYIA!_BA8+@+@xMy_#bG(S?hEg29 z-j@8&-a0ffDt=ch>)JkW`d|qE5Yk9}3r!g4VBmVwqS-JWU)p1MYmhV|MJMZF_!p6g zgl(x2R>}5Y1EfBVOBu3R+2+V--wkfVdOYUQC&&|&YLaba16(KtE+;;3g-%VF)nJpa zIn`$!wc*-+F2&V*=qp^atxR(ogz^>0*l8@jXA?HcO>=Tpkg+btvJx1$&o!q)s^JxP z;#s{T_o2p&5g{#Gy;j26CBi*V5lN9m1Zzo3Ql7HDa~J;W^lE7(d&1xr>rxIER>j;! z{7(ZF9w&%icajm8@-+QxEDn>?ow0`?7?YFH9NX`9A9GJ15Yalfc@jqPGaKZAx?Vv= zJUfkV$icZ*0wO}D3^86CAeDsKriHpY+%=FSSQXBsOSg92D1MLUgJjMa0stpu_D6+) z9kzJ#LWACtxJRcl8@!ZG!?lsE;B+hwl9ad6<oul8@4jYGc@m0Iz^t`<`@ZI8EQbD? zvtSS*Md?EAiR>``L%u_ZZhWUYDxp7a8c%+v&2W=OA1CY`m2t6b5O@<dZ8ZU#UK&#Q zkdgt!OcCM1KDnVvNT-^yiL*Kg%6L!plt87<;Qt>7_3K|(BQs;)w5X&Z9+uoJ^D}a= zwvppyr<0H>N(nNsc83v*TILPIXNwPKGJXT(VtcY=1NgIwd8#{vi3*X#Pvryc#-$a% zo@BL30Us{w#3l$;DZ@`ap!~RZ+w0_Bsfea=?R0W{3mm5z9}4Yn4;T?X$l0S)4K3%l zd}dg$-tfJj&F8g-p{vsgUeHU&P%_{!V>lR#SdwGQFt@7~3@2i0m}%N17&R%~ynKY( z?RC1XAJYye<?DV+<W7p0(v@>%&IEt_=D3ClDw4=0EBfmf>0YK$%u(}?ER!5kn#q^W zmKAYZF;_qonQ5SyP$?6}-Fc@Zf9r^-(_=duqG_%jZ+|)?D6;X=Wo==5x{5&o#BP+u z49?@V+m|+2hgpU3RjXF>HsnaszQO(J+&`7?VD?5a-u_^5_N7PFA9iDDU97tFVSUwk ztC^tn3{BY2Vxd`zoGF|}z)>Szob;oBSG^5h@RK8vn_a@yLF9OJGIHPg+3&iLEHn=} z-6AA&bF{CGX(Qq<9nX3Rg3!S#S$k4<$$h7%JhVjuutT&&K7A>nP{Z7_L}-$1dE~17 z#g|rvcF&Pgg!x~l7HE1gw56)Dvc3mvu<$MyMnosJk*TMA0c)@h)yr<gke@MW*py6J zXh`MvduEvu)_=%yD!P@SP-;Px(keHdrs*f~eWBh-Msumybs}xHqSL&n-&d2rsfhfQ zDNIp33$rJ;CU(D7)6&(oM^tR&-nwZ1$WS|6Ds^{z6xwsyW<#@*n93Q0sEaR3EpjtV zzm&Wxy}COP&(3tO2n#rs-1-I#@OWpFDdjmE$P}4b5lQkv6KPsass6s`n;o&&k+nr+ zMO8WVo5$BF!#M9Lbmed!N}x^S6gzeXB-m4yaxJCy4su~T_BN|giw?Pt#6GM6J3cE1 z;t7?1_I(bbR$r@~j*N3EnhLRPNS?+@adt59N4?2JMro4qO!3Rsb^SeBUaa2lQGDBp zwLnQ>&$qjLX21+l+P0%J7B=<C$KhX!0FV1#*?;x0IvpmCS19UD7m@ol!o<WvH<8ew zZ#Vj{HuOm8e(RIk)SJN<vithekzL90Et^xv9G1zS^Jb<PS*c%EA(q2BU#IL7NL_ZW z`h<L8&MOvqpFE2spXi)^;)kas{dE81Yh~5{(ABzbKNF3->$j*yd|iDM?sEEV`F7*$ zG?pS=(n^x2*7sF{$!^EqRLKCxQG{y@W#qTF|MEr4ACDGBy>$O2!E-<uz_H`n@DCk1 zosQRbV*kRHcl~-D&bUY3RQ)XOG9BT+9Ov>awhO0*H78fS(!ER=`~xX#@2RW3IB%MX zw%%%tQ?~Ai7RYU1mJhn`-dcaFQoCvq9q;wLMr!o!XW(c}`@>#ziu^Fgp1_&Vbij>W zN?6pQ@LDW~8-~(~9TdH!!8yz^LVt7LURD@`20ysMHx`v;r@v$kTj4J0?evc@zFBux zy-~B=>y$sugGBN^vr)enOW)C#8%BD~>1%#nYprV@M=HDbT(53yQkFOJxVW9JZjegO zzvd)HGisL4{zDh>`Sc|^at_*Do~D!@k>Kz<1=7p%@(fqu4@RM*XCnca#A|_P9<)D* z_6$6;*nUEyAUD(}d@cP%8;Nl=WCgFCtoZ0jX5y_+3Z(`4q$>g)_-broSvoz(_j#hd z`IR;Zi<;%xsOxMElH^#`g(8)zlTxb<EP<wn3fdD5Y0bqfoKD`829-(a9XBl8-`W+s zsAU*?@%Dg;Y)Y2AZm`kpU7nm3xXlDfI&5~xN)D8qL7$x29b(CEJ`OigxXyT8N#dMu zGv!*DoO71V3JNcv=B&8N=^ZL<(j*msNo0m01y9OEy_r}jSsn6FhBC!^f51XT&zP>M z7bI6O$%N&b3ULb#r2Dn!4*s4M9z9x1iBy(GmdX}&Grg5dL=#PMWRqjFw2_v2oQE~s zB!hqADy>?mM_-W@l3!)oosqDsU2^b`<I=azMwYQpsa2q`SWCRB<om@8&JsQ`UF^GK z5w%TaH8^G08KhaP^8r^w5bU}$wu?=b%{7kxK)qoaskV;P8uxDCB_L|4`^w{szXK4@ z#ag4$2sd0WXVbK|Np(k;t;(<Y*ofh2X<WUfA+6iq@>|5pROW5Ix<7~2(~(ZchsBE0 z>Wt*_(ds#$@}yG!Q^Xq1tdG)FRf<0H$l)6(bA8dXqT|0~rvSIr-zqANN{Z@EzR9cO zua;UjdEp;(X|>`Ykx?bT+20n?GM@@-Gbc-NE-%XA<rlh98^luZNC|;&IR{^-9>)2^ z>u=1r1$RkRGH4QazK6H9Drl^|bMUYFxn)?>Cy(oNnN8C@z-ilxaNx9kyH>TZmd<yU zV<MKQ$s=02R5@d)YhPij^W8GFe{rzbtPV%3d*0cH!PAC?#csXPRi|gkA1LW&N7ear zvAGZbA~u+AsC_T36CcB|b<d}}<R8)4N6uryaU6@&4M?6JpOg0j`}UAZ;^6l~XMkPI z4ks>ISYQpdUo?-o&vQE5Jiyfp$&Y8i|AeSg4^jRGW7%T@7WF#TUMgv6Sy4Aq*BjTk zCQL=c_)(W;OloWsv}x5^8P6NPfG-1?{?k^*w3#t~b)5FQ+H!VLw`zpNLt8R-b2jL4 z3Z%tvw4S{$b)7m~M9r0@TXU>F*uIn<aFQM@wO@bXvRv>0N;;;qx3o@&2U757_u7++ zr*{n2E?!qQzSgE$)$Q<2<B1pZKdNDGLiGIOZ~EwehFR9JZdo!_ZM7!v@J@4meDSw8 z&woyC$@(=3mN#}{{!TihdbL^&p4z$`Hs;sD3tgu5h9X&mR3lld51QuWJVwK@Ze81N z>KKW{IIj}j47OkL4kL(&lgk9R?A`Y>UL%GoSBX_!JIsXbBX$JW>DOKRLYNOD-~L@S zoEU6Nw0cj(tGE`C7I9}<Z%^{qyQmRK9;rD!!s`QW<6gqY>ghhCxQ%YrZe6ivzwVa= z9Pi@HKT(52d}#BGq`&9AKBfICv?d$i+8o@y?V2vU@XN@f`cL<<_`cx!Q|@i0lmBJ# zyXSS3Z|=jZulHQ){FX86uv-ZSkHptHXh@Ow&41Rf_0PK&e{udPvRgaR9Bo7F*WM(3 zH9XpB7ddmQds@Hl`O||Gxd`TZ{!Q9@KO!c2m0b6{3+jEC{w8`;#P#=3qxZ3Ku~+o2 zvF`7wTkq2bQuKb1>)&N^@AICR*yBRozuU&%zh~dXp0~M>4-38j?s~=kUDv(T`}ZRM zA;ka~`2YfX6pDP5H}t5i`KX-qXdm*?MCs9G^3hf3UuosPGNQ+T<YPF}V|wOe2GC=L z<zvOsW2fa~=hEYp=Ht}T<F@4E_R!;v<l{}#<1gmpZ_pF$<rAFI6W-+${-Y<tC?FzW zAf_lFe#1b*T0p|dK>DG8RFr`X>G+mLiGf_JfZT|I0#ZQX$Ux~?KpDV56;?nM$3UG{ z@PF;yRaaGQxCUSZT{IGkgwow5DcxOuh;(;%Bi-HIu!`>P?vR#TbV&%3YkRhTz&_k- zj(Iqb-#Nzf-p_pz=TnlD7m-v^k~S5Qc2R!RC?cw%Fq10!w6T3jjD)GuCo=GZ{DqPN zP)vbCMM+ppNk&CQS4^=XM$S}BEkZ>jvqQ~QOrupyYfwzBK}F|4MekBf=Rw5~ZbElU z`6;>h^_4M}5(N{um@(gkS!Ro=io&e4`1RDz>s1rhE~?i%CTw%X7*|DPZ6+LjJ0e)r zuaT+WP*F3JP-9%}upJkp2=1aN?D9yM^5~eN51G8yFhy~pM)BF@Gco0VFu@2eLAKfD zjNTOh?+PZH3byT{O8~eHcE5O-a&GJh@0bc_ukMN@QwWM|i3%Et@otIX(+JTSi6<8d z(EX!0jU>soBqd<tf-tE7BPl{7i6(01z7jF5(pOBo>^?NF#!5ueOXY7(7+q*kENCR6 zVMujmieQ*R8w?N(;~pzTHh{^^l_DL(RBm_C9!in=V6X7^WUtJSNcPlsO3^UPk&?~W zkZC3NO}}asYFZR(;2UXm(P+GEYPryA4#CYB6=<cy%cQc)UK!9Lf%o9z=5ocfG9G1c ze{+qoJ-t<P_^dgg&K%yl$DLdzg=}G@Lu-Ifr)Ohsd|Y7QV{XD^VY*+STx?`!uxpG% zVR*G^ZnAH>V`#BsYL2sKvASupv1b`<VZFF#Z9-ud`HDoT?_HaPZCAP75S@Krx&73> z{UV*idAY-_g~JP-<Nm(KUkfKfdS^0vC#ni(I(k=?Z71Fe7a4jtl>-;8181BHHywI+ z3wlonOBaU-Pn!xaj{~o8`v1x)$aji-swytZ_TNYVaFK#Y1`hnj=>0b;{P!*W&*=lM zDgtilf4o%uc%TmgSOwt#gXkE7+2Dskyue_=!(iSWj7X|5Eh`EIV3-Avp$dss1sEQ{ zK<{E@C0Iyvih}ztR0}8_T?`ZhTE)~cH1+^vhO8_)tm5Vlqc;v?&w;VG!1#ED3MuJC zWNQ^P>m+=T1qCRH?uZM^I)&^gg$tCT!kDT7O4S09#4<d`?dxOgYt$K$WFB%QO7qaf zSi~|mCW5lUWm4j;Euf6qZPr=gLs?Cr>^a7q@}ry`>)eeat_4v3)KNhlV`1A-;q6gA z890y5rs%=Cgv%y>j4_uDTqt5wCUeY{3(R;aHOAjBcQJ}W?p2`}EEt<8;2jam1zW%d zxWtas5(j~aHejkja5@|WiC6eKViPh0mRn{@>9VORKCU8UtW7^s={OEaJl1cp$?6+` zV7#g83a=Anh6tVj#cZJpCsi7@_31~AWVTKD#|17BP{2u4o27xxQ9AhK$=UjiL^w&R zjRikMt>Y-G{NFa&QSQEN?y9ZTmaWAMV^)`S&I2TGAJPM`%ObSP+OW+%x6MU{cHx}% zX~gs@*!5j8_meRVjX{QV?D}6${;h`%<FhpKpS1c|RDe%0!WnVBM*HwjCn;>@62UrO zPGaJ%#W`#t8sjw&(8|R_P`C_q(Jo~Dv~mA*vd$(3!?v>NIOW)GA=&0D5;J7SW=^DX zo(m!uX$$UxA47TNe(oIq>^sgRWM1%4$eoiMYoltrrEMQ8XxA``8anBVw;56!&pK!9 zJGU(kw#zAJY}95M#sT-AS8iTG`sgsXaLz~08NoQvZJFa8UbbBsyKMkdelp7_*J+MU z)d;|0pX3;7b1aX)TcNY>&07+MGm)8nG}ASac`g;ggSH`oHr*vN@dKh$sL~ia2IOZx zD?grP8mZfV4a;OYyJ7|bq`#`Yt^r&?Tx`#8jxTPZHMeX(0qmfwb4~3FO)JN0iTJ7) zo8%@|&aO%e@WspI+3Rr7FNvd&-$(!IWy>9)8+F#bWK7pPG9|b6b<2z|Og25pkezg! z9EnwEC)gSp(++vlx}VGGg{o#lqGnhGit>#ER%M@6e4$Kdx;|uRsbB=ecYqr(S7tNK zi9l8*s;fmDyKtBr${DVvjv9Ft`UUM_T&&m^5c41QlUj=49h*9j_^I%r-`VyTUDl}- zjyZx5yv>P_)6=Em@zZSkks&5%J_8oZ?ihwCBXVyO&e?1qOMVmZu$*aY$`+-7@%<)a zw2wp5Dr4hm=vK1zzwR#pL2WdKU5pkK-}Y4BjAI(P>Yb=Vs>td4ap;VT!*sk|-ABkE zAqe#w_2cm-+JPY*ykd7eooR%t8dPVqz{CaNx|$7#E=gQv3NjDW{XU_)dP8usqVjvH zi-Y7X*Bf2H!PMm^Mdtk`hF+1QPZf-KvP{g1=Tq@E6a@CPp0Ixh=rOVxnx<LDxzy76 z>68Lw1Rwfo$>Ei2HG9G2B(nX%g!KfH>zxEMH2z|T$pN-_GC=6mNO#gAaW;itd5gnz zGvzEue)4{)YM1H)8a;#yIr<gPqGM*mv$o6ay3f;HU|7e7E9LYhf@L1eiOkGK?&|{k z7k9b<5zafyin5Ut*wyZX{|r^F5P~SEYw0Dggngk5Lg$p-H?=mW)TB_t5WA2LK#zir z@KcXu^Clg9v*1zCLQ=7wWIzTF;>NsLMUqjs>Cmw8&_E>wc{VtCZOSvS>Rdo_!^>`$ zb#=oedX_z<1Zv~7_Tni}xl(KfeH%aFkC7QIuUC_E<|Z{ezJ;j~xEo%;q+;s2t{6Ai zps$BPV&wL5eH?ib)$EvWjt86|T9wm;Zl-YQg{$+VZ~%nNA=e}fV-pK!*IBTe5vTrm zbhWWEf4r#pcZZDAE9R=^{XhHx&JT4)zqp`HeRcVCS9c1vqZ`nEFfhB^qhRh3h23KZ zgRh9p<CUsI;|y4}fD1*pUR%}v@CvN=_NG_oGxEGGUk1~?1v^Bi{-})=?c$Fnn;Uu? z%M6^bDknbr$-=IH<ZM90Hru3@9rJ7{n^(m3dL`S=o17E3z-BrA^C_TecI?#c`l#7} zE#|>~UW?<)_1Q@<G%V(PWD&)l-AH|HGh%5|UDgO#++;p-S4YA%yW=Xp=`37wRlNgQ zQD9lRs>V>Q5#8hrHm&;T3sG!u>R7x|yyl`Qshux%a)DpY93T7EH_UMXc-;O9g87i* zTO{fKeD<j85oCk$LRKWeq?S!0OICF<VO0|?XHAT$!OaT&e?&dcfP~cx7A=KSHt%F( z#F#lv-E1qgWqzjDA5gdqKd|JIG>JQLju)4HsHPx~cD{)o5|@N(n|e?xf_n^X%HReq z#bYfcLmop4p8@QA{qfFxkM=T--bg5Qg#cH0u#1c7HFW`Zx6B_~W}ftU!^qtS!)n7S z-<Bw32b7E}RsS;%c$Lc%w4rN=n*RDdb)_Ob#6Jg|Rn5cc%6qwZnXAfTa%~es$ctO= z+*;+TDO;_`T>~m{X*{`huRp7*C`cpy>^lvsj3_C&W{Qr18c#peNme#pctO^@oKT(= zhoNn|+ylk6u?KgZI48CTwc?7$Nt(YE*`1!rSR_ttYE&vGczA~wPov0sjsl!U3XDn$ zSYGeetKkYV*B|Y0J^sb_0Uxt9h*sxyGo6VrW*PeQC^YuUqKB69)QCE@z-8V*V|Zs> zZ*Rg~3KVNSbvwvPj;i)=Y%-2T(A<d%#YyD)-dQ{^+6piF3NHovFC}y?XZSA{2rpL% zuarEmLONG`J8j$cMQZ5m7lrLsh2L*<ZX5`2PSb5XK5w7|Y{H*6hy87DjlGg9cIZWR z$1T>IAAJg}ER;H#W$oXL`_)`A+DSg6eEY3+2eLbP`r>&;@CZgCZ50_l95S?RuzLKY zdw1gCAoT4^9wvLXWF<|GZ|dtxiTVnhsYm4SW2QC6_uch6)PKQ`{KvpEVAbE>6*kms zUHHv$-NPWl4>i0ekZDrhux~Y16&+X^$LA$ylXSkB^M1JVd<QnnE${?xja=r)AvoP_ zQN&pHv*Zr_M)wOd6>Tu1*eQy}+kZ^?_${lZhtqfQ&@nQS(B+!^y3koPwiGKhW63yD zP6<<Oj-p{Jf})>7Elx!PJ|urwOFq<@D#fCzf@8g0zfYuMpm!;)%#{qKkYP5h4=3*` zMe@@h+j+a~4Mx*ivW<@<9m<0xf=)wf6YRd%Th5mM*Pd>#+w3^4vibqVLBHMeazmP% z&(W|u@MP>WQl^t}{|{Pp8uVK8#Y#g~m-Waia~>ZwY^{daR&$v&7DE{iqVLSo)vE8g zSkP;YloC{lKL~3(l@0~RN0{(@(kYpO0`iWPqTQPoOByukFRb@gtw+nqPQuE3GkyLv z`BvyIb>%^g&NnMB^k3!s-8cK9(rx<b9gde#S4*sW*3sB6jwOhAdVK}L_Lw`5NBAp0 z`c#({Br5`Gatxx6xMB(Cpj>OQ8u6dEqZLLeqbOM7yGy^Os1k2F9Y+@7-OaN=Q6_9T z*)Q~BYuQfCptGzb_7mzttv@2^0BAWTkxZ#H5PRw+H;m}wbSk~Nme5?2Nbv_OWOb=H zi@Dg=h4Qw95=sH7B(bc2WxbGbG7~F-CBYacrd>AIk*;DkMFzgA{Qg7KF1OPZmXFV; znpLOBlg={|aJ)0jP9Gx<M(S)XpNq0_ljw<JJjK^Z67k27nFiQ;d$JtYFb{g;bk~B_ zz=(*i14v5|Wrl%n8tT-qxLtC@%%%SLR+*thU<w!;aIMfLW&ir!3Q?MV(_kmSRco~o z|AaG~(|A|yzqjfq7{&bZAGuW~vNb<TuE1grJB#(g<XaU&g24=luUQ!Qrhf<l>lBTJ zF9#^*X}}tR${OzC1o{t*g0<!Lmowp$wuC0<WcfrpJh%5n`9v5Ku~htjp7|?6EPT}J zP%oG{_p-kjfV=!bF3n$!%Svl_i#L3Ki>HyDOl~9?gj{@<r`D}5(bSBcs12)&7AV3K zsPmMLf%k@_+x#}_@DYk?lxff*&oH$cDM_ru{*RLV`R%;C?Eb_=A!7(z{hAFXs4hC4 zfLQMrApd<&RQ@$OthmulUXFDSc3;?)r;tYbxqgm)qCMekwJn;pLZxG(e>cTdic`y! znCRag3irgjE^DfBnR7xg5<N2;|AbY>^=H)&CBKy&X-yUQuq9n_cq!8qk4G>_r$-x> zlm8`m@80QT$f5HE(?M%R_+n2^ANz72yX#&IWN-GFmOb4P@GozkiZcX?Gub2v&gO5X z>@E+Bv=mCdeYjTYUrnP<s_=f}I54-QddgGO&{!okEkpqfSS&KAo#K8Ko#?QzC2;BP zNDiM}Ei`Pp6K@Gs3x$Ce58YDACR(ih3n&fNB6kwIDy4*b)eSaGn!tb^8tMaGeWWmH zDkWO9&m#g$0Ryi;;)Ky@=wT$S16un2JpHEUF`isdi2Q(W;mo?dOQqLwCw*n4Bv_75 z*mhN#)hV1{Ee(zg{c%GIqd*NfqbByxOs<;#9qVATknw)Dsn7UXN=er`!Awt*E5|*Q zM#p*=MLd*`rWnW3tOWLFfQSg&;z}?F2GeQ!E8p)|sm``yxMASVy_3bDkFKdY!ynA9 z6<6*<s-CvfBE`OpZtH$|q_%8E3yEE3OJZhDaUkQ9OT0NqC>1w>_<a*l51vbz{{mNJ zkUo;O)v{C<<;uE@-o={_f&_}2ZK?ryYPR>1-Alnn3eoeWT;i{@8x$$jCp;59IMFOi zeH8N6_h^;R@N%D>Q-UULL78Xj*=rpZpFg!FaLBlkFP9$bd%cdct(7gfVTn``yUKA_ z;IL^j$!Mp5<w_6D=)GxsTe%;`q?`xH`odh?s*Oha2K$0h9$ajp=GslS2jctcW6?(T z?|LR(I_F*Es>Zm9Ixt_Bg0zG}X!<`;a>IqSddH|a$A5C#TpFH!+*7Mt0`-!sm3Enz zhSpd#%ru|t_<=gGDd^Xng#FTQ+?~^vr)G1--%E==q}kBXlc=}GT7tvwNrvGfbDU+b zK<R_>tFFPTSx$hd{4-O==Z3T<fvK_bn;h~j?a2RTSmr5}b0STz-a`t5W4Pa5g7jU( ziR&0qV$_tOl5d%ZDtHMw%u0u4s1M3k8<_1Z<Fds0V^~E3j>;M@u@?6C<qq@*qY78? zllzFrJB!gQzPnieC(*vf?LJ~A_X=cqMl!9)We4tk-f?V>GTiCgv-L))XbC<l>*;#^ zpFguT>tz#nLa%G-XuFYC;ylgzzbc#|#gU!|&C**7h&xrx2MC&n>>P|MfEN=(c$PG- zPva{a62-ZJ-n#bV`CSnT-m1mzeAnK`Q!z<W!fwKOv82!__taPODBdXWtWD>#EbCY$ zqqMpC^+GzA(!P19_B~(oc8c|+)bcz=)5c*Xe=+w|aX^K&1&OCD#fQ1Yi-v~xd&qkU z=9Rc<zXTT8F|8^RzDFjvGgB%%hli`7;9Ci`y;n}dQazf(W=gqlR(XDx7nd3pZ%jb= zmhHbus?!_PoVI;Dj8e^Bp-odIdOG7)iyvOJ|KWtu3NTP#&6!1C%eJqLN$(CcG_uuI zXm^5|!WavrJ5z)4ADZ#8ojf0CGy&-D>O7Y9A?)Empku?^*}bpIcPT}iUEhiCTZw0- zof91rk2r6i+oWm?sM^e#&Vla}sTx+sgc~Ppmi3mH(j^X?USkX^I&hcMFl9L@_64KJ zm%hTrl$Go!#<`3T(%X4o@pq6q{xZrkcbD|8Wl#v`DnZi^-?vqKboR$ps;J-I+i(BU zGdQjp!@2w1&EDhAY}dI<eg}NA_aZ7AE@`_@`_l9evk~!b>7>F(%7$%o8Sz)va8puN z;<L9ka~@kv+4yl+q1h_?J_p(<{Jd`)C_x@W?=aU^%(m0sv#fbH<p-og>yDOwL^AOn zF4he<%*$#6$^OR3=>E?8igNm}p)TuTv+nt%>>0SY_=Ry<#4<)MUOc(-`PA<81D<BO z%T<c+UZvgJSgzdhh4qEln6W7bw(ZoVmS8=0Kx6asnR9{fuZ#S<&b#M}pn}KNt$;U8 z>;Y#9<RLKj&A*efUDs)E{r5!+9%idwZYm3&Ve{s9Yj-ba-EW^y6GWeW(u@9`Wq-L^ z>RJsW|BTB38ac!v7Cf2cP%tcJ(>)kJnQ1M2NE|b-g7pz%jc=hlYK4z_4a4PdX7p*8 z1u{cN0qDPG#*jY8h9}B>ZU~<EXmiXzih_5ty3WqlFzL0>@7{n3{90~dC#$I)J>Est zR}(w4Z{D#G8ir((bn}L4s*-08p#21@9HOaIuuYJ7t4}i%zAO_@s1!+3+{|D3e5{C3 zbUc5HDa;XK#orGR>`%HHqC<l@h#apq{SJ0wmH-2t3u&7EmW==2717&W*9IHe9F@A6 zW{L!t^RWNNHu;~I+OmcPl}WLv47F4-Wk}6%v(!wsm|Coa{p)EeH$63jD@iDoRhdos zH$7AScfY-@K$XE!4Tm!u>$s&GDjFgHuO?hwh3fpPYJI!tuXO00YUpr59S%6rfPq0U zO7kej;P8iTRHBOG&^85&MQN^p{rt#~JS-gIJ9GHE1iG)ssPLNTCwmJd2Z4Z+%o!Ob zqY6`8Gd+F@r@vE@NE2grsDrn|?p~6og_X5roZUbt5DDk+TM2Byn8#|#JL|}{8QVo0 z+IJaJ$m8YOK5q!@la%Nt(hkkMF#z#Xr~)c>8!%AtK$4d>n$MIKH!?GcUvN8*@(>~C zq>M&tI41s5a4eD){RR!GJu)=AmOP9aem=5*6xuFVLL;HN9vy4npvbFrOofku)p??V zL|>SBrU;|Y;Ag=K#6>=m)u4+q;D>#x0F$+%F;7EjWH~s0C&A-@RLnhN=73ToI>sus z^1Nh_|2_<Dx`M%BOmZf)kkFB<<u}-6f^GqwSoKJyfhlj1bAs#biid=l&Tx5T_=ie) zqWTC<(P2((MG7l5CO3`@K&?Gsb|cwz{i(`REE@O~NDm6-p@S}MX*6dK%(T$dh!j`Y z*>+t0PFv(k*4`hDggLj^Mg#Fb<Eqo3PlH;nP(tc|!*-Z+q(0=u&BoGQH-$kX!S?u; zHBU;_R3|+wk(3%|{e@7?<q+n+nxu_7{H5KvTN}6mT_PL9Gz|w%Eo~6gl3W|cbfCVv zPr%QIO*@Z_nRP~NS<5LSGjlpTK!$Dutvv~@;1hWRcSLhiBHK&jEfXVFq923_=o5I& z%pmW|k5jRvnaGL-GA0(wQA6u6A~ahRZn{)bkI!d=GFiTwoDe5q0nMUb)j~(XnseX? zu4-56{1Uy~qg1juhiEej+Tl_yPO8EPp0C5xa(hN(w7QFj{OA&(cb9zcnWgK|xV|e< zU|_$uo{t)+n`#S|*s|_>`t2bi&EyE;?Yn84qU*vR^U{`(_z9F_dS?h=ML|)y$fc3n zpK-HetaP!HDw$CT!c<gbAiE?G9=ib;Gl+>Pyh4v|*Vg<2p3i3~!#>%6d&a|irmXoD z?;}0U`=khkoiWEL1$nOe`Wwp=lerSLXr<n&qtAu}7)RG4jz3qi-izK9>F8N0pF=m} zspv$KnM9ohaAAQo!)+9wvA1`Vf{~XVK$kzFsT{9jU82|^X)?CfSde*72Zevbz4KK@ z3m;buPj^nd|3Vuy7Df)Wn9O)021u`Geg>p5Y+fl(IpDlH!R}`iOFrO{r0MT*vUidW z%8rVF{Yli2)jG3`tfMjX?C)Mb5}yA_v-BsVVZlWu`P+2gw>8GLa10O`(5O**_Vqct zJA*cHgZq@LM<2N1qnh&oOpFVwPw-EmkCnz0ZS>3A1P)kv^kBvYv%pviBU+jWd-`hn zZOSU#eX@oFh4J-RW~1(x9RUpbBnM00jiK<@V+?c2eL7rM@kzw`)uu>Vxn2^>B*>#Z zuP0cJ+|blM506m?V=sk%rM3GhQi=U7sNVWlg6y)Ua1M(u{|%cutJdvE8f?$#MKa3i z(zJNIuy1DE0IXRvzR~top)uCKu9)^lIZYwjQ2V!T-nb*hjvgenC7*DC>lUMNa$VsV zjc-5~KEy|boH=IkR^KG@$(1Wo*^SoG4c%&ab@1z8xw!IRp3>W2nNHfOpv15HL<Dl~ zQqV1yMLzdNM`1128Pm~+nr|d9V|6Awl+cLmP>Zl(rTqrV%HXPZvF>y%jOP}m$s=!e z;qK=u71lM;%j?ox7SW7(5dldvhB{Q%&F`Ef)q*}<x_{^M5LFEHJuP@}=BY`q23~9R zlz#bOJ(KLo%19$`h2g@koT+!K+jHkP8kcMG#u8JR-r&tG18rzOdQhn+orDX<bJN6e zN(AvT*&7M$A7YVFUXei**gtwAW3(evyrR-tqJp+iGqtfx|3>94M?r|9s+S|Tdm@W6 zqht7^!&;*Ah|r?9Vj}*cb}Ywa5ydsPM6YPa{vtwa<Bv+>k2)htxNM31*%EuFoe<_l z-uGksV^t#heIo5tA^~yI`_?4l`=k#7$)CO_zxCe655e?{KX7wM`P`bqeV^jXmMQ@M zet0W^CFY$fy^^ANpZXth+P`0+(Mk|0GiO_Ky8V56uW5uZp{WrCz~?^0wmKtZB_kp$ zGwyq467gNAcV>`4R?5n4dTUnHN><!`rt4dPlNbxwJ3D42yY+i^katc&Yi7T9R?&TK zfk1Y5*1vB6`zDXU?D>1%`A1oII23^O*8D%-1^3?ho2><}1Pf7g(r4Y%(H~s#cO&W< zipaH#n&*n7mDzR(z#M>LQD8A?Oh)rJU*~&OoNQNo)8Y&!PPdh8iH9IX9eqs_TH?0C z3XBrNhY|rx)An-rJIr#%>@K;5Vm@G*{zHXxR(bVM#gTfsz#@=!xI7RKB&1an(Tr{? zCCK${)jF^310)--nuIni+a^-SS~|HFmQulI1*rf*;OQl<I?xQA%5GT@cQ&Y6MjgZo zW*mbyyMaZcpwdyLvw|1|&L9pzwSaszy-XFH60agAyRv@x-&<AvwU(5i>gW49OPxB_ z@ETG;J@;B2drrORXl;Q`#jCY?((qd9oH~Kw2HBh{>f_P~PRKP$6G*3q8)Rxv+)#;L z%dXH&;8oJ!Rx&D4Vo2J^irOrn+>(;rz(?BpHm$W<roJq!xjMDcf4SLtrA1o4MgHp> zsjKRk>?Ts84iwe4Ph*YmliK$1pq{I3j#<^FtF0hFTb^{+fo^Msbff25SKga;5J?xS zO#8Ry>NQ`sIWhd1!k)JsJ8C$+c&&RxdcEZ5z4B~**d4teI{GM|dN}?1K7Z-OCO%~H z>!&{N6ZRWm>=>|D=~M3LXMGyb%^fV{e(F`M>LFH1B-PuMVjFh$8<vb8maQ5NdfHWB z<8=73U0Rivl$)03mzK4jW{GnsmvxYNew530415}^{4!ql@wn+}&us0P1JE+)H!<45 z`lOrMCsz2=Z}RB=?^f32_Lr%4)rZ5Uhhx3R^N)`=U#2hgrk<ase?3jV$(tPSn8ALY z!4sZ+?>|f2Is55(mQr|*)_;z%bB^_Sj#GI4v#I~QK<B*h^Srq5g0%mFeCLAl^MbnY z&;R^?e((JGFK=orylC#fXx+JJ|GeldyyWh`<lVXC|GX3=yd37g9M!oT_q?1Wypra> zlGVAA_q<XhyjteJ3hG>~d|s^;UTgGUYgOo6>wI486<#0oUmxvUpL|}Q75??p|JO?A zuV2r<wuLwL{5Os|H_o0nE`>M$_;22KZazP6z7pAb6R?HewT1n%g(tH8K46=;Ya9OQ zpXVyFLmRNe*tNs@vcoB|`#E4&plet7WmjATCcTj!B~HxM3yaz&h}?#88}F&-@9B5# z83*hecI}&Q?3;=lSikIh8yq+X9Qbz~1O*%hb{&Ro9EOM-MZFwm85|`A9OZQ#6$Km@ zbRCy%9G8fkfL@MU4NhtUPCC0zdIL_oyG{o;PWwg9iVXI?Z@|)mh-5_0^9HHVOvsO4 zmU#xuugESg3@#owsBSkdio}ubD1X0#Utp47VvAm)7F>`T{zebHq&2)`gkQehydoC8 zVm7?y47?Hwy#7>hEiHN@PkyBczmna&`H%dMs_3=u=Cx+QpKqIgEXi*T$#3Ac<ag$Q zch&`W_M&&9qJK@h@1o#${)Ttlq745U$#y00M=?isLIR87_iug=fCCw-0v{^L9}?mo zT16k*10TyopK9TclYvjYqR-QtkN-T<!Gh;)`14-((^~h-Zo$ii;p1iC%b#xeD~T16 zpnnzl5Lu@}@lcfaWJ=n<jr$|9(Ah%0oK0k6@CCHo{w7fk#Z$<JuWM^i%O^3ZR!NP{ zm5gSwT8}}auFF*tQGFLfS{;kkA|DBPd6;mmXG3JO=-k^H3^YNiAep@AMw>;5PP@x9 zn1|(St=6c+=acuW%e8jnO~Q}7_UnxfCw+~~AJ~7j`(5AuI^pBk>a~GmPJf1exHKFL zCJs?n;Nkii_KERZ1N4-ZC;F4+0}NR2GM$McEV3}sT6_=(kTfL2p68KR$W&Z<I-O~> zo*Of>^vKHIvYBo3zPeQ=^}JYv@>M)_3h_>_^w_dzfI9xT&Q_M8s&+a5J=w`kP>rbK zYOz0^9M$A4@TvcE&^o=QitWnfkRe*XYge@?Tg{qU;Q#d9^1UL`9N*Tzn3!i_ARnuo zPRMhfS)n}I%kZa=I$>?yP^dG1VZ?k;OF=k(xfG=WVR2?sWLnZ;Qq<qhRAWU_m1W~F zt~VpUB-8&RB#`)kew6EUk=A4;-raj^=K0#6cTXCZ^1HbdZrU&mZiOMuNS>*JBSo8~ zr4m|}rK2)n?x?JRTBd58eXo}0UTkfaY|V63mgC>YSe9!l<E@|d-3Ikju|Cx*U7<0C zPEt`gIO;GzhHeFz8IQwslofHDb&#%XfdMM_pmIBQPYrIPD~Ro~wgI^n3)(^q9il4y zvh{h$t3ttyno1!$Ut#VVb>(GgBV^VzJ}TiAs~ID~=?CVci>;^DllbVBPILJ3_O-u^ z$19su(jhtx)4@5qjRWy9Hcbn8w)V{@t-iMHJI5sKZBc?T)j1ngw)QP6(G3?J*8w@_ zJ+J1oPrJ~@AFI2S1ofc3dooxTxgSljR@M9jqh{Sh;uTq4>^@~Zt|*{*rjwQYi7IvR zCas--R)4QrVk_t7hCn8nr`KHM*dc56{qo5EtR3HNY}s;7dUNaMPTxFlOiCTFxEIM8 z+PceswiM=ZlRkmcO&e{t^DHP|Kk^h#RW;XxZAsU7a~+36T^CT6&TPGGV)Edw9Y*~t zQ`k9A59i{2u)+zh2Np?Ho*Ol?IIavyR{`M}tP=EE6xy!8lGk>4W24mHUbk_TnhI1) zC&(HI2q&FL`tGACt4wn^EmXzsHM0|_A9SH~$8zxF!fBI>hF;8X0>I~f1D@aw+CS$2 zjM~N(U0vb3p=c4|ziXna!uNQ5fg+u|irrn09mVjM8jU*k<iD_rliI!-$>#2#c+7q` zm|J&%WsyVUYCp6I!&haNA}2q`&F+e~Qt7^Znb4nd=bssn<ZTvT6A$qkGm^!jq31aK z>YyF__tPZ@FxGnu>77bn9?>Z-!{bkDJSXj;FAj-<-v*_KOh>Txf|mr~+r(xeGh4<| z3>Cdt7U2=3JZM4|g;EJwrvc|E6i+QJgD<as`#h1RBV8Uyf6Bi6VMVh`?0Y@5+?o{U zR9f<JUUrznrkc;y%*c9&U*^k0ZG1?F>GMv-Fj{$SEclgK-b17u<&>jOq?-;TRf?U` z*d;6#a~_t67tRw}6p}?c#4w19v4&2KC6M?UM)>OWI;#XW)A|JF2WJ${f#eUZO8s2P zcp>t!8U)>X19XMGn4IfB(v7}`ix38da3C3z^?ocD3oTOmdK;c$;#9_EcZo92N|l?f z8$L`(3HS&UCu;2|I#V0@VqQpq+CEXn7xGPI3R~5+4HNd444spe5)O?!LIIMYu1fQf zxS64SHba?bP*W91EksQNijw<uMl!wok95yeOm}`JMkBR|Q2$V_{)0ve-Azf3Jfke; z!(6n*SANF@hS8?XzHfLgKGY4L&IRSa_|QmZJaSMntWpB_Pfa~Ww<H*D)noQ1`$5+; z`*xAdQlpJd<ozS!Jo|V6{vYqr6vJ}4`kcO2ixA+XLi1pRcoF_IlG)N>>m12CTITD2 zKuJA2U(5<)i^}n%kjsWeycoW9)LBQp@wWJQ!-@6rOB$Z(A)~Q+OM9V*TN3Wi&3}9O zVreQ3F-38VGRE0*NmVxmEc$2G-*a?k!CFE1Hw<<HIqK8Jgw62EPnC{Bx;@k99_q$s z)<7nC1|j1s$M0(&wX7qi2g<mJfxfwWJ#A6LaWkQsq5ZoY%dPL`LZZ`CLb)V4u_)$t zBXWqqbivLjY%s2L@z3<=s1k!_NVQ}SlU3iANC9xcsz~Kn6g*baRzLi=Rh=j%0?HOs z8x4tMs0IMfyw?)=fX}Xf8qeyH<mzJFoppg2oTEx>)dUF%X3NLLQU9&)EN3k{At`aj zIfj{h2>fcq32=VURx)Lr<PQ_BnvcQ$2E&K*595(?CBC8C{gj|R%xqDYm~m>1->*K# z|I0dx``S2%N?=5v@Uk_&MSR`ArhCR}7%PgXwI~>QYUT&rmB%XyAm2k-uR5oJnX=Ri zwlS$1cH?H~A;B>4`pocnNE0p(SRxwx5gxvO&OV3~jj5acK@=E<cWf-Qjs1G^OX!fH zxbuH&#+fc(Vuwx{{QA^HGd*%KZA9!NU^zomL%M+as{R4f_w1g$d~sGaX?msrz~fRI z;5yFr*p8p%QE$@0IR!LnXNICXHt@nF=URD2fkL{bK<3%3$*|+<*jl!A-q;wXbngC5 zcljv3sl!;$-uXl*>|zyE<2ku&si`|cy`UHDE7?Il=i>37Iiy&bHDrbr*+pc+99PIs zlgWger2KVQzz2s#4y&DrkPV5$LR*#p=1anYu>1Sq8GK8dt@tG8|H;r$R3wnw5bSkc zt_SbV7?C7ng(a<Fg_sky$-U#`CUx7#laK73<oUH)(R$Q0Y4OKtEvI~s^o|_${Exw- z&OjjSuwmR`EnS89L^a^5rP|;RK53Q}-}A%v6ZUOeOlO(d=Htqp%IOaRf!|8;LLaxQ z9LP;O2RvkncgudA)ex+hEvMf#3x9F4gy{31-Zm!X=;MZtwB?G#K{;r31!~F(Tu)ni ziD=ZNrj_-Mr)aMByeO4@7&KFzS|AM0HR%2=84zRKe$#}^R?i)RJ2AQS3(fnVnmScv z%LA`YqfoJBU`C-WA-k&MQIF&!_mPbe=V$%D;UTcH>wKDzK4&@cxTk?D>k*FW)s%*N zlPCVa4AVVgCQlthzuDz@vZQ$0{YBM?K(*&;a(A%|d^j*eA8|Caq@7DQAE&jqTJpX| z^){9;waM^0F$v1MGcJ$~Y%=#CY%zPd^Lnxj`a{owB<FolZm)LhZO>;v8Ez+(8T3-_ zVHNI=PKX`b^j1_llt?PHBpoZf#u9xoK&9`CIA^F7f0#I@fJTsz6odVkrBFt{)qmQd zZ`8vsQbYB%(YiyNwxt8ce}_F5+6<W5zM;nzH`bOSG6;kTpz_(a?9*@1d2lSVjO?2a zYK3$XM&6a11n@hAGX#gCnftx=K?BM^dB9By=p%m+Sqyq`2DI2ESOp@dMgDD$%+Cxd zTK>V_A{?k4m8)$Bzlt(!iu$`0MSdGi@i+2(F*-x;N0OH}H!%2RDKNt-&=yS=R$+s7 z7d#65H+cbMnK}VbHHQDj>H=d`8918CBZTSgY20EL(PYQC0Uyh4Try)FfvS$nt{cEu z$qE;>jJR$&?=1e{-<h#i!;u)k*k{X_R4=`Mk)6Q9AOGO!5{4MPyQpjJM0Tr$X0)jL z$i$@O$QNzzH^hn0e2K{S5$__C?qs6~TN1C(g1}yZ8D2kP`2z{jlgL0n=+P73$oozM zjhU8gRhz}{q$5Uv5hQ>Vzs&Ff2DkxXrXRn&L~%rl;i8-RVfY|JO7gXvHA5=by^*Y0 zAOpI7Q)wK}_cZh@O|r=7;H5Ms>*!AmcE4K^!l^xH=o0z<I_gEFGcG5kF(k~Crz3xN zB=j~PJxn+ANVgRT_CUAy7|v)%OL)VdNl~8GPnYO<pN1=!7T26aI}$}BpZ3u^b>?%N z<Wa($RgfBb+QxEV6J4C(N*rJ*Y>hweNG@&-n04%xT>(m|jLLYjh=rod{wI}yFOYS| zkbIJvgLR*d6P44-kkr1C*2|yUeIGOAo!d#AF%gxE=9Tj@l8btuIZK=~CXm}IZ(2u` zWq6;qN}OwSA9dE8-FP2-@eZE-mQX@~G4)$(7W;AlP$T~k7*Qf%dxxGoOeAp`m6H8E z7JQ$(w`{C@kmq+42>?f%4JFurFU0UE#K|tSx-Y~hDKcHjGyPt)c4YsG0}JIiYkk!5 zLt7p(Nijuq5vENMonSEoxQK})=cjk(KvpuXPNDu$!M?YXp+y|bGj|mjyN8~m8yWW^ zmoEj*zlcl`j*g=Z&ld$pH{2HpGnHv7l>KK@_AR>XJGkttPb?}fN>)voF;lszLb<s@ zNl#Yh_Gr##YkVfCTs}K?-70J0Z)mlA!RzSKi>Lziwg?q)#f@Bn0!i5-LxJ~0?1?}H zJ4OjQdj2b)oVYgN`)GLiR8(;aQyCNpJZnaN#6_WxDEWc`O7$sBUoFWz&MUS7-z?`a zGv#F{fZt`6y$F<MwPv|s6!;yNw6?|b+1OSel{7Jxb?QKxvmx$n5Rf-C-X`d&wcN5T zxAGXef?mljSQ)L5Jhuv6$gX5Z!+wSP&X5GOhz=PeDPfhb;_@jk*7?`qRFW87X{A%S z$CNbiyP{ma`nylHMRu7QMunzN37=s3B3g|pxJpZ>=0BgBuh})4$GPW)SQ`(O`8L4q z=rYU`@I!PJk#8oUP<gf(7Wql-Kq5N%V{N|}79|9W#<q?Og3hdnMTc2lxLZfBTgR?j z&x={d=v&9F2(M#ZtEYq1kqgzapVTs+)QMpV(%9Bh`qqmH)k*8tQ~Ne3V>VJL){80D zOOn<}k2h#4)_-en6pg88Icbo9G|&h&Slc#P#x!ZQH%a<7*_<>vjW<zaHoK5EJGM93 z**1E%H!CnVd+9bi2sQhWwgl!hOWHOVw%5H?4DC&Apv!6aq1Y0<))c1L5^~a<<=YxD z-u!Q>5Dsb1Rcy^sY%cL_1LZWA>9)8*+Okes3l!TdbVFwg-%5{I&D6YYvu$s;#eL)m z?PLyX77F{r5!UJ3{(#%j1L^1)?~rB?F!X9~gS7Yic1#L|4*0e==Co_Hv};+lYw~wa zjkmXqXLoKhcW&r*ZP|7$=XCsf>{@B>7>H>fYwv6n>bi;P=s)S)RP6kv82a<E8&2AT z^rZ*MuIJ^k^UcS1$j~0_+)y099;}WYf{q?^yIx#qFQHy1(NoVxPN&vkM<*tdP9(}e zPv_QJ$2*qZ59__8&>r^FK3t`q4_N)gU-~&?d-$GuN%VSoPkYGq`X%l9g`WDPa{ER7 zdOmdwz~z_2RaoB3G7PHtb*r8ZQ0cw<sy(O~JE-qBD2_MSOggCYCDioG(3E1R#e~(L znnC9E?r&J(R(27#Pead;Av2|6X|JJgPwn5I2E{oe0-lB~So-Dphk~94Jx}|+Sw_NG zMtre){@ny5PYnOW91XV%GyOO${;F2W3x(lnDB@|@XktYAX+&sZB%`Az^|T*qH<JEk z3|oB65ZYdqJ5+W$pu{;2%pGZt9S>O_Z~rnD4IQhsn+WzB8-`Ad$4*R~PE2D>&azC- zD^32in_P;Wto?|h(t%ZwJGqH9waqfM>o+;5G<6U=bp)L{nV32|ox1QF%*zekz?%MJ zHx0jwoxX=oKTb?PpH9O&CTRTze_@Rw+0UTH&7fD#U{20ppUrFvj@&%W5Gc>Sx1aqG zH%nYOeRVo8_5&pnI!nnqN3A?ZYd?qWk7U@<Ifje!#($0-d!CbZo?Cf-yaOaZ5^iUu zO?Ec-`D|VkdqJFa0d;crk5H%`5DQ;;L2+_H`D{T|coL8}G)wW`jzyr-xlgU~r|#rW zeb$A%j&8MW8ili;=Jt!0af?{~^WSsl8%+gZ5h&KIORmaG?q^fT&z;S-+WfdEesL&# z6exc7OCie3VfM>YxpUt?2Byr<MVu`sV6P;eRdzqt@cmd=`?!)-xss#5nB&tvfP^GE zMgbUb!u>wEQW3WbI-5u02z{%Fi&|)tS-D!Tyw(^uyLP%7O9#mQAyjU^){VX1`#k-s z5UZ#%j8jaaj&(g?d~$uVa*AJUU4;dZWh7*RG&dFZYo+qn%17*xN~~-Oz#8kuuJXq8 zmsKmHUwf4s|FTIML?}zYHZEB=ua!6d*l()ZJJm-CNt#f;rTk*c5VyRNgv^$!Bfo{p zW-si&i8-|utA!hmy@}1Xef??MRezfxe*1VbJluZD`V%ffkwPd^2u122VfDWcLXko! zQV2x~p-3SVDTE@0P^1uw6he_gC{hST3ZY0L6e)xvg;1mriWEYTLMT!QMGB!vArvWu zB85<-5Q-E+kwPd^2t^8^NFfv{gd&Adq!5Y}LXko!QV2x~p-3SVDTE@0P^1uw6he_g zC{hST3ZY0L6e)xvg;1mriWEYTLMT!QMGB!vArvWuB85<-5Q-E+kwPd^2t^8^NFfv{ zgd&Adq!5Y}LXko!QV2x~p-3SVDTE@0P^1uw6he_gC{hST3ZY0L6e)xvg;1mriWEYT zLMT!QMGB!vArvWuB85<-5Q-E+kwPd^2t^8^NFfv{gd&Adq!5Y}LXko!QV2x~p-3SV ossBHU)c60pB6SzHd0)BtIJx<Jwh71Hdd0Sdaz60t6_U{Z03b4$QUCw| literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/ckeditortablecellsselection/js/tablecellsselection.js b/plugins/ckeditor4/ckeditortablecellsselection/js/tablecellsselection.js new file mode 100644 index 0000000..54e3d80 --- /dev/null +++ b/plugins/ckeditor4/ckeditortablecellsselection/js/tablecellsselection.js @@ -0,0 +1,601 @@ +"use strict"; + +(function($, window, document, undefined) { + + var settings; + + var systemSettings = { + dataKey : 'cellsSelector', + eventNamespace: 'cellsselector' + }; + + var isMouseDown = false;//нажата ли Ð»ÐµÐ²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° мыши + + var methods = { + init: function(options){ + //console.log('method>init'); + var defaultSettings = { + selectableTableClass : 'tcs',//клаÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»Ñемый к таблицам + selectedCellClass : 'tcs-selected',//клаÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»Ñемый к выделенным Ñчейкам таблицы + selectionEnabled: 'tcs-selection-enabled' //??? + }; + + settings = + (!options) ? defaultSettings + : $.extend(defaultSettings,options); + //todo: set listenets on all document for handle all tables added to html + return this.filter("table").each(initTableIfNeed); + }, + + destroy: function(){ + //console.log('method>destroy'); + return this.each(function(){ + destroyTable($(this)); + //$(window).unbind('.cellsselector'); + }); + }, + + selectedCells: function(){ + //this - $table + //console.log('selectedCells'); + return getSelectedCells(this); + }, + /* + getSelectedCells: function(){}, + setSelectedCells: function(){}, + selectCells: function(){}, + selectCell: function(){}, + + selectAll: function(){}, + deselectAll: function(){}, + */ + //todo: implement + removeDocumentHtmlChanges: removeDocumentHtmlChanges, + addDocumentHtmlChanges: addDocumentHtmlChanges + }; + + //----------- INIT + + /** Инициализирует таблицу еÑли она неинициализированна */ + function initTableIfNeed(index, table) + { + var $table = $(table), + data = $table.data(systemSettings.dataKey); + + //плагин еще не проинициализирован + if(!data){ + //инициализируем + initTable($table); + $table.data(systemSettings.dataKey,getInitialData()); + } + + //initTableCellsSelector(el); + //$(this).__proto__.csHandler = new Handler(settings, this, document); + //if(!$(this).csHandler) $(this).__proto__.csHandler = new Handler(settings, this, document); + //else $(this).csHandler.restart(); + + } + + /** Возварщает иÑходные данные таблицы */ + function getInitialData() + { + return { + selFrom: false, + selTo: false, + isHighlighted: undefined, + $currTR: $(),//todo: нужны ли? + $currTH: $(),//todo: нужны ли? + $currCell: $() //todo: нужны ли? + }; + } + + /** Инициализирует таблицу */ + function initTable($table){ + //addData()??? + addTableHtmlChanges($table); + + addEventListeners($table); + + function addEventListeners($table) + { + //console.log('addInitialEventListeners'); + addInitialSelectionEventListeners($table); + addInitialCopyPasteEventListeners($table); + + function addInitialSelectionEventListeners($table) + { + //console.log('addInitialSelectionEventListeners'); + + $table + .on(getEventNameWithPluginNamespace('mouseover'),onMouseOver)//.mouseover(onMouseOver) + .on(getEventNameWithPluginNamespace('mousedown'),onMouseDown)//.mousedown(onMouseDown) + //.on(getEventNameWithPluginNamespace('dragstart'),onDragStart) + .on(getEventNameWithPluginNamespace('mouseup'),onMouseUp);//.mouseup(onMouseUp); + + //клик на документе вне таблицы + $($table[0].ownerDocument).on(getEventNameWithPluginNamespace('click'),onOutTableClick); + //or $table.closest(":root"); - html + //or $('html') + //or $(document) + + function onMouseOver(event) + { + //console.log('mouseover table'); + var pluginData = getPluginDataByEvent(event); + + var $target = pluginData.$target; + + //таблица + var $table = pluginData.$table; + + //Ñчейку + var $cell = pluginData.$cell; + + if($cell.length==0) return;//Ñобытие Ñработало не Ð´Ð»Ñ Ñчейки (Ñамой таблицы или других её Ñлементов) + + var data = pluginData.data; + data.$currCell = $cell; + + //еÑли клавиша мыши не нажата, значит не выделение Ñчеек + if (!isMouseDown) return false; + //todo: переделать на глобальный индикатор Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ мыши + + //Ñкрываем Ñтандартное выделение в таблице + var selectionEnableClass = settings.selectionEnabled; + $table.find('.'+selectionEnableClass).removeClass(selectionEnableClass); + + data.selTo = getCoordinates($cell); + + setPointCoordinates(data,$cell); + //todo: move to bottom + function coordinateManipulateMagic() { + var i = 1; + while (i > 0) { + i = 0;//wtf??? + getTableCells($table).each(function (key, cell) { + data.$elemX = $(cell).offset().left; + data.$elemXwidth = $(cell).offset().left + $(cell).width(); + + data.$elemY = $(cell).offset().top; + data.$elemYheight = $(cell).offset().top + $(cell).height(); + + if ((data.$elemX < data.$pointXmin) && (data.$elemXwidth >= data.$pointXmin) && (data.$elemXwidth <= data.$pointXwidth) && (data.$elemYheight <= data.$pointYheight) && (data.$elemYheight > data.$pointYmin)) { + data.$temp = data.$elemX; + if (data.$temp != data.$pointXmin) { + data.$pointXmin = data.$temp; + i = 1; + } + } + + if ((data.$elemX >= data.$pointXmin) && (data.$elemX < data.$pointXwidth) && (data.$elemXwidth >= data.$pointXwidth) && (data.$elemYheight <= data.$pointYheight) && (data.$elemYheight > data.$pointYmin)) { + data.$temp = data.$elemXwidth; + if (data.$temp != data.$pointXwidth) { + data.$pointXwidth = data.$temp; + i = 1; + } + } + + if ((data.$elemY < data.$pointYmin) && (data.$elemYheight >= data.$pointYmin) && (data.$elemYheight <= data.$pointYheight) && (data.$elemXwidth <= data.$pointXwidth) && (data.$elemXwidth > data.$pointXmin)) { + data.$temp = data.$elemY; + if (data.$temp != data.$pointYmin) { + data.$pointYmin = data.$temp; + i = 1; + } + } + + if ((data.$elemY >= data.$pointYmin) && (data.$elemY < data.$pointYheight) && (data.$elemYheight >= data.$pointYheight) && (data.$elemXwidth <= data.$pointXwidth) && (data.$elemXwidth > data.$pointXmin)) { + data.$temp = data.$elemYheight; + if (data.$temp != data.$pointYheight) { + data.$pointYheight = data.$temp; + i = 1; + } + } + + if ((data.$elemX < data.$pointXmin) && (data.$elemXwidth >= data.$pointXwidth) && (data.$elemYheight <= data.$pointYheight) && (data.$elemYheight > data.$pointYmin)) { + data.$temp = data.$elemX; + if (data.$temp < data.$pointXmin) { + data.$pointXmin = data.$temp; + i = 1; + } + } + if ((data.$elemX > data.$pointXmin) && (data.$elemX < data.$pointXwidth) && (data.$elemY < data.$pointYheight) && (data.$elemY > data.$pointYmin)) { + data.$temp = data.$elemXwidth; + if (data.$temp > data.$pointXwidth) { + data.$pointXwidth = data.$temp; + i = 1; + } + } + + if ((data.$elemY < data.$pointYmin) && (data.$elemYheight >= data.$pointYmin) && (data.$elemYheight <= data.$pointYheight) && (data.$elemXwidth <= data.$pointXwidth) && (data.$elemXwidth > data.$pointXmin)) { + data.$temp = data.$elemY; + if (data.$temp < data.$pointYmin) { + data.$pointYmin = data.$temp; + i = 1; + } + } + if ((data.$elemY > data.$pointYmin) && (data.$elemYheight <= data.$pointYheight) && (data.$elemX <= data.$pointXwidth)) { + data.$temp = data.$elemYheight; + if (data.$temp > data.$pointYheight) { + data.$pointYheight = data.$temp; + i = 1; + } + } + }); + } + } + + coordinateManipulateMagic(); + + selectCells($table,data); + $table.data(data); + return true; + + function setPointCoordinates(data, $cell) { + data.$pointX2 = $cell.offset().left; + data.$pointX2width = $cell.offset().left + $cell.width(); + + data.$pointY2 = $cell.offset().top; + data.$pointY2height = $cell.offset().top + $cell.height(); + + if (data.$pointX1 < data.$pointX2) { + data.$pointXmin = data.$pointX1; + data.$pointXmax = data.$pointX2; + } else { + data.$pointXmin = data.$pointX2; + data.$pointXmax = data.$pointX1; + } + if (data.$pointX1width > data.$pointX2width) { + data.$pointXwidth = data.$pointX1width; + } else { + data.$pointXwidth = data.$pointX2width; + } + if (data.$pointY1 < data.$pointY2) { + data.$pointYmin = data.$pointY1; + data.$pointYmax = data.$pointY2; + } else { + data.$pointYmin = data.$pointY2; + data.$pointYmax = data.$pointY1; + } + if (data.$pointY1height > data.$pointY2height) { + data.$pointYheight = data.$pointY1height; + } else { + data.$pointYheight = data.$pointY2height; + } + } + } + + function onMouseDown(event){ + //console.log('mousedown table'); + var pluginData = getPluginDataByEvent(event); + + //еÑли клик правой кнопкой мыши - ничего не делаем + if (isRightMouseButton(event)) return true; + + //таблица + var $table = pluginData.$table; + + //получаем Ñчейку + var $cell = pluginData.$cell; + //self.$currCell = $cell; + + if($cell.length==0) return;//Ñобытие Ñработало не Ð´Ð»Ñ Ñчейки (Ñамой таблицы или других её Ñлементов) + + //event.stopPropagation();//надо ли? + //event.stopImmediatePropagation();//тем более Ñто? + + $cell.addClass(settings.selectionEnabled); + + var data = pluginData.data; + + isMouseDown = true; + data.selFrom = getCoordinates($cell); + data.selFrom.$el = $cell; + + var selectedCellClass = settings.selectedCellClass; + if ($cell.hasClass(selectedCellClass) && deselectAll($table) === 1) { + $cell.removeClass(selectedCellClass); + } else { + deselectAll($table); + $cell.addClass(selectedCellClass); + } + + data.$pointX1 = $cell.offset().left; + data.$pointX1width = $cell.offset().left+$cell.width(); + data.$pointY1 = $cell.offset().top; + data.$pointY1height = $cell.offset().top+$cell.height(); + + data.isHighlighted = $cell.hasClass(selectedCellClass); + $table.data(data); + return true; + } + + + /*function onDragStart(event) + { + //console.log('dragstart table'); + //event.preventDefault();//todo: надо ли? + return true; + }*/ + + function onMouseUp(event){ + //console.log('mouseup table'); + var pluginData = getPluginDataByEvent(event); + var data = pluginData.data; + isMouseDown = false; + data.selFrom = false; + data.selTo = false; + pluginData.$table.data(data); + } + + //клик на документе вне таблицы + function onOutTableClick(event){ + //console.log('click (out of table)'); + isMouseDown = false; + if($(event.target).closest($table).length==0) deselectAll($table); + } + } + + function addInitialCopyPasteEventListeners($table) + { + //console.log('addInitialCopyPasteEventListeners'); + + //this.$table.off('copy'); + $table.on('copy',onCopy); + + function onCopy(e){ + e.originalEvent.clipboardData.setData('text/plain', handler.getSelectedDataAsText()); + e.preventDefault(); // We want our data, not data from any selection, to be written to the clipboard + //var handler = $(e.target).csHandler; + //e.originalEvent.clipboardData.setData('text/csv', handler.getSelectedDataAsText()); + //e.originalEvent.clipboardData.setData('Text', handler.getSelectedDataAsText()); + //e.originalEvent.clipboardData.setData('text/html', '<b>Hello, world!text/html</b>'); + //e.originalEvent.clipboardData.setData('text/html', handler.getSelectedDataAsHtml()); + //console.log(e.originalEvent.clipboardData.types); + //console.log('copy:'+ e.target.innerHTML); + //console.log('copy'); + //console.log(e); + } + + //-------- Copy/Paste event-listeners + + /*$table.on('beforecopy', function(e){ + //console.log('beforecopy'); + + /*if(weHaveDataToCopy()){ // use your web app's internal logic to determine if something can be copied + e.preventDefault(); // enable copy UI and events + } + });*/ + + + /* table.addEventListener('copy', function(e){ + //var handler = e.target.csHandler; + //var handler = $(e.target).csHandler; + //e.clipboardData.setData('text/plain', handler.getSelectedDataAsText()); + //e.clipboardData.setData('text/html', handler.getSelectedDataAsHtml()); + //e.clipboardData.setData('text/plain', 'getSelectedDataAsText'); + //e.clipboardData.setData('text/html', 'getSelectedDataAsHtml'); + //console.log('copy:'+ e.target.innerHTML); + console.log('copy'); + console.log(e); + //e.preventDefault(); // We want our data, not data from any selection, to be written to the clipboard + }); + */ + + //this.$table.on('paste',onPaste); + /*$table.on('paste', function(e){ + //console.log('paste-Listener'); + //console.log(e); + /*if(e.clipboardData.types.indexOf('text/html') > -1){ + processDataFromClipboard(e.clipboardData.getData('text/html')); + e.preventDefault(); // We are already handling the data from the clipboard, we do not want it inserted into the document + } + });*/ + + + /*function onPaste(e){ + //console.log('paste-onPaste'); + //console.log(e); + }*/ + } + } + } + + + //----------- DESTROY + + function destroyTable($table) + { + //console.log('destroyTable'); + removeEventListeners($table); + removeData($table); + removeTableHtmlChanges($table); + + function removeEventListeners($table) + { + $table.unbind('.'+systemSettings.eventNamespace); + } + + function removeData($table){ + $table.removeData(systemSettings.dataKey); + } + } + + $.fn.tableCellsSelection = function (method) { + if(methods[method]) { + return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof method === 'object' || ! method ) { + return methods.init.apply( this, arguments ); + } else { + $.error( 'Метод Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ' + method + ' не ÑущеÑтвует Ð´Ð»Ñ jQuery.tooltip' ); + } + }; + + //**************** Table/Cells funcs + function removeDocumentHtmlChanges($document){ + var $tables = $document.find('table'); + removeTableHtmlChanges($tables); + } + + function addDocumentHtmlChanges($document){ + var $tables = $document.find('table'); + addTableHtmlChanges($tables); + } + + /** + * УдалÑет внеÑенные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² html-коде (в данный момент удалет Ñлужебные клаÑÑÑ‹) + * @param $table - Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° или веÑÑŒ документ + */ + //todo: разделить на Ñ„-цию чиÑтки вÑего документа и таблиц. + //todo: Ð’ документе удалÑÑ‚ÑŒ иÑпользуемые клаÑÑÑ‹ только у таблиц. + function removeTableHtmlChanges($table){ + $table.removeClass(settings.selectableTableClass); + removeChildrensClass($table,settings.selectedCellClass); + removeChildrensClass($table,settings.selectionEnabled); + + function removeChildrensClass($table,className){ + $table.find('.'+className).removeClass(className); + } + } + + /** + * ДобавлÑет Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² html-код + * в ÑоответÑтвии Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¼ ÑоÑтоÑнием таблицы. + * Ðа данный момент добалÑет Ñлужебные клаÑÑÑ‹ к таблице и её Ñчейкам. + * @param $table + */ + function addTableHtmlChanges($table){ + $table.addClass(settings.selectableTableClass); + //todo: добавить подÑветку выделенных Ñчеек + /* + $selectedCells = getSelectedCells(); + $selectedCells.adddClass(settings.selectedCellClass); + $selectedCells.adddClass(settings.selectionEnabled); + */ + } + + function getSelectedDataAsText($table) { + //console.log('getSelectedDataAsText'); + var selectedCells = getSelectedCells($table);//выделенные Ñчейки + var selectedRows = selectedCells.closest('tr');//Ñтроки Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ Ñчейками + + var ret=''; + //Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñтроки получаем Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñчеек + for(var i=0;i<selectedRows.length;i++){ + var rowValues = []; + var rowSelectedCells = selectedRows.eq(i).find(selectedCells); + for(var j=0;j<rowSelectedCells.length;j++){ + rowValues.push(rowSelectedCells[j].innerText); + } + ret += rowValues.join("\t") + "\r\n"; + } + return ret; + //if (allTables) return this.$doc.find('.cell-active'); + //return this.$table.find('.cell-active'); + } + + /*function getSelectedDataAsHtml($table) { + //console.log('getSelectedDataAsHtml'); + return '<b>getSelectedDataAsHtml</b>'; + //if (allTables) return this.$doc.find('.cell-active'); + //return this.$table.find('.cell-active'); + };*/ + + //todo: нужно ли? + /* + function restart($table) { + this.$table.addClass(settings.selectableTableClass); + this.allCells() = this.$table.find('th, td'); + this.init(); + };*/ + + /*function getCell($table, x, y) { + if (y == 1) return $table.find('tr[data_y="1"] > th[data_x="'+x+'"]'); + return this.$table.find('tr[data_y="'+y+'"] > td[data_x="'+x+'"]'); + }*/ + + function isSelectedCell($cell) { + return $cell.hasClass(settings.selectedCellClass); + } + + /*function selectCell($table,$cell) { + //todo: implement + if (isSelectedCell($cell)) return deselectCell($cell); + deselectAll($table); + + if ($cell.is('td, th')) $cell.addClass(settings.selectedCellClass); + }*/ + + function selectCells($table, data) { + deselectAll($table); + + getTableCells($table).each(function (key, cell) { + data.$elemX = $(cell).offset().left; + data.$elemXwidth = $(cell).offset().left + $(cell).width(); + data.$elemY = $(cell).offset().top; + data.$elemXheight = $(cell).offset().top + $(cell).height(); + + if ((data.$elemX >= data.$pointXmin) && (data.$elemXwidth <= data.$pointXwidth) + && (data.$elemXwidth <= data.$pointXwidth) && (data.$elemY >= data.$pointYmin) + && (data.$elemY <= data.$pointYheight) && (data.$elemYheight >= data.$pointYheight)) { + $(cell).addClass(settings.selectedCellClass); + } + }); + $table.trigger('selectionchange.'+ systemSettings.eventNamespace); + } + + //todo: удалить параметр allTables + function getSelectedCells($table) { + return $table.find('.'+settings.selectedCellClass); + } + + function getCoordinates($cell){ + return { + x: parseInt($cell.attr('data_x')),//todo: заменить на DOM-ÑвойÑтва вроде colNumber + y: parseInt($cell.parent('tr').attr('data_y')), + colspan: $cell.attr('colspan') ? parseInt($cell.attr('colspan')) : 0, + rowspan: $cell.attr('rowspan') ? parseInt($cell.attr('rowspan')) : 0 + }; + } + + function getTableCells($table){ return $table.find('th, td'); } + + function deselectAll($table) { + var selectedCells = getSelectedCells($table);//TODO:иÑправить на локальные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ + var length = 0; + + /*selectedCells.each(function(i, cell) { + length++; + $(cell).removeClass(settings.selectedCellClass); + });*/ + //or + selectedCells.removeClass(settings.selectedCellClass); + + return length; + } + + + //**************** PLUGIN + + function getEventNameWithPluginNamespace(event){return event + '.' + systemSettings.eventNamespace} + + function isRightMouseButton(event) { + var isRightMB; + event = event || window.event; + if ("which" in event) + isRightMB = event.which == 3; + else if ("button" in event) + isRightMB = event.button == 2; + return isRightMB; + } + + function getPluginDataByEvent(event){ + var $target = $(event.target); + var $table = $target.closest('table'); + return { + $target: $target, + $table: $table, + $cell: $target.closest('td,th'), + data: $table.data(systemSettings.dataKey) + } + } +})(jQuery, window, document); diff --git a/plugins/ckeditor4/ckeditortablecellsselection/plugin.js b/plugins/ckeditor4/ckeditortablecellsselection/plugin.js new file mode 100644 index 0000000..46312ab --- /dev/null +++ b/plugins/ckeditor4/ckeditortablecellsselection/plugin.js @@ -0,0 +1,456 @@ +CKEDITOR.plugins.add('ckeditortablecellsselection', { + init: function (editor) { + + var pluginDirectory = this.path; + + //add custom css + editor.addContentsCss(pluginDirectory + 'styles/tablecellsselection.css'); + + //add custom script + CKEDITOR.scriptLoader.load(pluginDirectory + 'js/tablecellsselection.js'); + + + //editor.ui.addToolbarGroup('tables',0);//todo: what sens if we cand add it dinamic at runtime (used predefined or user config) + + //---------- Handlers + //--- LOAD + /*editor.on('loaded',function(event){ + console.log('loaded'); + });*/ + + /*editor.on('instanceReady',function(event) { + console.log('instanceReady'); + });*/ + +/* //--- SNAPSHOT + editor.on('getSnapshot',function(event){ + console.log('getSnapshot'); + + }); + + //todo: set tableCellsSelection here for undo/redo (delete on change) + editor.on('loadSnapshot',function(event){ + console.log('loadSnapshot'); + }); + + editor.on('lockSnapshot',function(event){ + console.log('lockSnapshot'); + }); + + editor.on('saveSnapshot',function(event){ + console.log('saveSnapshot'); + }); + + editor.on('unlockSnapshot',function(event){ + console.log('unlockSnapshot'); + }); + + editor.on('updateSnapshot',function(event){ + console.log('updateSnapshot'); + }); + + //--- MODE + editor.on('beforeModeUnload',function(event){ + console.log('beforeModeUnload'); + }); + + editor.on('beforeSetMode',function(event){ + console.log('beforeSetMode'); + }); + + editor.on('mode',function(event){ + console.log('mode'); + }); + */ + + + //--- CONTENT DOM + editor.on('contentDom', function (event) { + //console.log('contentDom'); + initTablesSelection(event.editor); + }); + + editor.on('contentDomUnload', function (event) { + //console.log('contentDomUnload'); + var document = event.editor.document; + if (!document) return; + destroyTablesSelection($(document.$)); + }); + + /*editor.on('contentDomInvalidated',function(event){ + console.log('contentDomInvalidated'); + });*/ + + //--- CHANGE + //on change make all tables selectable (tableCellsSelection-jquery-plugin support multiple initialization on same DOM-node) + editor.on('change', function (event) { + //console.log('change'); + initTablesSelection(event.editor); + }); + + + //--- INSERT + /*editor.on('insertHtml',function(event){ + console.log('insertHtml'); + }); + + editor.on('afterInsertHtml',function(event){ + console.log('afterInsertHtml'); + }); + + editor.on('insertElement',function(event){ + console.log('insertElement'); + }); + + editor.on('insertText',function(event){ + console.log('insertText'); + }); + + + //--- COPY/PASTE + editor.on('paste',function(event){ + console.log('afterPaste'); + }); + + editor.on('afterPaste',function(event){ + console.log('afterPaste'); + }); + */ + + //--- DATA + //From magicline-ckeditor-plugin + // Thanks to that, an editor never yields data polluted by the box. + // Listen with very high priority, so line will be removed before other + // listeners will see it. + //при получении данных - удалÑем клаÑÑÑ‹ добавленные jquery-плагином Ð´Ð»Ñ ÑмулÑции Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ñчеек + //todo: Ñделать тоже Ñамое при getSnapshot, по идее тогда не будут ÑохранÑÑ‚ÑŒÑÑ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ undo + editor.on('beforeGetData', function (event) { + //console.log('beforeGetData'); + var document = event.editor.document; + if (!document) return; + + var $document = $(document.$); + //чиÑтим DOM от добавленных клаÑÑов и других Ñлужебных изменений + $().tableCellsSelection('removeDocumentHtmlChanges', $document); + + editor.once('getData', function () { + $().tableCellsSelection('addDocumentHtmlChanges', $document); + }, null, null, 1000); + }, null, null, 0); + + /*editor.on('getData',function(event){ + console.log('getData'); + }); + + editor.on('dataFiltered',function(event){ + console.log('dataFiltered'); + }); + + editor.on('dataReady',function(event){ + console.log('dataReady'); + }); + + editor.on('setData',function(event){ + console.log('setData'); + }); + */ + + //--- FORMAT + /*editor.on('toDataFormat',function(event){ + console.log('toDataFormat'); + }); + + editor.on('toHtml',function(event){ + console.log('toHtml'); + }); + + //--- FOCUS/BLUR + editor.on('blur',function(event){ + console.log('blur'); + }); + + editor.on('focus',function(event){ + console.log('focus'); + }); + + //--- SELECTION + editor.on('selectionChange',function(event){ + console.log('selectionChange'); + }); + */ + + //todo: проверить нет ли повторного Ð½Ð°Ð²ÐµÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ° Ñобытий при редактировании и undo/redo + function initTablesSelection(editor) { + $document = $(editor.document.$); + var $tables = $document.find('table'); + + //инициализируем таблицы + if ($tables.length > 0) $tables.tableCellsSelection(); + + //и вешаем обработчик + //this.$table.off('copy'); + /*var eventName = 'selectionchange.cellsselector'; + $tables.on(eventName,onTableCellSelectionChange); + + function onTableCellSelectionChange(event){ + editor.fire( 'selectionChange', { + selection: editor.getSelection(), + path: editor.elementPath() + }); + }*/ + } + + + function destroyTablesSelection($document) { + var $tables = $document.find('table'); + if ($tables.length > 0) $tables.tableCellsSelection('destroy'); + } + + //Overwrite tabletools-plugin commands + addCmd('cellMerge', createDef({ + allowedContent: 'td[colspan,rowspan]', + requiredContent: 'td[colspan,rowspan]', + exec: function (editor) { + //replace tabletools>mergeCells() to mergeCellsByPlugin() + placeCursorInCell(mergeCellsByPlugin(editor.getSelection()), true); + } + })); + + + /* overwrite tabletools context menu items */ + // If the "menu" plugin is loaded + if (editor.getMenuItem) { + + var tableCellMenuItem = editor.getMenuItem('tablecell'); + var prevGetItemsFunction = tableCellMenuItem.getItems; + tableCellMenuItem.getItems = function () { + //получаем предыдущие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + var ret = prevGetItemsFunction(); + + var selection = editor.getSelection(), + cells = getSelectedCellsByTableCellsSelectionPlugin(selection); + //заменÑем необходимые на Ñвои + ret.tablecell_merge = mergeCellsByPlugin(selection, null, true) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED;//объединение Ñчеек + ret.tablecell_properties = cells.length > 0 ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; + return ret; + }; + } + + //---------- Helpers + + /*full copy of tabletools>mergeCells() except: + - replace getSelectedCells() to getSelectedCellsByTableCellsSelectionPlugin(); + */ + function mergeCellsByPlugin(selection, mergeDirection, isDetect) { + //var cells = getSelectedCells( selection ); + var cells = getSelectedCellsByTableCellsSelectionPlugin(selection); + // Invalid merge request if: + // 1. In batch mode despite that less than two selected. + // 2. In solo mode while not exactly only one selected. + // 3. Cells distributed in different table groups (e.g. from both thead and tbody). + var commonAncestor; + if (( mergeDirection ? cells.length != 1 : cells.length < 2 ) || ( commonAncestor = selection.getCommonAncestor() ) && commonAncestor.type == CKEDITOR.NODE_ELEMENT && commonAncestor.is('table')) + return false; + + var cell, + firstCell = cells[0], + table = firstCell.getAscendant('table'), + map = CKEDITOR.tools.buildTableMap(table), + mapHeight = map.length, + mapWidth = map[0].length, + startRow = firstCell.getParent().$.rowIndex, + startColumn = cellInRow(map, startRow, firstCell); + + if (mergeDirection) { + var targetCell; + try { + var rowspan = parseInt(firstCell.getAttribute('rowspan'), 10) || 1; + var colspan = parseInt(firstCell.getAttribute('colspan'), 10) || 1; + + targetCell = map[mergeDirection == 'up' ? ( startRow - rowspan ) : mergeDirection == 'down' ? ( startRow + rowspan ) : startRow][ + mergeDirection == 'left' ? + ( startColumn - colspan ) : + mergeDirection == 'right' ? ( startColumn + colspan ) : startColumn]; + + } catch (er) { + return false; + } + + // 1. No cell could be merged. + // 2. Same cell actually. + if (!targetCell || firstCell.$ == targetCell) + return false; + + // Sort in map order regardless of the DOM sequence. + cells[( mergeDirection == 'up' || mergeDirection == 'left' ) ? 'unshift' : 'push'](new CKEDITOR.dom.element(targetCell)); + } + + // Start from here are merging way ignorance (merge up/right, batch merge). + var doc = firstCell.getDocument(), + lastRowIndex = startRow, + totalRowSpan = 0, + totalColSpan = 0, + // Use a documentFragment as buffer when appending cell contents. + frag = !isDetect && new CKEDITOR.dom.documentFragment(doc), + dimension = 0; + + for (var i = 0; i < cells.length; i++) { + cell = cells[i]; + + var tr = cell.getParent(), + cellFirstChild = cell.getFirst(), + colSpan = cell.$.colSpan, + rowSpan = cell.$.rowSpan, + rowIndex = tr.$.rowIndex, + colIndex = cellInRow(map, rowIndex, cell); + + // Accumulated the actual places taken by all selected cells. + dimension += colSpan * rowSpan; + // Accumulated the maximum virtual spans from column and row. + totalColSpan = Math.max(totalColSpan, colIndex - startColumn + colSpan); + totalRowSpan = Math.max(totalRowSpan, rowIndex - startRow + rowSpan); + + if (!isDetect) { + // Trim all cell fillers and check to remove empty cells. + if (trimCell(cell), cell.getChildren().count()) { + // Merge vertically cells as two separated paragraphs. + if (rowIndex != lastRowIndex && cellFirstChild && !( cellFirstChild.isBlockBoundary && cellFirstChild.isBlockBoundary({br: 1}) )) { + var last = frag.getLast(CKEDITOR.dom.walker.whitespaces(true)); + if (last && !( last.is && last.is('br') )) + frag.append('br'); + } + + cell.moveChildren(frag); + } + i ? cell.remove() : cell.setHtml(''); + } + lastRowIndex = rowIndex; + } + + if (!isDetect) { + frag.moveChildren(firstCell); + + firstCell.appendBogus(); + + if (totalColSpan >= mapWidth) + firstCell.removeAttribute('rowSpan'); + else + firstCell.$.rowSpan = totalRowSpan; + + if (totalRowSpan >= mapHeight) + firstCell.removeAttribute('colSpan'); + else + firstCell.$.colSpan = totalColSpan; + + // Swip empty <tr> left at the end of table due to the merging. + var trs = new CKEDITOR.dom.nodeList(table.$.rows), + count = trs.count(); + + for (i = count - 1; i >= 0; i--) { + var tailTr = trs.getItem(i); + if (!tailTr.$.cells.length) { + tailTr.remove(); + count++; + continue; + } + } + + return firstCell; + } + // Be able to merge cells only if actual dimension of selected + // cells equals to the caculated rectangle. + else { + return ( totalRowSpan * totalColSpan ) == dimension; + } + } + + //---------- Helpers > plugin + /** + * Return selected cells by tableCellsSelection-jquery-plugin + * + * @param selection + * @returns {Array} + */ + function getSelectedCellsByTableCellsSelectionPlugin(selection) { + var ranges = selection.getRanges(); + var range = ranges[0]; + var startNode = range.getCommonAncestor(); + var table = startNode.getAscendant('table', true); + var $selectedCells = $(table.$).tableCellsSelection('selectedCells'); + + var ret = []; + //jquery to ckeditor.dom.element[] + for (var i = 0; i < $selectedCells.length; i++) { + ret[i] = new CKEDITOR.dom.element($selectedCells[i]); + } + return ret; + } + + + //---------- Helpers > Imported + //from other plugins + + //---------- Helpers > Imported > tabletools plugin + function createDef(def) { + return CKEDITOR.tools.extend(def || {}, { + contextSensitive: 1, + refresh: function (editor, path) { + this.setState(path.contains({ + td: 1, + th: 1 + }, 1) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED); + } + }); + } + + function addCmd(name, def) { + var cmd = editor.addCommand(name, def); + editor.addFeature(cmd); + } + + + // Remove filler at end and empty spaces around the cell content. + function trimCell(cell) { + var bogus = cell.getBogus(); + bogus && bogus.remove(); + cell.trim(); + } + + + function placeCursorInCell(cell, placeAtEnd) { + var docInner = cell.getDocument(), + docOuter = CKEDITOR.document; + + // Fixing "Unspecified error" thrown in IE10 by resetting + // selection the dirty and shameful way (#10308). + // We can not apply this hack to IE8 because + // it causes error (#11058). + if (CKEDITOR.env.ie && CKEDITOR.env.version == 10) { + docOuter.focus(); + docInner.focus(); + } + + var range = new CKEDITOR.dom.range(docInner); + if (!range['moveToElementEdit' + ( placeAtEnd ? 'End' : 'Start' )](cell)) { + range.selectNodeContents(cell); + range.collapse(placeAtEnd ? false : true); + } + range.select(true); + } + + + function cellInRow(tableMap, rowIndex, cell) { + var oRow = tableMap[rowIndex]; + if (typeof cell == 'undefined') + return oRow; + + for (var c = 0; oRow && c < oRow.length; c++) { + if (cell.is && oRow[c] == cell.$) + return c; + else if (c == cell) + return new CKEDITOR.dom.element(oRow[c]); + } + return cell.is ? -1 : null; + } + } +}); \ No newline at end of file diff --git a/plugins/ckeditor4/ckeditortablecellsselection/styles/tablecellsselection.css b/plugins/ckeditor4/ckeditortablecellsselection/styles/tablecellsselection.css new file mode 100644 index 0000000..009ea4d --- /dev/null +++ b/plugins/ckeditor4/ckeditortablecellsselection/styles/tablecellsselection.css @@ -0,0 +1,28 @@ +.tcs::selection{ + background-color: transparent; +} +.tcs td:not(.tcs-selection-enabled) > *, +.tcs th:not(.tcs-selection-enabled) > *, +.tcs td:not(.tcs-selection-enabled), +.tcs th:not(.tcs-selection-enabled){ + -webkit-user-select: none !important; + -khtml-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: none !important; +} +.tcs tr::selection, +.tcs td:not(.tcs-selection-enabled) > *::selection, +.tcs th:not(.tcs-selection-enabled) > *::selection, +.tcs td:not(.tcs-selection-enabled)::selection, +.tcs th:not(.tcs-selection-enabled)::selection, +.tcs br::selection{ + background-color: transparent; +} +.tcs tr::-moz-selection, .tcs td:not(.tcs-selection-enabled)::-moz-selection, .tcs th:not(.tcs-selection-enabled)::-moz-selection{ + background-color: transparent; +} +.tcs .tcs-selected:not(.sel-from){ + border: 1px double #4887C7; + background-color: rgba(51, 122, 183, 0.2) !important; +} \ No newline at end of file diff --git a/plugins/ckeditor4/ckwebspeech/dialogs/ckwebspeech.js b/plugins/ckeditor4/ckwebspeech/dialogs/ckwebspeech.js new file mode 100644 index 0000000..bb92a6c --- /dev/null +++ b/plugins/ckeditor4/ckwebspeech/dialogs/ckwebspeech.js @@ -0,0 +1 @@ +var wsDialogHtml=function(){this.updateCulturesSelect=function(d,b){var a=document.getElementById(d._.inputId);for(var c=a.options.length-1;c>=0;c--){a.remove(c)}for(var c=0;c<b.length;c++){a.options.add(new Option(b[c],b[c]))}}};CKEDITOR.dialog.add("webspeechDialog",function(b){var c=new wsDialogHtml();var a=b.ckWebSpeech._currentCulture.val;return{title:"WebSpeech Settings",minWidth:400,minHeight:200,contents:[{id:"tab-basic",label:"Basic Settings",elements:[{type:"select",id:"wslanguages",label:"Languages",items:b.ckWebSpeech.getLanguages(),"default":b.ckWebSpeech._currentCulture.langVal,onChange:function(g){var f=CKEDITOR.dialog.getCurrent();var e=f.getContentElement("tab-basic","wscultures");var d=b.ckWebSpeech.getCultures(g.data.value);e.setup({selCultures:e,options:d});e.fire("change",{value:d[0][0]},b)},onShow:function(f){var d=CKEDITOR.dialog.getCurrent();var e=d.getContentElement("tab-basic","wslanguages");document.getElementById(e._.inputId).value=b.ckWebSpeech._currentCulture.langVal}},{type:"select",id:"wscultures",label:"Culture",items:b.ckWebSpeech.getCultures(),"default":b.ckWebSpeech._currentCulture.val,onChange:function(d){a=d.data.value},setup:function(d){c.updateCulturesSelect(d.selCultures,d.options)},onShow:function(f){var e=CKEDITOR.dialog.getCurrent();var d=e.getContentElement("tab-basic","wscultures");document.getElementById(d._.inputId).value=b.ckWebSpeech._currentCulture.val}}]},{id:"tab-adv",label:"Advanced Settings",elements:[]}],onOk:function(){b.ckWebSpeech.setDialectByCulture(a)}}}); \ No newline at end of file diff --git a/plugins/ckeditor4/ckwebspeech/icons/speech.gif b/plugins/ckeditor4/ckwebspeech/icons/speech.gif new file mode 100644 index 0000000000000000000000000000000000000000..c645b970c0e2faef3016b8046cdb613e6b96c947 GIT binary patch literal 418 zcmZ?wbhEHb6krfwXkcUjf}d7aivPL&TtkAL9RpmA^bD9m!ixXooQqNuOHxx5$}>wc z6bdr)QWFaba#D-)(@OO6QcD;Vf3k4$GcYpffD8c{$G{}-!?0}k3!b~pUVd4Erj~E_ z$tt9^E=ozul#F}EeLSBLn;vB}J?C5(T#uNlG1q5X;j_lfw?5au1p!@yX_p$3zQ9z= zi<2cg)ys}YMoM#fWiPIKYf>bo{`}WEaco+(khR*HZca%_aB5Qum%BEtO7Xg9pv}|; TRry!=KL1;<L2a9f@~kxgJAi?* literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/ckwebspeech/icons/webspeech-enable.gif b/plugins/ckeditor4/ckwebspeech/icons/webspeech-enable.gif new file mode 100644 index 0000000000000000000000000000000000000000..99ccadafa0e947bb6a1b6485731426249a9adde5 GIT binary patch literal 1764 zcmZ?wbhEHb6krfwIK}`1jEsy-jEtO2OgzlYyv)pe%*-6DtO6`7LM$vItgPa!tWs=j z(rj#eTwHSO>;l}}>YSWn{QSDy+!BI<Mm#*mJUr&Syq3JYHhg@}{QNEg0&aqW`Vtae zLPFj`LV+S8AtEB7A|hcTBH^N<5u&0|qM|WkVzFXk@nT{z;^Ju%66q2W8IqEjl9Jhy zk|i=SwX(8xva<DZa!vB`&GPcSii&-Tiv3DTla-Zcs;JCURb8N}x=2lJv6|WvHMMn` zn(H++_vq*x(A7Ptt9wXS_pq++0X@CLdU{9n^iJsMozmC8U}$*P*!Z4_$$b-(2PP&j z&COq#o4+<U|7c<H+0ychrR7g6t6x@Dzk$fw`j55sUu)}s*4F=l$j0Wst?hq1yZ;Uj z;Gm*Dq4=NM&ow02*)hP?NY8+o5om+rKN;tu)Wnk16osTpg@Vky)Wm{<oYdm{v=Y6% z)Di~8pDdjG4D}2;AlHDRk%2v+p}wiPo`IpIqou8_v$MOsx2t>Nq@F2F{Zra)`<+|+ zRPFk`g(q|=x%UT(E^B7sNK|Muh?~~IARiwR5hk{FI|CQzwuzIcuiM|-f28kpM<X^% zf^k?<Z{P1Zk-^Ni-%G!jK@Dh;IMkw57#3~Z4YX+2oD<VeE$%;jq#wIIiP-FEw(Iwt z5@plx7Tqgt3AD;ks*_!9TDP~jKqnvAS3;cv5MMEf^g_MGI8nBZi<5zAN|PoVkJiQJ zp6mTLC*GdWjMaDL7`8Us^t(>151-ua7Ty~jHM7kvI=WK_Y`0NIA{W@B;t4H@++gb^ zwl&AgKpmjh=>c^CLqKP|1<(y`j!QaY{ft?7O@bq*)hF>wCcbR#pD^*`rzWg!=|*u& zhgCO&Q*V8ExXlE&shv}&ch3y(2#<-H3v$qc=6G#O+X-HVhOsRPKsQbB78j4-3Utzh zKv9W(&2ca%=|;AMJHs61zp5!b)*R$4hsz72eSyw04T^Zs5*d>qC>I|yxrteoRiee> z3crxDQzI}rVkWn#aQ8L)w6%qHHid^<_b|9j?3fsCGsSIY%got5bEi)Lx^W@MjZ4Bo zZkz&gWB3G+Bd35IxwAez0qD*tKzAOVfaK026A|uQaun*!+w;R=?tC#J0_aYgnumw_ k1vo`mCFV$c%n(p@?qFiX=F-6)l7lJL4NShHNvUED02CPr`~Uy| literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/ckwebspeech/icons/webspeech-settings.png b/plugins/ckeditor4/ckwebspeech/icons/webspeech-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..29817079f0bc73c716169ad8e7611a8e5ce4227c GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE<hRxemd{22U45`9+AZi z3^MW{%$V?(<rYwoy~NYkmHi%vB%7Ye_5G|s5k_TC7sn8b({m^9)?;yyXx*Q$+~LjA zc}UevYi*i#{sYB5OlQS@vvIX51O~29ndR%UJn|y<T$cbY-h~q;#3zOwyA_-5Z#1+1 z+?knkERC5tweBA9vEiN4xIO2ciPEaMZ<pNm-Enq*iEZTHRp%I77s$_Giu<>j@qlpw z|CgnU&zM^%Db;asMcRr8`U@6{3QiXcWWG1KAS{->?RKjLUq}PLLIYz0zlBeqTI13V zi@aw~eoKX3aoxJgZq>xC+@;QQGb-P{%2Klk<nFwG_Q%$+q$`W6=8E;Ht+SJV<@?Tp ze`1G%QeNY3HO1?O%cj+(PS_c7Zq2nT_l~?z|Kqn?eC4jCa;7X2uXgTQz_*Qi<Gu5$ w7n`f5y=p#Je^Xp5OS3op%EY|-T<;pDqbX4#FW0~01BMrar>mdKI;Vst0K|Kn1ONa4 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/ckwebspeech/icons/webspeech.png b/plugins/ckeditor4/ckwebspeech/icons/webspeech.png new file mode 100644 index 0000000000000000000000000000000000000000..34445f85fa4fe7bf11371910ea1f49280e31bc97 GIT binary patch literal 451 zcmV;!0X+VRP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv00000 z008+zyMF)x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-Ut~6EGuY%YIgtt0Z>Uq zK~y-)l~S=v13?g-9cK2}Tf(_1t~>Mx4wB0+94Ue}`UN4sprw_azYx$L2{!2jQv^RC zwb&e_(Xfn7Hi+5C-GhZ?cyET8_W(}7IX7bF1v4+4b0g@2;c#e`QUU-10HTzVs;bh~ z4Xm}7K^&g7_A183SW!eUQd6xPbituPmSwF)zqu4XP167oJuq`3A}^5@zKt=DyWQ@q zX`1`!3f}v%_kIEZJ~G&Q?<d~-@yQz~r9?!q*XwN}&TK>k_x8r2wVnrpG3F^)XpDId z1GLujsJO0c$n*Rh0ECFvWm&rEbjq{YjLWh-Bce3`NS@~xbzT1(qU(@CA`&7xq%lp? zn^rar27@d~l3PUlM8uCIN$#qu$~uQcYyCz<ubo6iQS_O4#mq}Y+#=$ZnU~DGDvF~2 tmrqC0L<FT20RR)x`@YNoK#0f5{{b?7V`Qha@U;K{002ovPDHLkV1k?6xiJ6$ literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/ckwebspeech/plugin.js b/plugins/ckeditor4/ckwebspeech/plugin.js new file mode 100644 index 0000000..4ccefc2 --- /dev/null +++ b/plugins/ckeditor4/ckwebspeech/plugin.js @@ -0,0 +1 @@ +var langs=[["Afrikaans",["af-ZA"]],["Bahasa Indonesia",["id-ID"]],["Bahasa Melayu",["ms-MY"]],["Català ",["ca-ES"]],["ÄŒeÅ¡tina",["cs-CZ"]],["Deutsch",["de-DE"]],["English",["en-AU","Australia"],["en-CA","Canada"],["en-IN","India"],["en-NZ","New Zealand"],["en-ZA","South Africa"],["en-GB","United Kingdom"],["en-US","United States"]],["Español",["es-AR","Argentina"],["es-BO","Bolivia"],["es-CL","Chile"],["es-CO","Colombia"],["es-CR","Costa Rica"],["es-EC","Ecuador"],["es-SV","El Salvador"],["es-ES","España"],["es-US","Estados Unidos"],["es-GT","Guatemala"],["es-HN","Honduras"],["es-MX","México"],["es-NI","Nicaragua"],["es-PA","Panamá"],["es-PY","Paraguay"],["es-PE","Perú"],["es-PR","Puerto Rico"],["es-DO","República Dominicana"],["es-UY","Uruguay"],["es-VE","Venezuela"]],["Euskara",["eu-ES"]],["Français",["fr-FR"]],["Galego",["gl-ES"]],["Hrvatski",["hr_HR"]],["IsiZulu",["zu-ZA"]],["Ãslenska",["is-IS"]],["Italiano",["it-IT","Italia"],["it-CH","Svizzera"]],["Magyar",["hu-HU"]],["Nederlands",["nl-NL"]],["Norsk bokmÃ¥l",["nb-NO"]],["Polski",["pl-PL"]],["Português",["pt-BR","Brasil"],["pt-PT","Portugal"]],["Română",["ro-RO"]],["SlovenÄina",["sk-SK"]],["Suomi",["fi-FI"]],["Svenska",["sv-SE"]],["Türkçe",["tr-TR"]],["българÑки",["bg-BG"]],["PуÑÑкий",["ru-RU"]],["СрпÑки",["sr-RS"]],["í•œêµì–´",["ko-KR"]],["ä¸æ–‡",["cmn-Hans-CN","æ™®é€šè¯ (ä¸å›½å¤§é™†)"],["cmn-Hans-HK","æ™®é€šè¯ (香港)"],["cmn-Hant-TW","ä¸æ–‡ (å°ç£)"],["yue-Hant-HK","粵語 (香港)"]],["日本語",["ja-JP"]],["Lingua latÄ«na",["la"]]];var CKWebSpeechCommandVoice=function(a){this._editor=a;this._commandvoice=false;this._commands=false;this._regexpcommand=false;this.CKWebSpeechCommandVoice(this._editor.config)};CKWebSpeechCommandVoice.prototype.CKWebSpeechCommandVoice=function(a){if(typeof this._editor.config.ckwebspeech=="undefined"){this._editor.config.ckwebspeech={}}this.setCommands(this._editor.config)};CKWebSpeechCommandVoice.prototype.setCommands=function(b){var c=false;var a=false;if(b.ckwebspeech.commandvoice){c=b.ckwebspeech.commandvoice}if(b.ckwebspeech.commands){a=this.makeCommands(b.ckwebspeech.commands)}if(c&&a){this._regexpcommand=new RegExp("("+c+"){1}\\s{1}("+a+")","gi");this._commands=b.ckwebspeech.commands;this._commandvoice=c}};CKWebSpeechCommandVoice.prototype.makeCommands=function(a){var c="";if(a instanceof Array){for(var b=0;b<a.length;b++){var d=a[b];c+=this.makeValidCommand(d)}return c==""?false:c.replace(/\|$/gi,"")}else{return false}};CKWebSpeechCommandVoice.prototype.makeValidCommand=function(b){var c=new RegExp("(newline|newparagraph|undo|redo)");if(typeof b=="object"){for(var a in b){if(c.test(a)){return b[a]+"|"}}}return""};CKWebSpeechCommandVoice.prototype.buildResult=function(a){if(this._regexpcommand){var b;var e=[];while((b=this._regexpcommand.exec(a))!=null){e.push(b[2])}for(var c=0;c<e.length;c++){var f=new String(e[c]);var d=this.getCommandForResult(f);a=this.execCmd(d,f,a)}return a}else{return a}};CKWebSpeechCommandVoice.prototype.execCmd=function(c,d,a){var b=new RegExp(this._commandvoice+" "+d+"\\s?","gi");switch(c){case"newline":return a.replace(b,"\n");case"newparagraph":return a.replace(b,"\n\n");case"undo":this._editor.execCommand("undo");return false;case"redo":this._editor.execCommand("redo");return false;default:return a}};CKWebSpeechCommandVoice.prototype.getCommandForResult=function(c){this._commands;for(var b=0;b<this._commands.length;b++){for(var a in this._commands[b]){if(this._commands[b][a]==c){return a}}}return""};var CKWebSpeechHandler=function(a){CKWebSpeechCommandVoice.call(this,a);this._currentCulture={val:"en-US",langVal:6};this._elmtPlugIcon;this._plugPath;this._recognizing;this._recognition;this._ignoreOnend;this._start_timestamp;this._working;this.CKWebSpeechHandler()};CKWebSpeechHandler.prototype=Object.create(CKWebSpeechCommandVoice.prototype);CKWebSpeechHandler.prototype.CKWebSpeechHandler=function(){this._recognition;this._plugPath=this._editor.plugins.ckwebspeech.path;this._recognizing=false;this._ignoreOnend=false;this._working=false;this.getElementPluginIcon();this.initServiceSpeech()};CKWebSpeechHandler.prototype.isUnlockedService=function(){if(!("webkitSpeechRecognition" in window)){return false}return true};CKWebSpeechHandler.prototype.getElementPluginIcon=function(){var c=this;var a=0;var b=setInterval(function(){a++;var d;try{d=document.getElementById(c._editor.ui.instances.webSpeechEnabled._.id)}catch(e){d=null}if(d!==null){c._elmtPlugIcon=d.getElementsByClassName("cke_button__webspeechenabled_icon")[0];clearInterval(b)}if(a==500){clearInterval(b)}},1)};CKWebSpeechHandler.prototype.updateIcons=function(){if(this._recognizing){this._editor.ui.get("webSpeechEnabled").label="Disable";this._editor.ui.get("webSpeechEnabled").icon=this._plugPath+"icons/webspeech.png";this._elmtPlugIcon.style.backgroundImage="url("+this._plugPath+"icons/webspeech-enable.gif)"}else{this._editor.ui.get("webSpeechEnabled").label="Enable";this._editor.ui.get("webSpeechEnabled").icon=this._plugPath+"icons/webspeech-enable.gif";this._elmtPlugIcon.style.backgroundImage="url("+this._plugPath+"icons/webspeech.png)"}};CKWebSpeechHandler.prototype.initServiceSpeech=function(){if(this.isUnlockedService()){this._recognition=new webkitSpeechRecognition();this._recognition.continuous=true;this._recognition.interimResults=true;var a=this;this._recognition.onstart=function(){a.onStart()};this._recognition.onerror=function(b){a.onError(b)};this._recognition.onend=function(){a.onEnd()};this._recognition.onresult=function(b){a.onResult(b)};this._recognition.onspeechstart=function(b){a.onSpeech()};this._recognition.onspeechend=function(b){a.onSpeechEnd()}}};CKWebSpeechHandler.prototype.onStart=function(){this._recognizing=true;this.updateIcons()};CKWebSpeechHandler.prototype.onError=function(a){if(a.error=="no-speech"){this._ignore_onend=true}if(a.error=="audio-capture"){this._ignore_onend=true}if(a.error=="not-allowed"){if(a.timeStamp-this._start_timestamp<100){}else{}this._ignore_onend=true}this.updateIcons()};CKWebSpeechHandler.prototype.onEnd=function(){this._recognizing=false;if(this._ignoreOnend){return}this.updateIcons()};CKWebSpeechHandler.prototype.onSpeech=function(a){this._elmtPlugIcon.style.backgroundImage="url("+this._plugPath+"icons/speech.gif)"};CKWebSpeechHandler.prototype.onSpeechEnd=function(a){this.updateIcons()};CKWebSpeechHandler.prototype.onResult=function(c){if(typeof(c.results)=="undefined"){this._recognizing=false;this._recognition.onend=null;this._recognition.stop();this.updateIcons();return}this._elmtPlugIcon.style.backgroundImage="url("+this._plugPath+"icons/speech.gif)";for(var b=c.resultIndex;b<c.results.length;++b){if(c.results[b].isFinal){var a=this.buildResult(c.results[b][0].transcript);if(a){this._editor.insertText(a)}this.updateIcons()}}};CKWebSpeechHandler.prototype.toogleSpeech=function(){if(!this._recognizing){this._recognition.lang=this._currentCulture.val;this._recognition.start();this._ignore_onend=false;this._start_timestamp=new Date().getTime()}else{this._recognition.stop()}};var CKWebSpeech=function(a){CKWebSpeechHandler.call(this,a);this._langs=langs;this.CKWebSpeech()};CKWebSpeech.prototype=Object.create(CKWebSpeechHandler.prototype);CKWebSpeech.prototype.CKWebSpeech=function(){if(typeof this._editor.config.ckwebspeech=="undefined"){this._editor.config.ckwebspeech={}}if(this._editor.config.ckwebspeech.culture){this.setDialectByCulture(this._editor.config.ckwebspeech.culture)}};CKWebSpeech.prototype.setDialectByCulture=function(c){for(var b=0;b<this._langs.length;b++){for(var a=1;a<this._langs[b].length;a++){if(this._langs[b][a][0].toLowerCase()==c.toLowerCase()){this._currentCulture={val:this._langs[b][a][0],langVal:b};return this._currentCulture}}}return this._currentCulture};CKWebSpeech.prototype.setDialectByLanguage=function(a){this.setDialectByCulture(this._langs[a][1][0])};CKWebSpeech.prototype.getLanguages=function(){var b=new Array();for(var a=0;a<this._langs.length;a++){b.push(new Array(this._langs[a][0],a))}return b};CKWebSpeech.prototype.getCultures=function(a){if(typeof a==="undefined"){a=this._currentCulture.langVal}var c=new Array();for(var b=1;b<this._langs[a].length;b++){c.push(new Array(this._langs[a][b][0]))}return c};CKEDITOR.plugins.add("ckwebspeech",{icons:"webspeech",init:function(b){b.ckWebSpeech=new CKWebSpeech(b);var a=this.path;b.addCommand("webspeechDialog",new CKEDITOR.dialogCommand("webspeechDialog"));b.addCommand("webspeechToogle",{exec:function(c){c.ckWebSpeech.toogleSpeech()}});b.ui.addButton("webSpeechEnabled",{label:"Enable",icon:a+"icons/webspeech.png",command:"webspeechToogle",toolbar:"ckwebspeech"});b.ui.addButton("webSpeechSettings",{label:"Settings",icon:a+"icons/webspeech-settings.png",command:"webspeechDialog",toolbar:"ckwebspeech"});CKEDITOR.dialog.add("webspeechDialog",this.path+"dialogs/ckwebspeech.js")}}); \ No newline at end of file diff --git a/plugins/ckeditor4/codeTag b/plugins/ckeditor4/codeTag new file mode 160000 index 0000000..8908650 --- /dev/null +++ b/plugins/ckeditor4/codeTag @@ -0,0 +1 @@ +Subproject commit 8908650a6bdf9bd084822d86e320f530364d0b4b diff --git a/plugins/ckeditor4/crossreference/LICENSE.md b/plugins/ckeditor4/crossreference/LICENSE.md new file mode 100644 index 0000000..43b5cc5 --- /dev/null +++ b/plugins/ckeditor4/crossreference/LICENSE.md @@ -0,0 +1,1242 @@ +Software License Agreement +========================== + +CrossReference Plugin for CKEditor - Adds images from local client as base64 +string into the source without server side processing. You can also add +external image urls into the source. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + + +Appendix A: The GPL License +--------------------------- + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix B: The LGPL License +---------------------------- + +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix C: The MPL License +--------------------------- + +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + diff --git a/plugins/ckeditor4/crossreference/README.md b/plugins/ckeditor4/crossreference/README.md new file mode 100644 index 0000000..2377605 --- /dev/null +++ b/plugins/ckeditor4/crossreference/README.md @@ -0,0 +1,271 @@ +CrossReference Plugin for CKEditor 4 +================================= + +Adds cross references links with optional auto-numeration for chapters, images, tables and references. Other types of references can be defined in config. + +## Online demo + +Try the plugin demo at <http://indvd00m.com/crossreference-demo/>. + +## CKEditor plugin page + +http://ckeditor.com/addon/crossreference + +## Requirements + +CrossReference Plugin require CKEditor 4.5+ version and dependent from plugins: dialog, notification. + +## Installation + + 1. Download the plugin: https://github.com/indvd00m/crossreference/releases. + + 2. Extract (decompress) the downloaded file into the plugins folder of your + CKEditor installation. + Example: http://example.com/ckeditor/plugins/crossreference + + 3. Enable the plugin by using the extraPlugins configuration setting. + Example: CKEDITOR.config.extraPlugins = 'crossreference'; + +## Description + +Two main conceptions - anchor and link to anchor. There are 4 type of references defined by default: chapter, image, table, reference. Example of anchor of type `image` in raw html: +```html +<a + class="cross-reference cross-anchor" + cross-reference="image" + cross-anchor="" + cross-guid="7d24373b-0756-481d-bf97-5a17ffdf3a28" + cross-name="Experimental result" + cross-number="1" + name="image-7d24373b-0756-481d-bf97-5a17ffdf3a28" + > + Fig. 1. Experimental result. +</a> +``` +Example of link to this anchor in raw html: +```html +<a + class="cross-reference cross-link" + cross-reference="image" + cross-link="" + cross-guid="7d24373b-0756-481d-bf97-5a17ffdf3a28" + cross-name="Experimental result" + cross-number="1" + href="#image-7d24373b-0756-481d-bf97-5a17ffdf3a28" + title="Fig. 1. Experimental result." + > + 1 +</a> +``` +After every inserting of anchor or links to anchor all references will be updated to be a concerted. Or you can manually update cross-references by selecting option in menu (for example after deleting of anchors). + +## Configuration + +You can switch which types is active by config option `config.crossreference.activeTypes = ['type1', 'type2']`. You can define other types also. + +### Default config: + +```javascript +{ + activeTypes: ['chapter', 'image', 'table', 'reference'], + overrideTypes: false, + types: { + chapter: { + name: 'Chapter', + anchorTextTemplate: '${number}. ${name}.', + linkTextTemplate: '${number}', + numeration: { + enabled: true, + firstNumber: '1', + increase: function(number) { + var n = parseInt(number); + return ++n; + } + }, + anchorsProvider: 'default', + allowCreateAnchors: true, + groupAnchors: false + }, + image: { + name: 'Figure', + anchorTextTemplate: 'Fig. ${number}. ${name}.', + linkTextTemplate: '${number}', + numeration: { + enabled: true, + firstNumber: '1', + increase: function(number) { + var n = parseInt(number); + return ++n; + } + }, + anchorsProvider: 'default', + allowCreateAnchors: true, + groupAnchors: false + }, + table: { + name: 'Table', + anchorTextTemplate: 'Table ${number}. ${name}.', + linkTextTemplate: '${number}', + numeration: { + enabled: true, + firstNumber: '1', + increase: function(number) { + var n = parseInt(number); + return ++n; + } + }, + anchorsProvider: 'default', + allowCreateAnchors: true, + groupAnchors: false + }, + reference: { + name: 'Reference', + anchorTextTemplate: '[${number}] ${name}.', + linkTextTemplate: '[${number}]', + numeration: { + enabled: true, + firstNumber: '1', + increase: function(number) { + var n = parseInt(number); + return ++n; + } + }, + anchorsProvider: 'default', + allowCreateAnchors: true, + groupAnchors: false + } + } +} +``` +| Property | Description | Type | Default value | +| --- | --- | --- | --- | +| `activeTypes` | Which type of anchors would be activated. | Array | `['chapter', 'image', 'table', 'reference']` | +| `overrideTypes` | If you define your own types, enabling this option lead to mixing of your types with types from default config which not yet defined in your config. | Boolean | false | +| `types` | Types definition. | Object | see [Example of type definition](https://github.com/indvd00m/crossreference#example-of-type-definition) section| + +### Example of type definition + +```javascript +image: { + name: 'Figure', + anchorTextTemplate: 'Fig. ${number}. ${name}.', + linkTextTemplate: '${number}', + numeration: { + enabled: true, + firstNumber: '1', + increase: function(number) { + var n = parseInt(number); + return ++n; + } + }, + anchorsProvider: 'default', + allowCreateAnchors: true, + groupAnchors: false +} +``` +| Property | Description | Type | Required | +| --- | --- | --- | --- | +| `name` | Type name. | String | Yes | +| `anchorTextTemplate` | Template for anchor text. This text will be put in `a` tag. You can use variables in format `${variableName}`. Variables is a properties of an anchor object (see [Example of an anchor object](https://github.com/indvd00m/crossreference#example-of-an-anchor-object) section). | String | No | +| `linkTextTemplate` | Template for link text. This text will be put in `a` tag. You can use variables in format `${variableName}`. Variables is a properties of an anchor object (see [Example of an anchor object](https://github.com/indvd00m/crossreference#example-of-an-anchor-object) section). | String | No | +| `numeration` | Definition of type numeration. See [Example of a numeration definition](https://github.com/indvd00m/crossreference#example-of-a-numeration-definition) section. | Object | No | +| `anchorsProvider` | See [Example of type with anchors provider](https://github.com/indvd00m/crossreference#example-of-type-with-anchors-provider) section. | String `'default'` or function | No | +| `allowCreateAnchors` | Can user create anchors of this type in anchors dialog. | Boolean | No | +| `groupAnchors` | If `true`, anchors can be filtered by group in link dialog. | Boolean | No | + +### Example of a numeration definition + +```javascript +numeration: { + enabled: true, + firstNumber: '1', + increase: function(number) { + var n = parseInt(number); + return ++n; + } +} +``` +| Property | Description | Type | +| --- | --- | --- | +| `enabled` | Enabling/disabling numeration of anchors. | Boolean | +| `firstNumber` | First number. For example you may define `firstNumber` as `I` for Roman numerals. | String | +| `increase` | Function which must return number (as string) which is next after `number` argument (string). | Function | + +### Example of an anchor object + +JSON object: + +```javascript +{ + type: 'image', + guid: '7d24373b-0756-481d-bf97-5a17ffdf3a28', + name: 'Experimental result', + number: '1', + text: 'Fig. 1. Experimental result.', + groupName: 'Group name', + groupGuid: '6c848dff-cde3-421f-b926-695c8de37d80' +} +``` +| Property | Description | Type | Required | +| --- | --- | --- | --- | +| `type` | Type name of this anchor (`config.types.typeName`). | String | Yes | +| `guid` | Unique guid of this anchor. | String | Yes | +| `name` | Name of this anchor. | String | Yes | +| `number` | Number of this anchor (if type contains numeration definition). | String | Depends of type | +| `text` | Text of this anchor. Optional property because of text will generated by `type.anchorTextTemplate` template. | String | No | +| `groupName` | Name of anchor group. | String | No | +| `groupGuid` | Unique guid of anchor group. | String | No | + +### Example of type with anchors provider + +You can define your own anchors provider. By default plugin search anchors in content of editor and use this anchors for links. But if you want refer to anchors outside of editor you can define another type of anchor with `anchorsProvider` function. + +```javascript +myType: { + name: 'My type', + anchorTextTemplate: '${name}', + linkTextTemplate: '${name}', + anchorsProvider: function(callback, editorAnchors, type, editor) { + var anchors = []; + anchors.push({ + type: 'myType', + guid: '7d24373b-0756-481d-bf97-5a17ffdf3a28', + name: 'Anchor name', + number: '1' + }); + callback(anchors); + }, + allowCreateAnchors: false, + groupAnchors: false +}, +``` + +`anchorsProvider` method attributes: + +| Name | Description | Type | +| --- | --- | --- | +| `callback` | Callback method which must be called with arrays of anchors as argument. | Function | +| `editorAnchors` | Anchors of this type (`myType` in this case) which already contains in editor. You can merge this anchors with your own anchors if need. | Array | +| `type` | Type definition (Object `myType` in this case). | Object | +| `editor` | Instance of ckeditor. | Object | + + +## Roadmap + +See https://github.com/indvd00m/crossreference/issues. + +## Icons: + +https://icons8.com/web-app/21792/unicast + +https://icons8.com/web-app/15117/anchor + +https://icons8.com/web-app/38051/link + +https://icons8.com/web-app/21100/refresh + +## License & Author + +CrossReference Plugin is distributed under GPL/LGPL/MPL. For license terms, see LICENSE.md. + +CrossReference Plugin is written by David E. Veliev. diff --git a/plugins/ckeditor4/crossreference/dialogs/crossreference-anchor.js b/plugins/ckeditor4/crossreference/dialogs/crossreference-anchor.js new file mode 100644 index 0000000..e310672 --- /dev/null +++ b/plugins/ckeditor4/crossreference/dialogs/crossreference-anchor.js @@ -0,0 +1,119 @@ +CKEDITOR.dialog.add('crossreference-anchor-dialog', function(editor) { + + var config = editor.config.crossreference; + + var generateUUID = function() { + var d = new Date().getTime(); + if(window.performance && typeof window.performance.now === "function"){ + d += performance.now(); // use high-precision timer if available + } + var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = (d + Math.random()*16)%16 | 0; + d = Math.floor(d/16); + return (c=='x' ? r : (r&0x3|0x8)).toString(16); + }); + return uuid; + }; + + return { + title : editor.lang.crossreference.anchor, + minWidth : 400, + minHeight : 150, + + contents : [ + { + id : 'tab-main', + label : editor.lang.crossreference.anchor, + elements : [ + { + type : 'vbox', + widths : [ '100%' ], + children : [ + { + type : 'html', + id : 'description', + html : '<div style="white-space: normal; text-align: justify;">' + editor.lang.crossreference.anchorDescription + '</div>', + }, + { + type : 'select', + id : 'type', + width: '100%', + label : editor.lang.crossreference.anchorType, + items : [], + required: true, + items : [['']], + onLoad: function() { + this.getInputElement().setStyle('width', '100%'); + for (var typeName in config.types) { + var type = config.types[typeName]; + var label = type.name; + if (type.allowCreateAnchors == false) + continue; + this.add(label, type.type); + } + }, + setup: function(element) { + this.setValue(element.getAttribute('cross-reference')); + }, + commit: function(element) { + element.setAttribute('cross-reference', this.getValue()); + element.setAttribute('cross-anchor', ''); + } + }, + { + type : 'text', + id : 'name', + width: '100%', + label : editor.lang.crossreference.anchorName, + required: true, + setup: function(element) { + this.setValue(element.getAttribute('cross-name')); + }, + commit: function(element) { + element.setAttribute('cross-name', this.getValue()); + } + } + ] + } + ] + } + ], + + onLoad : function() { + + }, + + onShow : function() { + var selection = editor.getSelection(); + this.element = selection.getStartElement(); + if (this.element) + this.element = this.element.getAscendant('a', true); + if (!this.element || this.element.getName() != 'a' || !this.element.hasAttribute('cross-anchor')) { + this.element = editor.document.createElement('a'); + var guid = generateUUID(); + this.element.setAttribute('cross-guid', guid); + this.insertMode = true; + } else { + this.insertMode = false; + } + + if (this.insertMode) + this.setValueOf('tab-main', 'name', selection.getSelectedText().trim()); + else + this.setupContent(this.element); + }, + + onOk : function() { + if (!this.getValueOf('tab-main', 'type')) + return; + + this.commitContent(this.element); + + if (this.insertMode) + editor.insertElement(this.element); + + editor.execCommand('update-crossreferences'); + } + + }; +}); diff --git a/plugins/ckeditor4/crossreference/dialogs/crossreference-link.js b/plugins/ckeditor4/crossreference/dialogs/crossreference-link.js new file mode 100644 index 0000000..68c72e4 --- /dev/null +++ b/plugins/ckeditor4/crossreference/dialogs/crossreference-link.js @@ -0,0 +1,241 @@ +CKEDITOR.dialog.add('crossreference-link-dialog', function(editor) { + + var config = editor.config.crossreference; + + var updateAnchors = function(dialog) { + dialog.setState(CKEDITOR.DIALOG_STATE_BUSY); + + dialog.anchors = []; + dialog.anchorsByGuid = {}; + dialog.anchorsGroupNameByGuid = {}; + + var type = null; + var typeName = dialog.getValueOf('tab-main', 'type'); + if (typeName) + type = config.types[typeName]; + + var anchorSelect = dialog.getContentElement('tab-main', 'anchor'); + anchorSelect.clear(); + anchorSelect.add('', ''); + + var anchorGroupSelect = dialog.getContentElement('tab-main', 'anchorGroup'); + anchorGroupSelect.clear(); + anchorGroupSelect.add('', ''); + if (type && type.groupAnchors == true) + anchorGroupSelect.getElement().show(); + else + anchorGroupSelect.getElement().hide(); + + config.findAnchors(config, editor, type, function(anchors) { + dialog.anchors = anchors; + dialog.anchorsByGuid = {}; + dialog.anchorsGroupNameByGuid = {}; + + for (var i = 0; i < anchors.length; i++) { + var anchor = anchors[i]; + var guid = anchor.guid; + var label = anchor.text; + anchorSelect.add(label, guid); + + if (type.groupAnchors == true && anchor.groupGuid) { + dialog.anchorsGroupNameByGuid[anchor.groupGuid] = anchor.groupName; + } + dialog.anchorsByGuid[guid] = anchor; + } + + if (type && type.groupAnchors == true) { + for (var groupGuid in dialog.anchorsGroupNameByGuid) { + var groupName = dialog.anchorsGroupNameByGuid[groupGuid]; + anchorGroupSelect.add(groupName, groupGuid); + } + } + + // fix and others + $('option', anchorSelect.getInputElement().$).each(function() { + var option = $(this); + var text = option.text(); + option.html(text); + }); + + if (dialog.insertMode) + filterAnchors(dialog); + else + anchorSelect.setup(dialog.element); + + dialog.setState(CKEDITOR.DIALOG_STATE_IDLE); + }); + }; + + var filterAnchors = function(dialog) { + var filter = dialog.getValueOf('tab-main', 'filter'); + if (filter) + filter = filter.trim().toLowerCase(); + else + filter = ''; + + var type = null; + var typeName = dialog.getValueOf('tab-main', 'type'); + if (typeName) + type = config.types[typeName]; + + var groupGuid = null; + if (type && type.groupAnchors == true) + groupGuid = dialog.getValueOf('tab-main', 'anchorGroup'); + + var anchorSelect = dialog.getContentElement('tab-main', 'anchor'); + var prevValue = anchorSelect.getValue(); + var selected = null; + $('option', anchorSelect.getInputElement().$).each(function() { + var option = $(this); + var guid = option.val(); + var anchor = dialog.anchorsByGuid[guid]; + var text = option.text(); + + var matches = filter.length == 0 || text.toLowerCase().indexOf(filter) != -1; + if (groupGuid) + matches = matches && anchor && anchor.groupGuid == groupGuid; + + if (matches) { + option.removeAttr('disabled', 'disabled'); + if (selected == null) + selected = option.val(); + else if (guid == prevValue) + selected = option.val(); + } else { + option.attr('disabled', 'disabled'); + } + }); + anchorSelect.setValue(selected); + }; + + return { + title : editor.lang.crossreference.link, + minWidth : 400, + minHeight : 150, + + contents : [ + { + id : 'tab-main', + label : editor.lang.crossreference.link, + elements : [ + { + type : 'vbox', + widths : [ '100%' ], + children : [ + { + type : 'html', + id : 'description', + html : '<div style="white-space: normal; text-align: justify;">' + editor.lang.crossreference.linkDescription + '</div>', + }, + { + type : 'select', + id : 'type', + width: '100%', + label : editor.lang.crossreference.anchorType, + required: true, + items : [['']], + onLoad: function() { + this.getInputElement().setStyle('width', '100%'); + for (var typeName in config.types) { + var type = config.types[typeName]; + var label = type.name; + this.add(label, type.type); + } + }, + onChange: function() { + updateAnchors(this.getDialog()); + }, + setup: function(element) { + this.setValue(element.getAttribute('cross-reference')); + }, + commit: function(element) { + element.setAttribute('cross-reference', this.getValue()); + element.setAttribute('cross-link', ''); + } + }, + { + type : 'select', + id : 'anchorGroup', + width: '100%', + label : editor.lang.crossreference.anchorGroup, + required: false, + items : [['']], + onLoad: function() { + this.getInputElement().setStyle('width', '100%'); + }, + onChange: function() { + filterAnchors(this.getDialog()); + } + }, + { + type : 'text', + id : 'filter', + width: '100%', + label : editor.lang.crossreference.linkFilter, + onKeyUp : function() { + filterAnchors(this.getDialog()); + } + }, + { + type : 'select', + id : 'anchor', + width: '100%', + label : editor.lang.crossreference.anchor, + required: true, + items : [['']], + onLoad: function() { + this.getInputElement().setStyle('width', '100%'); + }, + setup: function(element) { + this.setValue(element.getAttribute('cross-guid')); + }, + commit: function(element) { + element.setAttribute('cross-guid', this.getValue()); + } + } + ] + } + ] + } + ], + + onLoad : function() { + + }, + + onShow : function() { + var selection = editor.getSelection(); + this.element = selection.getStartElement(); + if (this.element) + this.element = this.element.getAscendant('a', true); + if (!this.element || this.element.getName() != 'a' || !this.element.hasAttribute('cross-link')) { + this.element = editor.document.createElement('a'); + this.element.setAttribute('cross-link', ''); + this.insertMode = true; + } else { + this.insertMode = false; + } + + if (this.insertMode) { + this.setValueOf('tab-main', 'filter', selection.getSelectedText().trim()); + updateAnchors(this); + } else + this.setupContent(this.element); + }, + + onOk : function() { + if (!this.getValueOf('tab-main', 'type')) + return; + if (!this.getValueOf('tab-main', 'anchor')) + return; + + this.commitContent(this.element); + + if (this.insertMode) + editor.insertElement(this.element); + + editor.execCommand('update-crossreferences'); + } + + }; +}); diff --git a/plugins/ckeditor4/crossreference/icons/crossreference-anchor.png b/plugins/ckeditor4/crossreference/icons/crossreference-anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..d710722d237332a1728add03fc125c45607237f6 GIT binary patch literal 458 zcmV;*0X6=KP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004zNkl<ZI8UXM zF-QVY9LB$=)}o|E&=O(PP^4hZ4N6IlS3_V8=@Mu`jtxNy4UIOW&`>s{(2y>HaD@&H zO(C4oXcQ4bgMv+&FYcXpm*y4Hf4lE}-|zkZ@7^Q$XA#Z(;h6(EU4pGQ8a`~S7CL#g z0kKp9LnFH^RDOye==F68NOCX_F0oMc?E=A-Om_g$oxR&<A<xXV)~KCFh$o{M8oou} zzyb@_Dp|ZfPaxopw1Zj!Cus}(ixtQKlf|O|$}b`y4B68pseo9L10g;HyqvNNUzFx{ z+f*%{%7D^@d?qU3IGsTKV;t+tvnoKyO8~o5(T>h<(9>IhpW75Q6~GHlfH>f`MSlhG zLKr|EZaagkfZT%>^?CsYlNGMf3WM-M1%#NPH}*3vSF+%<R)XFz4cFvjD?t3ZDn<di z2I%%c=@<wC3`FTAh%N^-b^vmUd0R;C^5<`qS`4wBzZa!d08zN@;<{3u?*VJ|T{Lbr zod?hx!^&uX0%XJWy>$QQrld#Jp|l^9R-#S+0^2!#5oKq)YXATM07*qoM6N<$f*K#i AT>t<8 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/crossreference/icons/crossreference-link.png b/plugins/ckeditor4/crossreference/icons/crossreference-link.png new file mode 100644 index 0000000000000000000000000000000000000000..89a36bae75b6bb0a9f3ff016f8c1c7ed4fe999b1 GIT binary patch literal 603 zcmV-h0;K(kP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006aNkl<ZI8S3_ zAOVE6>@DHv7Zm#Z@gwVs8pl$QRz_m<2Q=&#;Nxc9p{k;4{^|3_`<$HIiqD@u-8s9! z%!8l-V9i{tXQXAMC7wQgHf2$%bwzB?kwQgz#lBlNZ}ku~AgS-<0cja2;|Gr()-5iv z>4&+vc)_jvAKrbKi`M|3ip>s2#zy<^-o7(+X_b8rOmlSG!70kBD%m$~-YCUu0L-cP z?%dtR#KL?T<oxjFeKVAmm7;+zI=-yJ-VLt-0TtU7#H7V;$jZpD-?@8l)Bk_}{>#Wn zJ3oK+Z1ejsKeIM8IDWt|z^iJjfv~Wk!{^r@HwcRGw<#$rM?QY?<R{3G&!0bkd;RLw z#`z^yQ84eo4S<9;+X4ke1%Hs_s~0c-07IVT-rc*)-@o}-#lp?1^X>c3C)?V*FCa%f z*Z`1b4(9(`6qOYXo<Dyv@6WH_%IX^GUQeDr`SJ3}E6oiZo)2)P7q9_Q9S3*G%gI?i zdG@px6jjN6r)qxw{9&o2qU?45;r$}y=tDP%5tKZ2wRO60T)%-5RdL-%JLKi%vd><) zWQ*=>6fdMqJk!q4&lk~~pr#0u07ajyluXl;Cr|e-Dzgs2m)sd6TK0FVsjHR1oC>m8 zMp`=i-rai_fBa?i0Yw#F13;1)Q_h_d6BjrA_VwF+E^aQxJ9qEw{`TWv7$MClxe??N p9$wx*z})tBRgH5GF}W0^1^@?*`FUaPl-&RT002ovPDHLkV1f<PEqnj~ literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/crossreference/icons/crossreference-update.png b/plugins/ckeditor4/crossreference/icons/crossreference-update.png new file mode 100644 index 0000000000000000000000000000000000000000..43ef9230b6352ee9f6947468d45a61972bf6fe3f GIT binary patch literal 652 zcmV;70(1R|P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00070Nkl<ZI8S3_ zzybmq_6z*|`CXrzn>_*~y`siB6Pr4a7$dR-NFyg3(*!O~P8$gcab*q;4u+>so<5wB zYoriRv0Z_SpR=CfKhuAZo*&=7-d@+@*$y|rt7@x(gow~GRaG_3PoF=1ee?S5oxgwo ze)#tFE6a*nCmWxN%?>Kc%KN!_xEb!;x%=|-_wOFt+Pp7-4FK6J#K&<Ar1|>w>vz9> z|53lD-eoDW>p%wR>+9|3;o)JpcJ=D@&p-ZJZD?@(05%}9?cf4EU7dK4=1<>#n}8(H z{R}dIo11$DCkNXvbq!6~E0?cKU0P+I!w9lnn4jycn7Eku?b~<L(QSqq1o9$?&B4ZE zrLLyd_3q8vCo}U*G#Ft{d-dw|#o75LU`2#LQs41wl9E!I7cX9NWDIZKH$z89JN^Fs z2M6aBnL7~D43bakJ9$7+QNjMom8&xuVgA2;`wqzlT)ld&hb%9oPCRo#OiWZC>;+gL zii?Yj-MW1z<J-@lS3%AM#W6PTgf#AnR#R1(@$%)%S91%^l~JPc#`PPIe*FB&{`KqE zh%Fty2ha_Gr58m-CCwYxZ$P3EmXLTkn2%{`YioY_@`VB9G;{+%HuLiERH><{Y9Xf= zumPYr=HuepuB@yi@%8IhP*MdO5YfEv2q!nsZx&`I0Z~yA6<%Im9+2iYA3lb_ya+ZR zsAhX5I~SKa%*o$BeQVgz;rSqA^0^1nGSc!te*9o~@#4kZAK!oM`1<Q#4RT6F$&KiK m2Bi^@*w?RLS6~YhkQ@N#*(v0V{{<}o0000<MNUMnLSTX_5<VXQ literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/crossreference/icons/crossreference.png b/plugins/ckeditor4/crossreference/icons/crossreference.png new file mode 100644 index 0000000000000000000000000000000000000000..393b3d8d85bfbef113719b21e69c4defc1ed011e GIT binary patch literal 469 zcmV;`0V@89P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004;Nkl<ZI8Tj| z%S!@L6voe)8A)B#q6Y{?i;5zh?BOOiwF;Sx9z?CA2lNND(da3LV7e-Z7E;iIq_u?> zLH~e7sRYr37PTq}S_JA$CtMiQ<fwOhzw>>+^WBS3><}R!l3X^t9Q8?}<YGB?4b|qI zf#3=fH~=t(2(5D6?S}z)-UNw667m{2{lP5+NTP;~_-3b{lpzHPvdKj79&pZV7TYd+ z|Bt}s4?duV?aP;(GYp+w`9$g4#j%W{10r+<wiCR`93o@{0J5r4v^Cd4{O$$NJ{Rug zIPM4l7_Lk+)u??AxA5&AeVxubW;CYr8T=s_T8zH8nfc1BFn$w%YpHmx?i9Mq)P|LY zI5>auW$tL#<qSrwHI-FRt`~%+R7oX{uAbY)RAvVN8BxrPj`tWYh|sI8*Lq4?L7w6! zVj3c`YeGCkz=4uVRATN&V)qh(ZBnp2s;!{@i~z73jV*x$pA-F-^^!WsC)$g|Hh|~} z8Rpnw>v~XX3KHbR2d9?{B+&#Rr4i7mH2M8V#W1tQx)HzSIyu1)c@?;1Li^qM00000 LNkvXXu0mjfB&X5< literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-anchor.png b/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..2d3dbbf0ca3bd45be758ff91798e524d312859d2 GIT binary patch literal 913 zcmV;C18)3@P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000A6Nkl<ZSVzT| zzfV(96vsceWss;5<1Z2oLPAWGA~m{OVr$|gjKx7oTv`Wla|8YYaIhW0K{|@7#S{i- zOIpGp21R2?9IOHXlfpIk{i1!nkGwu&xD$E3=bq2`o^#K+2#$D(Blb@)fT=faY;TVO zkE{TuX>A>6c(BrJK*0bqGxG=$ManV5p%7z8Ss*<$`2PW3zK#+KeFXYRCFc!?*<1`L zu(x-ECl89vKs2v_?JSiPykB~R6cysvX36Gc9h6UsAOM}fDpEe9`}$*$RaQ#V2r&V4 zkxG8?>D$a+Gn<{gnVAv8VSC4-@ojyr4;UtuoNo5KU;uXBJFa9v{$cIYbEh7fBnS?m z9L<$g-XR_de2#xZ^X~VN9$IjM)B&g>J$9_<w<q`q$jp2}h|8Ql_nEWp-z*4q{nRqA z<NCL5HY%5pvPgR9hM#N%12}WxJCYNG#7)DAlplbq0kHY|BCtp*89f|;lG1K8>Litd zot>!jEnkWuM8N{+C(*m#l-wzBpH)MqS0I~HJ$~xI&gKQ+4tu|IYOiS{KsMKjlphhI z4HzetH2b}K`31=4l>I1DR%mVQau;VKKqfbh;Gre$0_h>U(CQIt0SFBm?O3<W!FAg_ zk5{CV_5?LP=@f|3-Z4qF`j?+SmfZ%9k9=tiA=F4#ML15PSFe-`=={Z7gu_+V*GAk8 zOJ4)|(maS$BqH8d$uEEcoGTZN6eM~Z)bs!-&my=_INU}5RsC?O1%Ow?BX!a`N)?tn z+1*`5@|Hwoz?~&8fDr@}AZLm9>K_?OrTyF%J=Mxv!APEwh)nteu&IqI5yRZ+X`FKT zQUxJSIS1<0GTsYv%Gl$frgtZtD=XTkR`pKOa(tZrF7wToFIx)L##5tKVYQ9w)+mAz zYsU-X5&Q2t5xfD^A-h|uyQx{PN__*#5+d{q<UQ?`+hYa6210g&IBD%!Bz!#Pz`G0& zo&`oEo3l=?ZDTcr-Im&Ka)Fi;176PceLxqQnM-xgFFQZiI&5_Q)p#lEYNsg$+%P(j z`aQlK+h+d9ajm2J9$=No0o_nrFy_Z#0Lt>+QWUXgj$j#zakr<b{|64IfNiY?l3Mm# n;DAWIehRKY0B1UrBM0~g50+9eA918+00000NkvXXu0mjfReqk{ literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-link.png b/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-link.png new file mode 100644 index 0000000000000000000000000000000000000000..ba5337e071637fda2c5c2f2bb43932a965c33ade GIT binary patch literal 1392 zcmV-$1&{iPP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000FyNkl<ZSVy&& zZA?>V6vv<Y()J<+N?V{Wwv<T`kvE;wEi;*mIHpdcO!sBUvSpvPWYL%{b55biA}-q( zmt`?AS@vaS8OqFn2^+~~;!JQ%0ijr4OAFkBw6szvZSTwOxl2v$T6A8#9|#TP{(sLo z|8xFNG4zz5Jtx{K2_DO8Y20%ynH2Uk^bgp6S7B`A0zu+0QB)cxBM2tAxG3j2&b}0l ze(=kgy*)AARR@3*Q!=v6T4*(Bwd#k?w-8)Jj=MviC>v>LwpD)ve_T}nQJf^NmzI^L zXDHLry?b*@(=@%rMj4cwn}h50dXcE7r_U2!Tz=uo+1<`n14tAf92lJUFDzW)!t7~8 zQGT3Reov-Q9I33V$O{I8Xz;G%&*u79wyz36Qt{yZld&?#`cQN7>L*6i+K<d;Q})f9 z-SbU#RcgrqAfAzy*1o=YeIAruJb4mvfB<u*k!WP|vzs)xZuJBLi;FuX0~|cn?kX!U zGd)UN1UP=xqEuycS5%aW0HG*vkp!^sMBCeD)7tYEOTJ=wcz9vX=R2NQ_V_WVsr&WY z!gcH3$jQ;9-?-5g_^F{<B?&-y;q^_G6)#2^2H6J&Z(g!hZA-ORYHS_vt1_}0Hk1^r zJu|b&Iqo`lxxVVCB!I*9og-VfZdvE|2atVm@N<mg1B6^gHPu$tJ#=!xe5&m14?!Gu zfqlU4U=aEI72C^xNdN~=b@T`T6);u~hhxfUFsd1r#ptQ2)6JjlZWR0eY1>7$T2mbp z@9Vwejc{yLY#T}gsBJ%6WG(vG>-D0H%naV3*I`cQM3|oO90M;rN?h_L1Xq&^awxwb zU#82;MbpzXa=G2J7{V@cJYS>N>2fU=GnH8O`1VMu!0Wb-pYzT6)q1^74#o-yUN9I9 zh!sq!R4Nfk5(xa^a11@@d7?=l2>_#}kjdT^QbWseD8ys@Z9dF35ETBEAih%&UqgF5 z5tq}ASqjXuHR(!}Mo|cS;qiEa^Yi`*4wr8S!~L%~hVtTayj7>u8MQfD6)YNf=H`58 zbZj(iHkmLuxgZ{zn3(8fk^C*#_lO|&@*J-uW%xj7Y579y*?oVk6!}Rj0P9tb6P@K1 zWf~BM9!A2;!n;X06%s}Yi9M(3sLSPQzig}C|D^Yd{{SS4iyLmv=i(9HN?^ocQ@*JH z+zve#P9A1LOfkgjssJR4i^1aee*rTMNv1a%Yr)l1G|evr?qgbQ4jLI56E~V<fTZGa zsdiA9d4s`l1cYYjnd$Y#MbCiKg;?zsc6y~GfPe3B;l7np4gQDZqsKUw4KW<2uohYC zzz1Dje>pDMb`?tkfRrjIu)G5=Tq)0EB8P09T_qbgY=zHv?e>lz>vp{=3E+_Jw|m>R zJ*R~c8yg?J*i^gg&6QG3tI;%C3kx&H$DIN9<kZoYGkd>#VgTs9Iy0*iE(yK8{obH| zVM{7k$44rRX8)c3f#%cIrB5m@X2EO6TXy7VH9wSWEXlj|_ib;8L50b-R-!nh8e;gA zu#XER?g1g!eL}2eyWNw%NtgS}Sd_+Il1w~4QXf|=<tmQdY$!^By1Q?Cm`LOtOUTco z<z*G7z)xjoW*tbC=TgMQ7Qheifl?vAwrTU`O!!RGv~PBHjw59xGU)YbaEF7QCtfC` zia!8=U!cq+hBua#muEsH;vZPMW20m4Fw5?b|6aGM0I^C?GTGMzj+dmTE5kwnQITkr y;d$(P79(t_B2@}V%KHFJ2Z>0hl%RPWuzvt^yV!?E#OMS70000<MNUMnLSTaB?3dmE literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-update.png b/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-update.png new file mode 100644 index 0000000000000000000000000000000000000000..2e4fcf2f75840c8cd46f52c2ada9ab6c85c2e2d2 GIT binary patch literal 1463 zcmV;o1xWgdP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000GkNkl<ZSVzT| zUrbY19LLW&x9z>PWtM`)$%dey9U!f<h?_H;58Dt_Fj<!UOSVT%_Tb(WC1U~6`LaEj z=-zx-X0l{jCZKZ<E^$T>q^)Ab35skGC{#+gm)p{N?^%8~-rAPpT0-1On)J5k{Lbh6 ze&65k{4PfS^T3(xU(?Xx)FJdXA>=bc7)DX#d__@g7-N5w(oZ{EYrUD+gSlw|>}lxu zf?#|cV{FaI$w8KEi-BX=*j{(;^dm)4cDA3`^T)CR>^^ky9fo1fu`FvYDk?JP=2}zQ zzjp0<0zh43=V=D(s!~msWhtUi`oqQ6+OyB~z@EeH2N}YgTwk(YzdFwrvlR|UP%s!o zvMixsaGFPyO1vOg;ytjh@i%X7j@4m{TPH~}`s@CEnNsCv_p#bfG=nKaP=BQ3C!OA~ zue7X`%QBnPxuMVudN4S|M?{ff7^YK_<$j9LFrqkwF?AA!oOPerH4JkBAU}VNW9`~k z)wQs>*LPcth;#1v%~N^+PHr$5PPklKSe=eh7x(wy4f8xdqfmNCbKUb|oeIF?@$#Z5 zHeNiw`}_E{2_Ar$>lodY3TK5LPCm;E$lvb|OVa#>Wb$+X^7GdqF&svkEuY61i6Xi! zK3ft1>W*}d7nc<0LCoRgw|e`+k?8z^bWR-)1Rls+ZF5Xdhs61CShuxms~)^L`p+18 zG(0@scC6;*1sZ@<Gji;y%1W0SbdT2;ndABMnVeiR3IMV!IS5AQ;J1}4v+K$?m9BvA z-Q7Lm$o#WI#XJC~x7+P`kZMy?Ptd@?z(m`zn$?-+HO#MT=<LFnJ_PvsrmGej6$doi z;}Zci_+T*R1r-1)oB@-Y+uwRa56?Y4y@D8ye3_~1HCXUw{91U<GMT>H{JPTubFTk+ zBRWr&t)K-J0F-aDtvYG9Z`4Dc_xALPZLPJc%a&`@HFV6mDqTj7W5K(8ATXt7gbGl9 z^m6a|;&od<d?1vOk&$1{H&=hKT$`(VG+w?^SWxh8{wr$`gkfm#;VpMdwMzv6(Ug|j z9Tv+<^!V}L0PxMPt+h?d39z@Jqp6^v;A<#OP}KbX0pEq@_nl8Ya4Aq$R=NrRJRYww z%L_}6|6<Up4$P)gn>Ra60C4xNKj3cJmA3$(ug^Qf3&O#r3UE<?!|eyNvdk@U0F&;P zUA6@w7<%{!jg5}I=ny1|aCl_ocXxC3d&{YTcoBlohaZnT6XA<U!@Wm3#Y)!}4$|=6 zy#Zlza_VR-4U-Fzr_UFf75J}`i^)=TkzD4X5Fr_Dfa^P<6l)jJ(^5Q+^~TrSO*=!- zA5e<dwYAo4TS{2!k3P$?<T4)v07_PGI9;`^l7mg|^!w*#W<qXEDOM=@m|=8k-ew8_ z@FsKCKBu!nwcFKoGcq5I?oZj0!G%;*SeOUZ3a;bsuAV5%8Ki7$wsB%SkTC!p%AnVu z(VCm57g53`m(UM@7W5c*JDd)K)<hUN4vmhE!6zet<hBl)o7-MrM3Uv|`0jZ@PY4;Y z!enZ7Ix39NM8JUZoGt*Injz#{lgac_d3hP9wRMX%HwyrOoaK!5PN!p0fcit13KgP! zPBHRgg<25Cg@lkdDOGl`EGL(g6q})}!}zbZE&%{G$C!M$(Y}FU7+p+n6M+B<PCbc* z0D4D4$W^n+96}iBtX8X8$1o@-HwQtUYeT*D9t=igN@Jo+7I8ur5QO&=hEdg;JQO6~ zXlt%H0KaPhJ9cbOnG}#}LxV%%s1%)%W%;A$y)mWrYL>i<2C!*UdF(Gi5YX)GEFTO8 z4V0qkbX)i(0jSx6@EM9|6(M92V=_i5m1J4^k)e!RdqGL3W-JLH9mDC)`4^|57*2I~ R0?GgY002ovPDHLkV1hE^#^C?} literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/crossreference/icons/hidpi/crossreference.png b/plugins/ckeditor4/crossreference/icons/hidpi/crossreference.png new file mode 100644 index 0000000000000000000000000000000000000000..ee4b6fe0ba7935edcd932a52c1d73cb8b313cf5a GIT binary patch literal 898 zcmV-|1AY97P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80009?Nkl<ZSVz59 zzfV(96#mY8P3Y8u#xR0|U?@pjDTxe3Tud4xn3#|lQ-LV1)`41CY!}nmq1_>&(tiL= zN=I;Rm9iMYK^P39v<o%(dd$6Tp_JnLLE$D%ns@I#=R4<q=R1dRiEDg5lLTWzx+J7N zy}KW!%knRs123EWnFkO|EOmAqYEuMw80;Y;kC7n0|L#Tw3OwHG@xn#{VC<O6KsdfI z2BswtdW|@3JktsQ1G|O+gyRblfZj@@%%1@zr9msiLoW(Oz>LplA^@uQkC(A0kdcGd zs`oe=o0}EJOfLa~f$1s-B?%+C84z!7Kh!ov+AH8!@8@O(ncB8=0fgcUK?Rf$X^(|w z$J*w(W=I!6IKG$yFa@TWSm>GfZ+WFx^GT+v4iG36@DJ&8;B|blK!980iq|ONS|Jq9 zLCreA`T)Z5MHUA8eM4PpSxXSJ2L@}u6_8s4J@WI{Z@XX^(1ALD0hec=2%VPmU%S`{ z09@07hv96mMwNt6H(6*vL1pFDO3c4g2jCj?6ah}!U`svrdw0wNNoRA%I&yTGqa>VH zNGpKIdBP}jQDN0{^Xjjk;=60m9S!)0E!BVBt^~m(bpXUEVUHfnXI2Q9a5$Xk@4q4U zwzhttR4R&0d~|i~N!Gdthpt<RTrX2J{wA{zf^&G-2fMvPo-ddGAeYO_W-)MOPwIYb z?zwKs>N#t*e*|D;<Th+J^#lOXEG9?0C2a$K-^Bo^KY`QfKwn><1hBomjbgDRpI~yd zTRwpe>cu=kwF0zFB62jQh?z?&tL{g4u1OM#CUkBRo~48mgi;YrraoL0)QS=mWw@Np zv&cO&_K7HIgYv-&87(VeI-8eD2%reyWT{$UooOYk1NduKyKH5xo+Y;h-||XJCH$YU zbT%(09=D>Z-Y56GhNhoZ_Rds7y-3p8yllq|ntAFUI$t|(rG$C_mRG+7i8ujZJ>d7< z)jMx?Usqg~);2nA2clP?ryZr(3{V$<xRB1~8irDeh)Kq5q|%O+iKy<ViA3vSswGw3 zG)hd%I?x!Y%mh=a`W)7lX&q>GBRHWRRHlhosHXUt(gf2wU@gwmw=C;Gy8zV4d}<>4 Y2gw3-+Th&^xc~qF07*qoM6N<$f~V+|NB{r; literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/crossreference/lang/en.js b/plugins/ckeditor4/crossreference/lang/en.js new file mode 100644 index 0000000..e0705c9 --- /dev/null +++ b/plugins/ckeditor4/crossreference/lang/en.js @@ -0,0 +1,21 @@ +CKEDITOR.plugins.setLang('crossreference','en',{ + 'name': 'Cross-reference', + 'anchor': 'Cross-reference anchor', + 'anchorDescription': 'Anchor for cross-references. After save of anchor all cross-references links will be updated.', + 'anchorType': 'Anchor type', + 'anchorName': 'Name', + 'anchorGroup': 'Anchor group', + 'link': 'Cross-reference link', + 'linkDescription': 'Cross-references link to an anchor', + 'linkFilter':'Search / filter', + 'updatingCrossReferences': 'Updating cross-references...', + 'updatedCrossReferences': 'Updated cross-references: ', + 'updateCrossReferences': 'Update cross-references', + 'setCrossReferenceAnchor': 'Set anchor for cross-references...', + 'setCrossReferenceLink': 'Set link to anchor...', + 'chapter': 'Chapter', + 'figure': 'Figure', + 'fig': 'Fig.', + 'table': 'Table', + 'reference': 'Reference' +}); \ No newline at end of file diff --git a/plugins/ckeditor4/crossreference/lang/ru.js b/plugins/ckeditor4/crossreference/lang/ru.js new file mode 100644 index 0000000..7c742ef --- /dev/null +++ b/plugins/ckeditor4/crossreference/lang/ru.js @@ -0,0 +1,21 @@ +CKEDITOR.plugins.setLang('crossreference','ru',{ + 'name': 'ПерекрёÑÑ‚Ð½Ð°Ñ ÑÑылка', + 'anchor': 'Якорь Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÑ€Ñ‘Ñтных ÑÑылок', + 'anchorDescription': 'Якорь, на который могут ÑÑылатьÑÑ Ð¿ÐµÑ€ÐµÐºÑ€Ñ‘Ñтные ÑÑылки. ПоÑле ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÑÐºÐ¾Ñ€Ñ Ð²ÑÑ‘ перекрёÑтные ÑÑылки будут обновлены.', + 'anchorType': 'Тип', + 'anchorName': 'Ðаименование', + 'anchorGroup': 'Раздел / группа', + 'link': 'ПерекрёÑÑ‚Ð½Ð°Ñ ÑÑылка', + 'linkDescription': 'ПерекрёÑÑ‚Ð½Ð°Ñ ÑÑылка на Ñкорь.', + 'linkFilter': 'ПоиÑк / фильтр', + 'updatingCrossReferences': 'Обновление перекрёÑтных ÑÑылок...', + 'updatedCrossReferences': 'Обновлено перекрёÑтных ÑÑылок: ', + 'updateCrossReferences': 'Обновить перекрёÑтные ÑÑылки', + 'setCrossReferenceAnchor': 'УÑтановить Ñкорь Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÑ€Ñ‘Ñтных ÑÑылок...', + 'setCrossReferenceLink': 'УÑтановить ÑÑылку на Ñкорь...', + 'chapter': 'Глава', + 'figure': 'РиÑунок', + 'fig': 'РиÑ.', + 'table': 'Таблица', + 'reference': 'Литература' +}); \ No newline at end of file diff --git a/plugins/ckeditor4/crossreference/plugin.js b/plugins/ckeditor4/crossreference/plugin.js new file mode 100644 index 0000000..d0a65c4 --- /dev/null +++ b/plugins/ckeditor4/crossreference/plugin.js @@ -0,0 +1,449 @@ +CKEDITOR.plugins.add('crossreference', { + lang : [ 'en', 'ru' ], + requires : 'dialog,notification', + icons : 'crossreference,crossreference-anchor,crossreference-link,crossreference-update', + hidpi : true, + init : function(editor) { + + // config + + var config = getConfig(); + editor.config.crossreference = config; + + // plugin + + var anchorAllowedContent = 'a[!cross-reference,cross-anchor,cross-guid,cross-name,cross-number]{*}(cross-reference,cross-anchor)'; + var anchorRequiredContent = 'a[cross-reference,cross-anchor]'; + var linkAllowedContent = 'a[!cross-reference,cross-link,cross-guid,cross-name,cross-number]{*}(cross-reference,cross-link)'; + var linkRequiredContent = 'a[cross-reference,cross-link]'; + editor.addFeature({ + name: 'crossreference-anchor', + allowedContent: anchorAllowedContent, + requiredContent: anchorRequiredContent + }); + editor.addFeature({ + name: 'crossreference-link', + allowedContent: linkAllowedContent, + requiredContent: linkRequiredContent + }); + editor.ui.add('crossreference', CKEDITOR.UI_MENUBUTTON, { + label : editor.lang.crossreference.name, + modes: { + wysiwyg: 1, + source: 1 + }, + toolbar : 'insert', + onMenu: function() { + var selectedElement = null; + + var selection = editor.getSelection(); + if (selection) { + var element = selection.getStartElement(); + if (element) + element = element.getAscendant('a', true); + if (element && element.hasAttribute('cross-reference')) { + selectedElement = element; + } + } + + var state = getMenuState(selectedElement, true); + return state; + } + }); + + // dialogs + + var updateCmdName = 'update-crossreferences'; + var anchorDialogCmdName = 'crossreference-anchor-dialog'; + var linkDialogCmdName = 'crossreference-link-dialog'; + + CKEDITOR.dialog.add(anchorDialogCmdName, this.path + 'dialogs/crossreference-anchor.js'); + CKEDITOR.dialog.add(linkDialogCmdName, this.path + 'dialogs/crossreference-link.js'); + + editor.addCommand(anchorDialogCmdName, new CKEDITOR.dialogCommand(anchorDialogCmdName, { + allowedContent: anchorAllowedContent, + requiredContent: anchorRequiredContent + })); + editor.addCommand(linkDialogCmdName, new CKEDITOR.dialogCommand(linkDialogCmdName, { + allowedContent: linkAllowedContent, + requiredContent: linkRequiredContent + })); + + // commands + + editor.addCommand(updateCmdName, { + async: true, + contextSensitive: false, + editorFocus: false, + modes: { + wysiwyg: 1, + source: 1 + }, + readOnly: true, + exec: function(editor) { + editor.setReadOnly(true); + var notification = editor.showNotification(editor.lang.crossreference.updatingCrossReferences, 'progress', 0); + + var cmd = this; + + var typesCount = 0; + var processedTypesCount = 0; + for (var typeName in config.types) { + typesCount++; + } + var linksCount = 0; + + var html = null; + if (editor.mode == 'source') + html = $('<div>' + editor.getData() + '</div>'); + else + html = $(editor.editable().$); + + function finishCommand() { + editor.setReadOnly(false); + editor.fire('afterCommandExec', { + name: updateCmdName, + command: cmd + }); + notification.update({ + type: 'success', + message: editor.lang.crossreference.updatedCrossReferences + linksCount, + important: true + }); + } + + if (typesCount == 0) { + finishCommand(); + return; + } + + for (var typeName in config.types) { + config.findAnchors(config, editor, config.types[typeName], function(anchors) { + notification.update({ + progress: (1 / typesCount) * processedTypesCount + }); + for (var i = 0; i < anchors.length; i++) { + var anchor = anchors[i]; + var type = config.types[anchor.type]; + + notification.update({ + progress: (1 / typesCount) * processedTypesCount + (1 / typesCount / anchors.length) * i + }); + + var aName = type.type + '-' + anchor.guid; + + var anchorElement = $('a[cross-reference="' + type.type + '"][cross-anchor][cross-guid="' + anchor.guid + '"]', html); + if (anchorElement.length > 0) { + anchorElement.attr('cross-reference', type.type); + anchorElement.attr('cross-anchor', ''); + anchorElement.attr('cross-guid', anchor.guid); + anchorElement.attr('cross-name', anchor.name); + anchorElement.attr('cross-number', anchor.number); + anchorElement.attr('name', aName); + if (!anchorElement.hasClass('cross-reference')) + anchorElement.addClass('cross-reference'); + if (!anchorElement.hasClass('cross-anchor')) + anchorElement.addClass('cross-anchor'); + + anchorElement.removeAttr('cross-link'); + anchorElement.removeClass('cross-link'); + + anchorElement.text(anchor.text); + } + + $('a[cross-reference="' + type.type + '"][cross-link][cross-guid="' + anchor.guid + '"]', html).each(function() { + var linkElement = $(this); + + linkElement.attr('cross-reference', type.type); + linkElement.attr('cross-link', ''); + linkElement.attr('cross-guid', anchor.guid); + linkElement.attr('cross-name', anchor.name); + linkElement.attr('cross-number', anchor.number); + linkElement.attr('href', '#' + aName); + + if (!linkElement.hasClass('cross-reference')) + linkElement.addClass('cross-reference'); + if (!linkElement.hasClass('cross-link')) + linkElement.addClass('cross-link'); + + linkElement.removeAttr('cross-anchor'); + linkElement.removeClass('cross-anchor'); + + var linkText = anchor.text; + if (type.linkTextTemplate) + linkText = config.formatText(type.linkTextTemplate, anchor); + linkElement.text(linkText); + linkElement.attr('title', anchor.text.replace(/ /g, ' ').trim()); + + linksCount++; + }); + } + processedTypesCount++; + if (processedTypesCount >= typesCount) { + // done + if (editor.mode == 'source') + editor.setData(html.html()); + finishCommand(); + } + }); + } + } + }); + + // keystrokes + + editor.setKeystroke(CKEDITOR.CTRL + CKEDITOR.SHIFT + 65, anchorDialogCmdName); + editor.setKeystroke(CKEDITOR.CTRL + CKEDITOR.SHIFT + 76, linkDialogCmdName); + editor.setKeystroke(CKEDITOR.CTRL + CKEDITOR.ALT + 85, updateCmdName); + + // double click + + editor.on('doubleclick', function(evt) { + if (evt.data.element && !evt.data.element.isReadOnly() && evt.data.element.getName() === 'a' + && evt.data.element.hasAttribute('cross-reference')) { + editor.getSelection().selectElement(evt.data.element); + if (evt.data.element.hasAttribute('cross-anchor')) { + evt.data.dialog = anchorDialogCmdName; + } else if (evt.data.element.hasAttribute('cross-link')) { + evt.data.dialog = linkDialogCmdName; + } + } + }); + + // menu + + var updateMenuItemName = 'updateCrossReferences'; + var setAnchorMenuItemName = 'setCrossReferenceAnchor'; + var setLinkMenuItemName = 'setCrossReferenceLink'; + + var getMenuState = function(element, alwaysAllowEditItems) { + var items = {}; + items[updateMenuItemName] = CKEDITOR.TRISTATE_OFF; + if (alwaysAllowEditItems == true) { + items[setAnchorMenuItemName] = CKEDITOR.TRISTATE_OFF; + items[setLinkMenuItemName] = CKEDITOR.TRISTATE_OFF; + } + if (element && element.getName() === 'a' && element.hasAttribute('cross-reference')) { + items[setAnchorMenuItemName] = CKEDITOR.TRISTATE_OFF; + items[setLinkMenuItemName] = CKEDITOR.TRISTATE_OFF; + if (element.hasAttribute('cross-anchor')) { + items[setAnchorMenuItemName] = CKEDITOR.TRISTATE_ON; + items[setLinkMenuItemName] = CKEDITOR.TRISTATE_DISABLED; + } + if (element.hasAttribute('cross-link')) { + items[setAnchorMenuItemName] = CKEDITOR.TRISTATE_DISABLED; + items[setLinkMenuItemName] = CKEDITOR.TRISTATE_ON; + } + } + return items; + } + if (editor.addMenuItem) { + editor.addMenuGroup('crossreferenceGroup'); + editor.addMenuItem(updateMenuItemName, { + label : editor.lang.crossreference.updateCrossReferences, + command : updateCmdName, + icon: 'crossreference-update', + group : 'crossreferenceGroup' + }); + editor.addMenuItem(setAnchorMenuItemName, { + label : editor.lang.crossreference.setCrossReferenceAnchor, + command : anchorDialogCmdName, + icon: 'crossreference-anchor', + group : 'crossreferenceGroup' + }); + editor.addMenuItem(setLinkMenuItemName, { + label : editor.lang.crossreference.setCrossReferenceLink, + command : linkDialogCmdName, + icon: 'crossreference-link', + group : 'crossreferenceGroup' + }); + } + if (editor.contextMenu) { + editor.contextMenu.addListener(function(element, selection) { + if (element.getName() === 'a' && element.hasAttribute('cross-reference')) { + selection.selectElement(element); + } + var state = getMenuState(element, false); + return state; + }); + } + + function getConfig() { + var defaultConfig = { + activeTypes: ['chapter', 'image', 'table', 'reference'], + overrideTypes: false, + types: {} + }; + defaultConfig.types.chapter = { + name: editor.lang.crossreference.chapter, + anchorTextTemplate: '${number}. ${name}.', + linkTextTemplate: '${number}', + numeration: { + enabled: true, + firstNumber: '1', + increase: function(number) { + var n = parseInt(number); + return ++n; + } + }, + anchorsProvider: 'default', + allowCreateAnchors: true, + groupAnchors: false + }; + defaultConfig.types.image = { + name: editor.lang.crossreference.figure, + anchorTextTemplate: editor.lang.crossreference.fig + ' ${number}. ${name}.', + linkTextTemplate: '${number}', + numeration: { + enabled: true, + firstNumber: '1', + increase: function(number) { + var n = parseInt(number); + return ++n; + } + }, + anchorsProvider: 'default', + allowCreateAnchors: true, + groupAnchors: false + }; + defaultConfig.types.table = { + name: editor.lang.crossreference.table, + anchorTextTemplate: editor.lang.crossreference.table + ' ${number}. ${name}.', + linkTextTemplate: '${number}', + numeration: { + enabled: true, + firstNumber: '1', + increase: function(number) { + var n = parseInt(number); + return ++n; + } + }, + anchorsProvider: 'default', + allowCreateAnchors: true, + groupAnchors: false + }; + defaultConfig.types.reference = { + name: editor.lang.crossreference.reference, + anchorTextTemplate: '[${number}] ${name}.', + linkTextTemplate: '[${number}]', + numeration: { + enabled: true, + firstNumber: '1', + increase: function(number) { + var n = parseInt(number); + return ++n; + } + }, + anchorsProvider: 'default', + allowCreateAnchors: true, + groupAnchors: false + }; + + var config = CKEDITOR.tools.clone(defaultConfig); + if (editor.config.crossreference) { + config = CKEDITOR.tools.extend(config, editor.config.crossreference, true); + if (!config.overrideTypes) { + for (var typeName in defaultConfig.types) { + var type = defaultConfig.types[typeName]; + if (!(typeName in config.types)) + config.types[typeName] = type; + } + } + } + for (var typeName in config.types) { + var type = config.types[typeName]; + type.type = typeName; + } + for (var typeName in config.types) { + if ($.inArray(typeName, config.activeTypes) == -1) { + delete config.types[typeName]; + } + } + + // shared methods + + config.findAnchors = function(config, editor, type, callback) { + var anchors = []; + + if (type == null) { + callback(anchors); + return; + } + + var number = null; + if (type.numeration && type.numeration.enabled) + number = type.numeration.firstNumber + ''; + + var html = null; + if (editor.mode == 'source') + html = $('<div>' + editor.getData() + '</div>'); + else + html = $(editor.editable().$); + + $('a[cross-reference="' + type.type + '"][cross-anchor]', html).each(function() { + var element = $(this); + var anchor = { + type: element.attr('cross-reference'), + guid: element.attr('cross-guid'), + name: element.attr('cross-name'), + number: number, + text: element.text() + } + anchors.push(anchor); + if (type.numeration && type.numeration.enabled) + number = type.numeration.increase(number); + }); + + function postProcessAnchors(anchors) { + for(var i = 0; i < anchors.length; i++) { + var anchor = anchors[i]; + + if (anchor.type != type.type) + throw 'Incompatible type: ' + type.type; + + var text = anchor.name; + if (type.anchorTextTemplate) { + text = config.formatText(type.anchorTextTemplate, anchor); + } + anchor.text = text; + } + callback(anchors); + } + + if (type.anchorsProvider && type.anchorsProvider !== 'default') { + type.anchorsProvider(postProcessAnchors, anchors, type, editor); + } else { + postProcessAnchors(anchors); + } + }; + + config.formatText = function(template, anchor) { + var text = template; + + for (var propName in anchor) { + var propValue = anchor[propName]; + var regexp = new RegExp('\\$\\{' + propName + '\\}', 'g'); + if (propValue) + text = text.replace(regexp, propValue); + else + text = text.replace(regexp, ''); + } + + if (anchor.level != null) { + var shift = ''; + for (var i = 0; i < anchor.level; i++) + shift += ' '; + + text = text.replace(/\$\{levelShift\}/g, shift); + } + + text = text.replace(/\s+/g, ' '); + text = text.trim(); + + return text; + } + + return config; + } + } +}); diff --git a/plugins/ckeditor4/cssanim/css/cssanim.css b/plugins/ckeditor4/cssanim/css/cssanim.css new file mode 100644 index 0000000..32506a8 --- /dev/null +++ b/plugins/ckeditor4/cssanim/css/cssanim.css @@ -0,0 +1,2938 @@ +@CHARSET "ISO-8859-1"; +/* .highlight_tag { */ +/* background-color:rgb(255, 255, 224) !important; */ +/* border:2px solid red; */ +/* padding:2px; */ +/* } */ +/* .addAnim_tag { */ +/* display: none; */ +/* } */ +/* @charset "UTF-8"; */ + +/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license - http://opensource.org/licenses/MIT + +Copyright (c) 2015 Daniel Eden +*/ + +.cssAnimButton { +display: initial; +border: 1px solid black; +padding: 2px; +background-color: lightblue; +border-radius: 3px; +font-weight: bold; +} + +@-webkit-keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +@keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +@-webkit-keyframes flash { + from, 50%, to { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +@keyframes flash { + from, 50%, to { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + + +@-webkit-keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + + +@-webkit-keyframes shake { + from, to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +@keyframes shake { + from, to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes wobble { + from { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes wobble { + from { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes jello { + from, 11.1%, to { + -webkit-transform: none; + transform: none; + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +@keyframes jello { + from, 11.1%, to { + -webkit-transform: none; + transform: none; + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +@-webkit-keyframes bounceIn { + from, 20%, 40%, 60%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes bounceIn { + from, 20%, 40%, 60%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@-webkit-keyframes bounceInDown { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInDown { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes bounceInLeft { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInLeft { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes bounceInRight { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInRight { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes bounceInUp { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInUp { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + + +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@-webkit-keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@-webkit-keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@-webkit-keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@-webkit-keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@-webkit-keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + + +@-webkit-keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + + +@-webkit-keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + + +@-webkit-keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + + +@-webkit-keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + + +@-webkit-keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@-webkit-keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@-webkit-keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@-webkit-keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@-webkit-keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +@-webkit-keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + to { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + to { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@-webkit-keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +@keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +@-webkit-keyframes rotate { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 360deg); + transform: rotate3d(0, 0, 1, 360deg); + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + } +} +@keyframes rotate { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 360deg); + transform: rotate3d(0, 0, 1, 360deg); + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + + +@-webkit-keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + + +@-webkit-keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + + +@-webkit-keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + + +@-webkit-keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + + +@-webkit-keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +@keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + + +@-webkit-keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + + +@-webkit-keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + + +@-webkit-keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + + +@-webkit-keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + + +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +@keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + + +@-webkit-keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +@keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + + +@-webkit-keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + + +@-webkit-keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + + +@-webkit-keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + + +@-webkit-keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + + +@-webkit-keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + to { + opacity: 0; + } +} + +@keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + to { + opacity: 0; + } +} + + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + + +@-webkit-keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + + +@-webkit-keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + + +@-webkit-keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + + +@-webkit-keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + + +@-webkit-keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + + +@-webkit-keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + + +@-webkit-keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + + +@-webkit-keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} diff --git a/plugins/ckeditor4/cssanim/css/prefixfree.min.js b/plugins/ckeditor4/cssanim/css/prefixfree.min.js new file mode 100644 index 0000000..5e88f56 --- /dev/null +++ b/plugins/ckeditor4/cssanim/css/prefixfree.min.js @@ -0,0 +1,18 @@ +/** + * StyleFix 1.0.3 & PrefixFree 1.0.7 + * @author Lea Verou + * MIT license + */ +(function(){function k(a,b){return[].slice.call((b||document).querySelectorAll(a))}if(window.addEventListener){var e=window.StyleFix={link:function(a){try{if("stylesheet"!==a.rel||a.hasAttribute("data-noprefix"))return}catch(b){return}var c=a.href||a.getAttribute("data-href"),d=c.replace(/[^\/]+$/,""),h=(/^[a-z]{3,10}:/.exec(d)||[""])[0],l=(/^[a-z]{3,10}:\/\/[^\/]+/.exec(d)||[""])[0],g=/^([^?]*)\??/.exec(c)[1],m=a.parentNode,f=new XMLHttpRequest,n;f.onreadystatechange=function(){4===f.readyState&& +n()};n=function(){var b=f.responseText;if(b&&a.parentNode&&(!f.status||400>f.status||600<f.status)){b=e.fix(b,!0,a);if(d)var b=b.replace(/url\(\s*?((?:"|')?)(.+?)\1\s*?\)/gi,function(b,a,c){return/^([a-z]{3,10}:|#)/i.test(c)?b:/^\/\//.test(c)?'url("'+h+c+'")':/^\//.test(c)?'url("'+l+c+'")':/^\?/.test(c)?'url("'+g+c+'")':'url("'+d+c+'")'}),c=d.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g,"\\$1"),b=b.replace(RegExp("\\b(behavior:\\s*?url\\('?\"?)"+c,"gi"),"$1");c=document.createElement("style");c.textContent= +b;c.media=a.media;c.disabled=a.disabled;c.setAttribute("data-href",a.getAttribute("href"));m.insertBefore(c,a);m.removeChild(a);c.media=a.media}};try{f.open("GET",c),f.send(null)}catch(p){"undefined"!=typeof XDomainRequest&&(f=new XDomainRequest,f.onerror=f.onprogress=function(){},f.onload=n,f.open("GET",c),f.send(null))}a.setAttribute("data-inprogress","")},styleElement:function(a){if(!a.hasAttribute("data-noprefix")){var b=a.disabled;a.textContent=e.fix(a.textContent,!0,a);a.disabled=b}},styleAttribute:function(a){var b= +a.getAttribute("style"),b=e.fix(b,!1,a);a.setAttribute("style",b)},process:function(){k('link[rel="stylesheet"]:not([data-inprogress])').forEach(StyleFix.link);k("style").forEach(StyleFix.styleElement);k("[style]").forEach(StyleFix.styleAttribute)},register:function(a,b){(e.fixers=e.fixers||[]).splice(void 0===b?e.fixers.length:b,0,a)},fix:function(a,b,c){for(var d=0;d<e.fixers.length;d++)a=e.fixers[d](a,b,c)||a;return a},camelCase:function(a){return a.replace(/-([a-z])/g,function(b,a){return a.toUpperCase()}).replace("-", +"")},deCamelCase:function(a){return a.replace(/[A-Z]/g,function(b){return"-"+b.toLowerCase()})}};(function(){setTimeout(function(){k('link[rel="stylesheet"]').forEach(StyleFix.link)},10);document.addEventListener("DOMContentLoaded",StyleFix.process,!1)})()}})(); +(function(k){function e(b,c,d,h,l){b=a[b];b.length&&(b=RegExp(c+"("+b.join("|")+")"+d,"gi"),l=l.replace(b,h));return l}if(window.StyleFix&&window.getComputedStyle){var a=window.PrefixFree={prefixCSS:function(b,c,d){var h=a.prefix;-1<a.functions.indexOf("linear-gradient")&&(b=b.replace(/(\s|:|,)(repeating-)?linear-gradient\(\s*(-?\d*\.?\d*)deg/ig,function(b,a,c,d){return a+(c||"")+"linear-gradient("+(90-d)+"deg"}));b=e("functions","(\\s|:|,)","\\s*\\(","$1"+h+"$2(",b);b=e("keywords","(\\s|:)","(\\s|;|\\}|$)", +"$1"+h+"$2$3",b);b=e("properties","(^|\\{|\\s|;)","\\s*:","$1"+h+"$2:",b);if(a.properties.length){var l=RegExp("\\b("+a.properties.join("|")+")(?!:)","gi");b=e("valueProperties","\\b",":(.+?);",function(a){return a.replace(l,h+"$1")},b)}c&&(b=e("selectors","","\\b",a.prefixSelector,b),b=e("atrules","@","\\b","@"+h+"$1",b));b=b.replace(RegExp("-"+h,"g"),"-");return b=b.replace(/-\*-(?=[a-z]+)/gi,a.prefix)},property:function(b){return(0<=a.properties.indexOf(b)?a.prefix:"")+b},value:function(b,c){b= +e("functions","(^|\\s|,)","\\s*\\(","$1"+a.prefix+"$2(",b);b=e("keywords","(^|\\s)","(\\s|$)","$1"+a.prefix+"$2$3",b);0<=a.valueProperties.indexOf(c)&&(b=e("properties","(^|\\s|,)","($|\\s|,)","$1"+a.prefix+"$2$3",b));return b},prefixSelector:function(b){return b.replace(/^:{1,2}/,function(b){return b+a.prefix})},prefixProperty:function(b,c){var d=a.prefix+b;return c?StyleFix.camelCase(d):d}};(function(){var b={},c=[],d=getComputedStyle(document.documentElement,null),h=document.createElement("div").style, +l=function(a){if("-"===a.charAt(0)){c.push(a);a=a.split("-");var d=a[1];for(b[d]=++b[d]||1;3<a.length;)a.pop(),d=a.join("-"),StyleFix.camelCase(d)in h&&-1===c.indexOf(d)&&c.push(d)}};if(0<d.length)for(var g=0;g<d.length;g++)l(d[g]);else for(var e in d)l(StyleFix.deCamelCase(e));var g=0,f,k;for(k in b)d=b[k],g<d&&(f=k,g=d);a.prefix="-"+f+"-";a.Prefix=StyleFix.camelCase(a.prefix);a.properties=[];for(g=0;g<c.length;g++)e=c[g],0===e.indexOf(a.prefix)&&(f=e.slice(a.prefix.length),StyleFix.camelCase(f)in +h||a.properties.push(f));!("Ms"!=a.Prefix||"transform"in h||"MsTransform"in h)&&"msTransform"in h&&a.properties.push("transform","transform-origin");a.properties.sort()})();(function(){function b(a,b){h[b]="";h[b]=a;return!!h[b]}var c={"linear-gradient":{property:"backgroundImage",params:"red, teal"},calc:{property:"width",params:"1px + 5%"},element:{property:"backgroundImage",params:"#foo"},"cross-fade":{property:"backgroundImage",params:"url(a.png), url(b.png), 50%"}};c["repeating-linear-gradient"]= +c["repeating-radial-gradient"]=c["radial-gradient"]=c["linear-gradient"];var d={initial:"color","zoom-in":"cursor","zoom-out":"cursor",box:"display",flexbox:"display","inline-flexbox":"display",flex:"display","inline-flex":"display",grid:"display","inline-grid":"display","max-content":"width","min-content":"width","fit-content":"width","fill-available":"width"};a.functions=[];a.keywords=[];var h=document.createElement("div").style,e;for(e in c){var g=c[e],k=g.property,g=e+"("+g.params+")";!b(g,k)&& +b(a.prefix+g,k)&&a.functions.push(e)}for(var f in d)k=d[f],!b(f,k)&&b(a.prefix+f,k)&&a.keywords.push(f)})();(function(){function b(a){e.textContent=a+"{}";return!!e.sheet.cssRules.length}var c={":read-only":null,":read-write":null,":any-link":null,"::selection":null},d={keyframes:"name",viewport:null,document:'regexp(".")'};a.selectors=[];a.atrules=[];var e=k.appendChild(document.createElement("style")),l;for(l in c){var g=l+(c[l]?"("+c[l]+")":"");!b(g)&&b(a.prefixSelector(g))&&a.selectors.push(l)}for(var m in d)g= +m+" "+(d[m]||""),!b("@"+g)&&b("@"+a.prefix+g)&&a.atrules.push(m);k.removeChild(e)})();a.valueProperties=["transition","transition-property"];k.className+=" "+a.prefix;StyleFix.register(a.prefixCSS)}})(document.documentElement); diff --git a/plugins/ckeditor4/cssanim/dialogs/css3animation.png b/plugins/ckeditor4/cssanim/dialogs/css3animation.png new file mode 100644 index 0000000000000000000000000000000000000000..075d0a519b72be316b87fced6f5fd06631c51ad1 GIT binary patch literal 6029 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 Hu0mjf)4_z# literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/cssanim/dialogs/cssaddanim.js b/plugins/ckeditor4/cssanim/dialogs/cssaddanim.js new file mode 100644 index 0000000..2741ade --- /dev/null +++ b/plugins/ckeditor4/cssanim/dialogs/cssaddanim.js @@ -0,0 +1,472 @@ +/** + * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ +"use strict"; +var selectList_cache; +function iterationChange(obj) { + var myDoc = obj.ownerDocument; + var mySpan = myDoc.getElementById('rmAfterLoadSpan'); + var myInput = myDoc.getElementById('rmAfterLoadInput'); + if (obj.value === "0") { + mySpan.style.color = "lightgrey"; + myInput.disabled = true; + } else { + mySpan.style.color = "black"; + myInput.disabled = false; + } +} +function animSelectionChange(obj) { + //console.log('animSelectionChange', obj); + var lang = CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim; + var myTr = obj.parentElement.parentElement; + var myBtn = myTr.parentNode.parentNode.parentNode.getElementsByClassName('cssAnimButton'); + var myDoc = obj.ownerDocument; + var mySpan = myDoc.getElementById('rmAfterLoadSpan'); + var myInput = myDoc.getElementById('rmAfterLoadInput'); + var anim_l_obj = myDoc.getElementsByName('anim_L').item(0); + var anim_c_obj = myDoc.getElementsByName('anim_C').item(0); + var anim_o_obj = myDoc.getElementsByName('anim_O').item(0); + //console.log(anim_l_obj, anim_c_obj, anim_o_obj, selectList_cache); + var i; + if ((obj.name === "anim_L") && (anim_l_obj.value === "none")) { + if (anim_c_obj.value === "cssAnimPause") { + alert(lang.pbOnClickPause); + anim_l_obj.selectedIndex = selectList_cache; + return; + } + if (anim_o_obj.value === "cssAnimPause") { + alert(lang.pbOnOverPause); + anim_l_obj.selectedIndex = selectList_cache; + return; + } + } + if (obj.name === "anim_C") { + if ((anim_l_obj.value === "none") && (anim_c_obj.value === "cssAnimPause")) { + alert(lang.pbOnClickOnLoadNone); + anim_c_obj.selectedIndex = selectList_cache; + return; + } + } + if (obj.name === "anim_O") { + if ((anim_l_obj.value === "none") && (anim_o_obj.value === "cssAnimPause")) { + alert(lang.pbOnOverOnLoadNone); + anim_o_obj.selectedIndex = selectList_cache; + return; + } + } + if ((obj.value === 'cssAnimPause') || (obj.value === 'none')) { + for (i=1; i<myTr.childElementCount; i+=1) { + myTr.childNodes[i].style.opacity = 0; + } + myBtn[0].style.display = 'none'; + if (obj.name === "anim_L") { + mySpan.style.color = "lightgrey"; + myInput.disabled = true; + } + } else { + for (i=1; i<myTr.childElementCount; i+=1) { + myTr.childNodes[i].style.opacity = 'initial'; + } + myBtn[0].style.display = 'initial'; + if (obj.name === "anim_L") { + mySpan.style.color = "black"; + myInput.disabled = false; + } + } +} + +CKEDITOR.dialog.add('cssanimAddAnimDialog', function (editor) { + var lang = editor.lang.cssanim; + var imagePath = CKEDITOR.getUrl(CKEDITOR.plugins.get('cssanim').path + 'dialogs/css3animation.png'); + var attachedElem = null; + var pendingChangesObj; + + function getAnimsHtml(allowedAnims, suffix, animation) { +// var lang = editor.lang.cssanim; + var allowedAnimsStr = ""; + var selected; + var i; + allowedAnimsStr += "<select onclick=\"selectList_cache=this.selectedIndex\" onChange=\"animSelectionChange(this);\" name=\"anim" + suffix + "\">"; + selected = ""; + if (animation === "none") { + selected = "selected"; + } + allowedAnimsStr += '<option value="none" '+selected+'>'+lang.none+'<\/option>'; + if (suffix !== '_L') { + // add specific "pause" animation + selected = ""; + if (animation === "cssAnimPause") { + selected = "selected"; + } + allowedAnimsStr += '<option value="cssAnimPause" '+selected+'>'+lang.cssAnimPause+'<\/option>'; + } + var key, tabAnims; + for (key in allowedAnims) { + tabAnims = allowedAnims[key]; + allowedAnimsStr += "<optgroup label=\"" + key + "\" style=\"font-weight:bold\">"; + for (i = 0; i < tabAnims.length; i += 1) { + selected = ""; + if (tabAnims[i] === animation) { + selected = "selected"; + } + allowedAnimsStr += '<option value="' + tabAnims[i] + '" ' + selected + '>' + tabAnims[i] + '<\/option>'; + } + allowedAnimsStr += " <\/optgroup>"; + } + allowedAnimsStr += "<\/select>"; + return allowedAnimsStr; + } + + function getTableHtml(allowedAnimations, suffix, ral, initVal) { +// var lang = editor.lang.cssanim; + var tabStr = ""; + var checked = 'checked = "checked"'; + var delay = 0; + var direction = "normal"; + var duration = 1; + var iterationCount = 1; + var animation = "none"; + var timingFunction = "linear"; + var ind; + var timingValues = ["linear", "ease", "ease-in", "ease-out", "ease-in-out"]; + var dirValues = ["normal", "alternate"]; + var animObj = null; + var exp; + var selected = ""; + var tdSpanColor = "black"; +// var tabH = ""; +// if (suffix === '_O') { +// tabH = "75px;"; +// } else if (suffix === '_C') { +// tabH = "75px;"; +// } else { +// tabH = "75px;"; +// } + if (initVal) { + if (initVal.indexOf('animation-play-state') >= 0) { + animObj = { + name: 'cssAnimPause', + duration: null, + timingFunction: 'linear', + delay: 0, + iterationCount: 1, + direction: 'normal' + }; + } else { + exp = initVal.replace('{animation:', '').replace('}', '').replace(';', '').trim(); + animObj = parseCSS3AnimationShorthand(exp); + } + //console.log("initVal animObj ------------->", exp, animObj); + delay = animObj.delay / 1000; + direction = animObj.direction; + duration = animObj.duration / 1000; + iterationCount = animObj.iterationCount; + if (iterationCount === "infinite") { + iterationCount = 0; + ral = false; + } + animation = animObj.name; + timingFunction = animObj.timingFunction; + } + // 75px to be changed depending on button and other !!!! + tabStr += '<table style="display:block; overflow-y=scroll; overflow-y: auto; width:550px;">'; + tabStr += '<tr>'; + tabStr += '<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:100px;">'; + tabStr += lang.name; + tabStr += '</th>'; + tabStr += '<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:60px;">'; + tabStr += lang.duration; + tabStr += '</th>'; + tabStr += '<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:100px;">'; + tabStr += lang.tFunc; + tabStr += '</th>'; + tabStr += '<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:60px;">'; + tabStr += lang.delay; + tabStr += '</th>'; + tabStr += '<th title="If set to 0, iteration will be set as \'infinite\'" style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:70px;">'; + tabStr += lang.iter; + tabStr += '</th>'; + tabStr += '<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px;">'; + tabStr += lang.direction; + tabStr += '</th>'; + tabStr += '</tr>'; + tabStr += '<tr>'; + tabStr += '<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">'; + tabStr += getAnimsHtml(allowedAnimations, suffix, animation); + tabStr += '</td>'; + tabStr += '<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">'; + tabStr += '<input name="duration' + suffix + '" type="number" min="1" max="600" value="' + duration + '" style="width:4em; border:1px solid gainsboro;">sec'; + tabStr += '</td>'; + tabStr += '<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">'; + tabStr += "<select name=\"timing" + suffix + "\" style=\"border:1px solid gainsboro;\">"; + for (ind = 0; ind < timingValues.length; ind += 1) { + selected = ""; + if (timingValues[ind] === timingFunction) { + selected = "selected"; + } + tabStr += '<option value="' + timingValues[ind] + '" ' + selected + '>' + timingValues[ind] + '<\/option>'; + } + tabStr += "<\/select>"; + tabStr += '</td>'; + tabStr += '<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">'; + tabStr += '<input name="delay' + suffix + '" type="number" min="0" max="600" value="' + delay + '" style="width:4em; border:1px solid gainsboro;">sec'; + tabStr += '</td>'; + tabStr += '<td title="If set to 0, iteration will be set as \'infinite\'" style="text-align: center;padding: 3px;border: 1px solid gainsboro;">'; + tabStr += '<input name="iteration' + suffix + '" type="number" min="0" max="99" value="' + iterationCount + '" style="width:3em; border:1px solid gainsboro" onChange="iterationChange(this);">'; + tabStr += '</td>'; + tabStr += '<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">'; + tabStr += "<select name=\"direction" + suffix + "\" style=\"border:1px solid gainsboro;\">"; + for (ind = 0; ind < dirValues.length; ind += 1) { + selected = ""; + if (dirValues[ind] === direction) { + selected = "selected"; + } + tabStr += '<option value="' + dirValues[ind] + '" ' + selected + '>' + dirValues[ind] + '<\/option>'; + } + tabStr += "<\/select>"; + tabStr += '</td>'; + tabStr += '</tr>'; + tdSpanColor = "black"; + if (ral !== null) { + if (ral === false) { + checked = ""; + } + if (iterationCount === 0) { + checked = "disabled"; + tdSpanColor = "lightgrey"; + } + tabStr += '<tr>'; + tabStr += '<td colspan="3" style="text-align: center;padding: 3px; border-left: 1px solid gainsboro; border-bottom: 1px solid gainsboro;">'; + tabStr += '<span id="rmAfterLoadSpan" style="color:' + tdSpanColor + '" title="'+lang.ralTitle+'">'+lang.ral+'</span>'; + tabStr += '</td>'; + tabStr += '<td colspan="3" style="text-align: left; padding: 3px; border-right: 1px solid gainsboro; border-bottom: 1px solid gainsboro;">'; + tabStr += '<input id="rmAfterLoadInput" type="checkbox" name="rmAfterLoad" ' + checked + '>'; + tabStr += '</td>'; + tabStr += '</tr>'; + } + tabStr += '</table>'; + return tabStr; + } + + function getItemByName(elm, name) { + var i; + for (i=0;i<elm.$.length;i++) { + if (elm.$[i].name == name) { + return new CKEDITOR.dom.node(elm.$[i]); + } + } + return null; + } + + function getHtml(elem, allowedAnimations) { + var obj = null; + var jsonObj; +// OLD FAKE ELEMENTS CODE +// if (elem.dataset.ckeRealElementType !== undefined) { +// // // if (false) { +// // console.log("FAKE !! FAKE !! FAKE !! FAKE !! FAKE !! "); +// // var realElem = CKEDITOR.dom.element.createFromHtml(decodeURIComponent( +// // elem.dataset.ckeRealelement ), editor.document ); +// // console.log("realElem", realElem); +// // obj = realElem.$.attributes['data-animation']; +// } else { +// if (elem.dataset.ckeRealElementType === undefined) { +// obj = elem.attributes['data-animation']; +// } + obj = elem.getAttribute('data-animation'); + if (obj) { + //obj = obj.value; + jsonObj = decodeURIComponent(obj); + obj = JSON.parse(jsonObj); + //console.log("ON getHtml cssanimAddAnimDialog", obj); + if (CKEDITOR.plugins.cssanim.managePending) { + pendingChangesObj[pendingChangesObj.length] = [elem.getId(), jsonObj]; + } + } + var tabStr = ""; + var keyLoad = "OnLoad"; + var keyOver = "OnOver"; + var keyClick = "OnClick"; + var initVal, ral; + tabStr += "<div class=\"tabs\" style=\"width:600px;\">"; + tabStr += "<div class=\"tab\">"; + tabStr += "<span style=\"font-weight:bold; font-size: larger;\">" + keyOver + "</span>"; + tabStr += "<div id=\"cssanimAddAnimDialogTabOver\" class=\"content\" style=\"height:55px;\">"; + initVal = (obj && obj.cdo) ? obj.cdo : null; + tabStr += getTableHtml(allowedAnimations, '_O', null, initVal); + tabStr += '<div style="text-align: center; padding: 2px;">'; + tabStr += "<input type=\"button\" class=\"cssAnimButton\" value=\""+lang.testIt+" !\" name=\"overBtn\" onclick=\"CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);\">"; + tabStr += "</div> "; + tabStr += "</div> "; + tabStr += "<div class=\"tab\">"; + tabStr += "<span style=\"font-weight:bold;font-size: larger;\">" + keyClick + "</span>"; + tabStr += "<div id=\"cssanimAddAnimDialogTabClick\" class=\"content\" style=\"height:55px;\">"; + initVal = (obj && obj.cdc) ? obj.cdc : null; + tabStr += getTableHtml(allowedAnimations, '_C', null, initVal); + tabStr += '<div style="text-align: center; padding: 2px;">'; + tabStr += "<input type=\"button\" class=\"cssAnimButton\" value=\""+lang.testIt+" !\" name=\"clickBtn\" onclick=\"CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);\">"; + tabStr += "</div> "; + tabStr += "</div> "; + tabStr += "<div class=\"tab\">"; + tabStr += "<span style=\"font-weight:bold;font-size: larger;\">" + keyLoad + "</span>"; + tabStr += "<div id=\"cssanimAddAnimDialogTabLoad\" class=\"content\" style=\"height:85px;\">"; + initVal = (obj && obj.cds) ? obj.cds : null; + ral = (obj) ? obj.ral : true; + tabStr += getTableHtml(allowedAnimations, '_L', ral, initVal); + tabStr += '<div style="text-align: center; padding: 2px;">'; + tabStr += "<input type=\"button\" class=\"cssAnimButton\" value=\""+lang.testIt+" !\" name=\"loadBtn\" onclick=\"CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);\">"; + tabStr += "</div> "; + tabStr += "</div> "; + tabStr += "</div>"; + // var prefixFree = "<script src=\"./ckeditor/plugins/cssanim/css/prefixfree.min.js\"></script>"; + var html ='<link rel="stylesheet" href="./ckeditor/plugins/cssanim/css/cssanim.css">' + '<style type="text/css">' + '.cke_cssanim_container' + '{' + 'color:#000 !important;' + 'padding:10px 10px 0;' + 'margin-top:5px;' + 'text-align: center;' + '}' + '.cke_cssanim_container p' + '{' + 'margin: 0 0 10px;' + '}' + + '</style>' + '<div class="cke_cssanim_container">' + '<div class="cke_cssanim_container_div" style="text-align: center; border: 1px solid grey; width:50%;margin-left: auto;margin-right: auto;">' + + '<img class="cke_cssanim_container_img" src="' + imagePath + '" alt="CSS Animation" style="border: 1px solid grey; padding: 5px; margin: 10px;">' + '</div>' + '<br><br>' + '<p id="elemName" style="font-weight:bold;font-size: larger;text-align: -webkit-center;">' + 'Animation '+lang.forStr+' : ' + attachedElem.getName() + '</p>' + '<br>' + tabStr + '</div>'; + // html += prefixFree; + return html; + } + return { + title: lang.editAnimsTitle, + width: 600, + minWidth: 600, + height: 400, + minHeight: 400, + resizable: CKEDITOR.DIALOG_RESIZE_NONE, + contents: [{ + id: 'mainPanel', + label: 'CSS_Animation', + title: 'Animation', + // expand: true, + padding: 0, + elements: [{ + type: 'html', + id: 'htmlAnim', + html: '', + setup: function () { + //console.log("SETUP htmlAnim"); + //console.log("SETUP1 allowedTags", editor.config.allowedTags, this.allowedTags); + var el = document.getElementById(this.domId); + //console.log("cssanimAddAnimDialog setup", el); + var allowedAnimations = editor.config.allowedAnimations; + CKEDITOR.plugins.cssanim.runHighLightElem(attachedElem); + //console.log("cssanimAddAnimDialog allowedAnimations", allowedAnimations); + // var html = "<h1> Add Animation on : "+attachedElem.nodeName+"</h1>"; + el.innerHTML = getHtml(attachedElem, allowedAnimations); + CKEDITOR.plugins.cssanim.cssanimAddAnimDialog = el; + }, + cancel: function () { + //console.log("CANCEL htmlAnim"); + CKEDITOR.plugins.cssanim.cleanHighlight(); + }, + commit: function () { + //console.log("COMMIT htmlAnim"); + CKEDITOR.plugins.cssanim.cleanHighlight(); + var animation; + var inputs = this.getElement().getElementsByTag('input'); + var selects = this.getElement().getElementsByTag('select'); + var res = {}; + res.animStart = null; + res.animClick = null; + res.animOver = null; + res.ral = false; + // get OnLoad data + animation = getItemByName(selects, 'anim_L').getValue(); + var animIter; + if (animation !== 'none') { + res.animStart = animation + " "; + res.animStart += getItemByName(inputs, 'duration_L').getValue() + "s "; + res.animStart += getItemByName(selects, 'timing_L').getValue() + " "; + res.animStart += getItemByName(inputs, 'delay_L').getValue() + "s "; + animIter = getItemByName(inputs, 'iteration_L').getValue(); + if (animIter === "0") { + animIter = "infinite"; + } + res.animStart += animIter + " "; + res.animStart += getItemByName(selects, 'direction_L').getValue(); + // Now RAL + if ((getItemByName(inputs, 'rmAfterLoad').$.checked) && (animIter !== 'infinite')) { + res.ral = true; + } + } + // get OnClick data + animation = getItemByName(selects, 'anim_C').getValue(); + if (animation !== 'none') { + res.animClick = animation + " "; + res.animClick += getItemByName(inputs, 'duration_C').getValue() + "s "; + res.animClick += getItemByName(selects, 'timing_C').getValue() + " "; + res.animClick += getItemByName(inputs, 'delay_C').getValue() + "s "; + animIter = getItemByName(inputs, 'iteration_C').getValue(); + if (animIter === "0") { + animIter = "infinite"; + } + res.animClick += animIter + " "; + res.animClick += getItemByName(selects, 'direction_C').getValue(); + } + // get OnHover data + animation = getItemByName(selects, 'anim_O').getValue(); + if (animation !== 'none') { + res.animOver = animation + " "; + res.animOver += getItemByName(inputs, 'duration_O').getValue() + "s "; + res.animOver += getItemByName(selects,'timing_O').getValue() + " "; + res.animOver += getItemByName(inputs, 'delay_O').getValue() + "s "; + animIter = getItemByName(inputs, 'iteration_O').getValue(); + if (animIter === "0") { + animIter = "infinite"; + } + res.animOver += animIter + " "; + res.animOver += getItemByName(selects, 'direction_O').getValue(); + } + //console.log(inputs, selects, res); + CKEDITOR.plugins.cssanim.runAddAnimElem(attachedElem, res); + } + }] + }], +// onLoad: function () { +// //console.log("ON LOAD cssanimAddAnimDialog", attachedElem); +// }, + onShow: function () { + attachedElem = CKEDITOR.plugins.cssanim.curSelectedElement; + if (CKEDITOR.plugins.cssanim.managePending) { + //console.log('Manage Pendings is ON !!!!!!!!!!!!!!!!!'); + pendingChangesObj = CKEDITOR.plugins.cssanim.pendingChanges; + //console.log("ON SHOW PENDING ELEMENTS ============== ", pendingChangesObj); + } + this.setupContent(); + var dial = this.getContentElement('mainPanel', 'htmlAnim'); + var inputs = dial.getInputElement(); + var elms = inputs.getElementsByTag('select'); + var elm; + elm = getItemByName(elms, 'anim_L'); + animSelectionChange(elm.$); + elm = getItemByName(elms, 'anim_C'); + animSelectionChange(elm.$); + elm = getItemByName(elms, 'anim_O'); + animSelectionChange(elm.$); + + }, + onOk: function () { + //console.log("ON OK cssanimAddAnimDialog"); + this.commitContent(); + if (CKEDITOR.plugins.cssanim.managePending) { + //console.log("ON OK PENDING ELEMENTS ============== ", pendingChangesObj); + CKEDITOR.plugins.cssanim.pendingChanges = pendingChangesObj; + CKEDITOR.plugins.cssanim.refreshCssAnimDialogAnimationsTab(); + } + }, +// onHide: function () { +// console.log("ON HIDE cssanimAddAnimDialog"); +// }, + onCancel: function () { + //console.log("ON CANCEL cssanimAddAnimDialog"); + this.foreach(function (widget) { +// // Make sure IE triggers "change" event on last focused input before closing the dialog. (#7915) +// if (CKEDITOR.env.ie && (this._.currentFocusIndex == widget.focusIndex)) widget.getInputElement().$.blur(); + if (widget.cancel) { + widget.cancel.apply(widget); + } + }); + //console.log("CANCEL PENDING ELEMENTS ============== ", pendingChangesObj); + } + }; +}); diff --git a/plugins/ckeditor4/cssanim/dialogs/cssaddanim.min.js b/plugins/ckeditor4/cssanim/dialogs/cssaddanim.min.js new file mode 100644 index 0000000..c205d3b --- /dev/null +++ b/plugins/ckeditor4/cssanim/dialogs/cssaddanim.min.js @@ -0,0 +1 @@ +"use strict";function iterationChange(e){var n=e.ownerDocument,t=n.getElementById("rmAfterLoadSpan"),i=n.getElementById("rmAfterLoadInput");"0"===e.value?(t.style.color="lightgrey",i.disabled=!0):(t.style.color="black",i.disabled=!1)}function animSelectionChange(e){var n,t=CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim,i=e.parentElement.parentElement,a=i.parentNode.parentNode.parentNode.getElementsByClassName("cssAnimButton"),l=e.ownerDocument,s=l.getElementById("rmAfterLoadSpan"),o=l.getElementById("rmAfterLoadInput"),d=l.getElementsByName("anim_L").item(0),r=l.getElementsByName("anim_C").item(0),c=l.getElementsByName("anim_O").item(0);if("anim_L"===e.name&&"none"===d.value){if("cssAnimPause"===r.value)return alert(t.pbOnClickPause),void(d.selectedIndex=selectList_cache);if("cssAnimPause"===c.value)return alert(t.pbOnOverPause),void(d.selectedIndex=selectList_cache)}if("anim_C"===e.name&&"none"===d.value&&"cssAnimPause"===r.value)return alert(t.pbOnClickOnLoadNone),void(r.selectedIndex=selectList_cache);if("anim_O"===e.name&&"none"===d.value&&"cssAnimPause"===c.value)return alert(t.pbOnOverOnLoadNone),void(c.selectedIndex=selectList_cache);if("cssAnimPause"===e.value||"none"===e.value){for(n=1;n<i.childElementCount;n+=1)i.childNodes[n].style.opacity=0;a[0].style.display="none","anim_L"===e.name&&(s.style.color="lightgrey",o.disabled=!0)}else{for(n=1;n<i.childElementCount;n+=1)i.childNodes[n].style.opacity="initial";a[0].style.display="initial","anim_L"===e.name&&(s.style.color="black",o.disabled=!1)}}var selectList_cache;CKEDITOR.dialog.add("cssanimAddAnimDialog",function(e){function n(e,n,t){var i,a,l="";l+='<select onclick="selectList_cache=this.selectedIndex" onChange="animSelectionChange(this);" name="anim'+n+'">',i="","none"===t&&(i="selected"),l+='<option value="none" '+i+">"+s.none+"</option>","_L"!==n&&(i="","cssAnimPause"===t&&(i="selected"),l+='<option value="cssAnimPause" '+i+">"+s.cssAnimPause+"</option>");var o,d;for(o in e){for(d=e[o],l+='<optgroup label="'+o+'" style="font-weight:bold">',a=0;a<d.length;a+=1)i="",d[a]===t&&(i="selected"),l+='<option value="'+d[a]+'" '+i+">"+d[a]+"</option>";l+=" </optgroup>"}return l+="</select>"}function t(e,t,i,a){var l,o,d="",r='checked = "checked"',c=0,m="normal",g=1,p=1,u="none",h="linear",y=["linear","ease","ease-in","ease-out","ease-in-out"],b=["normal","alternate"],x=null,v="",f="black";for(a&&(a.indexOf("animation-play-state")>=0?x={name:"cssAnimPause",duration:null,timingFunction:"linear",delay:0,iterationCount:1,direction:"normal"}:(o=a.replace("{animation:","").replace("}","").replace(";","").trim(),x=parseCSS3AnimationShorthand(o)),c=x.delay/1e3,m=x.direction,g=x.duration/1e3,p=x.iterationCount,"infinite"===p&&(p=0,i=!1),u=x.name,h=x.timingFunction),d+='<table style="display:block; overflow-y=scroll; overflow-y: auto; width:550px;">',d+="<tr>",d+='<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:100px;">',d+=s.name,d+="</th>",d+='<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:60px;">',d+=s.duration,d+="</th>",d+='<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:100px;">',d+=s.tFunc,d+="</th>",d+='<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:60px;">',d+=s.delay,d+="</th>",d+='<th title="If set to 0, iteration will be set as \'infinite\'" style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:70px;">',d+=s.iter,d+="</th>",d+='<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px;">',d+=s.direction,d+="</th>",d+="</tr>",d+="<tr>",d+='<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+=n(e,t,u),d+="</td>",d+='<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+='<input name="duration'+t+'" type="number" min="1" max="600" value="'+g+'" style="width:4em; border:1px solid gainsboro;">sec',d+="</td>",d+='<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+='<select name="timing'+t+'" style="border:1px solid gainsboro;">',l=0;l<y.length;l+=1)v="",y[l]===h&&(v="selected"),d+='<option value="'+y[l]+'" '+v+">"+y[l]+"</option>";for(d+="</select>",d+="</td>",d+='<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+='<input name="delay'+t+'" type="number" min="0" max="600" value="'+c+'" style="width:4em; border:1px solid gainsboro;">sec',d+="</td>",d+='<td title="If set to 0, iteration will be set as \'infinite\'" style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+='<input name="iteration'+t+'" type="number" min="0" max="99" value="'+p+'" style="width:3em; border:1px solid gainsboro" onChange="iterationChange(this);">',d+="</td>",d+='<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+='<select name="direction'+t+'" style="border:1px solid gainsboro;">',l=0;l<b.length;l+=1)v="",b[l]===m&&(v="selected"),d+='<option value="'+b[l]+'" '+v+">"+b[l]+"</option>";return d+="</select>",d+="</td>",d+="</tr>",f="black",null!==i&&(i===!1&&(r=""),0===p&&(r="disabled",f="lightgrey"),d+="<tr>",d+='<td colspan="3" style="text-align: center;padding: 3px; border-left: 1px solid gainsboro; border-bottom: 1px solid gainsboro;">',d+='<span id="rmAfterLoadSpan" style="color:'+f+'" title="'+s.ralTitle+'">'+s.ral+"</span>",d+="</td>",d+='<td colspan="3" style="text-align: left; padding: 3px; border-right: 1px solid gainsboro; border-bottom: 1px solid gainsboro;">',d+='<input id="rmAfterLoadInput" type="checkbox" name="rmAfterLoad" '+r+">",d+="</td>",d+="</tr>"),d+="</table>"}function i(e,n){var t;for(t=0;t<e.$.length;t++)if(e.$[t].name==n)return new CKEDITOR.dom.node(e.$[t]);return null}function a(e,n){var i,a=null;a=e.getAttribute("data-animation"),a&&(i=decodeURIComponent(a),a=JSON.parse(i),CKEDITOR.plugins.cssanim.managePending&&(l[l.length]=[e.getId(),i]));var r,c,m="",g="OnLoad",p="OnOver",u="OnClick";m+='<div class="tabs" style="width:600px;">',m+='<div class="tab">',m+='<span style="font-weight:bold; font-size: larger;">'+p+"</span>",m+='<div id="cssanimAddAnimDialogTabOver" class="content" style="height:55px;">',r=a&&a.cdo?a.cdo:null,m+=t(n,"_O",null,r),m+='<div style="text-align: center; padding: 2px;">',m+='<input type="button" class="cssAnimButton" value="'+s.testIt+' !" name="overBtn" onclick="CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);">',m+="</div> ",m+="</div> ",m+='<div class="tab">',m+='<span style="font-weight:bold;font-size: larger;">'+u+"</span>",m+='<div id="cssanimAddAnimDialogTabClick" class="content" style="height:55px;">',r=a&&a.cdc?a.cdc:null,m+=t(n,"_C",null,r),m+='<div style="text-align: center; padding: 2px;">',m+='<input type="button" class="cssAnimButton" value="'+s.testIt+' !" name="clickBtn" onclick="CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);">',m+="</div> ",m+="</div> ",m+='<div class="tab">',m+='<span style="font-weight:bold;font-size: larger;">'+g+"</span>",m+='<div id="cssanimAddAnimDialogTabLoad" class="content" style="height:85px;">',r=a&&a.cds?a.cds:null,c=a?a.ral:!0,m+=t(n,"_L",c,r),m+='<div style="text-align: center; padding: 2px;">',m+='<input type="button" class="cssAnimButton" value="'+s.testIt+' !" name="loadBtn" onclick="CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);">',m+="</div> ",m+="</div> ",m+="</div>";var h='<link rel="stylesheet" href="./ckeditor/plugins/cssanim/css/cssanim.css"><style type="text/css">.cke_cssanim_container{color:#000 !important;padding:10px 10px 0;margin-top:5px;text-align: center;}.cke_cssanim_container p{margin: 0 0 10px;}</style><div class="cke_cssanim_container"><div class="cke_cssanim_container_div" style="text-align: center; border: 1px solid grey; width:50%;margin-left: auto;margin-right: auto;"><img class="cke_cssanim_container_img" src="'+o+'" alt="CSS Animation" style="border: 1px solid grey; padding: 5px; margin: 10px;"></div><br><br><p id="elemName" style="font-weight:bold;font-size: larger;text-align: -webkit-center;">Animation '+s.forStr+" : "+d.getName()+"</p><br>"+m+"</div>";return h}var l,s=e.lang.cssanim,o=CKEDITOR.getUrl(CKEDITOR.plugins.get("cssanim").path+"dialogs/css3animation.png"),d=null;return{title:s.editAnimsTitle,width:600,minWidth:600,height:400,minHeight:400,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"mainPanel",label:"CSS_Animation",title:"Animation",padding:0,elements:[{type:"html",id:"htmlAnim",html:"",setup:function(){var n=document.getElementById(this.domId),t=e.config.allowedAnimations;CKEDITOR.plugins.cssanim.runHighLightElem(d),n.innerHTML=a(d,t),CKEDITOR.plugins.cssanim.cssanimAddAnimDialog=n},cancel:function(){CKEDITOR.plugins.cssanim.cleanHighlight()},commit:function(){CKEDITOR.plugins.cssanim.cleanHighlight();var e,n=this.getElement().getElementsByTag("input"),t=this.getElement().getElementsByTag("select"),a={};a.animStart=null,a.animClick=null,a.animOver=null,a.ral=!1,e=i(t,"anim_L").getValue();var l;"none"!==e&&(a.animStart=e+" ",a.animStart+=i(n,"duration_L").getValue()+"s ",a.animStart+=i(t,"timing_L").getValue()+" ",a.animStart+=i(n,"delay_L").getValue()+"s ",l=i(n,"iteration_L").getValue(),"0"===l&&(l="infinite"),a.animStart+=l+" ",a.animStart+=i(t,"direction_L").getValue(),i(n,"rmAfterLoad").$.checked&&"infinite"!==l&&(a.ral=!0)),e=i(t,"anim_C").getValue(),"none"!==e&&(a.animClick=e+" ",a.animClick+=i(n,"duration_C").getValue()+"s ",a.animClick+=i(t,"timing_C").getValue()+" ",a.animClick+=i(n,"delay_C").getValue()+"s ",l=i(n,"iteration_C").getValue(),"0"===l&&(l="infinite"),a.animClick+=l+" ",a.animClick+=i(t,"direction_C").getValue()),e=i(t,"anim_O").getValue(),"none"!==e&&(a.animOver=e+" ",a.animOver+=i(n,"duration_O").getValue()+"s ",a.animOver+=i(t,"timing_O").getValue()+" ",a.animOver+=i(n,"delay_O").getValue()+"s ",l=i(n,"iteration_O").getValue(),"0"===l&&(l="infinite"),a.animOver+=l+" ",a.animOver+=i(t,"direction_O").getValue()),CKEDITOR.plugins.cssanim.runAddAnimElem(d,a)}}]}],onShow:function(){d=CKEDITOR.plugins.cssanim.curSelectedElement,CKEDITOR.plugins.cssanim.managePending&&(l=CKEDITOR.plugins.cssanim.pendingChanges),this.setupContent();var e,n=this.getContentElement("mainPanel","htmlAnim"),t=n.getInputElement(),a=t.getElementsByTag("select");e=i(a,"anim_L"),animSelectionChange(e.$),e=i(a,"anim_C"),animSelectionChange(e.$),e=i(a,"anim_O"),animSelectionChange(e.$)},onOk:function(){this.commitContent(),CKEDITOR.plugins.cssanim.managePending&&(CKEDITOR.plugins.cssanim.pendingChanges=l,CKEDITOR.plugins.cssanim.refreshCssAnimDialogAnimationsTab())},onCancel:function(){this.foreach(function(e){e.cancel&&e.cancel.apply(e)})}}}); \ No newline at end of file diff --git a/plugins/ckeditor4/cssanim/dialogs/cssanim.js b/plugins/ckeditor4/cssanim/dialogs/cssanim.js new file mode 100644 index 0000000..55fd5c5 --- /dev/null +++ b/plugins/ckeditor4/cssanim/dialogs/cssanim.js @@ -0,0 +1,528 @@ +/** + * Copyright (c) 2014, CKSource - Frederico Knabben. All rights reserved. + * Licensed under the terms of the MIT License (see LICENSE.md). + * + * The cssanim plugin dialog window definition. + * + * Created out of the CKEditor Plugin SDK: + * http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1 + */ +// css = cssSelectorStart +// cds = cssDefStart +// cso = cssSelectorOver +// cdo = cssDefOver +// csc = cssSelectorClick +// cdc = cssDefClick +// ral = css Remove after Load flag +// Our dialog definition. +CKEDITOR.dialog.add('cssanimMainDialog', function (editor) { + "use strict"; + var lang = editor.lang.cssanim; + + function rgbToHex(color) { + if (color.substr(0, 1) === "#") { + return color; + } + var nums = /(.*?)rgb\((\d+),\s*(\d+),\s*(\d+)\)/i.exec(color), + r = parseInt(nums[2], 10).toString(16), + g = parseInt(nums[3], 10).toString(16), + b = parseInt(nums[4], 10).toString(16); + return "#" + ( + (r.length === 1 ? "0" + r : r) + (g.length === 1 ? "0" + g : g) + (b.length === 1 ? "0" + b : b)); + } + + function getAllowedTagsHtml(tags, onloadTags) { + var allowedTagsStr = ''; + allowedTagsStr += '<form>'; + allowedTagsStr += '<div style=" overflow: auto; height: 350px; padding-bottom: 10px; margin-bottom: 10px;">'; +// allowedTagsStr += '<table style="width:360px; display:block; overflow-y=scroll; max-height: 300px; overflow-y: auto;">'; + allowedTagsStr += '<table>'; + var i; + var checked; + for (i = 0; i < onloadTags.length; i += 1) { + allowedTagsStr += '<tr>'; + allowedTagsStr += '<td style="width:280px;">'; + allowedTagsStr += onloadTags[i].toUpperCase(); + allowedTagsStr += '</td>'; + allowedTagsStr += '<td style="text-align:center; width:80px;">'; + checked = ""; + if (tags.indexOf(onloadTags[i]) >= 0) { + checked = "checked=checked"; + } + allowedTagsStr += ' <input type="checkbox" name="tags" ' + checked + ' value="' + onloadTags[i] + '">'; + allowedTagsStr += '</td>'; + allowedTagsStr += '</tr>'; + } + allowedTagsStr += '</table>'; + allowedTagsStr += '</div>'; + allowedTagsStr += '</form>'; + return allowedTagsStr; + } + + function getparametersHtml() { +// var lang = editor.lang.cssanim; + var parametersStr = ''; + var rgbHex = editor.config.highlightBGColor; + if (editor.config.highlightBGColor.indexOf('rgb') >= 0) { + rgbHex = rgbToHex(editor.config.highlightBGColor); + } + var customCssFilePath = editor.config.customCssFilePath; + parametersStr += '<form>'; + parametersStr += '<fieldset style="border-radius:10px">'; + parametersStr += '<legend style="font-weight:bold;">'+lang.HBS+'</legend>'; + parametersStr += '<table style="width:300px;">'; + parametersStr += '<tr>'; + parametersStr += '<td style="width:250px;">'; + parametersStr += lang.HBGC; + parametersStr += '</td>'; + parametersStr += '<td>'; + parametersStr += '<input style="width:50px; height:25px; " type="color" name="HLBgColor" value="' + rgbHex + '" onchange="CKEDITOR.plugins.cssanim.setHighLightBgColor(this.value)">'; + parametersStr += '</td>'; + parametersStr += '</tr>'; + parametersStr += '<tr>'; + parametersStr += '<td>'; + parametersStr += lang.HBW; + parametersStr += '</td>'; + parametersStr += '<td style="padding:2px;">'; + parametersStr += '<input style="width:40px; border: 1px solid #ccc;" name="width" type="number" min="1" max="10" onchange="CKEDITOR.plugins.cssanim.setHighLightBorder(this.value)" value="' + parseInt(editor.config.highlightBorder) + '"> px'; + parametersStr += '</td>'; + parametersStr += '</tr>'; + parametersStr += '</table>'; + parametersStr += '</fieldset>'; + parametersStr += '<br>'; + parametersStr += '<fieldset style="border-radius:10px">'; + parametersStr += '<legend style="font-weight:bold;">'+lang.CustomCSS+'</legend>'; + parametersStr += '<table style="width:300px;">'; + parametersStr += '<tr>'; + parametersStr += '<td style="width:50px;">'; + parametersStr += lang.cssPath + ' '; + parametersStr += '</td>'; + parametersStr += '<td style="width:250px;">'; + parametersStr += '<input type="text" style="width:400px; border: 1px solid #ccc;" name="cssName" value=' + customCssFilePath + '>'; + parametersStr += '</td>'; + parametersStr += '</tr>'; + parametersStr += '<tr>'; + parametersStr += '<td colspan="2" style="text-align:center; padding-top: 8px;color: tomato;">'; + parametersStr += lang.cssInfo; + parametersStr += '</td>'; + parametersStr += '</tr>'; + parametersStr += '</table>'; + parametersStr += '</fieldset>'; + parametersStr += '<div id="cssResultsDiv" style="margin-top:10px; padding:5px; text-align: center; border: #ccc solid 1px; display:none;">'; + parametersStr += 'test'; + parametersStr += '</div>'; + parametersStr += '</form>'; + return parametersStr; + } + + function getTabDocAnimationHtml(myDialog) { +// var lang = editor.lang.cssanim; + //console.log("availableAnimsObj", myDialog.availableAnimsObj); + // ADD HERE COLOR FOR ANIMATIONS DEPENDING OF CSS ORIGIN : + // lightblue if found in cssanim !! + // green if found in custom !! + // red if not found in any !! + var ral = lang.irrelevant; + var inputs = myDialog.getContentElement('tab-parameters-box', 'parametersSettings').getElement().getElementsByTag('input'); + var HLBgColor; + var input, i; + for (i = 0; i < inputs.count(); i += 1) { + input = inputs.getItem(i).getNameAtt(); + if (input === 'HLBgColor') { + HLBgColor = inputs.getItem(i).getValue(); + break; + } + } + var thStr = '<th style="border: 1px solid gray; text-align:center; padding:5px; font-weight:bold; background-color: lightgray;">'; + var tdStrS = '<td style="border: 1px solid gray; text-align:center; padding:5px;'; + var tdStrE; + var elems = CKEDITOR.plugins.cssanim.getAllAnimElem(editor); + var html = lang.noElements; + var htmlTable = ''; + // htmlTable += '<p style="text-align: center; padding: 5px; color: grey; font-weight:bold;">Animation Colors Legend'; + // htmlTable += '</p>'; + htmlTable += '<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;"></div>'; + htmlTable += '<p style="text-align: center; padding: 5px; color: grey; font-weight:bold;">'; + htmlTable += '<span style="color: LightSkyBlue; font-weight:bold;">'+lang.animFromDef+'</span>'; + htmlTable += '<br><span style="color: cornflowerblue; font-weight:bold;">'+lang.animPause+'</span>'; + htmlTable += '<br><span style="color: PaleGreen; font-weight:bold;">'+lang.animFromCustom+'</span>'; + htmlTable += '<br><span style="color: orange; font-weight:bold;">'+lang.animBoth+'</span>'; + htmlTable += '<br><span style="color: Red; font-weight:bold;">'+lang.animUndef+'</span>'; + htmlTable += '<br>'; + htmlTable += '</p>'; + htmlTable += '<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;"></div>'; + htmlTable += '<p style="text-align: center; padding: 5px; color: grey; font-weight:bold;">'; + htmlTable += lang.dblClick; + htmlTable += '</p>'; + htmlTable += '<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;margin-bottom: 10px;"></div>'; + htmlTable += '<div style=" width: 600px; overflow: auto; height: 400px;">'; + //htmlTable += '<table style=" display: inline-block; height: 300px;">'; + htmlTable += '<table>'; + htmlTable += '<tr>'; + htmlTable += thStr + 'Tag</th>'; + htmlTable += thStr + 'Id</th>'; + htmlTable += thStr + 'OnLoad</th>'; + htmlTable += thStr + 'OnClick</th>'; + htmlTable += thStr + 'OnOver</th>'; + htmlTable += thStr + lang.ral +'</th>'; + htmlTable += '</tr>'; + var cnt = 0; + var bgColor = 'azure;'; + var tag; + var exp, animObj; + var curElem; + var key; + for (key in elems) { + if (elems.hasOwnProperty(key)) { + curElem = elems[key]; + ral = lang.irrelevant; + tdStrE = '">'; + cnt+=1; + bgColor = 'azure'; + tag = curElem.elem.nodeName.toLowerCase(); + if (editor.config.allowedTags.indexOf(tag) < 0) { + bgColor = 'MistyRose'; + } + htmlTable += '<tr style="background-color:' + bgColor + ';" '; + htmlTable += ' onmouseover="this.style.backgroundColor=\'' + HLBgColor + '\'; CKEDITOR.plugins.cssanim.runHighLightElemById(\'' + curElem.elem.id + '\'); "'; + htmlTable += ' onmouseout="this.style.backgroundColor=\'' + bgColor + '\'; CKEDITOR.plugins.cssanim.cleanHighlight();"'; + htmlTable += ' ondblclick=" CKEDITOR.plugins.cssanim.runAddAnimDialogById(\'' + curElem.elem.id + '\')"'; + htmlTable += ' >'; + htmlTable += tdStrS + tdStrE; + htmlTable += curElem.elem.nodeName; + htmlTable += '</td>'; + htmlTable += tdStrS + tdStrE; + htmlTable += curElem.elem.id; + htmlTable += '</td>'; + tdStrE = '">'; + if (curElem.cds) { + exp = curElem.cds.replace('{animation:', '').replace('}', '').replace(';', '').trim(); + animObj = parseCSS3AnimationShorthand(exp); + ral = (curElem.ral) ? "YES" : "NO"; + if (animObj.name) { + if (animObj.name === 'cssAnimPause') { + tdStrE = ' background-color:cornflowerblue;">'; + } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsConflict && (myDialog.availableAnimsObj.allAvailableAnimsConflict.indexOf(animObj.name) >= 0)) { + tdStrE = ' background-color:orange;">'; + } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCustom && (myDialog.availableAnimsObj.allAvailableAnimsCustom.indexOf(animObj.name) >= 0)) { + tdStrE = ' background-color:PaleGreen;">'; + } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCssAnim && (myDialog.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(animObj.name) >= 0)) { + tdStrE = ' background-color:LightSkyBlue;">'; + } else { + tdStrE = ' background-color:Red;">'; + } + } + htmlTable += tdStrS + tdStrE; + } else { + animObj = {}; + animObj.name = ""; + htmlTable += tdStrS + tdStrE; + } + htmlTable += animObj.name; + htmlTable += '</td>'; + tdStrE = '">'; + if (curElem.cdc) { + if (curElem.cdc.indexOf('animation-play-state') >= 0) { + animObj = { + name: 'cssAnimPause', + duration: null, + timingFunction: 'linear', + delay: 0, + iterationCount: 1, + direction: 'normal' + }; + } else { + exp = curElem.cdc.replace('{animation:', '').replace('}', '').replace(';', '').trim(); + animObj = parseCSS3AnimationShorthand(exp); + } + if (animObj.name) { + if (animObj.name === 'cssAnimPause') { + tdStrE = ' background-color:cornflowerblue;">'; + } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsConflict && (myDialog.availableAnimsObj.allAvailableAnimsConflict.indexOf(animObj.name) >= 0)) { + tdStrE = ' background-color:orange;">'; + } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCustom && (myDialog.availableAnimsObj.allAvailableAnimsCustom.indexOf(animObj.name) >= 0)) { + tdStrE = ' background-color:PaleGreen;">'; + } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCssAnim && (myDialog.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(animObj.name) >= 0)) { + tdStrE = ' background-color:LightSkyBlue;">'; + } else { + tdStrE = ' background-color:Red;">'; + } + } + htmlTable += tdStrS + tdStrE; + } else { + animObj = {}; + animObj.name = ""; + htmlTable += tdStrS + tdStrE; + } + htmlTable += animObj.name; + htmlTable += '</td>'; + tdStrE = '">'; + if (curElem.cdo) { + if (curElem.cdo.indexOf('animation-play-state') >= 0) { + animObj = { + name: 'cssAnimPause', + duration: null, + timingFunction: 'linear', + delay: 0, + iterationCount: 1, + direction: 'normal' + }; + } else { + exp = curElem.cdo.replace('{animation:', '').replace('}', '').replace(';', '').trim(); + animObj = parseCSS3AnimationShorthand(exp); + } + if (animObj.name) { + if (animObj.name === 'cssAnimPause') { + tdStrE = ' background-color:cornflowerblue;">'; + } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsConflict && (myDialog.availableAnimsObj.allAvailableAnimsConflict.indexOf(animObj.name) >= 0)) { + tdStrE = ' background-color:orange;">'; + } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCustom && (myDialog.availableAnimsObj.allAvailableAnimsCustom.indexOf(animObj.name) >= 0)) { + tdStrE = ' background-color:PaleGreen;">'; + } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCssAnim && (myDialog.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(animObj.name) >= 0)) { + tdStrE = ' background-color:LightSkyBlue;">'; + } else { + tdStrE = ' background-color:Red;">'; + } + } + htmlTable += tdStrS + tdStrE; + } else { + animObj = {}; + animObj.name = ""; + htmlTable += tdStrS + tdStrE; + } + htmlTable += animObj.name; + htmlTable += '</td>'; + tdStrE = '">'; + htmlTable += tdStrS + tdStrE; + htmlTable += ral; + htmlTable += '</td>'; + htmlTable += '</tr>'; + } + } + if (cnt > 0) { + htmlTable += '</table>'; + htmlTable += '</div>'; + htmlTable += '<div style="height: 6px;"></div>'; + html = htmlTable; + } + return html; + } + + return { + // Basic properties of the dialog window: title, minimum size. + title: editor.lang.cssanim.genProperties, + minWidth: 550, + width: 550, + minHeight: 250, + height: 250, + resizable: CKEDITOR.DIALOG_RESIZE_NONE, + // Dialog window content definition. + contents: [ + // Definition of the parameters Box Settings dialog tab (page). + { + id: 'tab-doc-animations', + label: lang.docAnim, + elements: [{ + type: 'html', + id: "allAnimations", + html: '' +// setup: function () {}, +// commit: function () {} + }] + }, { + // Definition of the Allowed Tags Settings dialog tab (page). + id: 'tab-allowed-tags', + label: lang.allowedTags, + // The tab content. + elements: [{ + type: 'html', + id: "allowedTags", + allowedTags: null, + html: '', + setup: function () { + this.allowedTags = editor.config.allowedTags; + }, + cancel: function () { + editor.config.allowedTags = this.allowedTags; + var inputs = this.getElement().getElementsByTag('input'); + var i; + for (i = 0; i < inputs.count(); i += 1) { + if (editor.config.allowedTags.indexOf(inputs.getItem(i).$.value) < 0) { + inputs.getItem(i).$.checked = false; + } else { + inputs.getItem(i).$.checked = true; + } + } + }, + commit: function () { + var inputs = this.getElement().getElementsByTag('input'); + var i; + editor.config.allowedTags = []; + for (i = 0; i < inputs.count(); i += 1) { + if (inputs.getItem(i).$.checked) { + editor.config.allowedTags.push(inputs.getItem(i).$.value); + } + } + } + }] + }, { + id: 'tab-parameters-box', + label: lang.advSettings, + // Require the id attribute to be enabled. + elements: [{ + type: 'html', + id: "parametersSettings", + html: '', + bg: '', + bw: 0, + pad: 0, + setup: function () { + var inputs = this.getElement().getElementsByTag('input'); + var input, i; + for (i = 0; i < inputs.count(); i += 1) { + input = inputs.getItem(i).$.name; + if (input === 'HLBgColor') { + this.bg = inputs.getItem(i).$.value; + } else if (input === 'width') { + this.bw = inputs.getItem(i).$.value; + } + } + //console.log(" ----------------------- parametersSettings setup -----------", this); + }, + commit: function () { + var inputs = this.getElement().getElementsByTag('input'); + var input, i; + for (i = 0; i < inputs.count(); i += 1) { + input = inputs.getItem(i).$.name; + if (input === 'HLBgColor') { + editor.config.highlightBGColor = inputs.getItem(i).$.value; + } else if (input === 'width') { + editor.config.highlightBorder = inputs.getItem(i).$.value + "px"; +// } else if (input === 'padding') { +// editor.config.highlightPadding = inputs.getItem(i).$.value + "px"; + } else if (input === 'cssName') { + if (this.getDialog().initialCssFile !== inputs.getItem(i).$.value) { + CKEDITOR.plugins.cssanim.getCustomCss(inputs.getItem(i).$.value); + } + } + } + //console.log(" ----------------------- parametersSettings commit -----------", inputs); + }, + cancel: function () { + var inputs = this.getElement().getElementsByTag('input'); + var input, i; + for (i = 0; i < inputs.count(); i += 1) { + input = inputs.getItem(i).$.name; + if (input === 'HLBgColor') { + inputs.getItem(i).$.value = this.bg; + editor.config.highlightBGColor = this.bg; + } else if (input === 'width') { + inputs.getItem(i).$.value = this.bw; + editor.config.highlightBorder = this.bw + "px"; + } + } + //console.log(" ----------------------- parametersSettings cancel -----------", this); + } + }] + } + ], + onLoad: function () { + CKEDITOR.plugins.cssanim.setCssAnimDialog(this); + this.initialCssFile = ""; + // Init dialog tabs + var myDomId, myEl; + myDomId = this.getContentElement('tab-doc-animations', 'allAnimations').domId; + myEl = document.getElementById(myDomId); + myEl.innerHTML = getTabDocAnimationHtml(this); + myDomId = this.getContentElement('tab-allowed-tags', 'allowedTags').domId; + myEl = document.getElementById(myDomId); + myEl.innerHTML = getAllowedTagsHtml(editor.config.allowedTags, editor.config.onLoadAllowedTags); + myDomId = this.getContentElement('tab-parameters-box', 'parametersSettings').domId; + myEl = document.getElementById(myDomId); + myEl.innerHTML = getparametersHtml(); + this.on('selectPage', function (e) { + //console.log("SELECT PAGE ------------------------------------------", e.data.page); + var domId, el; + var form; + if (e.data.currentPage === "tab-allowed-tags") { + domId = e.sender.getContentElement('tab-allowed-tags', 'allowedTags'); + domId.commit(); + } + if (e.data.page === "tab-doc-animations") { + domId = e.sender.getContentElement('tab-doc-animations', 'allAnimations').domId; + el = document.getElementById(domId); + el.innerHTML = getTabDocAnimationHtml(this); + } else if (e.data.page === "tab-allowed-tags") { + domId = e.sender.getContentElement('tab-allowed-tags', 'allowedTags').domId; + el = document.getElementById(domId); + el.innerHTML = getAllowedTagsHtml(editor.config.allowedTags, editor.config.onLoadAllowedTags); + } else if (e.data.page === "tab-parameters-box") { + form = e.sender.getContentElement('tab-parameters-box', 'parametersSettings'); + domId = form.domId; + el = document.getElementById(domId); + el.innerHTML = getparametersHtml(); + } + }); + }, + onShow: function () { + //console.log("ON SHOW CSSANIM ..............."); + this.setupContent(); + var form = this.getContentElement('tab-parameters-box', 'parametersSettings'); + var domId = form.domId; + var el = document.getElementById(domId); + if (editor.config.customCssFilePath !== this.initialCssFile) { + CKEDITOR.plugins.cssanim.getCustomCss(el); + this.initialCssFile = editor.config.customCssFilePath; + } + this.availableAnimsObj = CKEDITOR.plugins.cssanim.getAvailableAnims(); + // this 3 following lines are a trick to force refresh the tab !! + this.hidePage('tab-doc-animations'); + this.showPage('tab-doc-animations'); + this.selectPage('tab-doc-animations'); + CKEDITOR.plugins.cssanim.cleanHighlight(); + }, + // This method is invoked once a user clicks the OK button, confirming the dialog. + onOk: function () { + //console.log("ON OK CSSANIM ..............."); + // // Invoke the commit methods of all dialog window elements, so the <cssanimMainDialog> element gets modified. + this.commitContent(); + CKEDITOR.plugins.cssanim.pendingChanges = []; + }, +// onHide: function () { +// //console.log("ON HIDE CSSANIM ..............."); +// }, + onCancel: function () { + //console.log("ON CANCEL CSSANIM ..............."); + if (CKEDITOR.plugins.cssanim.managePending) { + // need to cancel changes on pending elements + //console.log("ON CANCEL CSSANIM PENDING ELEMENTS ============== ", CKEDITOR.plugins.cssanim.pendingChanges); + var i, obj; + // for(i = 0; i < CKEDITOR.plugins.cssanim.pendingChanges.length; i+=1 ) { + for (i = CKEDITOR.plugins.cssanim.pendingChanges.length - 1; i >= 0; i -= 1) { + //console.log("To Be Canceled:", CKEDITOR.plugins.cssanim.pendingChanges[i][0], CKEDITOR.plugins.cssanim.pendingChanges[i][1]); + obj = JSON.parse(CKEDITOR.plugins.cssanim.pendingChanges[i][1]); + //console.log("To Be Canceled:", obj); + CKEDITOR.plugins.cssanim.restoreAnimOnElemById(CKEDITOR.plugins.cssanim.pendingChanges[i][0], obj); + } + CKEDITOR.plugins.cssanim.pendingChanges = []; + } + // restore initial css file + if (editor.config.customCssFilePath !== this.initialCssFile) { + var form = this.getContentElement('tab-parameters-box', 'parametersSettings'); + var el = document.getElementById(form.domId); + var divRes = el.querySelector("#cssResultsDiv"); + divRes.parentElement.elements["cssName"].value = this.initialCssFile.trim(); + CKEDITOR.plugins.cssanim.getCustomCss(el); + } + this.foreach(function (widget) { +// // Make sure IE triggers "change" event on last focused input before closing the dialog. (#7915) +// if (CKEDITOR.env.ie && (this._.currentFocusIndex === widget.focusIndex)) { +// widget.getInputElement().$.blur(); +// } + if (widget.cancel) { + widget.cancel.apply(widget); + } + }); + } + }; +}); \ No newline at end of file diff --git a/plugins/ckeditor4/cssanim/dialogs/cssanim.min.js b/plugins/ckeditor4/cssanim/dialogs/cssanim.min.js new file mode 100644 index 0000000..1741869 --- /dev/null +++ b/plugins/ckeditor4/cssanim/dialogs/cssanim.min.js @@ -0,0 +1 @@ +CKEDITOR.dialog.add("cssanimMainDialog",function(e){"use strict";function t(e){if("#"===e.substr(0,1))return e;var t=/(.*?)rgb\((\d+),\s*(\d+),\s*(\d+)\)/i.exec(e),a=parseInt(t[2],10).toString(16),n=parseInt(t[3],10).toString(16),i=parseInt(t[4],10).toString(16);return"#"+((1===a.length?"0"+a:a)+(1===n.length?"0"+n:n)+(1===i.length?"0"+i:i))}function a(e,t){var a="";a+="<form>",a+='<div style=" overflow: auto; height: 350px; padding-bottom: 10px; margin-bottom: 10px;">',a+="<table>";var n,i;for(n=0;n<t.length;n+=1)a+="<tr>",a+='<td style="width:280px;">',a+=t[n].toUpperCase(),a+="</td>",a+='<td style="text-align:center; width:80px;">',i="",e.indexOf(t[n])>=0&&(i="checked=checked"),a+=' <input type="checkbox" name="tags" '+i+' value="'+t[n]+'">',a+="</td>",a+="</tr>";return a+="</table>",a+="</div>",a+="</form>"}function n(){var a="",n=e.config.highlightBGColor;e.config.highlightBGColor.indexOf("rgb")>=0&&(n=t(e.config.highlightBGColor));var i=e.config.customCssFilePath;return a+="<form>",a+='<fieldset style="border-radius:10px">',a+='<legend style="font-weight:bold;">'+l.HBS+"</legend>",a+='<table style="width:300px;">',a+="<tr>",a+='<td style="width:250px;">',a+=l.HBGC,a+="</td>",a+="<td>",a+='<input style="width:50px; height:25px; " type="color" name="HLBgColor" value="'+n+'" onchange="CKEDITOR.plugins.cssanim.setHighLightBgColor(this.value)">',a+="</td>",a+="</tr>",a+="<tr>",a+="<td>",a+=l.HBW,a+="</td>",a+='<td style="padding:2px;">',a+='<input style="width:40px; border: 1px solid #ccc;" name="width" type="number" min="1" max="10" onchange="CKEDITOR.plugins.cssanim.setHighLightBorder(this.value)" value="'+parseInt(e.config.highlightBorder)+'"> px',a+="</td>",a+="</tr>",a+="</table>",a+="</fieldset>",a+="<br>",a+='<fieldset style="border-radius:10px">',a+='<legend style="font-weight:bold;">'+l.CustomCSS+"</legend>",a+='<table style="width:300px;">',a+="<tr>",a+='<td style="width:50px;">',a+=l.cssPath+" ",a+="</td>",a+='<td style="width:250px;">',a+='<input type="text" style="width:400px; border: 1px solid #ccc;" name="cssName" value='+i+">",a+="</td>",a+="</tr>",a+="<tr>",a+='<td colspan="2" style="text-align:center; padding-top: 8px;color: tomato;">',a+=l.cssInfo,a+="</td>",a+="</tr>",a+="</table>",a+="</fieldset>",a+='<div id="cssResultsDiv" style="margin-top:10px; padding:5px; text-align: center; border: #ccc solid 1px; display:none;">',a+="test",a+="</div>",a+="</form>"}function i(t){var a,n,i,s=l.irrelevant,o=t.getContentElement("tab-parameters-box","parametersSettings").getElement().getElementsByTag("input");for(i=0;i<o.count();i+=1)if(n=o.getItem(i).getNameAtt(),"HLBgColor"===n){a=o.getItem(i).getValue();break}var g,r='<th style="border: 1px solid gray; text-align:center; padding:5px; font-weight:bold; background-color: lightgray;">',m='<td style="border: 1px solid gray; text-align:center; padding:5px;',d=CKEDITOR.plugins.cssanim.getAllAnimElem(e),c=l.noElements,b="";b+='<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;"></div>',b+='<p style="text-align: center; padding: 5px; color: grey; font-weight:bold;">',b+='<span style="color: LightSkyBlue; font-weight:bold;">'+l.animFromDef+"</span>",b+='<br><span style="color: cornflowerblue; font-weight:bold;">'+l.animPause+"</span>",b+='<br><span style="color: PaleGreen; font-weight:bold;">'+l.animFromCustom+"</span>",b+='<br><span style="color: orange; font-weight:bold;">'+l.animBoth+"</span>",b+='<br><span style="color: Red; font-weight:bold;">'+l.animUndef+"</span>",b+="<br>",b+="</p>",b+='<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;"></div>',b+='<p style="text-align: center; padding: 5px; color: grey; font-weight:bold;">',b+=l.dblClick,b+="</p>",b+='<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;margin-bottom: 10px;"></div>',b+='<div style=" width: 600px; overflow: auto; height: 400px;">',b+="<table>",b+="<tr>",b+=r+"Tag</th>",b+=r+"Id</th>",b+=r+"OnLoad</th>",b+=r+"OnClick</th>",b+=r+"OnOver</th>",b+=r+l.ral+"</th>",b+="</tr>";var h,u,p,v,f,C=0,A="azure;";for(f in d)d.hasOwnProperty(f)&&(v=d[f],s=l.irrelevant,g='">',C+=1,A="azure",h=v.elem.nodeName.toLowerCase(),e.config.allowedTags.indexOf(h)<0&&(A="MistyRose"),b+='<tr style="background-color:'+A+';" ',b+=" onmouseover=\"this.style.backgroundColor='"+a+"'; CKEDITOR.plugins.cssanim.runHighLightElemById('"+v.elem.id+"'); \"",b+=" onmouseout=\"this.style.backgroundColor='"+A+"'; CKEDITOR.plugins.cssanim.cleanHighlight();\"",b+=" ondblclick=\" CKEDITOR.plugins.cssanim.runAddAnimDialogById('"+v.elem.id+"')\"",b+=" >",b+=m+g,b+=v.elem.nodeName,b+="</td>",b+=m+g,b+=v.elem.id,b+="</td>",g='">',v.cds?(u=v.cds.replace("{animation:","").replace("}","").replace(";","").trim(),p=parseCSS3AnimationShorthand(u),s=v.ral?"YES":"NO",p.name&&(g="cssAnimPause"===p.name?' background-color:cornflowerblue;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsConflict&&t.availableAnimsObj.allAvailableAnimsConflict.indexOf(p.name)>=0?' background-color:orange;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCustom&&t.availableAnimsObj.allAvailableAnimsCustom.indexOf(p.name)>=0?' background-color:PaleGreen;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCssAnim&&t.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(p.name)>=0?' background-color:LightSkyBlue;">':' background-color:Red;">'),b+=m+g):(p={},p.name="",b+=m+g),b+=p.name,b+="</td>",g='">',v.cdc?(v.cdc.indexOf("animation-play-state")>=0?p={name:"cssAnimPause",duration:null,timingFunction:"linear",delay:0,iterationCount:1,direction:"normal"}:(u=v.cdc.replace("{animation:","").replace("}","").replace(";","").trim(),p=parseCSS3AnimationShorthand(u)),p.name&&(g="cssAnimPause"===p.name?' background-color:cornflowerblue;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsConflict&&t.availableAnimsObj.allAvailableAnimsConflict.indexOf(p.name)>=0?' background-color:orange;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCustom&&t.availableAnimsObj.allAvailableAnimsCustom.indexOf(p.name)>=0?' background-color:PaleGreen;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCssAnim&&t.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(p.name)>=0?' background-color:LightSkyBlue;">':' background-color:Red;">'),b+=m+g):(p={},p.name="",b+=m+g),b+=p.name,b+="</td>",g='">',v.cdo?(v.cdo.indexOf("animation-play-state")>=0?p={name:"cssAnimPause",duration:null,timingFunction:"linear",delay:0,iterationCount:1,direction:"normal"}:(u=v.cdo.replace("{animation:","").replace("}","").replace(";","").trim(),p=parseCSS3AnimationShorthand(u)),p.name&&(g="cssAnimPause"===p.name?' background-color:cornflowerblue;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsConflict&&t.availableAnimsObj.allAvailableAnimsConflict.indexOf(p.name)>=0?' background-color:orange;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCustom&&t.availableAnimsObj.allAvailableAnimsCustom.indexOf(p.name)>=0?' background-color:PaleGreen;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCssAnim&&t.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(p.name)>=0?' background-color:LightSkyBlue;">':' background-color:Red;">'),b+=m+g):(p={},p.name="",b+=m+g),b+=p.name,b+="</td>",g='">',b+=m+g,b+=s,b+="</td>",b+="</tr>");return C>0&&(b+="</table>",b+="</div>",b+='<div style="height: 6px;"></div>',c=b),c}var l=e.lang.cssanim;return{title:e.lang.cssanim.genProperties,minWidth:550,width:550,minHeight:250,height:250,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"tab-doc-animations",label:l.docAnim,elements:[{type:"html",id:"allAnimations",html:""}]},{id:"tab-allowed-tags",label:l.allowedTags,elements:[{type:"html",id:"allowedTags",allowedTags:null,html:"",setup:function(){this.allowedTags=e.config.allowedTags},cancel:function(){e.config.allowedTags=this.allowedTags;var t,a=this.getElement().getElementsByTag("input");for(t=0;t<a.count();t+=1)a.getItem(t).$.checked=e.config.allowedTags.indexOf(a.getItem(t).$.value)<0?!1:!0},commit:function(){var t,a=this.getElement().getElementsByTag("input");for(e.config.allowedTags=[],t=0;t<a.count();t+=1)a.getItem(t).$.checked&&e.config.allowedTags.push(a.getItem(t).$.value)}}]},{id:"tab-parameters-box",label:l.advSettings,elements:[{type:"html",id:"parametersSettings",html:"",bg:"",bw:0,pad:0,setup:function(){var e,t,a=this.getElement().getElementsByTag("input");for(t=0;t<a.count();t+=1)e=a.getItem(t).$.name,"HLBgColor"===e?this.bg=a.getItem(t).$.value:"width"===e&&(this.bw=a.getItem(t).$.value)},commit:function(){var t,a,n=this.getElement().getElementsByTag("input");for(a=0;a<n.count();a+=1)t=n.getItem(a).$.name,"HLBgColor"===t?e.config.highlightBGColor=n.getItem(a).$.value:"width"===t?e.config.highlightBorder=n.getItem(a).$.value+"px":"cssName"===t&&this.getDialog().initialCssFile!==n.getItem(a).$.value&&CKEDITOR.plugins.cssanim.getCustomCss(n.getItem(a).$.value)},cancel:function(){var t,a,n=this.getElement().getElementsByTag("input");for(a=0;a<n.count();a+=1)t=n.getItem(a).$.name,"HLBgColor"===t?(n.getItem(a).$.value=this.bg,e.config.highlightBGColor=this.bg):"width"===t&&(n.getItem(a).$.value=this.bw,e.config.highlightBorder=this.bw+"px")}}]}],onLoad:function(){CKEDITOR.plugins.cssanim.setCssAnimDialog(this),this.initialCssFile="";var t,l;t=this.getContentElement("tab-doc-animations","allAnimations").domId,l=document.getElementById(t),l.innerHTML=i(this),t=this.getContentElement("tab-allowed-tags","allowedTags").domId,l=document.getElementById(t),l.innerHTML=a(e.config.allowedTags,e.config.onLoadAllowedTags),t=this.getContentElement("tab-parameters-box","parametersSettings").domId,l=document.getElementById(t),l.innerHTML=n(),this.on("selectPage",function(t){var l,s,o;"tab-allowed-tags"===t.data.currentPage&&(l=t.sender.getContentElement("tab-allowed-tags","allowedTags"),l.commit()),"tab-doc-animations"===t.data.page?(l=t.sender.getContentElement("tab-doc-animations","allAnimations").domId,s=document.getElementById(l),s.innerHTML=i(this)):"tab-allowed-tags"===t.data.page?(l=t.sender.getContentElement("tab-allowed-tags","allowedTags").domId,s=document.getElementById(l),s.innerHTML=a(e.config.allowedTags,e.config.onLoadAllowedTags)):"tab-parameters-box"===t.data.page&&(o=t.sender.getContentElement("tab-parameters-box","parametersSettings"),l=o.domId,s=document.getElementById(l),s.innerHTML=n())})},onShow:function(){this.setupContent();var t=this.getContentElement("tab-parameters-box","parametersSettings"),a=t.domId,n=document.getElementById(a);e.config.customCssFilePath!==this.initialCssFile&&(CKEDITOR.plugins.cssanim.getCustomCss(n),this.initialCssFile=e.config.customCssFilePath),this.availableAnimsObj=CKEDITOR.plugins.cssanim.getAvailableAnims(),this.hidePage("tab-doc-animations"),this.showPage("tab-doc-animations"),this.selectPage("tab-doc-animations"),CKEDITOR.plugins.cssanim.cleanHighlight()},onOk:function(){this.commitContent(),CKEDITOR.plugins.cssanim.pendingChanges=[]},onCancel:function(){if(CKEDITOR.plugins.cssanim.managePending){var t,a;for(t=CKEDITOR.plugins.cssanim.pendingChanges.length-1;t>=0;t-=1)a=JSON.parse(CKEDITOR.plugins.cssanim.pendingChanges[t][1]),CKEDITOR.plugins.cssanim.restoreAnimOnElemById(CKEDITOR.plugins.cssanim.pendingChanges[t][0],a);CKEDITOR.plugins.cssanim.pendingChanges=[]}if(e.config.customCssFilePath!==this.initialCssFile){var n=this.getContentElement("tab-parameters-box","parametersSettings"),i=document.getElementById(n.domId),l=i.querySelector("#cssResultsDiv");l.parentElement.elements.cssName.value=this.initialCssFile.trim(),CKEDITOR.plugins.cssanim.getCustomCss(i)}this.foreach(function(e){e.cancel&&e.cancel.apply(e)})}}}); \ No newline at end of file diff --git a/plugins/ckeditor4/cssanim/icons/cssanim.png b/plugins/ckeditor4/cssanim/icons/cssanim.png new file mode 100644 index 0000000000000000000000000000000000000000..a10ed886a839eb20382a00f9a429cefe70d807d0 GIT binary patch literal 1776 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 S>G4wl0000<MNUMnLSTY1k!leD literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/cssanim/images/add.png b/plugins/ckeditor4/cssanim/images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..c77063a123f6915b12874b9f09589d64bc38487e GIT binary patch literal 8388 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 a{Qn0fnYv2-W^x$-0000<MNUMnLSTYtOEo6| literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/cssanim/images/del.png b/plugins/ckeditor4/cssanim/images/del.png new file mode 100644 index 0000000000000000000000000000000000000000..51c4ed0c1177dd6ae193ba818767de712b2e0481 GIT binary patch literal 12056 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 X8EE+<N85ttcn91vw76M)-3|SJvtEPw literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/cssanim/images/edit.png b/plugins/ckeditor4/cssanim/images/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..6ffe6f3951ce37cefcb93c0412a7074873cc7ffd GIT binary patch literal 4046 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 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/cssanim/images/highlight.png b/plugins/ckeditor4/cssanim/images/highlight.png new file mode 100644 index 0000000000000000000000000000000000000000..572da7761a0ebfea2770e87e34a830e720f9ad56 GIT binary patch literal 18537 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 XpJ(pAv1uQa0s(iH*UoD$L8t!&G|PB^ literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/cssanim/images/lamp.png b/plugins/ckeditor4/cssanim/images/lamp.png new file mode 100644 index 0000000000000000000000000000000000000000..97ea73488a4a7fc12f4d1367bdf1428fae0d3648 GIT binary patch literal 7547 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 RVS4}o002ovPDHLkV1nBhR;K^} literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/cssanim/lang/en.js b/plugins/ckeditor4/cssanim/lang/en.js new file mode 100644 index 0000000..f6327eb --- /dev/null +++ b/plugins/ckeditor4/cssanim/lang/en.js @@ -0,0 +1,62 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('cssanim', 'en', { + userGuide: 'CKEditor User\'s Guide', + // + genProperties: 'CSS Animations General Properties', + editAnimsTitle : 'CSS Animations Edition', + HighLight : 'OutLine', + AddAnimations : 'Add Animations', + EditAnimations : 'Edit Animations', + RemoveAnimations : 'Remove All Animations', + warningOverride : '(Warning, this rule override an existing rule in cssAnim.css)', + animationFound : 'Animations Rules found in CSS', + noAnimationFound : 'No Animations Rules found in CSS', + errorLoadingFile : 'Error loading file :', + loadStatus : 'Status : ', + specFile : 'The specified CSS file :', + fileNotAvailable : ' is not available !!', + fileCannotAccess : 'Cannot access the CSS File', + fileSpecified : 'specified CSS file : ', + fileExtInvalid : ' has invalid extention (.css required) !', + testIt : 'Test It', + cssAnimPause : 'Pause OnLoad', + // + HBS : 'OutLine Box Settings', + HBGC : 'BackGround Color', + HBW : 'Border Width', + HBP : 'Padding', + CustomCSS : 'Custom CSS', + cssPath : 'Path ', + cssInfo : 'To remove any custom css, clear the path box<br>To change custom css, enter the css path in the the path box<br>(Any change of css file will require to close the form (OK Button) to be effective !!)', + irrelevant : 'irrelevant', + noElements : 'No Animations', + animFromDef : 'Animation from default CSS', + animPause : 'Special "Pause" Animation', + animFromCustom : 'Animation from custom CSS', + animBoth : 'Animation defined in both default and custom CSS (may not work correctly)', + animUndef : 'Animation not defined in any CSS (may not work)', + dblClick : 'Double click on a line to edit animations', + ral : 'Remove After Load', + yes : 'YES', + no : 'NO', + docAnim : 'Document Animations', + allowedTags : 'Allowed Tags', + advSettings : 'Advanced Settings', + // + none : 'NONE', + name : 'Name', + duration : 'Duration', + tFunc : 'Timing Function', + delay : 'Delay', + iter : 'Iteration', + direction : 'Direction', + ralTitle : 'If not checked, this animation 
will be set as \'initial\' state transition and 
will happen after completion of any 
other \'click\' or \'hover\' transitions', + forStr : 'for', + pbOnClickPause : 'Error, Cannot set this animation to "none" as "OnClick" animation is "Pause OnLoad"', + pbOnOverPause : 'Error, Cannot set this animation to "none" as "OnOver" animation is "Pause OnLoad"', + pbOnClickOnLoadNone : 'Error, Cannot set this animation to "Pause OnLoad" as "OnLoad" animation is "none"', + pbOnOverOnLoadNone : 'Error, Cannot set this animation to "Pause OnLoad" as "OnLoad" animation is "none"' +} ); diff --git a/plugins/ckeditor4/cssanim/lang/fr.js b/plugins/ckeditor4/cssanim/lang/fr.js new file mode 100644 index 0000000..4935aba --- /dev/null +++ b/plugins/ckeditor4/cssanim/lang/fr.js @@ -0,0 +1,62 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('cssanim', 'fr', { + userGuide: 'CKEditor User\'s Guide', + // + genProperties: 'CSS Animations Propri\351t\351s G\351n\351rales', + editAnimsTitle : 'CSS Animations Edition', + HighLight : 'Surligner', + AddAnimations : 'Ajouter Animations', + EditAnimations : 'Editer Animations', + RemoveAnimations : 'Supprimer toutes les Animations', + warningOverride : '(Attention, r\350gle en conflit avec une r\350gle de cssAnim.css)', + animationFound : 'Animations trouv\351es dans le CSS', + noAnimationFound : 'Aucune animations trouv\351es dans le CSS', + errorLoadingFile : 'Erreur de chargement :', + loadStatus : 'Statut : ', + specFile : 'Le fichier CSS sp\351cifi\351 :', + fileNotAvailable : ' n\'existe pas !!', + fileCannotAccess : 'Cannot access the CSS File', + fileSpecified : 'Fichier CSS : ', + fileExtInvalid : ' a une extension incorrecte (.css requis) !', + testIt : 'Aper\347u', + cssAnimPause : 'Pause OnLoad', + // + HBS : 'Param\350tres du surlignement', + HBGC : 'Couleur de fond', + HBW : 'Largeur du bord', + HBP : 'Marge int\351rieure', + CustomCSS : 'CSS Propri\351taire', + cssPath : 'Chemin d\'acc\350s', + cssInfo : 'Pour supprimer le CSS entrer un chemin vide.<br>Pour changer le CSS, entrer le nouveau chemin d\'acc\350s<br>(Tout changement impose de fermer le menu (bouton OK) pour enregistrer la mofification !!)', + irrelevant : 'hors de propos', + noElements : 'Aucune Animation', + animFromDef : 'Animation d\351finie dans le CSS par d\351faut', + animPause : 'Animation Sp\315ciale "Pause"', + animFromCustom : 'Animation d\351finie dans le CSS propri\351taire', + animBoth : 'Animation d\351finie dans plusieurs CSS (peut ne pas fonctionner)', + animUndef : 'Animation d\351finie dans aucun CSS (peut ne pas fonctionner)', + dblClick : '\'double-cliquez\' une des lignes pour \351diter l\'animation', + ral : 'Supprimer apr\350s le chargement', + yes : 'OUI', + no : 'NON', + docAnim : 'Animations du document', + allowedTags : 'Tags autoris\351s', + advSettings : 'Param\350tres Avanc\350s', + // + none : 'AUCUNE', + name : 'Nom', + duration : 'Dur\351e', + tFunc : 'Effet de Timing', + delay : 'D\351lai', + iter : 'It\351ration', + direction : 'Direction', + ralTitle : 'Si non coch\351e, cette animation sera l\'animation \351x\351cut\351e pour arriver \340 l\'\351tat initial 
 elle se produira donc apr\350s le chargement, 
 et apr\350s n\'importe quelle autre transition \'clic\' ou \'hover\'', + forStr : 'pour', + pbOnClickPause : 'Erreur, Impossible de mettre cette animation a "none" car l\'animation "OnClick" est "Pause OnLoad"', + pbOnOverPause : 'Erreur, Impossible de mettre cette animation a "none" car l\'animation "OnOver" est "Pause OnLoad"', + pbOnClickOnLoadNone : 'Erreur, Impossible de mettre cette animation a "Pause OnLoad" car l\'animation "OnLoad" est "none"', + pbOnOverOnLoadNone : 'Erreur, Impossible de mettre cette animation a "Pause OnLoad" car l\'animation "OnLoad" est "none"' +} ); diff --git a/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.js b/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.js new file mode 100644 index 0000000..55e625d --- /dev/null +++ b/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.js @@ -0,0 +1,61 @@ +/** + * parseCSS3AnimationShorthand + * Parses a CSS3 Animation statement into an object. + * http://www.joelambert.co.uk + * + * Copyright 2011, Joe Lambert. + * Free to use under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + * + * e.g. parseCSS3AnimationShorthand('boxRotate 600ms linear 2s'); + */ +"use strict"; +window.parseCSS3AnimationShorthand = function (statement) { + var props = { + name: null, + duration: null, + timingFunction: 'ease', + delay: 0, + iterationCount: 1, + direction: 'normal' + }, + remainder = statement, + ms, t, fn, r, f, i, d; + /* -- Get duration/delay -- */ + // Convert strings times in s or ms to ms integers + ms = function (t) { + return t.indexOf('ms') > -1 ? parseInt(t, 10) : parseInt(t, 10) * 1000; + }; + t = statement.match(/[0-9]+m?s/g); + if (t) { + props.duration = t.length > 0 ? ms(t[0]) : props.duration; + props.delay = t.length > 1 ? ms(t[1]) : props.delay; + // Remove the found properties from the string + remainder = remainder.replace(t[0], ''); // Replace the original found string not the cleansed one + } + /* -- Get timing function -- */ + fn = ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out']; + r = new RegExp('(' + fn.join('(\\s|$)|').replace('-', '\-') + '|cubic-bezier\\(.*?\\))'); + f = statement.match(r); + if (f) { + props.timingFunction = f.length > 0 ? f[0].replace(/\s+/g, '') : props.timingFunction; + remainder = remainder.replace(props.timingFunction, ''); + } + /* -- Get iteration count -- */ + i = statement.match(/(infinite|\s[0-9]+(\s|$))/); + if (i) { + props.iterationCount = i[0].replace(/\s+/g, ''); + remainder = remainder.replace(i[0], ''); + } + /* -- Get direction -- */ + d = statement.match(/(normal|alternate)\s*$/); + if (d) { + props.direction = d[0].replace(/\s+/g, ''); + remainder = remainder.replace(d[0], ''); + } + remainder = remainder.split(' '); + if (remainder.length > 0) { + props.name = remainder[0]; + } + return props; +}; \ No newline at end of file diff --git a/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.min.js b/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.min.js new file mode 100644 index 0000000..aee87cc --- /dev/null +++ b/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.min.js @@ -0,0 +1 @@ +"use strict";window.parseCSS3AnimationShorthand=function(e){var n,t,i,a,r,l,c,o={name:null,duration:null,timingFunction:"ease",delay:0,iterationCount:1,direction:"normal"},s=e;return n=function(e){return e.indexOf("ms")>-1?parseInt(e,10):1e3*parseInt(e,10)},t=e.match(/[0-9]+m?s/g),t&&(o.duration=t.length>0?n(t[0]):o.duration,o.delay=t.length>1?n(t[1]):o.delay,s=s.replace(t[0],"")),i=["linear","ease","ease-in","ease-out","ease-in-out"],a=new RegExp("("+i.join("(\\s|$)|").replace("-","-")+"|cubic-bezier\\(.*?\\))"),r=e.match(a),r&&(o.timingFunction=r.length>0?r[0].replace(/\s+/g,""):o.timingFunction,s=s.replace(o.timingFunction,"")),l=e.match(/(infinite|\s[0-9]+(\s|$))/),l&&(o.iterationCount=l[0].replace(/\s+/g,""),s=s.replace(l[0],"")),c=e.match(/(normal|alternate)\s*$/),c&&(o.direction=c[0].replace(/\s+/g,""),s=s.replace(c[0],"")),s=s.split(" "),s.length>0&&(o.name=s[0]),o}; \ No newline at end of file diff --git a/plugins/ckeditor4/cssanim/plugin.js b/plugins/ckeditor4/cssanim/plugin.js new file mode 100644 index 0000000..f4217af --- /dev/null +++ b/plugins/ckeditor4/cssanim/plugin.js @@ -0,0 +1,1049 @@ +/** + * Copyright (c) 2014, CKSource - Frederico Knabben. All rights reserved. + * Licensed under the terms of the MIT License (see LICENSE.md). + * + * Plugin to add CSS animations on elements into the CKEditor editing area. + * + */ +/* +JSLint Global variables : +CKEDITOR +console +editor +document +navigator +alert +CSSRule +XMLHttpRequest +parseCSS3AnimationShorthand +window +lang +setTimeout + */ +/* Default Tags (the one I selected from html5 standard) + * Inline html tags elements + * <img> <span> <button> <label> + * Block html tags elements + * <div> <figure> <form> <h1> <h2> <h3> <h4> <h5> <h6> <p> <section> <video> + * <tr> <td> + */ +// css = cssSelectorStart +// cds = cssDefStart +// cso = cssSelectorOver +// cdo = cssDefOver +// csc = cssSelectorClick +// cdc = cssDefClick +// ral = css Remove after Load flag +(function () { + "use strict"; + + var allowedAnimsDef = {}; + allowedAnimsDef.BOUNCE = ['bounce', 'bounceIn', 'bounceInDown', 'bounceInLeft', 'bounceInRight', 'bounceInUp', 'bounceOut', 'bounceOutDown', 'bounceOutLeft', 'bounceOutRight', 'bounceOutUp']; + allowedAnimsDef.FADE = ['fadeIn', 'fadeInDown', 'fadeInDownBig', 'fadeInLeft', 'fadeInLeftBig', 'fadeInRight', 'fadeInRightBig', 'fadeInUp', 'fadeInUpBig', 'fadeOut', 'fadeOutDown', 'fadeOutDownBig', 'fadeOutLeft', 'fadeOutLeftBig', 'fadeOutRight', 'fadeOutRightBig', 'fadeOutUp', 'fadeOutUpBig']; + allowedAnimsDef.FLIP = ['flip', 'flipInX', 'flipInY', 'flipOutX', 'flipOutY']; + allowedAnimsDef.ROTATE = ['rotate', 'rotateIn', 'rotateInDownLeft', 'rotateInDownRight', 'rotateInUpLeft', 'rotateInUpRight', 'rotateOut', 'rotateOutDownLeft', 'rotateOutDownRight', 'rotateOutUpLeft', 'rotateOutUpRight', 'rotateRound']; + allowedAnimsDef.SLIDE = ['slideInDown', 'slideInLeft', 'slideInRight', 'slideInUp', 'slideOutDown', 'slideOutLeft', 'slideOutRight', 'slideOutUp']; + allowedAnimsDef.ZOOM = ['zoomIn', 'zoomInDown', 'zoomInLeft', 'zoomInRight', 'zoomInUp', 'zoomOut', 'zoomOutDown', 'zoomOutLeft', 'zoomOutRight', 'zoomOutUp']; + allowedAnimsDef.OTHER = ['flash', 'hinge', 'jello', 'lightSpeedIn', 'lightSpeedOut', 'pulse', 'rollIn', 'rollOut', 'rubberBand', 'shake', 'swing', 'tada', 'wobble']; + + var allowedTagsDef = ['img', 'span', 'button', 'label', 'div', 'figure', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'section', 'video', 'table', 'tr', 'td']; + +// function getBrowser() { +// var browserName; +// var nAgt = navigator.userAgent; +// var verOffset; +//// console.log(navigator); +// if ((verOffset=nAgt.indexOf("OPR/"))!=-1) { +// browserName = "Opera"; +// } else if ((verOffset=nAgt.indexOf("Opera"))!=-1) { +// browserName = "Opera"; +// } else if ((verOffset=nAgt.indexOf("Maxthon"))!=-1) { +// browserName = "Maxthon"; +// } else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) { +// browserName = "Microsoft Internet Explorer"; +// } else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) { +// browserName = "Chrome"; +// } else if ((verOffset=nAgt.indexOf("Safari"))!=-1) { +// browserName = "Safari"; +// } else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) { +// browserName = "Firefox"; +// } else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) { +// browserName = nAgt.substring(nameOffset,verOffset); +// if (browserName.toLowerCase()==browserName.toUpperCase()) { +// browserName = navigator.appName; +// } +// } +// return browserName; +// } + + function removeDomainFromUrl(string) { + var str = string.replace(/^https?:\/\/[^\/]+/i, ''); + return str; + } +// var highLightedElem = null; + //var highLightedElemBG = ""; + var animClassPrefix = "ckAnimClass_"; + var animScriptTitle = "_ckAnimScript_"; +// var idCnt = -1; +// var cssAnimationObject = {}; + var customCssScriptTitle = "_ckAnimCustomCss_"; + var customCssFile = ""; + + function myGetNamedItem(elm, name) { + var i; + if (elm.namedItem) { + return elm.namedItem(name); + } else { + for (i=0;i<elm.length;i++) { + if (elm.item(i).name == name) { + return elm.item(i); + } + } + return null; + } + alert ("Your browser doesn't support item or namedItem method."); + } + function generateUUID() { + var d = new Date().getTime(); +// var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var uuid = 'xxxyyxxxxyyx'.replace(/[xy]/g, function(c) { + var r = (d + Math.random()*16)%16 | 0; + d = Math.floor(d/16); + return (c=='x' ? r : (r&0x7|0x8)).toString(16); + }); + return uuid; + } + function cmdHighLightTagElem(elem) { + return { + // It applies to a "block-like" context. + // requiredContent: elem, + exec: function () { + CKEDITOR.plugins.cssanim.runHighLightElem(elem); + } + }; + } + + function cmdAddAnimTagElem(elem) { + return { + exec: function (editor) { + CKEDITOR.plugins.cssanim.runAddAnimDialog(editor, elem); + } + }; + } + + function cmdEditAnimTagElem(elem) { + return { + exec: function (editor) { + CKEDITOR.plugins.cssanim.runEditAnimDialog(editor, elem); + } + }; + } + + function cmdRemoveAnimTagElem(elem) { + return { + exec: function () { + CKEDITOR.plugins.cssanim.runRemoveAnimElem(elem); + } + }; + } + + // Add left menu items for all html tags / leements from selected to top + function addMenusItemsPath(rootPath, editor, element, path) { + var elementsFound = false; + var i; + var elem; + var tag; + var subMenus; + var lang = editor.lang.cssanim; + +// console.log("addMenusItemsPath path:", path.length, path); + if (!element || element.isReadOnly()) { + return elementsFound; + } + for (i = 0; i < path.length; i += 1) { + elem = path[i]; + tag = elem.getName().toLowerCase(); + if (editor.config.allowedTags.indexOf(tag) >= 0) { + elementsFound = true; + tag += i.toString(); + editor.addCommand('highlightTag' + tag, new CKEDITOR.command(editor, cmdHighLightTagElem(elem))); + editor.addCommand('addAnimTag' + tag, new CKEDITOR.command(editor, cmdAddAnimTagElem(elem))); + editor.addCommand('editAnimTag' + tag, new CKEDITOR.command(editor, cmdEditAnimTagElem(elem))); + editor.addCommand('removeAnimTag' + tag, new CKEDITOR.command(editor, cmdRemoveAnimTagElem(elem))); + //console.log("add command for :", tag); + subMenus = {}; + subMenus['highlightsubmenu' + tag] = { + label: lang.HighLight, + group: "highlightGroup", + command: 'highlightTag' + tag, + icon: rootPath + 'images/lamp.png', + order: 2 + }; + subMenus['addanimsubmenu' + tag] = { + label: lang.AddAnimations, + group: "highlightGroup", + command: 'addAnimTag' + tag, + icon: rootPath + 'images/add.png', + order: 3 + }; + subMenus['editanimsubmenu' + tag] = { + label: lang.EditAnimations, + group: "highlightGroup", + command: 'editAnimTag' + tag, + icon: rootPath + 'images/edit.png', + order: 4 + }; + subMenus['removeanimsubmenu' + tag] = { + label: lang.RemoveAnimations, + group: "highlightGroup", + command: 'removeAnimTag' + tag, + icon: rootPath + 'images/del.png', + order: 4 + }; + //console.log("addMenusItemsPath:", subMenus); + if (editor.addMenuItems) { + editor.addMenuItems(subMenus); + } + } + } + return elementsFound; + } + + function getItemsFunc() { + var obj = {}; + obj['highlightsubmenu' + this.tag] = CKEDITOR.TRISTATE_OFF; + //if (this.elem.data('animation') == null) { + if (this.elem.$.classList.toString().indexOf(animClassPrefix) < 0) { + obj['addanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_OFF; + obj['editanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_DISABLED; + obj['removeanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_DISABLED; + } else { + obj['addanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_DISABLED; + obj['editanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_OFF; + obj['removeanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_OFF; + } + //console.log("OBJ", obj); + return obj; + } + // Add listeners for menu items + function listeners(editor, element, path) { + //console.log("listeners:", path.length, path); + var nodes = {}; + var elem, tag, label, i; + if (!element || element.isReadOnly()) { + return null; + } + var menusItems = {}; + for (i = 0; i < path.length; i += 1) { + elem = path[i]; + tag = elem.getName().toLowerCase(); + label = tag.toUpperCase(); +// if (elem.dataset.ckeRealElementType === undefined) { + if (editor.config.allowedTags.indexOf(tag) >= 0) { + tag += i.toString(); + nodes['topMenu' + tag] = CKEDITOR.TRISTATE_OFF; + menusItems['topMenu' + tag] = { + label: label, + icon: CKEDITOR.basePath + 'plugins/cssanim/icons/cssanim.png', + group: 'highlightGroup', + tag: tag, + elem: elem, + order: 0, + getItems: getItemsFunc + }; + } +// } + } + editor.addMenuItems(menusItems); + return nodes; + } + // Register the plugin within the editor. + CKEDITOR.plugins.add('cssanim', { + // Register the icons. + lang: 'en,fr', + icons: 'cssanim', + requires: 'contextmenu', + // onLoad: function(editor) { + // //console.log("ON LOAD ------"); + // }, + beforeInit: function (/*editor*/) { + // add needed css files to editor + //console.log("BEFORE INIT --- ", editor, CKEDITOR.document); // 'bar' +// var brow = getBrowser(); + CKEDITOR.document.appendStyleSheet(CKEDITOR.basePath + 'plugins/cssanim/css/cssanim.css'); +// CKEDITOR.document.appendStyleSheet(CKEDITOR.basePath + 'plugins/cssanim/css/tabcontent.css'); + +// if ((brow !== 'Maxthon') && (brow !== 'Safari')) { +// CKEDITOR.document.appendStyleSheet(CKEDITOR.basePath + 'plugins/cssanim/css/tabcontentnotest.css'); +// } else { +// CKEDITOR.document.appendStyleSheet(CKEDITOR.basePath + 'plugins/cssanim/css/tabcontentnotest.css'); +// } + }, + afterInit: function (editor) { + //console.log("AFTER INIT --- ", editor); + var dataProcessor = editor.dataProcessor; + var htmlFilter = dataProcessor && dataProcessor.htmlFilter; +// dataFilter = dataProcessor && dataProcessor.dataFilter; +// if (dataFilter) { +// dataFilter.addRules({ +// }); +// } + if (htmlFilter) { + //console.log("htmlFilter:", htmlFilter); + htmlFilter.addRules({ + elements: { + $: function (element) { + //console.log("htmlFilter", element); + // Called for each element before generating the html output. + // If one element is highlighted, then remove the highlight style to avoid to push it in the created html + //if (element.attributes.class) { + if (element.hasClass('highlight_tag')) { + //console.log("htmlFilter -> element:", element); + //element.attributes.class = element.attributes.class.replace('highlight_tag', ''); + element.removeClass('highlight_tag'); + var style = new CKEDITOR.htmlParser.cssStyle(element.attributes.style); + style.rules["background-color"] = element.attributes['data-animation-bg']; + style.rules["outline"] = element.attributes['data-animation-outline']; + element.attributes.style = style.toString(); + // reset highlight + delete element.attributes["data-animation-bg"]; + delete element.attributes["data-animation-outline"]; + } + //} + } + } + }); + } + }, + // The plugin initialization logic goes inside this method. + init: function (editor) { + //console.log("INIT ------", editor); + // Get Config & Lang + var lang = editor.lang.cssanim; + var rootPath = this.path, + defaultConfig = { + // default accepted tags, can be overriden by config file + acceptedTags: allowedTagsDef, + // default available animations, can be overriden by config file + acceptedAnimations: allowedAnimsDef, + highlightBGColor: '#87CEFA', + highlightBorder: '3px', + highlightPadding: '3px' + }; + var config = CKEDITOR.tools.extend(defaultConfig, editor.config.cssanim || {}, true); + editor.config.onLoadAllowedTags = config.acceptedTags.sort(); + editor.config.onLoadAllowedAnimations = config.acceptedAnimations; + + editor.config.allowedTags = editor.config.onLoadAllowedTags; // may be filtered in main dialog + editor.config.allowedAnimations = editor.config.onLoadAllowedAnimations; + editor.config.highlightBGColor = config.highlightBGColor; // may be changed in main dialog + editor.config.highlightBorder = config.highlightBorder; // may be changed in main dialog + editor.config.highlightPadding = config.highlightPadding; // may be changed in main dialog + editor.config.customCssFilePath = config.customCssFilePath; // may be changed in main dialog + // + // Functions + // + // Define an editor command that opens our dialog window. + var cssanimAddAnim = new CKEDITOR.dialogCommand('cssanimAddAnimDialog'); + editor.addCommand('_myLaunchAddAnimDialog', cssanimAddAnim); + var cssanimMain = new CKEDITOR.dialogCommand('cssanimMainDialog', { + // Allow ckAnimClass class with data-aniomation attributes. + // Addinionaly allowed 'button' and 'span' (as they seems to be filtered by ckeditor default) + allowedContent: 'button;span;div{*};*[id,data-animation*](ckAnimClass*)' + }); + editor.addCommand('cssanim', cssanimMain); + // Create a toolbar button that executes the above command. + editor.ui.addButton('cssanim', { + // The text part of the button (if available) and the tooltip. + label: lang.genProperties, + // The command to execute on click. + command: 'cssanim', + // The button placement in the toolbar (toolbar group name). + toolbar: 'insert' + }); + editor.addMenuGroup('highlightGroup', 200); + if (editor.contextMenu) { + // Add a context menu group with the Edit cssanimeviation item. + editor.addMenuGroup('cssanimGroup'); + editor.contextMenu.addListener(function (element /*, selection*/) { + //console.log("SELECTION", element, selection); + var path = CKEDITOR.plugins.cssanim.getPathToTop(element); + //console.log("PATH TO TOP", path); + var foundSome = addMenusItemsPath(rootPath, editor, element, path); + if (foundSome === true) { + return listeners(editor, element, path); + } else { + return null; + } + }); + } + // Register our dialog file -- this.path is the plugin folder path. + CKEDITOR.dialog.add('cssanimMainDialog', this.path + 'dialogs/cssanim.min.js'); + CKEDITOR.dialog.add('cssanimAddAnimDialog', this.path + 'dialogs/cssaddanim.min.js'); + editor.on('contentDom', function (/*e*/) { + // Ini document editor + CKEDITOR.plugins.cssanim.init(editor); + if (editor.config.customCssFilePath) { + CKEDITOR.plugins.cssanim.getCustomCss(editor.config.customCssFilePath); + } + }); + editor.on('toHtml', function (evt) { + //console.log("ON toHtml 10"); + // Called when loading the html inside the text area + var key; + var source, re, m; + // Here we remove the javascript function removeAnimation(event) + // The function will be re-created if needed + for (key in evt.data.dataValue.children) { + if (evt.data.dataValue.children[key].type === CKEDITOR.NODE_COMMENT) { + if ((evt.data.dataValue.children[key].value.indexOf(animScriptTitle) >= 0) || (evt.data.dataValue.children[key].value.indexOf(customCssScriptTitle) >= 0)) { + if (evt.data.dataValue.children[key].value.indexOf(customCssScriptTitle) >= 0) { + // A custom CSS file was defined, So init the correct values fot it !! + source = decodeURIComponent(evt.data.dataValue.children[key].value.replace(/^\{cke_protected\}/, '')); + re = /^.*(customCss\.setAttribute\("href",)(.*)\);customCss(.*)/; + //if ((m = re.exec(source)) !== null) { + m = re.exec(source); + if (m !== null) { + if (m.index === re.lastIndex) { + re.lastIndex += 1; + } + //console.log("==================", m[2]); + editor.config.customCssFilePath = m[2]; + editor.config.customCssFilePath = editor.config.customCssFilePath.replace(/"/gi, ''); + editor.config.customCssFilePath = editor.config.customCssFilePath.trim(); + //console.log("==================", editor.config.customCssFilePath); + } + } + evt.data.dataValue.children[key].remove(); + } + } + } + }, null, null, 10); + editor.on('toDataFormat', function (evt) { + CKEDITOR.plugins.cssanim.cleanHighlight(); + var pluginPath = removeDomainFromUrl(CKEDITOR.plugins.get('cssanim').path); + var cssStr0 = "\""; + var rmFuncStr = ""; + var foundOneAnim = false; + var obj0; + var removeAfterLoadFunc = false; + var cssAnimationObject = CKEDITOR.plugins.cssanim.getAllAnimElem(); + + for (obj0 in cssAnimationObject) { + if (cssAnimationObject[obj0].css) { + foundOneAnim = true; + cssStr0 += cssAnimationObject[obj0].css; + cssStr0 += cssAnimationObject[obj0].cds; + if (cssAnimationObject[obj0].ral) { + // remove after Load flag is ON, create the javascript listener for end of animation + // and the javascript function to remove + removeAfterLoadFunc = true; + rmFuncStr += "document.getElementsByClassName('" + animClassPrefix + obj0 + "Start')[0].addEventListener('animationend', removeAnimation); "; + rmFuncStr += "document.getElementsByClassName('" + animClassPrefix + obj0 + "Start')[0].addEventListener('webkitAnimationEnd', removeAnimation); "; + } + // Debug staff + // rmFuncStr += "console.log('Added Anim for: ',document.getElementsByClassName('" + animClassPrefix + obj0 + "Start')[0]); "; + } + if (cssAnimationObject[obj0].cso) { + foundOneAnim = true; + cssStr0 += cssAnimationObject[obj0].cso; + cssStr0 += cssAnimationObject[obj0].cdo; + } + if (cssAnimationObject[obj0].csc) { + foundOneAnim = true; + cssStr0 += cssAnimationObject[obj0].csc; + cssStr0 += cssAnimationObject[obj0].cdc; + } + } + cssStr0 += "\""; + if (foundOneAnim || (customCssFile !== "")) { + // foud at least on animation or a custom defined css file, so put in in the generatde document + var removeAnimFunc = ""; + var s1 = window.location.href; + var s2 = s1.replace(s1.split("/").pop(),""); + var isAbsolute = new RegExp('^([a-z]+://|//)'); + if (removeAfterLoadFunc) { + // remove after Load flag is ON, createthe javascript function to remove the animation after completion + removeAnimFunc += "function removeAnimation(event) {"; +// removeAnimFunc += "console.log(\"Animation End: \", event);"; + removeAnimFunc += "var thisId = event.currentTarget.getAttribute('id');"; +// removeAnimFunc += "console.log(\"Animation End: \", thisId);"; + removeAnimFunc += "this.classList.remove('" + animClassPrefix + "'+thisId+'Start');"; + removeAnimFunc += "this.removeEventListener('animationend', removeAnimation);"; + removeAnimFunc += "}"; + } + var injectCssStr = 'var cssStyle = document.createElement("style");'; + var injectCssAnimStr = ''; + if (isAbsolute.test(customCssFile) === false) { + customCssFile = s2 + customCssFile; + } + if (foundOneAnim) { + // add prefixfree + var scriptPrefixFree = new CKEDITOR.htmlParser.element('script', { + src: pluginPath + 'css/prefixfree.min.js' + }); + evt.data.dataValue.add(scriptPrefixFree); + injectCssStr += 'cssStyle.innerHTML = ' + cssStr0 + ';'; + injectCssStr += 'document.getElementsByTagName("head")[0].appendChild(cssStyle);'; + injectCssAnimStr += 'var fileref = document.createElement("link");'; + injectCssAnimStr += 'fileref.setAttribute("rel", "stylesheet");'; + injectCssAnimStr += 'fileref.setAttribute("type", "text/css");'; + injectCssAnimStr += 'fileref.setAttribute("href", "' + pluginPath + 'css/cssanim.css");'; + injectCssAnimStr += 'document.getElementsByTagName("head")[0].appendChild(fileref);'; + } + if (customCssFile !== "") { + injectCssAnimStr += 'var customCss = document.createElement("link");'; + injectCssAnimStr += 'customCss.setAttribute("rel", "stylesheet");'; + injectCssAnimStr += 'customCss.setAttribute("type", "text/css");'; + injectCssAnimStr += 'customCss.setAttribute("href", "' + customCssFile + '");'; + injectCssAnimStr += 'customCss.setAttribute("title", "' + customCssScriptTitle + '");'; + injectCssAnimStr += 'document.getElementsByTagName("head")[0].appendChild(customCss);'; + } + var scriptAddCssAnimations = new CKEDITOR.htmlParser.element('script', { + title: animScriptTitle + }); + var cssAnimationsFunction = '\n' + "(function(){ " + removeAnimFunc + injectCssStr + injectCssAnimStr + rmFuncStr + "})();"; + scriptAddCssAnimations.setHtml(cssAnimationsFunction); + evt.data.dataValue.add(scriptAddCssAnimations); + } + }, null, null, 14); + } + }); + CKEDITOR.on('instanceReady', function (e) { + //console.log("---------------- CKEDITOR instanceReady ---------------"); + var head = document.getElementsByTagName("head")[0]; + var js = document.createElement('script'); + js.src = CKEDITOR.basePath + 'plugins/cssanim/parseCSS3AnimationShorthand.min.js'; + js.type = 'text/javascript'; + head.appendChild(js); + e.editor.document.$.addEventListener("contextmenu", function (/*event*/) { + //console.log("----------------------contextmenu--------------------------", event); + CKEDITOR.plugins.cssanim.cleanHighlight(); + }); + }); +// CKEDITOR.on('contentDom', function ( /*event*/ ) { +// //console.log("---------------- CKEDITOR contentDom ---------------"); +// }); +// CKEDITOR.on('loaded', function ( /*event*/ ) { +// //console.log("---------------- CKEDITOR loaded ---------------"); +// }); +// CKEDITOR.on('pluginsLoaded', function ( /*event*/ ) { +// //console.log("---------------- CKEDITOR pluginsLoaded ---------------"); +// }); + CKEDITOR.plugins.cssanim = { + ckEditor: null, + documentEditor: null, + // cssanimAddAnimDialog : null, + curSelectedElement: null, + managePending: false, + pendingChanges: [], // will store the change done in addAnim dialog in case of a cancel in main dialog (undo list) + cssAnimDialog: null, + allAvailableAnimsCssAnim: [], + allAvailableAnimsCustom: [], + allAvailableAnimsConflict: [], + init: function (editor) { + this.ckEditor = editor; + this.documentEditor = editor.document; + var i, j; + // get cssanim.css style sheet + for (i = document.styleSheets.length - 1; i >= 0; i -= 1) { + if ((document.styleSheets[i].href) && (document.styleSheets[i].href.indexOf("cssanim.css") >= 0)) { + for (j = 0; j < document.styleSheets[i].cssRules.length; j += 1) { + if ((document.styleSheets[i].cssRules[j].type === CSSRule.KEYFRAMES_RULE) + || (document.styleSheets[i].cssRules[j].type === CSSRule.WEBKIT_KEYFRAMES_RULE)) { + this.allAvailableAnimsCssAnim.push(document.styleSheets[i].cssRules[j].name); + } + } + } + } + }, + setHighLightBgColor: function (color) { + this.ckEditor.config.highlightBGColor = color; + }, + setHighLightBorder: function (b) { + this.ckEditor.config.highlightBorder = b +'px'; + }, + cleanHighlight: function () { + var highLightedElem = this.documentEditor.$.getElementsByClassName('highlight_tag'); + var i, elem; + for (i=0; i<highLightedElem.length; i+=1) { + elem = highLightedElem[i]; + elem.classList.remove('highlight_tag'); + elem.style.backgroundColor = elem.getAttribute("data-animation-bg"); + elem.style.outline = elem.getAttribute("data-animation-outline"); + elem.getAttribute("data-animation-bg"); + elem.getAttribute("data-animation-outline"); + } + }, + getSurroundElem: function (editor, elem) { + var elemAsc = editor.getSelection().getStartElement().getAscendant(elem, true); + return elemAsc; + }, + setCssAnimDialog: function (dialog) { + //console.log("setCssAnim", dialog); + this.cssAnimDialog = dialog; + }, + refreshCssAnimDialogAnimationsTab: function () { + this.cssAnimDialog.selectPage('tab-allowed-tags'); + this.cssAnimDialog.selectPage('tab-doc-animations'); + }, + runHighLightElem: function (elem) { + //console.log('runHighLightElem', elem); + CKEDITOR.plugins.cssanim.cleanHighlight(); + elem.setAttribute("data-animation-bg", elem.getStyle('backgroundColor')); + elem.setAttribute("data-animation-outline", elem.getStyle('outline')); + elem.setStyle('backgroundColor', this.ckEditor.config.highlightBGColor); + elem.setStyle('outlineWidth', this.ckEditor.config.highlightBorder); + elem.setStyle('outlineStyle', 'solid'); + elem.setStyle('outlineColor', 'red'); + elem.addClass('highlight_tag'); + }, + runHighLightElemById: function (id) { + CKEDITOR.plugins.cssanim.cleanHighlight(); + var elem = CKEDITOR.plugins.cssanim.documentEditor.getById(id); + if (!elem) { + return; + } + CKEDITOR.plugins.cssanim.runHighLightElem(elem); + }, + getAllAnimElem: function() { + var elems = this.documentEditor.$.getElementsByClassName('ckAnimClass_'); + var cssAnimationObject = {}; + var obj, element; + var i; + for (i=0; i <elems.length; i+=1) { + element = elems[i]; + obj = element.getAttribute('data-animation'); + obj = decodeURIComponent(obj); + obj = JSON.parse(obj); + obj.elem = element; + cssAnimationObject[element.id] = obj; + } + return cssAnimationObject; + }, + runAddAnimDialogById: function (id) { + var elem = CKEDITOR.plugins.cssanim.documentEditor.getById(id); + if (!elem) { + return; + } + this.curSelectedElement = elem; + this.managePending = true; + this.ckEditor.execCommand("_myLaunchAddAnimDialog"); + }, + // Show the "add animations" dialog + runAddAnimDialog: function (editor, elem) { + CKEDITOR.plugins.cssanim.cleanHighlight(); + // editor.curSelectedElement = elem; + this.curSelectedElement = elem; + this.managePending = false; + editor.execCommand("_myLaunchAddAnimDialog"); + }, + // Show the "add animations" dialog + runAddAnimElem: function (elem, res) { + var animStart = res.animStart; + var animClick = res.animClick; + var animOver = res.animOver; + var ral = res.ral; + var data; + var cssObj; + if (animStart || animClick || animOver) { + // FAKE ELEMENTS OLD CODE + if (elem.getId() === null) { + elem.setAttribute('id', generateUUID()); + } + // Remove anim class in case it already exists + elem.removeClass(animClassPrefix); + elem.removeClass(animClassPrefix + elem.getId()); + elem.removeClass(animClassPrefix + elem.getId() + 'Start'); + // add the new one + elem.addClass(animClassPrefix); + elem.addClass(animClassPrefix + elem.getId()); + cssObj = {}; + cssObj.id = elem.getId(); + if (animStart) { + elem.addClass(animClassPrefix + elem.getId() + 'Start'); + cssObj.css = '.' + animClassPrefix + elem.getId() + 'Start'; + cssObj.cds = "{animation: " + animStart + ";}"; + cssObj.ral = ral; + } + if (animOver) { + cssObj.cso = '.' + animClassPrefix + elem.getId() + ':hover'; + if ((animOver.indexOf('cssAnimPause') >= 0) || (animOver.indexOf('animation-play-state') >= 0)) { + cssObj.cdo = "{animation-play-state: paused" + ";}"; + } else { + cssObj.cdo = "{animation: " + animOver + ";}"; + } + } + if (animClick) { + cssObj.csc = '.' + animClassPrefix + elem.getId() + ':active'; + if ((animClick.indexOf('cssAnimPause') >= 0) || (animClick.indexOf('animation-play-state') >= 0)) { + cssObj.cdc = "{animation-play-state: paused" + ";}"; + } else { + cssObj.cdc = "{animation: " + animClick + ";}"; + } + } + //console.log("runAddAnimElem cssObj ------------>", cssObj); + data = encodeURIComponent(JSON.stringify(cssObj)); + elem.setAttribute("data-animation", data); + } else { + // no more animation, so remove them all + //console.log("REMOVE ALL ANIMATIONS ->", elem); + CKEDITOR.plugins.cssanim.runRemoveAnimElem(elem); + } + }, + // Restore animation, called if any pending changes need to be restored + restoreAnimOnElemById: function (id, anim) { + //console.log("RESTORE ANIMATIONS ->", id); + var elem = CKEDITOR.plugins.cssanim.documentEditor.getById(id); + var res = {}; + var exp; + res.animStart = null; + res.animClick = null; + res.animOver = null; + res.ral = anim.ral; + if (anim.cds) { + exp = anim.cds.replace('{animation:', '').replace('}', '').replace(';', '').trim(); + res.animStart = exp; + } + if (anim.cdo) { + exp = anim.cdo.replace('{animation:', '').replace('}', '').replace(';', '').trim(); + res.animOver = exp; + } + if (anim.cdc) { + exp = anim.cdc.replace('{animation:', '').replace('}', '').replace(';', '').trim(); + res.animClick = exp; + } + //console.log("restoreAnimOnElemById RES =", res); + CKEDITOR.plugins.cssanim.runAddAnimElem(elem, res); + }, + // Open the Add Animation Dialog + runEditAnimDialog: function (editor, elem) { + //console.log("runEditAnimDialog exec:", elem); + CKEDITOR.plugins.cssanim.cleanHighlight(); + this.curSelectedElement = elem; + editor.execCommand("_myLaunchAddAnimDialog"); + }, + runRemoveAnimElem: function (elem) { + //console.log("runRemoveAnimElem exec:", elem); + CKEDITOR.plugins.cssanim.cleanHighlight(); + //console.log("runRemoveAnimElem -> ", elem.classList); + // FAKE ELEMENTS OLD CODE +// if (elem.dataset.ckeRealElementType !== undefined) { +// // var realElem = CKEDITOR.dom.element.createFromHtml(decodeURIComponent( +// // elem.dataset.ckeRealelement ), this.document ); +// // while (realElem.$.classList.length) { +// // realElem.$.classList.remove(realElem.$.classList[0]); +// // } +// // delete cssAnimationObject[realElem.$.id]; +// // realElem.$.removeAttribute("data-animation"); +// // elem.dataset.ckeRealelement = encodeURIComponent(realElem.$.outerHTML); +// // elem.classList.remove(animClassPrefix+elem.id); +// } else { +// if (elem.dataset.ckeRealElementType === undefined) { + var i; + for (i=elem.$.classList.length - 1; i>=0; i-=1) { + if (elem.$.classList[i].indexOf(animClassPrefix) >= 0) { + elem.$.classList.remove(elem.$.classList[i]); + } + } +// delete cssAnimationObject[elem.getId()]; + elem.removeAttribute("data-animation"); +// } + }, +// getSelectedElem: function () { +// }, + // Get list of TAGS from element to top. + getPathToTop: function (element) { + var nodes = []; + var elem = element; + var cnt = 0; + while (elem) { + if (elem.getName() === "body") { + break; + } + // Skip Fake Elements !! + if (elem.$.dataset.ckeRealElementType === undefined) { + nodes[cnt] = elem; + cnt += 1; + } + elem = elem.getParent(); + } + return nodes; + }, + // Called when clicking the "test It" button in the add animation dialog + cssanimAddAnimDialogTest: function (btn) { + var testDiv = this.cssanimAddAnimDialog.getElementsByClassName('cke_cssanim_container_div')[0]; + var tab, sel, inp; + var animName, animTiming, animDir, animDuration, animDelay, animIter; + if (btn.name === "overBtn") { + tab = this.cssanimAddAnimDialog.querySelector('#cssanimAddAnimDialogTabOver'); + sel = tab.getElementsByTagName('select'); + inp = tab.getElementsByTagName('input'); +// animName = myGetNamedItem(sel,'anim_O').selectedOptions[0].value; +// animTiming = myGetNamedItem(sel,'timing_O').selectedOptions[0].value; +// animDir = myGetNamedItem(sel,'direction_O').selectedOptions[0].value; + animName = myGetNamedItem(sel,'anim_O').value; + animTiming = myGetNamedItem(sel,'timing_O').value; + animDir = myGetNamedItem(sel,'direction_O').value; + animDuration = myGetNamedItem(inp,'duration_O').value + "s"; + animDelay = myGetNamedItem(inp,'delay_O').value + "s"; + animIter = myGetNamedItem(inp,'iteration_O').value; + if (animIter === "0") { + animIter = "infinite"; + } + if (animName !== "none") { + testDiv.style.animation = "none"; + testDiv.style.webkitAnimation = "none"; + setTimeout(function() { + testDiv.style.animation = animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir; + testDiv.style.webkitAnimation = animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir; + }, 10); + } else { + testDiv.style.animation = "none"; + testDiv.style.webkitAnimation = "none"; + } + } + if (btn.name === "clickBtn") { + tab = this.cssanimAddAnimDialog.querySelector('#cssanimAddAnimDialogTabClick'); + sel = tab.getElementsByTagName('select'); + inp = tab.getElementsByTagName('input'); +// animName = myGetNamedItem(sel,'anim_C').selectedOptions[0].value; +// animTiming = myGetNamedItem(sel,'timing_C').selectedOptions[0].value; +// animDir = myGetNamedItem(sel,'direction_C').selectedOptions[0].value; + animName = myGetNamedItem(sel,'anim_C').value; + animTiming = myGetNamedItem(sel,'timing_C').value; + animDir = myGetNamedItem(sel,'direction_C').value; + animDuration = myGetNamedItem(inp,'duration_C').value + "s"; + animDelay = myGetNamedItem(inp,'delay_C').value + "s"; + animIter = myGetNamedItem(inp,'iteration_C').value; + if (animIter === "0") { + animIter = "infinite"; + } + if (animName !== "none") { + testDiv.style.animation = "none"; + testDiv.style.webkitAnimation = "none"; + setTimeout(function() { + testDiv.style.animation = animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir; + testDiv.style.webkitAnimation = animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir; + }, 10); + } else { + testDiv.style.animation = "none"; + testDiv.style.webkitAnimation = "none"; + } + } + if (btn.name === "loadBtn") { + tab = this.cssanimAddAnimDialog.querySelector('#cssanimAddAnimDialogTabLoad'); + sel = tab.getElementsByTagName('select'); + inp = tab.getElementsByTagName('input'); +// animName = myGetNamedItem(sel,'anim_L').selectedOptions[0].value; +// animTiming = myGetNamedItem(sel,'timing_L').selectedOptions[0].value; +// animDir = myGetNamedItem(sel,'direction_L').selectedOptions[0].value; + animName = myGetNamedItem(sel,'anim_L').value; + animTiming = myGetNamedItem(sel,'timing_L').value; + animDir = myGetNamedItem(sel,'direction_L').value; + animDuration = myGetNamedItem(inp,'duration_L').value + "s"; + animDelay = myGetNamedItem(inp,'delay_L').value + "s"; + animIter = myGetNamedItem(inp,'iteration_L').value; + if (animIter === "0") { + animIter = "infinite"; + } + if (animName !== "none") { + // "bounceOut 3s linear 0s 1 normal"; + testDiv.addEventListener('animationend', function () { + this.style.animation = "none"; + }, false); + testDiv.style.animation = "none"; + testDiv.style.webkitAnimation = "none"; + setTimeout(function() { + testDiv.style.animation = animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir; + testDiv.style.webkitAnimation = animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir; + }, 10); + } else { + testDiv.style.animation = "none"; + testDiv.style.webkitAnimation = "none"; + } + } + }, + getAvailableAnims: function () { + var res = {}; + res.allAvailableAnimsCssAnim = this.allAvailableAnimsCssAnim; + res.allAvailableAnimsCustom = this.allAvailableAnimsCustom; + res.allAvailableAnimsConflict = this.allAvailableAnimsConflict; + return res; + }, + // load a custom css file // Asynchronous process !!! + getCustomCss: function (obj) { + var divRes; + var cssFile; + function addCustomCssFunc(cssFile, css, obj) { + // do some cleaning !! + var candidates = document.getElementsByTagName('style'); + var i, j, k; + // need to remove the css element from document if already present !!!! + for (i = candidates.length - 1; i >= 0; i-=1) { + if (candidates[i].title === 'cssCustom') { + candidates[i].parentNode.removeChild(candidates[i]); + break; + } + } + if (CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM) { + delete CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM; + } + CKEDITOR.plugins.cssanim.allAvailableAnimsCustom = []; + CKEDITOR.plugins.cssanim.allAvailableAnimsConflict = []; + var style = document.createElement('style'); + style.title = "cssCustom"; + style.type = 'text/css'; + style.innerHTML = css; + document.getElementsByTagName('head')[0].appendChild(style); + var cssAnims = []; + var htmlRes = ""; + var liStr; + var cssAnimStyleSheet = null; + var lang = CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim; + // get cssanim.css style sheet + for (i = document.styleSheets.length - 1; i >= 0; i-=1) { + if ((document.styleSheets[i].href) && (document.styleSheets[i].href.indexOf("cssanim.css") >= 0)) { + cssAnimStyleSheet = document.styleSheets[i]; + break; + } + } + var tmpArr = []; + for (i = document.styleSheets.length - 1; i >= 0; i-=1) { + if (document.styleSheets[i].title === 'cssCustom') { + for (j = 0; j < document.styleSheets[i].cssRules.length; j += 1) { + if ((document.styleSheets[i].cssRules[j].type === CSSRule.KEYFRAMES_RULE) + || (document.styleSheets[i].cssRules[j].type === CSSRule.WEBKIT_KEYFRAMES_RULE)){ + if (tmpArr.indexOf(document.styleSheets[i].cssRules[j].name) < 0) { + liStr = '<li>' + document.styleSheets[i].cssRules[j].name + '</li>'; + cssAnims.push(document.styleSheets[i].cssRules[j].name); + tmpArr.push(document.styleSheets[i].cssRules[j].name); + CKEDITOR.plugins.cssanim.allAvailableAnimsCustom.push(document.styleSheets[i].cssRules[j].name); + if (cssAnimStyleSheet) { + for (k = 0; k < cssAnimStyleSheet.cssRules.length; k += 1) { + if (cssAnimStyleSheet.cssRules[k].name === document.styleSheets[i].cssRules[j].name) { + liStr = '<li><span style="color:tomato">' + document.styleSheets[i].cssRules[j].name + ' '+lang.warningOverride+'</span></li>'; + CKEDITOR.plugins.cssanim.allAvailableAnimsConflict.push(document.styleSheets[i].cssRules[j].name); + break; + } + } + } + htmlRes += liStr; + } + } + } + } + } + //console.log("Rules : ", cssAnims); + if (htmlRes.length > 0) { + htmlRes = '<span style="font-weight:bold;">'+lang.animationFound+'</span><br>' + '<ul style="text-align: center; margin:5px; margin-left: 25px;">' + htmlRes + '</ul>'; + // here we need to add the css in the generated document and in allowedAnims.CUSTOM + CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM = cssAnims; + } else { + htmlRes = '<span style="font-weight:bold; color:red;">'+lang.noAnimationFound+'</span><br>'; + if (CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM) { + delete CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM; + } + } + customCssFile = cssFile.trim(); + CKEDITOR.plugins.cssanim.ckEditor.config.customCssFilePath = cssFile.trim(); + if (obj) { + divRes = obj.querySelector("#cssResultsDiv"); + divRes.innerHTML = htmlRes; + divRes.style.display = "block"; + } + } + // css file asynchronous load is done +// function transferCompleteSlow(evt) { +// setTimeout(function(){ transferComplete(evt); }, 3000); +// } + function transferComplete(evt) { + CKEDITOR.plugins.cssanim.ckEditor.container.setStyle('pointer-events', ''); +// CKEDITOR.plugins.cssanim.ckEditor.container.setStyle('outline', ''); + var www = CKEDITOR.plugins.cssanim.ckEditor.document.getBody(); + www.setStyle('backgroundColor', ''); + var lang = CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim; + if (evt.target.status === 200) { + var css = evt.target.response; + addCustomCssFunc(cssFile, css, obj); + // var res = checkAnimValidity(); + // //console.log("checkAnimValidity resArray ----> ", res); + } else { + if (obj && divRes) { + var htmlRes = '<span style="font-weight:bold; color:tomato;">'+ lang.errorLoadingFile + evt.target.responseURL + '</span>'; + htmlRes += '<br><span style="font-weight:bold; color:red;">'+lang.loadStatus + evt.target.status + '</span><br>'; + divRes.innerHTML = htmlRes; + divRes.style.display = "block"; + } + alert(lang.specFile + evt.target.responseURL + lang.fileNotAvailable); + } + } + // css file asynchronous load failed + function transferFailed(/*evt*/) { + var lang = CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim; + alert(lang.fileCannotAccess); + CKEDITOR.plugins.cssanim.ckEditor.container.setStyle('pointer-events', ''); + CKEDITOR.plugins.cssanim.ckEditor.container.setStyle('outline', ''); + } + if (Object.prototype.toString.apply(obj) === "[object String]") { + cssFile = obj.trim(); + obj = null; + } else { + divRes = obj.querySelector("#cssResultsDiv"); + divRes.innerHTML = ""; + divRes.style.display = "none"; + if (divRes.parentElement.elements['cssName'].value !== "undefined") { + cssFile = divRes.parentElement.elements['cssName'].value.trim(); + } else { + cssFile = ""; + } + } + var ext = cssFile.substr(cssFile.lastIndexOf('.') + 1); + //console.log("ext", ext); + if (cssFile === this.ckEditor.config.customCssFilePath) { + if (this.allAvailableAnimsCustom.length > 0) { + return; + } + } + if (!cssFile) { + // No more custon css file, so remove it from dom and clean related animation from + // the list of available animations + // alert("Removing Custom CSS File !"); + var candidates = document.getElementsByTagName('style'); + var i; + // need to remove the css element from document if already present !!!! + for (i = candidates.length - 1; i >= 0; i-=1) { + if (candidates[i].title === 'cssCustom') { + candidates[i].parentNode.removeChild(candidates[i]); + break; + } + } + if (CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM) { + delete CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM; + } + customCssFile = ""; + this.ckEditor.config.customCssFilePath = ""; + CKEDITOR.plugins.cssanim.allAvailableAnimsCustom = []; + CKEDITOR.plugins.cssanim.allAvailableAnimsConflict = []; + // res = checkAnimValidity(); + return; + } + var lang = CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim; + if (ext !== "css") { + alert(lang.fileSpecified + cssFile + lang.fileExtInvalid); + return; + } + // low connection test + //cssFile = 'http://deelay.me/1000/'+cssFile; + this.ckEditor.container.setStyle('pointer-events', 'none'); + var www = this.documentEditor.getBody(); + www.setStyle('backgroundColor', 'Gainsboro '); + + var oReq = new XMLHttpRequest(); + oReq.onload = transferComplete; + oReq.onerror = transferFailed; + oReq.open("GET", cssFile, true); + oReq.send(); + } + }; +})(); diff --git a/plugins/ckeditor4/enhancedcolorbutton/CHANGES.md b/plugins/ckeditor4/enhancedcolorbutton/CHANGES.md new file mode 100644 index 0000000..45dcb89 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/CHANGES.md @@ -0,0 +1,24 @@ +# Changelog - Enhanced Color Button + +All source code from `Color Button` plugin version 4.5.9 was copied to this plugin and modified for giving user convenience. All of changes is described in following. + +## Version 1.1 + +- Released on 2016/06/21 +- Changes: + * Adds Test Cases with benderjs for test automation. + * Changes plugin name in language files. +- Bugfix + * Fixes color indicator of quick apply button for supporting multi CKEditor instances in same page. + * Fixes CSS for supporting IE8-. + +## Version 1.0 + +- Released on 2016/05/25. +- Changes: + * Loads css file for icons apearence. + * Adds new icons and commands for quick color change with a color previously selected. + * Adds child nodes to toolbar icons of Enhanced Color Button for showing a color lastly used for color change. + * Shows lastly used color onto toolbar icons and saves the color for quick apply buttons. + * Save reference of local function, which applies font color with user selected color, to be called in newly added commands. + * Adds `css/content.css` file for toolbar icon appearance. diff --git a/plugins/ckeditor4/enhancedcolorbutton/LICENSE.md b/plugins/ckeditor4/enhancedcolorbutton/LICENSE.md new file mode 100644 index 0000000..0cb15a8 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/LICENSE.md @@ -0,0 +1,1643 @@ +Software License Agreement +========================== + +Source code of `Color Button` plugin was copied and modified in this plugin for giving user convenience. Changes are elaborated in [Changes.md](Changes.md) file. + +----- + +CKEditor - The text editor for Internet - http://ckeditor.com +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. In any case, your choice will not restrict any +recipient of your version of this software to use, reproduce, modify +and distribute this software under any of the above licenses. + +Sources of Intellectual Property Included in CKEditor +----------------------------------------------------- + +Where not otherwise indicated, all CKEditor content is authored by +CKSource engineers and consists of CKSource-owned intellectual +property. In some specific instances, CKEditor will incorporate work +done by developers outside of CKSource with their express permission. + +The following libraries are included in CKEditor under the MIT license (see Appendix D): + +* CKSource Samples Framework (included in the samples) - Copyright (c) 2014-2016, CKSource - Frederico Knabben. +* PicoModal (included in `samples/js/sf.js`) - Copyright (c) 2012 James Frasca. +* CodeMirror (included in the samples) - Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others. + +Parts of code taken from the following libraries are included in CKEditor under the MIT license (see Appendix D): + +* jQuery (inspired the domReady function, ckeditor_base.js) - Copyright (c) 2011 John Resig, http://jquery.com/ + +The following libraries are included in CKEditor under the SIL Open Font License, Version 1.1 (see Appendix E): + +* Font Awesome (included in the toolbar configurator) - Copyright (C) 2012 by Dave Gandy. + +The following libraries are included in CKEditor under the BSD-3 License (see Appendix F): + +* highlight.js (included in the `codesnippet` plugin) - Copyright (c) 2006, Ivan Sagalaev. +* YUI Library (included in the `uicolor` plugin) - Copyright (c) 2009, Yahoo! Inc. + +(Ignore this line: %REMOVE_START%) + +The following libraries are included only in the development version of CKEditor under the MIT license (see Appendix D): + +* CKBuilder - Copyright (c) 2012-2016, CKSource - Frederico Knabben. +* CKLangTool - Copyright (c) 2012-2016, CKSource - Frederico Knabben. +* Optimist - Copyright 2010 James Halliday (mail@substack.net). +* Q - Copyright 2009–2014 Kristopher Michael Kowal. +* Tmp - Copyright (c) 2014 KARASZI István. +* Mkdirp - Copyright 2010 James Halliday (mail@substack.net). +* Bender.js - Copyright (c) 2014-2016, CKSource - Frederico Knabben. +* benderjs-coverage - Copyright (c) 2014-2016, CKSource - Frederico Knabben. +* benderjs-jquery - Copyright (c) 2014-2016, CKSource - Frederico Knabben. +* benderjs-sinon - Copyright (c) 2014-2016, CKSource - Frederico Knabben. +* benderjs-yui - Copyright (c) 2014-2016, CKSource - Frederico Knabben. +* Grunt - Copyright (c) 2015 "Cowboy" Ben Alman. +* grunt-contrib-imagemin - Copyright (c) 2014 Sindre Sorhus, contributors. +* grunt-jscs - Copyright (c) 2014 Gustavo Henke, contributors. +* grunt-contrib-jshint - Copyright (c) 2014 "Cowboy" Ben Alman, contributors. +* grunt-contrib-less - Copyright (c) 2014 Tyler Kellen, contributors. +* grunt-contrib-watch - Copyright (c) 2014 "Cowboy" Ben Alman, contributors. +* grunt-contrib-concat - Copyright (c) 2014 "Cowboy" Ben Alman, contributors. +* grunt-jsduck - Copyright (c) 2012 Dmitry Pashkevich, contributors. +* grunt-githooks - Copyright (c) 2013 Romaric Pascal. +* jQuery Form Plugin (used in jquery adapter test) - Copyright (c) 2012 M. Alsup + +The following libraries are included only in the development version of CKEditor under the BSD-3 License (see Appendix F): + +* ShellJS - Copyright (c) 2012, Artur Adib <aadib@mozilla.com>. + +The following libraries are included only in the development version of CKEditor under the Apache License (see Appendix G): + +* Less.js - Copyright (c) 2009-2014 Alexis Sellier & The Core Less Team. + +(Ignore this line: %REMOVE_END%) + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand +and product names are trademarks, registered trademarks or service +marks of their respective holders. + +--- + +Appendix A: The GPL License +--------------------------- + +``` +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS +``` + +Appendix B: The LGPL License +---------------------------- + +``` +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS +``` + +Appendix C: The MPL License +--------------------------- + +``` +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] +``` + +Appendix D: The MIT License +--------------------------- + +``` +The MIT License (MIT) + +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. +``` + +Appendix E: The SIL Open Font License Version 1.1 +--------------------------------------------- + +``` +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. +``` + +Appendix F: The BSD-3 License +----------------------------- + +``` +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +``` + +(Ignore this line: %REMOVE_START%) + +Appendix G: The Apache License +------------------------------ + +``` + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS +``` \ No newline at end of file diff --git a/plugins/ckeditor4/enhancedcolorbutton/README.md b/plugins/ckeditor4/enhancedcolorbutton/README.md new file mode 100644 index 0000000..51d0cb6 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/README.md @@ -0,0 +1,37 @@ +# Enhanced Color Button + +Enhanced Color Button is a CKEditor's plugin developed based on +Color Button plugin (version 4.5.8 released on March 31, 2016) provided by +CKSource team and it introduces additional features in addition to Color Button. +Source code of `Color Button` plugin was copied and modified in this plugin for giving user convenience. Changes are elaborated in (Changes.md)[Changes.md] file. + +## New Features + +* New Quick Apply Button + + User can apply font color and background color of font through one click. + +* Indicator of current used color + + Toolbar icons show a color lastly used by user for easy use of Quick Apply Button. + +## Installation + +To use this plugin, "colorbutton" plugin should be removed first. +Then, follow below steps. + +1. Copy whole `enhancedcolorbutton` plugin folder into `./plugins` folder of CKEditor. +2. Add below line into `config.js` file. + +```js +config.removePlugins = 'colorbutton'; +config.extraPlugins = 'enhancedcolorbutton'; +``` + +## Changelog + +Refer to this link, [CHANGES](CHANGES.md). + +## Software License Agreement + +Please refer to this link, [LICENSE](LICENSE.md). diff --git a/plugins/ckeditor4/enhancedcolorbutton/css/content.css b/plugins/ckeditor4/enhancedcolorbutton/css/content.css new file mode 100644 index 0000000..a40d26a --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/css/content.css @@ -0,0 +1,34 @@ +.cke_button_icon.cke_button__textcolor2_icon { + width: 0px; +} +.cke_button_icon.cke_button__bgcolor2_icon { + width: 0px; +} + +.enhanced_color_button_text_color { + position: relative !important; + width: 14px !important; + height: 2px !important; + left: 1px !important; + bottom: 1px !important; + border: 1px solid #c0c0c0 !important; +} +.enhanced_color_button_bg_color { + position: relative !important; + width: 14px !important; + height: 14px !important; + left: 1px !important; + bottom: 14px !important; + border-radius: 3px !important; + margin-top: 1px !important; + /* IE 8 */ + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)" !important; + /* IE 5-7 */ + filter: alpha(opacity=50) !important; + /* Netscape */ + -moz-opacity: 0.5 !important; + /* Safari 1.x */ + -khtml-opacity: 0.5 !important; + /* Good browsers */ + opacity: 0.5 !important; +} diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor.png b/plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor.png new file mode 100644 index 0000000000000000000000000000000000000000..a313938d8bc0f72e3086129816be628c1a7aa100 GIT binary patch literal 906 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(_&8-#}JFtQzz}uj!u_ooge-^DqQH0zz6-<)9V%<lZevMpDWY6 z;BCenzGFLd<8B?y-X3IS;r*BW#N1h1yfqe<cudo2+*W94vM&2Yl19|4wVOh`H?Ch& zZC`u8)|y2#`9;At=I55}&YN$l_y&i3t=IGoo^@7jNha3^why`=m^$JYiyyFE@Mey4 zh^Sy?z}hhTsJJ*eRf%MeNh}Qt94FE?cW@{j`uWq+-QE3r=-10U2M!%NbnVe2rE`{R zwyJnK?Y_J1_U+sI-@JQgmu(^yD04g_yYSq`EnAMfdGkiBf#1O1e*W9C-9PsAue$X5 zYsU85>a%ChzR$cZY&CCQUfw-z5w41P?OUf6?UZ3iVdydBVPjsiRU)}#QODlBd+#^q zH@yG${rmj*`1t;sV-g`#1s!KCvv~f&hCi8S`t<4b@87(!5uBK*5O&pluHSRNjS)58 zE^hw>4{o?^P@9|kR-}TfhO>rmPF_yVA3@iP9ao}$cO9^7FYYt(-MMR57e7D${7w(U z`RD5&&DpF}6dqc?E<~%mXy=_B9X%X>6c28wx0_$jXLDt`>VFmyfd|KD&Ya1=`|i8n zjsiU#Mu&OVY&}wV=HS7DoEL;9_N%L_M+XN7|L-~>CU7-t>-}GU?XKN=$QUogQ*HVD zUsQa2y^fNjL|gn+ucgsSP49oNR{G=+D*toe|HiG~-X2W&(6!+Hd+Fygi4y;mm5S#* zf4hFonmb&FCj_lL^6FKV<@D3Fib~#>FJI<;F0(gIpK*eU=ZX-m{e8W?cg>Dncv&JL zFP{z!O_M3lD`R3}1Y8A=CQWo&=rC)U{oJ{8_iFdLHLG~;TNk!^YS`+pegZ5vAL<<j z#_CKTwgwf?Ge?dbIr;J9$4s@!KYOb7_O05ta+UpxEdS8Q*H<iG#UEO_FmC;4c>#$l zuM*Qa!hmU5wZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxMwk+y-6m4SiplHI`c zjiezrKP5A*61N7MpUg*q8YDqB1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL!5% N;OXk;vd$@?2>>a?jz9na literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor2.png b/plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor2.png new file mode 100644 index 0000000000000000000000000000000000000000..a313938d8bc0f72e3086129816be628c1a7aa100 GIT binary patch literal 906 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i(_&8-#}JFtQzz}uj!u_ooge-^DqQH0zz6-<)9V%<lZevMpDWY6 z;BCenzGFLd<8B?y-X3IS;r*BW#N1h1yfqe<cudo2+*W94vM&2Yl19|4wVOh`H?Ch& zZC`u8)|y2#`9;At=I55}&YN$l_y&i3t=IGoo^@7jNha3^why`=m^$JYiyyFE@Mey4 zh^Sy?z}hhTsJJ*eRf%MeNh}Qt94FE?cW@{j`uWq+-QE3r=-10U2M!%NbnVe2rE`{R zwyJnK?Y_J1_U+sI-@JQgmu(^yD04g_yYSq`EnAMfdGkiBf#1O1e*W9C-9PsAue$X5 zYsU85>a%ChzR$cZY&CCQUfw-z5w41P?OUf6?UZ3iVdydBVPjsiRU)}#QODlBd+#^q zH@yG${rmj*`1t;sV-g`#1s!KCvv~f&hCi8S`t<4b@87(!5uBK*5O&pluHSRNjS)58 zE^hw>4{o?^P@9|kR-}TfhO>rmPF_yVA3@iP9ao}$cO9^7FYYt(-MMR57e7D${7w(U z`RD5&&DpF}6dqc?E<~%mXy=_B9X%X>6c28wx0_$jXLDt`>VFmyfd|KD&Ya1=`|i8n zjsiU#Mu&OVY&}wV=HS7DoEL;9_N%L_M+XN7|L-~>CU7-t>-}GU?XKN=$QUogQ*HVD zUsQa2y^fNjL|gn+ucgsSP49oNR{G=+D*toe|HiG~-X2W&(6!+Hd+Fygi4y;mm5S#* zf4hFonmb&FCj_lL^6FKV<@D3Fib~#>FJI<;F0(gIpK*eU=ZX-m{e8W?cg>Dncv&JL zFP{z!O_M3lD`R3}1Y8A=CQWo&=rC)U{oJ{8_iFdLHLG~;TNk!^YS`+pegZ5vAL<<j z#_CKTwgwf?Ge?dbIr;J9$4s@!KYOb7_O05ta+UpxEdS8Q*H<iG#UEO_FmC;4c>#$l zuM*Qa!hmU5wZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxMwk+y-6m4SiplHI`c zjiezrKP5A*61N7MpUg*q8YDqB1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL!5% N;OXk;vd$@?2>>a?jz9na literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor.png b/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor.png new file mode 100644 index 0000000000000000000000000000000000000000..54b3e18c4602dbf05cf21e897477998211c02dfa GIT binary patch literal 2169 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 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor2.png b/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor2.png new file mode 100644 index 0000000000000000000000000000000000000000..54b3e18c4602dbf05cf21e897477998211c02dfa GIT binary patch literal 2169 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 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor.png b/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc56bcbd2185cdf319554c4edfdb161c87fe8b7 GIT binary patch literal 1725 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 To9;Xs00000NkvXXu0mjf;)5CX literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor2.png b/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor2.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc56bcbd2185cdf319554c4edfdb161c87fe8b7 GIT binary patch literal 1725 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 To9;Xs00000NkvXXu0mjf;)5CX literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/textcolor.png b/plugins/ckeditor4/enhancedcolorbutton/icons/textcolor.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8e45907bca4c92dc43ced827d1896e968ec27c GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilbffDV~EA+-r)1z(vBkk?#=c*<~!%C)=p0iiF~)!?Pe;jUe%vh zv3qa)687=M%KuIWCr^>9e((4pU!W_%>*PkkRROP0PSR+JE#JJ^+V+ah&4h*T&5YmI z+TW{oPESvt!K1`v?Ciy<)U;LXn8cDyuIyaB@O$ApOIxl<&3m5u-Q3(<f``rE*b|2e zp@x~8lazk>xJ>J~S3Qq?t?7)P_qjSajwTg`+=+;fuMb*(y|Ae0Q&-2msBGr@-;2X4 zChd*U>+jpWHHtS-Br!8{B~t=7!;&+*pB0vAs>WPr6`VSK`t<G13JyzyerEMF24%4` z$Q(a;^Ms~^bN$T>lbGZ)>;L}!>mMkh`nGJhrwf1Vb=Qp%EP_uNXGr!ve$baXeP&^8 z?cc>$vsw>7{7{sa$H#Dw;lP(KCCi$Q&n{R0U%2^Z4DVrqzjgm3x8MFNz;dwJqHp7l z9XotoQrDJlQ?7~s9CO`u{q^6mtFQW9zjn<J7#jP(|Nfh}H?Ev<kHmIuMh6bYwWb{z zX?1mVtFOOKEH3_h``*2K)2#zGZrb!|Pt@9NjBglzteD~?(Kcam8ZhV>*3Z0YX>Z?e zW@dITHa1q)J&@)6=M5V+7+ii?a_ef=S3$wGzxLfve72u!%~oKb?%2DxR%>aC;WHzi z!^!u*C$4RM|J%aG=8t5X;*_9oFJ7z=IBqyYvZS!Eapg))jim}pS&Wr^gH=46R6I8c zaw{sdoY-@`kSCdENe~x1JNvc}Ek}-tw>O=f@9uK*k9+>60F4Dep=@47muVmNe`Ig! zz2?Yj8@m>m%v4KUBT7;dOH!?pi&B9UgOP!uv95u+u7OF2p}CcTF%W4R7+Dz@_%7KE zOoB)na`RI%(<*Umu=&Y+1gJq0WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#T$ OMGT&<elF{r5}E)t`BzH- literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/textcolor2.png b/plugins/ckeditor4/enhancedcolorbutton/icons/textcolor2.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8e45907bca4c92dc43ced827d1896e968ec27c GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|ilbffDV~EA+-r)1z(vBkk?#=c*<~!%C)=p0iiF~)!?Pe;jUe%vh zv3qa)687=M%KuIWCr^>9e((4pU!W_%>*PkkRROP0PSR+JE#JJ^+V+ah&4h*T&5YmI z+TW{oPESvt!K1`v?Ciy<)U;LXn8cDyuIyaB@O$ApOIxl<&3m5u-Q3(<f``rE*b|2e zp@x~8lazk>xJ>J~S3Qq?t?7)P_qjSajwTg`+=+;fuMb*(y|Ae0Q&-2msBGr@-;2X4 zChd*U>+jpWHHtS-Br!8{B~t=7!;&+*pB0vAs>WPr6`VSK`t<G13JyzyerEMF24%4` z$Q(a;^Ms~^bN$T>lbGZ)>;L}!>mMkh`nGJhrwf1Vb=Qp%EP_uNXGr!ve$baXeP&^8 z?cc>$vsw>7{7{sa$H#Dw;lP(KCCi$Q&n{R0U%2^Z4DVrqzjgm3x8MFNz;dwJqHp7l z9XotoQrDJlQ?7~s9CO`u{q^6mtFQW9zjn<J7#jP(|Nfh}H?Ev<kHmIuMh6bYwWb{z zX?1mVtFOOKEH3_h``*2K)2#zGZrb!|Pt@9NjBglzteD~?(Kcam8ZhV>*3Z0YX>Z?e zW@dITHa1q)J&@)6=M5V+7+ii?a_ef=S3$wGzxLfve72u!%~oKb?%2DxR%>aC;WHzi z!^!u*C$4RM|J%aG=8t5X;*_9oFJ7z=IBqyYvZS!Eapg))jim}pS&Wr^gH=46R6I8c zaw{sdoY-@`kSCdENe~x1JNvc}Ek}-tw>O=f@9uK*k9+>60F4Dep=@47muVmNe`Ig! zz2?Yj8@m>m%v4KUBT7;dOH!?pi&B9UgOP!uv95u+u7OF2p}CcTF%W4R7+Dz@_%7KE zOoB)na`RI%(<*Umu=&Y+1gJq0WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#T$ OMGT&<elF{r5}E)t`BzH- literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/af.js b/plugins/ckeditor4/enhancedcolorbutton/lang/af.js new file mode 100644 index 0000000..449b4ed --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/af.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'af', { + auto: 'Outomaties', + bgColorTitle: 'Agtergrondkleur', + colors: { + '000': 'Swart', + '800000': 'Meroen', + '8B4513': 'Sjokoladebruin', + '2F4F4F': 'Donkerleisteengrys', + '008080': 'Blougroen', + '000080': 'Vlootblou', + '4B0082': 'Indigo', + '696969': 'Donkergrys', + B22222: 'Rooibaksteen', + A52A2A: 'Bruin', + DAA520: 'Donkergeel', + '006400': 'Donkergroen', + '40E0D0': 'Turkoois', + '0000CD': 'Middelblou', + '800080': 'Pers', + '808080': 'Grys', + F00: 'Rooi', + FF8C00: 'Donkeroranje', + FFD700: 'Goud', + '008000': 'Groen', + '0FF': 'Siaan', + '00F': 'Blou', + EE82EE: 'Viooltjieblou', + A9A9A9: 'Donkergrys', + FFA07A: 'Ligsalm', + FFA500: 'Oranje', + FFFF00: 'Geel', + '00FF00': 'Lemmetjie', + AFEEEE: 'Ligturkoois', + ADD8E6: 'Ligblou', + DDA0DD: 'Pruim', + D3D3D3: 'Liggrys', + FFF0F5: 'Linne', + FAEBD7: 'Ivoor', + FFFFE0: 'Liggeel', + F0FFF0: 'Heuningdou', + F0FFFF: 'Asuur', + F0F8FF: 'Ligte hemelsblou', + E6E6FA: 'Laventel', + FFF: 'Wit' + }, + more: 'Meer Kleure...', + panelTitle: 'Kleure', + textColorTitle: 'Tekskleur' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ar.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ar.js new file mode 100644 index 0000000..ac8536e --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ar.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ar', { + auto: 'تلقائي', + bgColorTitle: 'لون الخلÙية', + colors: { + '000': 'أسود', + '800000': 'كستنائي', + '8B4513': 'بني ÙاتØ', + '2F4F4F': 'رمادي أردوازي غامق', + '008080': 'أزرق مخضر', + '000080': 'أزرق داكن', + '4B0082': 'ÙƒØلي', + '696969': 'رمادي داكن', + B22222: 'طوبي', + A52A2A: 'بني', + DAA520: 'ذهبي داكن', + '006400': 'أخضر داكن', + '40E0D0': 'Ùيروزي', + '0000CD': 'أزرق متوسط', + '800080': 'بنÙسجي غامق', + '808080': 'رمادي', + F00: 'Ø£Øمر', + FF8C00: 'برتقالي داكن', + FFD700: 'ذهبي', + '008000': 'أخضر', + '0FF': 'تركواز', + '00F': 'أزرق', + EE82EE: 'بنÙسجي', + A9A9A9: 'رمادي شاØب', + FFA07A: 'برتقالي وردي', + FFA500: 'برتقالي', + FFFF00: 'أصÙر', + '00FF00': 'ليموني', + AFEEEE: 'Ùيروزي شاØب', + ADD8E6: 'أزرق ÙاتØ', + DDA0DD: 'بنÙسجي ÙاتØ', + D3D3D3: 'رمادي ÙاتØ', + FFF0F5: 'وردي ÙاتØ', + FAEBD7: 'أبيض عتيق', + FFFFE0: 'أصÙر ÙاتØ', + F0FFF0: 'أبيض مائل للأخضر', + F0FFFF: 'سماوي', + F0F8FF: 'لبني', + E6E6FA: 'أرجواني', + FFF: 'أبيض' + }, + more: 'ألوان إضاÙية...', + panelTitle: 'Colors', + textColorTitle: 'لون النص' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/bg.js b/plugins/ckeditor4/enhancedcolorbutton/lang/bg.js new file mode 100644 index 0000000..bf683c2 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/bg.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'bg', { + auto: 'Ðвтоматично', + bgColorTitle: 'Фонов цвÑÑ‚', + colors: { + '000': 'Черно', + '800000': 'КеÑтенÑво', + '8B4513': 'СветлокафÑво', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Индиго', + '696969': 'Тъмно Ñиво', + B22222: 'Огнено червено', + A52A2A: 'КафÑво', + DAA520: 'ЗлатиÑто', + '006400': 'Тъмно зелено', + '40E0D0': 'Тюркуазено', + '0000CD': 'Средно Ñиньо', + '800080': 'Пурпурно', + '808080': 'Сиво', + F00: 'Червено', + FF8C00: 'Тъмно оранжево', + FFD700: 'Златно', + '008000': 'Зелено', + '0FF': 'Светло Ñиньо', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'Още цветове', + panelTitle: 'Цветове', + textColorTitle: 'ЦвÑÑ‚ на шрифт' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/bn.js b/plugins/ckeditor4/enhancedcolorbutton/lang/bn.js new file mode 100644 index 0000000..674ac6c --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/bn.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'bn', { + auto: 'অটোমেটিক', + bgColorTitle: 'বেকগà§à¦°à¦¾à¦‰à¦¨à§à¦¡ রং', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'আরও রং...', + panelTitle: 'Colors', + textColorTitle: 'টেকà§à¦¸à§à¦Ÿ রং' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/bs.js b/plugins/ckeditor4/enhancedcolorbutton/lang/bs.js new file mode 100644 index 0000000..47e4566 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/bs.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'bs', { + auto: 'Automatska', + bgColorTitle: 'Boja pozadine', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'ViÅ¡e boja...', + panelTitle: 'Colors', + textColorTitle: 'Boja teksta' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ca.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ca.js new file mode 100644 index 0000000..ce76261 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ca.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ca', { + auto: 'Automà tic', + bgColorTitle: 'Color de Fons', + colors: { + '000': 'Negre', + '800000': 'Grana', + '8B4513': 'Marró sella', + '2F4F4F': 'Gris pissarra fosca', + '008080': 'Blau xarxet', + '000080': 'Blau marÃ', + '4B0082': 'Indi', + '696969': 'Gris Fosc', + B22222: 'Foc Maó', + A52A2A: 'Marró', + DAA520: 'Solidago', + '006400': 'Verd Fosc', + '40E0D0': 'Turquesa', + '0000CD': 'Blau 1/2', + '800080': 'Lila', + '808080': 'Gris', + F00: 'Vermell', + FF8C00: 'Taronja Fosc', + FFD700: 'Or', + '008000': 'Verd', + '0FF': 'Cian', + '00F': 'Blau', + EE82EE: 'Violat', + A9A9A9: 'Gris clar', + FFA07A: 'Salmó clar', + FFA500: 'Taronja', + FFFF00: 'Groc', + '00FF00': 'Verd Llima', + AFEEEE: 'Turquesa Pà l·lid', + ADD8E6: 'Blau Clar', + DDA0DD: 'Pruna', + D3D3D3: 'Gris Clar', + FFF0F5: 'Lavanda rosat', + FAEBD7: 'Blanc Antic', + FFFFE0: 'Groc Clar', + F0FFF0: 'Verd Pà l·lid', + F0FFFF: 'Atzur', + F0F8FF: 'Cian pà lid', + E6E6FA: 'Lavanda', + FFF: 'Blanc' + }, + more: 'Més Colors...', + panelTitle: 'Colors', + textColorTitle: 'Color del Text' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/cs.js b/plugins/ckeditor4/enhancedcolorbutton/lang/cs.js new file mode 100644 index 0000000..2e68510 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/cs.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'cs', { + auto: 'Automaticky', + bgColorTitle: 'Barva pozadÃ', + colors: { + '000': 'ÄŒerná', + '800000': 'KaÅ¡tanová', + '8B4513': 'Sedlová hnÄ›Ä', + '2F4F4F': 'TmavÄ› bledÄ› Å¡edá', + '008080': 'ÄŒÃrka', + '000080': 'NámoÅ™nická modÅ™', + '4B0082': 'Inkoustová', + '696969': 'TmavÄ› Å¡edá', + B22222: 'Pálená cihla', + A52A2A: 'HnÄ›dá', + DAA520: 'Zlatý prut', + '006400': 'TmavÄ› zelená', + '40E0D0': 'Tyrkisová', + '0000CD': 'StÅ™ednÄ› modrá', + '800080': 'Purpurová', + '808080': 'Å edá', + F00: 'ÄŒervená', + FF8C00: 'TmavÄ› oranžová', + FFD700: 'Zlatá', + '008000': 'Zelená', + '0FF': 'Azurová', + '00F': 'Modrá', + EE82EE: 'Fialová', + A9A9A9: 'KalnÄ› Å¡edá', + FFA07A: 'SvÄ›tle lososová', + FFA500: 'Oranžová', + FFFF00: 'Žlutá', + '00FF00': 'Limetková', + AFEEEE: 'BledÄ› tyrkisová', + ADD8E6: 'SvÄ›tle modrá', + DDA0DD: 'Å vestková', + D3D3D3: 'SvÄ›tle Å¡edá', + FFF0F5: 'LevandulovÄ› rumÄ›nná', + FAEBD7: 'Antická bÃlá', + FFFFE0: 'SvÄ›tle žlutá', + F0FFF0: 'Medová rosa', + F0FFFF: 'Azurová', + F0F8FF: 'AlenÄina modrá', + E6E6FA: 'Levandulová', + FFF: 'BÃlá' + }, + more: 'VÃce barev...', + panelTitle: 'Barvy', + textColorTitle: 'Barva textu' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/cy.js b/plugins/ckeditor4/enhancedcolorbutton/lang/cy.js new file mode 100644 index 0000000..3ff5bd0 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/cy.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'cy', { + auto: 'Awtomatig', + bgColorTitle: 'Lliw Cefndir', + colors: { + '000': 'Du', + '800000': 'Marwn', + '8B4513': 'Brown Cyfrwy', + '2F4F4F': 'Llechen Tywyll', + '008080': 'Corhwyad', + '000080': 'Nefi', + '4B0082': 'Indigo', + '696969': 'Llwyd Tywyll', + B22222: 'Bric Tân', + A52A2A: 'Brown', + DAA520: 'Rhoden Aur', + '006400': 'Gwyrdd Tywyll', + '40E0D0': 'Gwyrddlas', + '0000CD': 'Glas Canolig', + '800080': 'Porffor', + '808080': 'Llwyd', + F00: 'Coch', + FF8C00: 'Oren Tywyll', + FFD700: 'Aur', + '008000': 'Gwyrdd', + '0FF': 'Cyan', + '00F': 'Glas', + EE82EE: 'Fioled', + A9A9A9: 'Llwyd Pwl', + FFA07A: 'Samwn Golau', + FFA500: 'Oren', + FFFF00: 'Melyn', + '00FF00': 'Leim', + AFEEEE: 'Gwyrddlas Golau', + ADD8E6: 'Glas Golau', + DDA0DD: 'Eirinen', + D3D3D3: 'Llwyd Golau', + FFF0F5: 'Gwrid Lafant', + FAEBD7: 'Gwyn Hynafol', + FFFFE0: 'Melyn Golau', + F0FFF0: 'Melwn Gwyrdd Golau', + F0FFFF: 'Aswr', + F0F8FF: 'Glas Alys', + E6E6FA: 'Lafant', + FFF: 'Gwyn' + }, + more: 'Mwy o Liwiau...', + panelTitle: 'Lliwiau', + textColorTitle: 'Lliw Testun' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/da.js b/plugins/ckeditor4/enhancedcolorbutton/lang/da.js new file mode 100644 index 0000000..be92787 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/da.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'da', { + auto: 'Automatisk', + bgColorTitle: 'Baggrundsfarve', + colors: { + '000': 'Sort', + '800000': 'Mørkerød', + '8B4513': 'Mørk orange', + '2F4F4F': 'Dark Slate GrÃ¥', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'MørkegrÃ¥', + B22222: 'Scarlet / Rød', + A52A2A: 'Brun', + DAA520: 'Guld', + '006400': 'Mørkegrøn', + '40E0D0': 'Tyrkis', + '0000CD': 'MellemblÃ¥', + '800080': 'Lilla', + '808080': 'GrÃ¥', + F00: 'Rød', + FF8C00: 'Mørk orange', + FFD700: 'Guld', + '008000': 'Grøn', + '0FF': 'Cyan', + '00F': 'BlÃ¥', + EE82EE: 'Violet', + A9A9A9: 'MatgrÃ¥', + FFA07A: 'Laksefarve', + FFA500: 'Orange', + FFFF00: 'Gul', + '00FF00': 'Lime', + AFEEEE: 'Mat tyrkis', + ADD8E6: 'LyseblÃ¥', + DDA0DD: 'Plum', + D3D3D3: 'LysegrÃ¥', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antikhvid', + FFFFE0: 'Lysegul', + F0FFF0: 'Gul / Beige', + F0FFFF: 'HimmeblÃ¥', + F0F8FF: 'Alice blue', + E6E6FA: 'Lavendel', + FFF: 'Hvid' + }, + more: 'Flere farver...', + panelTitle: 'Farver', + textColorTitle: 'Tekstfarve' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/de-ch.js b/plugins/ckeditor4/enhancedcolorbutton/lang/de-ch.js new file mode 100644 index 0000000..8658c8f --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/de-ch.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'de-ch', { + auto: 'Automatisch', + bgColorTitle: 'Hintergrundfarbe', + colors: { + '000': 'Schwarz', + '800000': 'Kastanienbraun', + '8B4513': 'Braun', + '2F4F4F': 'Dunkles Schiefergrau', + '008080': 'Blaugrün', + '000080': 'Marineblau', + '4B0082': 'Indigo', + '696969': 'Dunkelgrau', + B22222: 'Ziegelrot', + A52A2A: 'Braun', + DAA520: 'Goldgelb', + '006400': 'Dunkelgrün', + '40E0D0': 'Türkis', + '0000CD': 'Mittelblau', + '800080': 'Lila', + '808080': 'Grau', + F00: 'Rot', + FF8C00: 'Dunkelorange', + FFD700: 'Gold', + '008000': 'Grün', + '0FF': 'Cyan', + '00F': 'Blau', + EE82EE: 'Violett', + A9A9A9: 'Dunkelgrau', + FFA07A: 'Helles Lachsrosa', + FFA500: 'Orange', + FFFF00: 'Gelb', + '00FF00': 'Lime', + AFEEEE: 'Blasstürkis', + ADD8E6: 'Hellblau', + DDA0DD: 'Pflaumenblau', + D3D3D3: 'Hellgrau', + FFF0F5: 'Lavendel', + FAEBD7: 'Antik Weiss', + FFFFE0: 'Hellgelb', + F0FFF0: 'Honigtau', + F0FFFF: 'Azurblau', + F0F8FF: 'Alice Blau', + E6E6FA: 'Lavendel', + FFF: 'Weiss' + }, + more: 'Weitere Farben...', + panelTitle: 'Farben', + textColorTitle: 'Textfarbe' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/de.js b/plugins/ckeditor4/enhancedcolorbutton/lang/de.js new file mode 100644 index 0000000..6ee1305 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/de.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'de', { + auto: 'Automatisch', + bgColorTitle: 'Hintergrundfarbe', + colors: { + '000': 'Schwarz', + '800000': 'Kastanienbraun', + '8B4513': 'Braun', + '2F4F4F': 'Dunkles Schiefergrau', + '008080': 'Blaugrün', + '000080': 'Marineblau', + '4B0082': 'Indigo', + '696969': 'Dunkelgrau', + B22222: 'Ziegelrot', + A52A2A: 'Braun', + DAA520: 'Goldgelb', + '006400': 'Dunkelgrün', + '40E0D0': 'Türkis', + '0000CD': 'Mittelblau', + '800080': 'Lila', + '808080': 'Grau', + F00: 'Rot', + FF8C00: 'Dunkelorange', + FFD700: 'Gold', + '008000': 'Grün', + '0FF': 'Cyan', + '00F': 'Blau', + EE82EE: 'Violett', + A9A9A9: 'Dunkelgrau', + FFA07A: 'Helles Lachsrosa', + FFA500: 'Orange', + FFFF00: 'Gelb', + '00FF00': 'Lime', + AFEEEE: 'Blasstürkis', + ADD8E6: 'Hellblau', + DDA0DD: 'Pflaumenblau', + D3D3D3: 'Hellgrau', + FFF0F5: 'Lavendel', + FAEBD7: 'Antik Weiß', + FFFFE0: 'Hellgelb', + F0FFF0: 'Honigtau', + F0FFFF: 'Azurblau', + F0F8FF: 'Alice Blau', + E6E6FA: 'Lavendel', + FFF: 'Weiß' + }, + more: 'Weitere Farben...', + panelTitle: 'Farben', + textColorTitle: 'Textfarbe' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/el.js b/plugins/ckeditor4/enhancedcolorbutton/lang/el.js new file mode 100644 index 0000000..c3d76ed --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/el.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'el', { + auto: 'Αυτόματα', + bgColorTitle: 'ΧÏώμα Φόντου', + colors: { + '000': 'ΜαÏÏο', + '800000': 'ΚαστανÎÏυθÏο', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'ΒαθυκÏανο', + '000080': 'Μπλε μαÏÎν', + '4B0082': 'Ινδικό', + '696969': 'ΣκοÏÏο ΓκÏι', + B22222: 'Ανοικτό Κόκκινο', + A52A2A: 'ΚαφÎ', + DAA520: 'Golden Rod', + '006400': 'ΣκοÏÏο Î Ïάσινο', + '40E0D0': 'ΤυÏκουάζ', + '0000CD': 'Medium Blue', + '800080': 'Μοβ', + '808080': 'ΓκÏι', + F00: 'Κόκκινο', + FF8C00: 'ΣκοÏÏο ΠοÏτοκαλί', + FFD700: 'ΧÏυσαφί', + '008000': 'Î Ïάσινο', + '0FF': 'Κυανό', + '00F': 'Μπλε', + EE82EE: 'Μενεξεδί', + A9A9A9: 'Ποντικί', + FFA07A: 'Ανοικτό Σομόν', + FFA500: 'ΠοÏτοκαλί', + FFFF00: 'ΚίτÏινο', + '00FF00': 'ΜοσχολÎμονο', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Γαλάζιο', + DDA0DD: 'Δαμασκηνί', + D3D3D3: 'Ανοικτό ΓκÏι', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Ανοικτό ΚίτÏινο', + F0FFF0: 'Honeydew', + F0FFFF: 'Γαλανό', + F0F8FF: 'Alice Blue', + E6E6FA: 'ΕλαφÏός Ιώδες', + FFF: 'Λευκό' + }, + more: 'ΠεÏισσότεÏα ΧÏώματα…', + panelTitle: 'ΧÏώματα', + textColorTitle: 'ΧÏώμα ΚειμÎνου' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/en-au.js b/plugins/ckeditor4/enhancedcolorbutton/lang/en-au.js new file mode 100644 index 0000000..8d462ab --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/en-au.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'en-au', { + auto: 'Automatic', + bgColorTitle: 'Background Colour', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'More Colours...', + panelTitle: 'Colors', + textColorTitle: 'Text Colour' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/en-ca.js b/plugins/ckeditor4/enhancedcolorbutton/lang/en-ca.js new file mode 100644 index 0000000..244538d --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/en-ca.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'en-ca', { + auto: 'Automatic', + bgColorTitle: 'Background Colour', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'More Colours...', + panelTitle: 'Colors', + textColorTitle: 'Text Colour' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/en-gb.js b/plugins/ckeditor4/enhancedcolorbutton/lang/en-gb.js new file mode 100644 index 0000000..a2406fe --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/en-gb.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'en-gb', { + auto: 'Automatic', + bgColorTitle: 'Background Colour', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Grey', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Grey', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Grey', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Grey', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'More Colours...', + panelTitle: 'Colours', + textColorTitle: 'Text Colour' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/en.js b/plugins/ckeditor4/enhancedcolorbutton/lang/en.js new file mode 100644 index 0000000..71cb907 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/en.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'en', { + auto: 'Automatic', + bgColorTitle: 'Background Color', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'More Colors...', + panelTitle: 'Colors', + textColorTitle: 'Text Color' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/eo.js b/plugins/ckeditor4/enhancedcolorbutton/lang/eo.js new file mode 100644 index 0000000..cd20518 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/eo.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'eo', { + auto: 'AÅtomata', + bgColorTitle: 'Fona Koloro', + colors: { + '000': 'Nigra', + '800000': 'KaÅtankolora', + '8B4513': 'Mezbruna', + '2F4F4F': 'Ardezgriza', + '008080': 'Marĉanaskolora', + '000080': 'Maristblua', + '4B0082': 'Indigokolora', + '696969': 'Malhelgriza', + B22222: 'BrikruÄa', + A52A2A: 'Bruna', + DAA520: 'Senbrilorkolora', + '006400': 'Malhelverda', + '40E0D0': 'Turkisblua', + '0000CD': 'ReÄblua', + '800080': 'Purpura', + '808080': 'Griza', + F00: 'RuÄa', + FF8C00: 'MalheloranÄkolora', + FFD700: 'Orkolora', + '008000': 'Verda', + '0FF': 'Verdblua', + '00F': 'Blua', + EE82EE: 'Viola', + A9A9A9: 'Mezgriza', + FFA07A: 'Salmokolora', + FFA500: 'OranÄkolora', + FFFF00: 'Flava', + '00FF00': 'Limetkolora', + AFEEEE: 'Helturkiskolora', + ADD8E6: 'Helblua', + DDA0DD: 'Prunkolora', + D3D3D3: 'Helgriza', + FFF0F5: 'Lavendkolora vangoÅminko', + FAEBD7: 'Antikvablanka', + FFFFE0: 'Helflava', + F0FFF0: 'Vintromelonkolora', + F0FFFF: 'Lazura', + F0F8FF: 'Aliceblua', + E6E6FA: 'Lavendkolora', + FFF: 'Blanka' + }, + more: 'Pli da Koloroj...', + panelTitle: 'Koloroj', + textColorTitle: 'Teksta Koloro' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/es.js b/plugins/ckeditor4/enhancedcolorbutton/lang/es.js new file mode 100644 index 0000000..c5507e1 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/es.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'es', { + auto: 'Automático', + bgColorTitle: 'Color de Fondo', + colors: { + '000': 'Negro', + '800000': 'Marrón oscuro', + '8B4513': 'Marrón tierra', + '2F4F4F': 'Pizarra Oscuro', + '008080': 'Azul verdoso', + '000080': 'Azul marino', + '4B0082': 'Añil', + '696969': 'Gris oscuro', + B22222: 'Ladrillo', + A52A2A: 'Marrón', + DAA520: 'Oro oscuro', + '006400': 'Verde oscuro', + '40E0D0': 'Turquesa', + '0000CD': 'Azul medio-oscuro', + '800080': 'Púrpura', + '808080': 'Gris', + F00: 'Rojo', + FF8C00: 'Naranja oscuro', + FFD700: 'Oro', + '008000': 'Verde', + '0FF': 'Cian', + '00F': 'Azul', + EE82EE: 'Violeta', + A9A9A9: 'Gris medio', + FFA07A: 'Salmón claro', + FFA500: 'Naranja', + FFFF00: 'Amarillo', + '00FF00': 'Lima', + AFEEEE: 'Turquesa claro', + ADD8E6: 'Azul claro', + DDA0DD: 'Violeta claro', + D3D3D3: 'Gris claro', + FFF0F5: 'Lavanda rojizo', + FAEBD7: 'Blanco antiguo', + FFFFE0: 'Amarillo claro', + F0FFF0: 'Miel', + F0FFFF: 'Azul celeste', + F0F8FF: 'Azul pálido', + E6E6FA: 'Lavanda', + FFF: 'Blanco' + }, + more: 'Más Colores...', + panelTitle: 'Colores', + textColorTitle: 'Color de Texto' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/et.js b/plugins/ckeditor4/enhancedcolorbutton/lang/et.js new file mode 100644 index 0000000..676e3b1 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/et.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'et', { + auto: 'Automaatne', + bgColorTitle: 'Tausta värv', + colors: { + '000': 'Must', + '800000': 'Kastanpruun', + '8B4513': 'Sadulapruun', + '2F4F4F': 'Tume paehall', + '008080': 'Sinakasroheline', + '000080': 'Meresinine', + '4B0082': 'Indigosinine', + '696969': 'Tumehall', + B22222: 'Å amottkivi', + A52A2A: 'Pruun', + DAA520: 'Kuldkollane', + '006400': 'Tumeroheline', + '40E0D0': 'Türkiissinine', + '0000CD': 'Keskmine sinine', + '800080': 'Lilla', + '808080': 'Hall', + F00: 'Punanae', + FF8C00: 'Tumeoranž', + FFD700: 'Kuldne', + '008000': 'Roheline', + '0FF': 'Tsüaniidsinine', + '00F': 'Sinine', + EE82EE: 'Violetne', + A9A9A9: 'Tuhm hall', + FFA07A: 'Hele lõhe', + FFA500: 'Oranž', + FFFF00: 'Kollane', + '00FF00': 'Lubja hall', + AFEEEE: 'Kahvatu türkiis', + ADD8E6: 'Helesinine', + DDA0DD: 'Ploomililla', + D3D3D3: 'Helehall', + FFF0F5: 'Lavendlipunane', + FAEBD7: 'Antiikvalge', + FFFFE0: 'Helekollane', + F0FFF0: 'Meloniroheline', + F0FFFF: 'Taevasinine', + F0F8FF: 'Beebisinine', + E6E6FA: 'Lavendel', + FFF: 'Valge' + }, + more: 'Rohkem värve...', + panelTitle: 'Värvid', + textColorTitle: 'Teksti värv' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/eu.js b/plugins/ckeditor4/enhancedcolorbutton/lang/eu.js new file mode 100644 index 0000000..2c72923 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/eu.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'eu', { + auto: 'Automatikoa', + bgColorTitle: 'Atzeko planoko kolorea', + colors: { + '000': 'Beltza', + '800000': 'Granatea', + '8B4513': 'Zela marroia', + '2F4F4F': 'Arbel gris iluna', + '008080': 'Urdin berdexka', + '000080': 'Urdin iluna', + '4B0082': 'Indigoa', + '696969': 'Gris iluna', + B22222: 'Adreilu erregogorra', + A52A2A: 'Marroia', + DAA520: 'Urrezko makila', + '006400': 'Berde iluna', + '40E0D0': 'Turkesa', + '0000CD': 'Urdin ertaina', + '800080': 'Morea', + '808080': 'Grisa', + F00: 'Gorria', + FF8C00: 'Laranja iluna', + FFD700: 'Urrea', + '008000': 'Berdea', + '0FF': 'Ziana', + '00F': 'Urdina', + EE82EE: 'Bioleta', + A9A9A9: 'Gris ahula', + FFA07A: 'Izokin-kolore argia', + FFA500: 'Laranja', + FFFF00: 'Horia', + '00FF00': 'Lima', + AFEEEE: 'Turkesa argia', + ADD8E6: 'Urdin argia', + DDA0DD: 'Aran-kolorea', + D3D3D3: 'Gris argia', + FFF0F5: 'Izpiliku-gorrixka', + FAEBD7: 'Zuri zaharra', + FFFFE0: 'Hori argia', + F0FFF0: 'Ezti-ihintza', + F0FFFF: 'Zeru-urdina', + F0F8FF: 'Alizia urdina', + E6E6FA: 'Izpilikua', + FFF: 'Zuria' + }, + more: 'Kolore gehiago...', + panelTitle: 'Koloreak', + textColorTitle: 'Testu-kolorea' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/fa.js b/plugins/ckeditor4/enhancedcolorbutton/lang/fa.js new file mode 100644 index 0000000..f54eb77 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/fa.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'fa', { + auto: 'خودکار', + bgColorTitle: 'رنگ پس​زمینه', + colors: { + '000': 'سیاه', + '800000': 'خرمایی', + '8B4513': 'قهوه​ای شکلاتی', + '2F4F4F': 'ارغوانی مایل به خاکستری', + '008080': 'آبی مایل به خاکستری', + '000080': 'آبی سیر', + '4B0082': 'نیلی', + '696969': 'خاکستری تیره', + B22222: 'آتش آجری', + A52A2A: 'قهوه​ای', + DAA520: 'میله​ی طلایی', + '006400': 'سبز تیره', + '40E0D0': 'Ùیروزه​ای', + '0000CD': 'آبی روشن', + '800080': 'ارغوانی', + '808080': 'خاکستری', + F00: 'قرمز', + FF8C00: 'نارنجی پررنگ', + FFD700: 'طلایی', + '008000': 'سبز', + '0FF': 'آبی مایل به سبز', + '00F': 'آبی', + EE82EE: 'بنÙØ´', + A9A9A9: 'خاکستری مات', + FFA07A: 'صورتی کدر روشن', + FFA500: 'نارنجی', + FFFF00: 'زرد', + '00FF00': 'ÙسÙری', + AFEEEE: 'Ùیروزه​ای رنگ پریده', + ADD8E6: 'آبی کمرنگ', + DDA0DD: 'آلویی', + D3D3D3: 'خاکستری روشن', + FFF0F5: 'بنÙØ´ کمرنگ', + FAEBD7: 'عتیقه سÙید', + FFFFE0: 'زرد روشن', + F0FFF0: 'عسلی', + F0FFFF: 'لاجوردی', + F0F8FF: 'آبی براق', + E6E6FA: 'بنÙØ´ کمرنگ', + FFF: 'سÙید' + }, + more: 'رنگ​های بیشتر...', + panelTitle: 'رنگها', + textColorTitle: 'رنگ متن' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/fi.js b/plugins/ckeditor4/enhancedcolorbutton/lang/fi.js new file mode 100644 index 0000000..3882033 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/fi.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'fi', { + auto: 'Automaattinen', + bgColorTitle: 'Taustaväri', + colors: { + '000': 'Musta', + '800000': 'Kastanjanruskea', + '8B4513': 'Satulanruskea', + '2F4F4F': 'Tumma liuskekivenharmaa', + '008080': 'Sinivihreä', + '000080': 'Laivastonsininen', + '4B0082': 'Indigonsininen', + '696969': 'Tummanharmaa', + B22222: 'Tiili', + A52A2A: 'Ruskea', + DAA520: 'Kultapiisku', + '006400': 'Tummanvihreä', + '40E0D0': 'Turkoosi', + '0000CD': 'Keskisininen', + '800080': 'Purppura', + '808080': 'Harmaa', + F00: 'Punainen', + FF8C00: 'Tumma oranssi', + FFD700: 'Kulta', + '008000': 'Vihreä', + '0FF': 'Syaani', + '00F': 'Sininen', + EE82EE: 'Violetti', + A9A9A9: 'Tummanharmaa', + FFA07A: 'Vaaleanlohenpunainen', + FFA500: 'Oranssi', + FFFF00: 'Keltainen', + '00FF00': 'Limetin vihreä', + AFEEEE: 'Haalea turkoosi', + ADD8E6: 'Vaaleansininen', + DDA0DD: 'Luumu', + D3D3D3: 'Vaaleanharmaa', + FFF0F5: 'Laventelinpunainen', + FAEBD7: 'Antiikinvalkoinen', + FFFFE0: 'Vaaleankeltainen', + F0FFF0: 'Hunajameloni', + F0FFFF: 'Asurinsininen', + F0F8FF: 'Alice Blue -sininen', + E6E6FA: 'Lavanteli', + FFF: 'Valkoinen' + }, + more: 'Lisää värejä...', + panelTitle: 'Värit', + textColorTitle: 'Tekstiväri' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/fo.js b/plugins/ckeditor4/enhancedcolorbutton/lang/fo.js new file mode 100644 index 0000000..cb55629 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/fo.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'fo', { + auto: 'Automatiskt', + bgColorTitle: 'Bakgrundslitur', + colors: { + '000': 'Svart', + '800000': 'Maroon', + '8B4513': 'Saðilsbrúnt', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Myrkagrátt', + B22222: 'Fire Brick', + A52A2A: 'Brúnt', + DAA520: 'Gullstavur', + '006400': 'Myrkagrønt', + '40E0D0': 'Turquoise', + '0000CD': 'Meðal blátt', + '800080': 'Purple', + '808080': 'Grátt', + F00: 'Reytt', + FF8C00: 'Myrkt appelsingult', + FFD700: 'Gull', + '008000': 'Grønt', + '0FF': 'Cyan', + '00F': 'Blátt', + EE82EE: 'Violet', + A9A9A9: 'Døkt grátt', + FFA07A: 'Ljósur laksur', + FFA500: 'Appelsingult', + FFFF00: 'Gult', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Ljósablátt', + DDA0DD: 'Plum', + D3D3D3: 'Ljósagrátt', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Klassiskt hvÃtt', + FFFFE0: 'Ljósagult', + F0FFF0: 'Hunangsdøggur', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blátt', + E6E6FA: 'Lavender', + FFF: 'HvÃtt' + }, + more: 'Fleiri litir...', + panelTitle: 'Litir', + textColorTitle: 'Tekstlitur' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/fr-ca.js b/plugins/ckeditor4/enhancedcolorbutton/lang/fr-ca.js new file mode 100644 index 0000000..f52f72a --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/fr-ca.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'fr-ca', { + auto: 'Automatique', + bgColorTitle: 'Couleur de fond', + colors: { + '000': 'Noir', + '800000': 'Marron', + '8B4513': 'Brun foncé', + '2F4F4F': 'Gris ardoise foncé', + '008080': 'Sarcelle', + '000080': 'Marine', + '4B0082': 'Indigo', + '696969': 'Gris foncé', + B22222: 'Rouge brique', + A52A2A: 'Brun', + DAA520: 'Doré', + '006400': 'Vert foncé', + '40E0D0': 'Turquoise', + '0000CD': 'Bleu', + '800080': 'Mauve', + '808080': 'Gris', + F00: 'Rouge', + FF8C00: 'Orange foncé', + FFD700: 'Or', + '008000': 'Vert', + '0FF': 'Cyan', + '00F': 'Bleu', + EE82EE: 'Violet', + A9A9A9: 'Gris pâle', + FFA07A: 'Saumon clair', + FFA500: 'Orange', + FFFF00: 'Jaune', + '00FF00': 'Vert lime', + AFEEEE: 'Turquoise pâle', + ADD8E6: 'Bleu pâle', + DDA0DD: 'Prune', + D3D3D3: 'Gris pâle', + FFF0F5: 'Bleu lavande', + FAEBD7: 'Blanc antique', + FFFFE0: 'Jaune pâle', + F0FFF0: 'Miel doré', + F0FFFF: 'Azure', + F0F8FF: 'Bleu alice', + E6E6FA: 'Lavande', + FFF: 'Blanc' + }, + more: 'Plus de couleurs...', + panelTitle: 'Couleurs', + textColorTitle: 'Couleur de texte' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/fr.js b/plugins/ckeditor4/enhancedcolorbutton/lang/fr.js new file mode 100644 index 0000000..60a10c8 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/fr.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'fr', { + auto: 'Automatique', + bgColorTitle: 'Couleur d\'arrière plan', + colors: { + '000': 'Noir', + '800000': 'Marron', + '8B4513': 'Brun moyen', + '2F4F4F': 'Vert sombre', + '008080': 'Canard', + '000080': 'Bleu marine', + '4B0082': 'Indigo', + '696969': 'Gris foncé', + B22222: 'Rouge brique', + A52A2A: 'Brun', + DAA520: 'Or terni', + '006400': 'Vert foncé', + '40E0D0': 'Turquoise', + '0000CD': 'Bleu royal', + '800080': 'Pourpre', + '808080': 'Gris', + F00: 'Rouge', + FF8C00: 'Orange foncé', + FFD700: 'Or', + '008000': 'Vert', + '0FF': 'Cyan', + '00F': 'Bleu', + EE82EE: 'Violet', + A9A9A9: 'Gris moyen', + FFA07A: 'Saumon', + FFA500: 'Orange', + FFFF00: 'Jaune', + '00FF00': 'Lime', + AFEEEE: 'Turquoise clair', + ADD8E6: 'Bleu clair', + DDA0DD: 'Prune', + D3D3D3: 'Gris clair', + FFF0F5: 'Fard Lavande', + FAEBD7: 'Blanc antique', + FFFFE0: 'Jaune clair', + F0FFF0: 'Honeydew', + F0FFFF: 'Azur', + F0F8FF: 'Bleu Alice', + E6E6FA: 'Lavande', + FFF: 'Blanc' + }, + more: 'Plus de couleurs...', + panelTitle: 'Couleurs', + textColorTitle: 'Couleur de texte' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/gl.js b/plugins/ckeditor4/enhancedcolorbutton/lang/gl.js new file mode 100644 index 0000000..dd2a0a6 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/gl.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'gl', { + auto: 'Automático', + bgColorTitle: 'Cor do fondo', + colors: { + '000': 'Negro', + '800000': 'Marrón escuro', + '8B4513': 'Ocre', + '2F4F4F': 'Pizarra escuro', + '008080': 'Verde azulado', + '000080': 'Azul mariño', + '4B0082': 'Ãndigo', + '696969': 'Gris escuro', + B22222: 'Ladrillo', + A52A2A: 'Marrón', + DAA520: 'Dourado escuro', + '006400': 'Verde escuro', + '40E0D0': 'Turquesa', + '0000CD': 'Azul medio', + '800080': 'Púrpura', + '808080': 'Gris', + F00: 'Vermello', + FF8C00: 'Laranxa escuro', + FFD700: 'Dourado', + '008000': 'Verde', + '0FF': 'Cian', + '00F': 'Azul', + EE82EE: 'Violeta', + A9A9A9: 'Gris medio', + FFA07A: 'Salmón claro', + FFA500: 'Laranxa', + FFFF00: 'Amarelo', + '00FF00': 'Lima', + AFEEEE: 'Turquesa pálido', + ADD8E6: 'Azul claro', + DDA0DD: 'Violeta pálido', + D3D3D3: 'Verde claro', + FFF0F5: 'Lavanda vermello', + FAEBD7: 'Branco antigo', + FFFFE0: 'Amarelo claro', + F0FFF0: 'Mel', + F0FFFF: 'Azul celeste', + F0F8FF: 'Azul pálido', + E6E6FA: 'Lavanda', + FFF: 'Branco' + }, + more: 'Máis cores...', + panelTitle: 'Cores', + textColorTitle: 'Cor do texto' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/gu.js b/plugins/ckeditor4/enhancedcolorbutton/lang/gu.js new file mode 100644 index 0000000..8fc0de7 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/gu.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'gu', { + auto: 'સà«àªµàªšàª¾àª²àª¿àª¤', + bgColorTitle: 'બૅકગà«àª°àª¾àª‰àª¨à«àª¡ રંગ,', + colors: { + '000': 'કાળો', + '800000': 'મરà«àª¨', + '8B4513': 'છીક', + '2F4F4F': 'ડારà«àª• સà«àª²à«‡àªŸ ગà«àª°à«‡ ', + '008080': 'ટીલ', + '000080': 'નેવી', + '4B0082': 'જામલી', + '696969': 'ડારà«àª• ગà«àª°à«‡', + B22222: 'ઈટ', + A52A2A: 'બà«àª°àª¾àª‰àª¨', + DAA520: 'ગોલà«àª¡àª¨ રોડ', + '006400': 'ડારà«àª• લીલો', + '40E0D0': 'ટà«àª°àª•à«‹àªˆàª¸', + '0000CD': 'મધà«àª¯àª® વાદળી', + '800080': 'પરà«àªªàª²', + '808080': 'ગà«àª°à«‡', + F00: 'લાલ', + FF8C00: 'ડારà«àª• ઓરંજ', + FFD700: 'ગોલà«àª¡', + '008000': 'ગà«àª°à«€àª¨', + '0FF': 'સાયન', + '00F': 'વાદળી', + EE82EE: 'વાયોલેટ', + A9A9A9: 'ડીમ ', + FFA07A: 'લાઈટ સાલમન', + FFA500: 'ઓરંજ', + FFFF00: 'પીળો', + '00FF00': 'લાઈમ', + AFEEEE: 'પેલ કોઈસ', + ADD8E6: 'લાઈટ બà«àª²à«', + DDA0DD: 'પલà«àª®', + D3D3D3: 'લાઈટ ગà«àª°à«‡', + FFF0F5: 'લવંડર ', + FAEBD7: 'àªàª¨à«àªŸà«€àª• સફેદ', + FFFFE0: 'લાઈટ પીળો', + F0FFF0: 'હનીડઉય', + F0FFFF: 'અàªà«àª°à«‡', + F0F8FF: 'àªàª²à«€àª¸ બà«àª²à«', + E6E6FA: 'લવંડર', + FFF: 'સફેદ' + }, + more: 'ઔર રંગ...', + panelTitle: 'રંગ', + textColorTitle: 'શબà«àª¦àª¨à«‹ રંગ' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/he.js b/plugins/ckeditor4/enhancedcolorbutton/lang/he.js new file mode 100644 index 0000000..2e3da78 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/he.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'he', { + auto: '×וטומטי', + bgColorTitle: 'צבע רקע', + colors: { + '000': 'שחור', + '800000': 'סגול ×›×”×”', + '8B4513': '×—×•× ×‘×”×™×¨', + '2F4F4F': '×פור צפחה', + '008080': 'כחול-ירוק', + '000080': 'כחול-סגול', + '4B0082': '××™× ×“×™×’×•', + '696969': '×פור מעומע×', + B22222: '×דו×-חו×', + A52A2A: 'חו×', + DAA520: '×›×ª×•× ×–×”×‘', + '006400': 'ירוק ×›×”×”', + '40E0D0': 'טורקיז', + '0000CD': 'כחול ×‘×™× ×•× ×™', + '800080': 'סגול', + '808080': '×פור', + F00: '×דו×', + FF8C00: '×›×ª×•× ×›×”×”', + FFD700: 'זהב', + '008000': 'ירוק', + '0FF': 'צי×ן', + '00F': 'כחול', + EE82EE: 'סגלגל', + A9A9A9: '×פור ×›×”×”', + FFA07A: 'כתו×-וורוד', + FFA500: 'כתו×', + FFFF00: 'צהוב', + '00FF00': 'ליי×', + AFEEEE: 'טורקיז בהיר', + ADD8E6: 'כחול בהיר', + DDA0DD: 'שזיף', + D3D3D3: '×פור בהיר', + FFF0F5: '×œ×‘× ×“×¨ מסמיק', + FAEBD7: 'לבן עתיק', + FFFFE0: 'צהוב בהיר', + F0FFF0: 'טל דבש', + F0FFFF: 'תכלת', + F0F8FF: 'כחול טיפת מי×', + E6E6FA: '×œ×‘× ×“×¨', + FFF: 'לבן' + }, + more: '×¦×‘×¢×™× × ×•×¡×¤×™×...', + panelTitle: 'צבעי×', + textColorTitle: 'צבע טקסט' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/hi.js b/plugins/ckeditor4/enhancedcolorbutton/lang/hi.js new file mode 100644 index 0000000..6972c3c --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/hi.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'hi', { + auto: 'सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤', + bgColorTitle: 'बैकà¥à¤—à¥à¤°à¤¾à¤‰à¤¨à¥à¤¡ रंग', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'और रंग...', + panelTitle: 'Colors', + textColorTitle: 'टेकà¥à¤¸à¥à¤Ÿ रंग' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/hr.js b/plugins/ckeditor4/enhancedcolorbutton/lang/hr.js new file mode 100644 index 0000000..459ec36 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/hr.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'hr', { + auto: 'Automatski', + bgColorTitle: 'Boja pozadine', + colors: { + '000': 'Crna', + '800000': 'Kesten', + '8B4513': 'SmeÄ‘a', + '2F4F4F': 'Tamno siva', + '008080': 'Teal', + '000080': 'Mornarska', + '4B0082': 'Indigo', + '696969': 'Tamno siva', + B22222: 'Vatrena cigla', + A52A2A: 'SmeÄ‘a', + DAA520: 'Zlatna', + '006400': 'Tamno zelena', + '40E0D0': 'Tirkizna', + '0000CD': 'Srednje plava', + '800080': 'LjubiÄasta', + '808080': 'Siva', + F00: 'Crvena', + FF8C00: 'Tamno naranÄ‘asta', + FFD700: 'Zlatna', + '008000': 'Zelena', + '0FF': 'Cijan', + '00F': 'Plava', + EE82EE: 'LjubiÄasta', + A9A9A9: 'Mutno siva', + FFA07A: 'Svijetli losos', + FFA500: 'NaranÄ‘asto', + FFFF00: 'Žuto', + '00FF00': 'Limun', + AFEEEE: 'Blijedo tirkizna', + ADD8E6: 'Svijetlo plava', + DDA0DD: 'Å ljiva', + D3D3D3: 'Svijetlo siva', + FFF0F5: 'Lavanda rumeno', + FAEBD7: 'Antikno bijela', + FFFFE0: 'Svijetlo žuta', + F0FFF0: 'Med', + F0FFFF: 'Azurna', + F0F8FF: 'Alice plava', + E6E6FA: 'Lavanda', + FFF: 'Bijela' + }, + more: 'ViÅ¡e boja...', + panelTitle: 'Boje', + textColorTitle: 'Boja teksta' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/hu.js b/plugins/ckeditor4/enhancedcolorbutton/lang/hu.js new file mode 100644 index 0000000..1b71e2f --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/hu.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'hu', { + auto: 'Automatikus', + bgColorTitle: 'HáttérszÃn', + colors: { + '000': 'Fekete', + '800000': 'Bordó', + '8B4513': 'Barna', + '2F4F4F': 'Sötét türkiz', + '008080': 'Türkiz', + '000080': 'Király kék', + '4B0082': 'Indigó kék', + '696969': 'Szürke', + B22222: 'Tégla vörös', + A52A2A: 'Vörös', + DAA520: 'Arany sárga', + '006400': 'Sötét zöld', + '40E0D0': 'Türkiz', + '0000CD': 'Kék', + '800080': 'Lila', + '808080': 'Szürke', + F00: 'Piros', + FF8C00: 'Sötét narancs', + FFD700: 'Arany', + '008000': 'Zöld', + '0FF': 'Türkiz', + '00F': 'Kék', + EE82EE: 'RózsaszÃn', + A9A9A9: 'Sötét szürke', + FFA07A: 'Lazac', + FFA500: 'Narancs', + FFFF00: 'Citromsárga', + '00FF00': 'Neon zöld', + AFEEEE: 'Világos türkiz', + ADD8E6: 'Világos kék', + DDA0DD: 'Világos lila', + D3D3D3: 'Világos szürke', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Törtfehér', + FFFFE0: 'Világos sárga', + F0FFF0: 'Menta', + F0FFFF: 'Azúr kék', + F0F8FF: 'Halvány kék', + E6E6FA: 'Lavender', + FFF: 'Fehér' + }, + more: 'További szÃnek...', + panelTitle: 'SzÃnek', + textColorTitle: 'BetűszÃn' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/id.js b/plugins/ckeditor4/enhancedcolorbutton/lang/id.js new file mode 100644 index 0000000..8d2bfb0 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/id.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'id', { + auto: 'Automatic', // MISSING + bgColorTitle: 'Warna Latar Belakang', + colors: { + '000': 'Hitam', + '800000': 'Merah Tua', + '8B4513': 'Saddle Brown', // MISSING + '2F4F4F': 'Dark Slate Gray', // MISSING + '008080': 'Teal', // MISSING + '000080': 'Navy', // MISSING + '4B0082': 'Indigo', // MISSING + '696969': 'Abu-abu Gelap', + B22222: 'Merah Bata', + A52A2A: 'Coklat', + DAA520: 'Golden Rod', // MISSING + '006400': 'Hijau Gelap', + '40E0D0': 'Turquoise', // MISSING + '0000CD': 'Biru Sedang', + '800080': 'Ungu', + '808080': 'Abu-abu', + F00: 'Merah', + FF8C00: 'Jingga Gelap', + FFD700: 'Emas', + '008000': 'Hijau', + '0FF': 'Cyan', // MISSING + '00F': 'Biru', + EE82EE: 'Violet', // MISSING + A9A9A9: 'Abu-abu Redup', + FFA07A: 'Salmon Cerah', + FFA500: 'Jingga', + FFFF00: 'Kuning', + '00FF00': 'Jeruk Lemon', + AFEEEE: 'Biru Hijau Pucat', + ADD8E6: 'Biru Cerah', + DDA0DD: 'Plum', // MISSING + D3D3D3: 'Abu-abu Cerah', + FFF0F5: 'Lavender Blush', // MISSING + FAEBD7: 'Antique White', // MISSING + FFFFE0: 'Kuning Cerah', + F0FFF0: 'Honeydew', // MISSING + F0FFFF: 'Azure', // MISSING + F0F8FF: 'Alice Blue', // MISSING + E6E6FA: 'Lavender', // MISSING + FFF: 'Putih' + }, + more: 'Warna lainnya...', + panelTitle: 'Warna', + textColorTitle: 'Warna Teks' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/is.js b/plugins/ckeditor4/enhancedcolorbutton/lang/is.js new file mode 100644 index 0000000..ce6527c --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/is.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'is', { + auto: 'Sjálfval', + bgColorTitle: 'Bakgrunnslitur', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'Fleiri liti...', + panelTitle: 'Colors', + textColorTitle: 'Litur texta' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/it.js b/plugins/ckeditor4/enhancedcolorbutton/lang/it.js new file mode 100644 index 0000000..49b88f9 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/it.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'it', { + auto: 'Automatico', + bgColorTitle: 'Colore sfondo', + colors: { + '000': 'Nero', + '800000': 'Marrone Castagna', + '8B4513': 'Marrone Cuoio', + '2F4F4F': 'Grigio Fumo di Londra', + '008080': 'Acquamarina', + '000080': 'Blu Oceano', + '4B0082': 'Indigo', + '696969': 'Grigio Scuro', + B22222: 'Giallo Fiamma', + A52A2A: 'Marrone', + DAA520: 'Giallo Mimosa', + '006400': 'Verde Scuro', + '40E0D0': 'Turchese', + '0000CD': 'Blue Scuro', + '800080': 'Viola', + '808080': 'Grigio', + F00: 'Rosso', + FF8C00: 'Arancio Scuro', + FFD700: 'Oro', + '008000': 'Verde', + '0FF': 'Ciano', + '00F': 'Blu', + EE82EE: 'Violetto', + A9A9A9: 'Grigio Scuro', + FFA07A: 'Salmone', + FFA500: 'Arancio', + FFFF00: 'Giallo', + '00FF00': 'Lime', + AFEEEE: 'Turchese Chiaro', + ADD8E6: 'Blu Chiaro', + DDA0DD: 'Rosso Ciliegia', + D3D3D3: 'Grigio Chiaro', + FFF0F5: 'Lavanda Chiara', + FAEBD7: 'Bianco Antico', + FFFFE0: 'Giallo Chiaro', + F0FFF0: 'Verde Mela', + F0FFFF: 'Azzurro', + F0F8FF: 'Celeste', + E6E6FA: 'Lavanda', + FFF: 'Bianco' + }, + more: 'Altri colori...', + panelTitle: 'Colori', + textColorTitle: 'Colore testo' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ja.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ja.js new file mode 100644 index 0000000..2a152a3 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ja.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ja', { + auto: '自動', + bgColorTitle: '背景色', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'ãã®ä»–ã®è‰²...', + panelTitle: '色', + textColorTitle: 'æ–‡å—色' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ka.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ka.js new file mode 100644 index 0000000..0318267 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ka.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ka', { + auto: 'áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ ი', + bgColorTitle: 'ფáƒáƒœáƒ˜áƒ¡ ფერი', + colors: { + '000': 'შáƒáƒ•áƒ˜', + '800000': 'მუქი შინდისფერი', + '8B4513': 'ყáƒáƒ•áƒ˜áƒ¡áƒ¤áƒ”რი', + '2F4F4F': 'მáƒáƒšáƒ£áƒ ჯრნáƒáƒªáƒ ისფერი', + '008080': 'ჩáƒáƒ›áƒ¥áƒ áƒáƒšáƒ˜ ლურჯი', + '000080': 'მუქი ლურჯი', + '4B0082': 'იáƒáƒ¡áƒáƒ›áƒœáƒ˜áƒ¡áƒ¤áƒ”რი', + '696969': 'მუქი ნáƒáƒªáƒ ისფერი', + B22222: 'áƒáƒ’ურისფერი', + A52A2A: 'მუქი ყáƒáƒ•áƒ˜áƒ¡áƒ¤áƒ”რი', + DAA520: 'მáƒáƒ§áƒ•áƒ˜áƒ—áƒáƒšáƒ', + '006400': 'მუქი მწვáƒáƒœáƒ”', + '40E0D0': 'ცისფერი', + '0000CD': 'ზáƒáƒ›áƒ˜áƒ”რáƒáƒ“ ლურჯი', + '800080': 'იისფერი', + '808080': 'ნáƒáƒªáƒ ისფერი', + F00: 'წითელი', + FF8C00: 'მუქი სტáƒáƒ¤áƒ˜áƒšáƒáƒ¡áƒ¤áƒ”რი', + FFD700: 'áƒáƒ¥áƒ áƒáƒ¡áƒ¤áƒ”რი', + '008000': 'მწვáƒáƒœáƒ”', + '0FF': 'ღირცისფერი', + '00F': 'ლურჯი', + EE82EE: 'იისფერი', + A9A9A9: 'ბáƒáƒªáƒ˜ ნáƒáƒªáƒ ისფერი', + FFA07A: 'ჩáƒáƒ›áƒ¥áƒ áƒáƒšáƒ˜ ვáƒáƒ დისფერი', + FFA500: 'სტáƒáƒ¤áƒ˜áƒšáƒáƒ¡áƒ¤áƒ”რი', + FFFF00: 'ყვითელი', + '00FF00': 'ლურჯი', + AFEEEE: 'ცისფერი', + ADD8E6: 'ღირლურჯი', + DDA0DD: 'ღირიისფერი', + D3D3D3: 'ღირნáƒáƒªáƒ ისფერი', + FFF0F5: 'ღირვáƒáƒ დისფერი', + FAEBD7: 'ღირყáƒáƒ•áƒ˜áƒ¡áƒ¤áƒ”რი', + FFFFE0: 'ნáƒáƒ—ელი ყვითელი', + F0FFF0: 'ღირმწვáƒáƒœáƒ”', + F0FFFF: 'ღირცისფერი 2', + F0F8FF: 'ღირცისფერი 3', + E6E6FA: 'ღირიისფერი 2', + FFF: 'თეთრი' + }, + more: 'მეტი ფერი...', + panelTitle: 'ფერები', + textColorTitle: 'ტექსტის ფერი' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/km.js b/plugins/ckeditor4/enhancedcolorbutton/lang/km.js new file mode 100644 index 0000000..0260422 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/km.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'km', { + auto: 'ស្វáŸáž™áž”្រវážáŸ’ážáž·', + bgColorTitle: 'ពណ៌ផ្ទៃážáž¶áž„ក្រោយ', + colors: { + '000': 'ážáŸ’មៅ', + '800000': 'ážáŸ’នោážâ€‹áž…ាស់', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'ážáŸ€ážœâ€‹áž…ាស់', + '4B0082': 'ធ្លះ', + '696969': 'ប្រផáŸáŸ‡â€‹áž€áŸ’រាស់', + B22222: 'Fire Brick', + A52A2A: 'ážáŸ’នោáž', + DAA520: 'Golden Rod', + '006400': 'បៃážáž„​ចាស់', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'ប្រផáŸáŸ‡', + F00: 'ក្រហម', + FF8C00: 'ទឹក​ក្រូច​ចាស់', + FFD700: 'មាស', + '008000': 'បៃážáž„', + '0FF': 'Cyan', + '00F': 'ážáŸ€ážœ', + EE82EE: 'ស្វាយ', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'ទឹក​ក្រូច', + FFFF00: 'លឿង', + '00FF00': 'ក្រូច​ឆ្មារ', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'លឿង​ស្ដើង', + F0FFF0: 'Honeydew', + F0FFFF: 'ផ្ទៃមáŸážƒ', + F0F8FF: 'Alice Blue', + E6E6FA: 'ឡាវិនដឺ', + FFF: 'ស' + }, + more: 'ពណ៌​ផ្សáŸáž„​ទៀáž..', + panelTitle: 'ពណ៌', + textColorTitle: 'ពណ៌អក្សរ' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ko.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ko.js new file mode 100644 index 0000000..c24d2f8 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ko.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ko', { + auto: '기본 색ìƒ', + bgColorTitle: 'ë°°ê²½ 색ìƒ', + colors: { + '000': 'ê²€ì •', + '800000': '밤색', + '8B4513': '새들 브ë¼ìš´', + '2F4F4F': 'ë‹¤í¬ ìŠ¬ë ˆì´íŠ¸ ê·¸ë ˆì´', + '008080': '틸', + '000080': '네ì´ë¹„', + '4B0082': '남색', + '696969': 'ì§™ì€ íšŒìƒ‰', + B22222: 'ë²½ëŒìƒ‰', + A52A2A: '갈색', + DAA520: 'ê³¨ë“ ë¡œë“œ', + '006400': 'ì•”ë¡ìƒ‰', + '40E0D0': 'í„°ì½”ì´ì¦ˆ', + '0000CD': '미디엄 블루', + '800080': 'ë³´ë¼', + '808080': '회색', + F00: '빨강', + FF8C00: 'ì§™ì€ ì£¼í™©', + FFD700: '금색', + '008000': '녹색', + '0FF': '시안', + '00F': '파랑', + EE82EE: '남보ë¼', + A9A9A9: '딤 ê·¸ë ˆì´', + FFA07A: 'ë¼ì´íŠ¸ 새먼', + FFA500: '주황', + FFFF00: '노랑', + '00FF00': 'ë¼ìž„', + AFEEEE: 'íŒ¨ì¼ í„°ì½”ì´ì¦ˆ', + ADD8E6: 'ì—°í•œ 파랑', + DDA0DD: 'ìžë‘', + D3D3D3: 'ì—°í•œ 회색', + FFF0F5: 'ë¼ë²¤ë” 블러쉬', + FAEBD7: '앤틱 í™”ì´íŠ¸', + FFFFE0: 'ì—°í•œ 노랑', + F0FFF0: '허니듀', + F0FFFF: '하늘색', + F0F8FF: '앨리스 블루', + E6E6FA: 'ë¼ë²¤ë”', + FFF: 'í°ìƒ‰' + }, + more: 'ìƒ‰ìƒ ì„ íƒ...', + panelTitle: '색ìƒ', + textColorTitle: 'ê¸€ìž ìƒ‰ìƒ' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ku.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ku.js new file mode 100644 index 0000000..402d9b5 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ku.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ku', { + auto: 'خۆکار', + bgColorTitle: 'Ú•Û•Ù†Ú¯ÛŒ پاشبنەما', + colors: { + '000': 'Ú•Û•Ø´', + '800000': 'سۆرو ماڕوونی', + '8B4513': 'ماڕوونی', + '2F4F4F': 'سەوزی تاریك', + '008080': 'سەوز Ùˆ شین', + '000080': 'شینی تۆخ', + '4B0082': 'مۆری تۆخ', + '696969': 'ڕەساسی تۆخ', + B22222: 'سۆری تۆخ', + A52A2A: 'قاوەیی', + DAA520: 'قاوەیی بریسکەدار', + '006400': 'سەوزی تۆخ', + '40E0D0': 'شینی ناتۆخی بریسکەدار', + '0000CD': 'شینی مامناوەند', + '800080': 'پەمبەیی', + '808080': 'ڕەساسی', + F00: 'سۆر', + FF8C00: 'نارەنجی تۆخ', + FFD700: 'زەرد', + '008000': 'سەوز', + '0FF': 'شینی ئاسمانی', + '00F': 'شین', + EE82EE: 'پەمەیی', + A9A9A9: 'ڕەساسی ناتۆخ', + FFA07A: 'نارەنجی ناتۆخ', + FFA500: 'نارەنجی', + FFFF00: 'زەرد', + '00FF00': 'سەوز', + AFEEEE: 'شینی ناتۆخ', + ADD8E6: 'شینی زۆر ناتۆخ', + DDA0DD: 'پەمەیی ناتۆخ', + D3D3D3: 'ڕەساسی بریسکەدار', + FFF0F5: 'جەرگی زۆر ناتۆخ', + FAEBD7: 'جەرگی ناتۆخ', + FFFFE0: 'سپی ناتۆخ', + F0FFF0: 'هەنگوینی ناتۆخ', + F0FFFF: 'شینێکی زۆر ناتۆخ', + F0F8FF: 'شینێکی ئاسمانی زۆر ناتۆخ', + E6E6FA: 'شیری', + FFF: 'سپی' + }, + more: 'Ú•Û•Ù†Ú¯ÛŒ زیاتر...', + panelTitle: 'ڕەنگەکان', + textColorTitle: 'Ú•Û•Ù†Ú¯ÛŒ دەق' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/lt.js b/plugins/ckeditor4/enhancedcolorbutton/lang/lt.js new file mode 100644 index 0000000..2e0efe6 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/lt.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'lt', { + auto: 'Automatinis', + bgColorTitle: 'Fono spalva', + colors: { + '000': 'Juoda', + '800000': 'KaÅ¡toninÄ—', + '8B4513': 'Tamsiai ruda', + '2F4F4F': 'Pilka tamsaus Å¡iferio', + '008080': 'Teal', + '000080': 'Karinis', + '4B0082': 'Indigo', + '696969': 'Tamsiai pilka', + B22222: 'Ugnies', + A52A2A: 'Ruda', + DAA520: 'Aukso', + '006400': 'Tamsiai žalia', + '40E0D0': 'Turquoise', + '0000CD': 'VidutinÄ— mÄ—lyna', + '800080': 'VioletinÄ—', + '808080': 'Pilka', + F00: 'Raudona', + FF8C00: 'Tamsiai oranžinÄ—', + FFD700: 'AuksinÄ—', + '008000': 'Žalia', + '0FF': 'Žydra', + '00F': 'MÄ—lyna', + EE82EE: 'VioletinÄ—', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'OranžinÄ—', + FFFF00: 'Geltona', + '00FF00': 'Citrinų', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Å viesiai mÄ—lyna', + DDA0DD: 'Plum', + D3D3D3: 'Å viesiai pilka', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Å viesiai geltona', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'Balta' + }, + more: 'Daugiau spalvų...', + panelTitle: 'Spalva', + textColorTitle: 'Teksto spalva' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/lv.js b/plugins/ckeditor4/enhancedcolorbutton/lang/lv.js new file mode 100644 index 0000000..1d6be57 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/lv.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'lv', { + auto: 'AutomÄtiska', + bgColorTitle: 'Fona krÄsa', + colors: { + '000': 'Melns', + '800000': 'SarkanbrÅ«ns', + '8B4513': 'Sedlu brÅ«ns', + '2F4F4F': 'TumÅ¡as tÄfeles pelÄ“ks', + '008080': 'Zili-zaļš', + '000080': 'JÅ«ras', + '4B0082': 'Indigo', + '696969': 'TumÅ¡i pelÄ“ks', + B22222: 'ĶieÄ£eļsarkans', + A52A2A: 'BrÅ«ns', + DAA520: 'Zelta', + '006400': 'TumÅ¡i zaļš', + '40E0D0': 'TirkÄ«zs', + '0000CD': 'VidÄ“ji zils', + '800080': 'Purpurs', + '808080': 'PelÄ“ks', + F00: 'Sarkans', + FF8C00: 'TumÅ¡i oranžs', + FFD700: 'Zelta', + '008000': 'Zaļš', + '0FF': 'TumÅ¡zils', + '00F': 'Zils', + EE82EE: 'Violets', + A9A9A9: 'PelÄ“ks', + FFA07A: 'GaiÅ¡i laÅ¡krÄsas', + FFA500: 'Oranžs', + FFFF00: 'Dzeltens', + '00FF00': 'Laima', + AFEEEE: 'GaiÅ¡i tirkÄ«za', + ADD8E6: 'GaiÅ¡i zils', + DDA0DD: 'PlÅ«mju', + D3D3D3: 'GaiÅ¡i pelÄ“ks', + FFF0F5: 'Lavandas sÄrts', + FAEBD7: 'AntÄ«ki balts', + FFFFE0: 'GaiÅ¡i dzeltens', + F0FFF0: 'Meduspile', + F0FFFF: 'Debesszils', + F0F8FF: 'Alises zils', + E6E6FA: 'Lavanda', + FFF: 'Balts' + }, + more: 'PlaÅ¡Äka palete...', + panelTitle: 'KrÄsa', + textColorTitle: 'Teksta krÄsa' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/mk.js b/plugins/ckeditor4/enhancedcolorbutton/lang/mk.js new file mode 100644 index 0000000..ccb9ce2 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/mk.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'mk', { + auto: 'Automatic', // MISSING + bgColorTitle: 'Background Color', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'More Colors...', // MISSING + panelTitle: 'Colors', + textColorTitle: 'Text Color' // MISSING +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/mn.js b/plugins/ckeditor4/enhancedcolorbutton/lang/mn.js new file mode 100644 index 0000000..b47bb5c --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/mn.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'mn', { + auto: 'Ðвтоматаар', + bgColorTitle: 'ДÑвÑгÑÑ€ өнгө', + colors: { + '000': 'Хар', + '800000': 'ХүрÑн', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Саарал', + F00: 'Улаан', + FF8C00: 'Dark Orange', + FFD700: 'Ðлт', + '008000': 'Ðогоон', + '0FF': 'ЦÑнхÑÑ€', + '00F': 'Ð¥Ó©Ñ…', + EE82EE: 'Ягаан', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Улбар шар', + FFFF00: 'Шар', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Цайвар Ñаарал', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'Цагаан' + }, + more: 'ÐÑмÑлт өнгөнүүд...', + panelTitle: 'Өнгөнүүд', + textColorTitle: 'БичвÑрийн өнгө' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ms.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ms.js new file mode 100644 index 0000000..d2a6d60 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ms.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ms', { + auto: 'Otomatik', + bgColorTitle: 'Warna Latarbelakang', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'Warna lain-lain...', + panelTitle: 'Colors', + textColorTitle: 'Warna Text' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/nb.js b/plugins/ckeditor4/enhancedcolorbutton/lang/nb.js new file mode 100644 index 0000000..bc8de62 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/nb.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'nb', { + auto: 'Automatisk', + bgColorTitle: 'Bakgrunnsfarge', + colors: { + '000': 'Svart', + '800000': 'Rødbrun', + '8B4513': 'Salbrun', + '2F4F4F': 'Grønnsvart', + '008080': 'BlÃ¥grønn', + '000080': 'MarineblÃ¥tt', + '4B0082': 'Indigo', + '696969': 'Mørk grÃ¥', + B22222: 'Mørkerød', + A52A2A: 'Brun', + DAA520: 'Lys brun', + '006400': 'Mørk grønn', + '40E0D0': 'Turkis', + '0000CD': 'Medium blÃ¥', + '800080': 'Purpur', + '808080': 'GrÃ¥', + F00: 'Rød', + FF8C00: 'Mørk oransje', + FFD700: 'Gull', + '008000': 'Grønn', + '0FF': 'Cyan', + '00F': 'BlÃ¥', + EE82EE: 'Fiolett', + A9A9A9: 'Svak grÃ¥', + FFA07A: 'Rosa-oransje', + FFA500: 'Oransje', + FFFF00: 'Gul', + '00FF00': 'Lime', + AFEEEE: 'Svak turkis', + ADD8E6: 'Lys BlÃ¥', + DDA0DD: 'Plomme', + D3D3D3: 'Lys grÃ¥', + FFF0F5: 'Svak lavendelrosa', + FAEBD7: 'Antikk-hvit', + FFFFE0: 'Lys gul', + F0FFF0: 'Honningmelon', + F0FFFF: 'Svakt asurblÃ¥tt', + F0F8FF: 'Svak cyan', + E6E6FA: 'Lavendel', + FFF: 'Hvit' + }, + more: 'Flere farger...', + panelTitle: 'Farger', + textColorTitle: 'Tekstfarge' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/nl.js b/plugins/ckeditor4/enhancedcolorbutton/lang/nl.js new file mode 100644 index 0000000..688b6f7 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/nl.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'nl', { + auto: 'Automatisch', + bgColorTitle: 'Achtergrondkleur', + colors: { + '000': 'Zwart', + '800000': 'Kastanjebruin', + '8B4513': 'Chocoladebruin', + '2F4F4F': 'Donkerleigrijs', + '008080': 'Blauwgroen', + '000080': 'Marine', + '4B0082': 'Indigo', + '696969': 'Donkergrijs', + B22222: 'Baksteen', + A52A2A: 'Bruin', + DAA520: 'Donkergeel', + '006400': 'Donkergroen', + '40E0D0': 'Turquoise', + '0000CD': 'Middenblauw', + '800080': 'Paars', + '808080': 'Grijs', + F00: 'Rood', + FF8C00: 'Donkeroranje', + FFD700: 'Goud', + '008000': 'Groen', + '0FF': 'Cyaan', + '00F': 'Blauw', + EE82EE: 'Violet', + A9A9A9: 'Donkergrijs', + FFA07A: 'Lichtzalm', + FFA500: 'Oranje', + FFFF00: 'Geel', + '00FF00': 'Felgroen', + AFEEEE: 'Lichtturquoise', + ADD8E6: 'Lichtblauw', + DDA0DD: 'Pruim', + D3D3D3: 'Lichtgrijs', + FFF0F5: 'Linnen', + FAEBD7: 'Ivoor', + FFFFE0: 'Lichtgeel', + F0FFF0: 'Honingdauw', + F0FFFF: 'Azuur', + F0F8FF: 'Licht hemelsblauw', + E6E6FA: 'Lavendel', + FFF: 'Wit' + }, + more: 'Meer kleuren...', + panelTitle: 'Kleuren', + textColorTitle: 'Tekstkleur' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/no.js b/plugins/ckeditor4/enhancedcolorbutton/lang/no.js new file mode 100644 index 0000000..ddc7d07 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/no.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'no', { + auto: 'Automatisk', + bgColorTitle: 'Bakgrunnsfarge', + colors: { + '000': 'Svart', + '800000': 'Rødbrun', + '8B4513': 'Salbrun', + '2F4F4F': 'Grønnsvart', + '008080': 'BlÃ¥grønn', + '000080': 'MarineblÃ¥tt', + '4B0082': 'Indigo', + '696969': 'Mørk grÃ¥', + B22222: 'Mørkerød', + A52A2A: 'Brun', + DAA520: 'Lys brun', + '006400': 'Mørk grønn', + '40E0D0': 'Turkis', + '0000CD': 'Medium blÃ¥', + '800080': 'Purpur', + '808080': 'GrÃ¥', + F00: 'Rød', + FF8C00: 'Mørk oransje', + FFD700: 'Gull', + '008000': 'Grønn', + '0FF': 'Cyan', + '00F': 'BlÃ¥', + EE82EE: 'Fiolett', + A9A9A9: 'Svak grÃ¥', + FFA07A: 'Rosa-oransje', + FFA500: 'Oransje', + FFFF00: 'Gul', + '00FF00': 'Lime', + AFEEEE: 'Svak turkis', + ADD8E6: 'Lys BlÃ¥', + DDA0DD: 'Plomme', + D3D3D3: 'Lys grÃ¥', + FFF0F5: 'Svak lavendelrosa', + FAEBD7: 'Antikk-hvit', + FFFFE0: 'Lys gul', + F0FFF0: 'Honningmelon', + F0FFFF: 'Svakt asurblÃ¥tt', + F0F8FF: 'Svak cyan', + E6E6FA: 'Lavendel', + FFF: 'Hvit' + }, + more: 'Flere farger...', + panelTitle: 'Farger', + textColorTitle: 'Tekstfarge' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/pl.js b/plugins/ckeditor4/enhancedcolorbutton/lang/pl.js new file mode 100644 index 0000000..a75d42b --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/pl.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'pl', { + auto: 'Automatycznie', + bgColorTitle: 'Kolor tÅ‚a', + colors: { + '000': 'Czarny', + '800000': 'Kasztanowy', + '8B4513': 'Czekoladowy', + '2F4F4F': 'Ciemnografitowy', + '008080': 'Morski', + '000080': 'Granatowy', + '4B0082': 'Indygo', + '696969': 'Ciemnoszary', + B22222: 'CzerwieÅ„ żelazowa', + A52A2A: 'BrÄ…zowy', + DAA520: 'CiemnozÅ‚oty', + '006400': 'Ciemnozielony', + '40E0D0': 'Turkusowy', + '0000CD': 'Ciemnoniebieski', + '800080': 'Purpurowy', + '808080': 'Szary', + F00: 'Czerwony', + FF8C00: 'CiemnopomaraÅ„czowy', + FFD700: 'ZÅ‚oty', + '008000': 'Zielony', + '0FF': 'Cyjan', + '00F': 'Niebieski', + EE82EE: 'Fioletowy', + A9A9A9: 'Przygaszony szary', + FFA07A: 'Åososiowy', + FFA500: 'PomaraÅ„czowy', + FFFF00: 'Żółty', + '00FF00': 'Limonkowy', + AFEEEE: 'Bladoturkusowy', + ADD8E6: 'Jasnoniebieski', + DDA0DD: 'Åšliwkowy', + D3D3D3: 'Jasnoszary', + FFF0F5: 'Jasnolawendowy', + FAEBD7: 'KremowobiaÅ‚y', + FFFFE0: 'Jasnożółty', + F0FFF0: 'Bladozielony', + F0FFFF: 'Jasnolazurowy', + F0F8FF: 'JasnobÅ‚Ä™kitny', + E6E6FA: 'Lawendowy', + FFF: 'BiaÅ‚y' + }, + more: 'WiÄ™cej kolorów...', + panelTitle: 'Kolory', + textColorTitle: 'Kolor tekstu' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/pt-br.js b/plugins/ckeditor4/enhancedcolorbutton/lang/pt-br.js new file mode 100644 index 0000000..812b1a9 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/pt-br.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'pt-br', { + auto: 'Automático', + bgColorTitle: 'Cor do Plano de Fundo', + colors: { + '000': 'Preto', + '800000': 'Foquete', + '8B4513': 'Marrom 1', + '2F4F4F': 'Cinza 1', + '008080': 'Cerceta', + '000080': 'Azul Marinho', + '4B0082': 'Ãndigo', + '696969': 'Cinza 2', + B22222: 'Tijolo de Fogo', + A52A2A: 'Marrom 2', + DAA520: 'Vara Dourada', + '006400': 'Verde Escuro', + '40E0D0': 'Turquesa', + '0000CD': 'Azul Médio', + '800080': 'Roxo', + '808080': 'Cinza 3', + F00: 'Vermelho', + FF8C00: 'Laranja Escuro', + FFD700: 'Dourado', + '008000': 'Verde', + '0FF': 'Ciano', + '00F': 'Azul', + EE82EE: 'Violeta', + A9A9A9: 'Cinza Escuro', + FFA07A: 'Salmão Claro', + FFA500: 'Laranja', + FFFF00: 'Amarelo', + '00FF00': 'Lima', + AFEEEE: 'Turquesa Pálido', + ADD8E6: 'Azul Claro', + DDA0DD: 'Ameixa', + D3D3D3: 'Cinza Claro', + FFF0F5: 'Lavanda 1', + FAEBD7: 'Branco Antiguidade', + FFFFE0: 'Amarelo Claro', + F0FFF0: 'Orvalho', + F0FFFF: 'Azure', + F0F8FF: 'Azul Alice', + E6E6FA: 'Lavanda 2', + FFF: 'Branco' + }, + more: 'Mais Cores...', + panelTitle: 'Cores', + textColorTitle: 'Cor do Texto' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/pt.js b/plugins/ckeditor4/enhancedcolorbutton/lang/pt.js new file mode 100644 index 0000000..faa8622 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/pt.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'pt', { + auto: 'Automático', + bgColorTitle: 'Cor de Fundo', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Cinza claro', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Branco velho', + FFFFE0: 'Amarelo claro', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'Branco' + }, + more: 'Mais cores...', + panelTitle: 'Cores', + textColorTitle: 'Cor do texto' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ro.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ro.js new file mode 100644 index 0000000..488deb7 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ro.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ro', { + auto: 'Automatic', + bgColorTitle: 'Coloarea fundalului', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'Mai multe culori...', + panelTitle: 'Colors', + textColorTitle: 'Culoarea textului' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ru.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ru.js new file mode 100644 index 0000000..a843b99 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ru.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ru', { + auto: 'ÐвтоматичеÑки', + bgColorTitle: 'Цвет фона', + colors: { + '000': 'Чёрный', + '800000': 'Бордовый', + '8B4513': 'Кожано-коричневый', + '2F4F4F': 'Темный Ñиневато-Ñерый', + '008080': 'Сине-зелёный', + '000080': 'Тёмно-Ñиний', + '4B0082': 'Индиго', + '696969': 'Тёмно-Ñерый', + B22222: 'Кирпичный', + A52A2A: 'Коричневый', + DAA520: 'ЗолотиÑто-берёзовый', + '006400': 'Темно-зелёный', + '40E0D0': 'Бирюзовый', + '0000CD': 'Умеренно Ñиний', + '800080': 'Пурпурный', + '808080': 'Серый', + F00: 'КраÑный', + FF8C00: 'Темно-оранжевый', + FFD700: 'ЗолотиÑтый', + '008000': 'Зелёный', + '0FF': 'ВаÑильковый', + '00F': 'Синий', + EE82EE: 'Фиолетовый', + A9A9A9: 'ТуÑкло-Ñерый', + FFA07A: 'Светло-лоÑоÑевый', + FFA500: 'Оранжевый', + FFFF00: 'Жёлтый', + '00FF00': 'Лайма', + AFEEEE: 'Бледно-Ñиний', + ADD8E6: 'Свелто-голубой', + DDA0DD: 'Сливовый', + D3D3D3: 'Светло-Ñерый', + FFF0F5: 'Розово-лавандовый', + FAEBD7: 'Ðнтичный белый', + FFFFE0: 'Светло-жёлтый', + F0FFF0: 'МедвÑной роÑÑ‹', + F0FFFF: 'Лазурный', + F0F8FF: 'Бледно-голубой', + E6E6FA: 'Лавандовый', + FFF: 'Белый' + }, + more: 'Ещё цвета...', + panelTitle: 'Цвета', + textColorTitle: 'Цвет текÑта' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/si.js b/plugins/ckeditor4/enhancedcolorbutton/lang/si.js new file mode 100644 index 0000000..678b02b --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/si.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'si', { + auto: 'Automatic', // MISSING + bgColorTitle: 'පසුබිම් වර්ණය', + colors: { + '000': 'Black', // MISSING + '800000': 'Maroon', // MISSING + '8B4513': 'Saddle Brown', // MISSING + '2F4F4F': 'Dark Slate Gray', // MISSING + '008080': 'Teal', // MISSING + '000080': 'Navy', // MISSING + '4B0082': 'Indigo', // MISSING + '696969': 'Dark Gray', // MISSING + B22222: 'Fire Brick', // MISSING + A52A2A: 'Brown', // MISSING + DAA520: 'Golden Rod', // MISSING + '006400': 'Dark Green', // MISSING + '40E0D0': 'Turquoise', // MISSING + '0000CD': 'Medium Blue', // MISSING + '800080': 'Purple', // MISSING + '808080': 'Gray', // MISSING + F00: 'Red', // MISSING + FF8C00: 'Dark Orange', // MISSING + FFD700: 'Gold', // MISSING + '008000': 'Green', // MISSING + '0FF': 'Cyan', // MISSING + '00F': 'Blue', // MISSING + EE82EE: 'Violet', // MISSING + A9A9A9: 'Dim Gray', // MISSING + FFA07A: 'Light Salmon', // MISSING + FFA500: 'Orange', // MISSING + FFFF00: 'Yellow', // MISSING + '00FF00': 'Lime', // MISSING + AFEEEE: 'Pale Turquoise', // MISSING + ADD8E6: 'Light Blue', // MISSING + DDA0DD: 'Plum', // MISSING + D3D3D3: 'Light Grey', // MISSING + FFF0F5: 'Lavender Blush', // MISSING + FAEBD7: 'Antique White', // MISSING + FFFFE0: 'Light Yellow', // MISSING + F0FFF0: 'Honeydew', // MISSING + F0FFFF: 'Azure', // MISSING + F0F8FF: 'Alice Blue', // MISSING + E6E6FA: 'Lavender', // MISSING + FFF: 'White' // MISSING + }, + more: 'More Colors...', // MISSING + panelTitle: 'වර්ණය', + textColorTitle: 'අක්ෂර වර්ණ' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sk.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sk.js new file mode 100644 index 0000000..4b0e3bb --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sk.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sk', { + auto: 'Automaticky', + bgColorTitle: 'Farba pozadia', + colors: { + '000': 'ÄŒierna', + '800000': 'GaÅ¡tanová', + '8B4513': 'Sedlová hnedá', + '2F4F4F': 'Tmavo bridlicovo sivá', + '008080': 'Modrozelená', + '000080': 'Tmavomodrá', + '4B0082': 'Indigo', + '696969': 'Tmavá sivá', + B22222: 'Ohňová tehlová', + A52A2A: 'Hnedá', + DAA520: 'Zlatobyľ', + '006400': 'Tmavá zelená', + '40E0D0': 'Tyrkysová', + '0000CD': 'Stredná modrá', + '800080': 'Purpurová', + '808080': 'Sivá', + F00: 'ÄŒervená', + FF8C00: 'Tmavá oranžová', + FFD700: 'Zlatá', + '008000': 'Zelená', + '0FF': 'Azúrová', + '00F': 'Modrá', + EE82EE: 'Fialová', + A9A9A9: 'Tmavá sivá', + FFA07A: 'Svetlá lososová', + FFA500: 'Oranžová', + FFFF00: 'Žltá', + '00FF00': 'Vápenná', + AFEEEE: 'Svetlá tyrkysová', + ADD8E6: 'Svetlá modrá', + DDA0DD: 'Slivková', + D3D3D3: 'Svetlá sivá', + FFF0F5: 'Levanduľovo Äervená', + FAEBD7: 'Antická biela', + FFFFE0: 'Svetlá žltá', + F0FFF0: 'Medová', + F0FFFF: 'Azúrová', + F0F8FF: 'Alicovo modrá', + E6E6FA: 'Levanduľová', + FFF: 'Biela' + }, + more: 'Viac farieb...', + panelTitle: 'Farby', + textColorTitle: 'Farba textu' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sl.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sl.js new file mode 100644 index 0000000..c02e289 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sl.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sl', { + auto: 'Samodejno', + bgColorTitle: 'Barva ozadja', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'VeÄ barv...', + panelTitle: 'Colors', + textColorTitle: 'Barva besedila' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sq.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sq.js new file mode 100644 index 0000000..c2e1d01 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sq.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sq', { + auto: 'Automatik', + bgColorTitle: 'Ngjyra e Prapavijës', + colors: { + '000': 'E zezë', + '800000': 'Ngjyrë gështenjë', + '8B4513': 'Ngjyrë Shale Kafe', + '2F4F4F': 'Ngjyrë Gri të errët ardëz', + '008080': 'Ngjyrë bajukë', + '000080': 'Ngjyrë Marine', + '4B0082': 'Indigo', + '696969': 'Gri e Errët', + B22222: 'Tullë në Flakë', + A52A2A: 'Ngjytë Kafe', + DAA520: 'Shkop i Artë', + '006400': 'E Gjelbër e Errët', + '40E0D0': 'Ngjyrë e Bruztë', + '0000CD': 'E Kaltër e Mesme', + '800080': 'Vjollcë', + '808080': 'Gri', + F00: 'E Kuqe', + FF8C00: 'E Portokalltë e Errët', + FFD700: 'Ngjyrë Ari', + '008000': 'E Gjelbërt', + '0FF': 'Cyan', + '00F': 'E Kaltër', + EE82EE: 'Vjollcë', + A9A9A9: 'Gri e Zbehtë', + FFA07A: 'Salmon i Ndritur', + FFA500: 'E Portokalltë', + FFFF00: 'E Verdhë', + '00FF00': 'Ngjyrë Gëlqere', + AFEEEE: 'Ngjyrë e Bruztë e Zbehtë', + ADD8E6: 'E Kaltër e Ndritur', + DDA0DD: 'Ngjyrë Llokumi', + D3D3D3: 'Gri e Ndritur', + FFF0F5: 'Ngjyrë Purpur e Skuqur', + FAEBD7: 'E Bardhë Antike', + FFFFE0: 'E verdhë e Ndritur', + F0FFF0: 'Ngjyrë Nektari', + F0FFFF: 'Ngjyrë Qielli', + F0F8FF: 'E Kaltër Alice', + E6E6FA: 'Ngjyrë Purpur e Zbetë', + FFF: 'E bardhë' + }, + more: 'Më Shumë Ngjyra...', + panelTitle: 'Ngjyrat', + textColorTitle: 'Ngjyra e Tekstit' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sr-latn.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sr-latn.js new file mode 100644 index 0000000..7623e72 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sr-latn.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sr-latn', { + auto: 'Automatski', + bgColorTitle: 'Boja pozadine', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'ViÅ¡e boja...', + panelTitle: 'Colors', + textColorTitle: 'Boja teksta' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sr.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sr.js new file mode 100644 index 0000000..7fd9b09 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sr.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sr', { + auto: 'ÐутоматÑки', + bgColorTitle: 'Боја позадине', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'Више боја...', + panelTitle: 'Colors', + textColorTitle: 'Боја текÑта' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sv.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sv.js new file mode 100644 index 0000000..7adf8d8 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sv.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sv', { + auto: 'Automatisk', + bgColorTitle: 'Bakgrundsfärg', + colors: { + '000': 'Svart', + '800000': 'Rödbrun', + '8B4513': 'Mörkbrun', + '2F4F4F': 'SkiffergrÃ¥', + '008080': 'Kricka', + '000080': 'MarinblÃ¥', + '4B0082': 'Indigo', + '696969': 'MörkgrÃ¥', + B22222: 'Tegelsten', + A52A2A: 'Brun', + DAA520: 'Mörk guld', + '006400': 'Mörkgrön', + '40E0D0': 'Turkos', + '0000CD': 'Medium blÃ¥', + '800080': 'Lila', + '808080': 'GrÃ¥', + F00: 'Röd', + FF8C00: 'Mörkorange', + FFD700: 'Guld', + '008000': 'Grön', + '0FF': 'Turkos', + '00F': 'BlÃ¥', + EE82EE: 'Violett', + A9A9A9: 'Matt grÃ¥', + FFA07A: 'Laxrosa', + FFA500: 'Orange', + FFFF00: 'Gul', + '00FF00': 'Lime', + AFEEEE: 'Ljusturkos', + ADD8E6: 'LjusblÃ¥', + DDA0DD: 'Plommon', + D3D3D3: 'LjusgrÃ¥', + FFF0F5: 'Ljus lavendel', + FAEBD7: 'Antikvit', + FFFFE0: 'Ljusgul', + F0FFF0: 'Honungsdagg', + F0FFFF: 'AzurblÃ¥', + F0F8FF: 'AliceblÃ¥', + E6E6FA: 'Lavendel', + FFF: 'Vit' + }, + more: 'Fler färger...', + panelTitle: 'Färger', + textColorTitle: 'Textfärg' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/th.js b/plugins/ckeditor4/enhancedcolorbutton/lang/th.js new file mode 100644 index 0000000..548ff91 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/th.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'th', { + auto: 'สีà¸à¸±à¸•à¹‚นมัติ', + bgColorTitle: 'สีพื้นหลัง', + colors: { + '000': 'Black', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Brown', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Gray', + F00: 'Red', + FF8C00: 'Dark Orange', + FFD700: 'Gold', + '008000': 'Green', + '0FF': 'Cyan', + '00F': 'Blue', + EE82EE: 'Violet', + A9A9A9: 'Dim Gray', + FFA07A: 'Light Salmon', + FFA500: 'Orange', + FFFF00: 'Yellow', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'White' + }, + more: 'เลืà¸à¸à¸ªà¸µà¸à¸·à¹ˆà¸™à¹†...', + panelTitle: 'Colors', + textColorTitle: 'สีตัวà¸à¸±à¸à¸©à¸£' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/tr.js b/plugins/ckeditor4/enhancedcolorbutton/lang/tr.js new file mode 100644 index 0000000..a0b95f1 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/tr.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'tr', { + auto: 'Otomatik', + bgColorTitle: 'Arka Renk', + colors: { + '000': 'Siyah', + '800000': 'Kestane', + '8B4513': 'Koyu Kahverengi', + '2F4F4F': 'Koyu KurÅŸuni Gri', + '008080': 'Teal', + '000080': 'Mavi', + '4B0082': 'Çivit Mavisi', + '696969': 'Silik Gri', + B22222: 'AteÅŸ TuÄŸlası', + A52A2A: 'Kahverengi', + DAA520: 'Altun Sırık', + '006400': 'Koyu YeÅŸil', + '40E0D0': 'Turkuaz', + '0000CD': 'Orta Mavi', + '800080': 'Pembe', + '808080': 'Gri', + F00: 'Kırmızı', + FF8C00: 'Koyu Portakal', + FFD700: 'Altın', + '008000': 'YeÅŸil', + '0FF': 'Ciyan', + '00F': 'Mavi', + EE82EE: 'MenekÅŸe', + A9A9A9: 'Koyu Gri', + FFA07A: 'Açık Sarımsı', + FFA500: 'Portakal', + FFFF00: 'Sarı', + '00FF00': 'Açık YeÅŸil', + AFEEEE: 'Sönük Turkuaz', + ADD8E6: 'Açık Mavi', + DDA0DD: 'Mor', + D3D3D3: 'Açık Gri', + FFF0F5: 'Eflatun Pembe', + FAEBD7: 'Antik Beyaz', + FFFFE0: 'Açık Sarı', + F0FFF0: 'Balsarısı', + F0FFFF: 'Gök Mavisi', + F0F8FF: 'Reha Mavi', + E6E6FA: 'Eflatun', + FFF: 'Beyaz' + }, + more: 'DiÄŸer renkler...', + panelTitle: 'Renkler', + textColorTitle: 'Yazı Rengi' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/tt.js b/plugins/ckeditor4/enhancedcolorbutton/lang/tt.js new file mode 100644 index 0000000..d099f44 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/tt.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'tt', { + auto: 'Ðвтоматик', + bgColorTitle: 'Фон Ñ‚Ó©Ñе', + colors: { + '000': 'Кара', + '800000': 'Бордо', + '8B4513': 'Дарчин', + '2F4F4F': 'ÐÑпид Ñоры', + '008080': 'Күкле-Ñшелле', + '000080': 'Куе күк', + '4B0082': 'Индиго', + '696969': 'Куе Ñоры', + B22222: 'Кармин', + A52A2A: 'Ð§Ð¸Ñ ÐºÑ‹Ð·Ñ‹Ð»', + DAA520: 'Ðлтын каен', + '006400': 'Үлән', + '40E0D0': 'Фирәзә', + '0000CD': 'ФарÑÑ‹ күк', + '800080': 'Шәмәхә', + '808080': 'Соры', + F00: 'Кызыл', + FF8C00: 'Кабак', + FFD700: 'Ðлтын', + '008000': 'Яшел', + '0FF': 'Ðчык зәңгәр', + '00F': 'Зәңгәр', + EE82EE: 'Миләүшә', + A9A9A9: 'Ðчык Ñоры', + FFA07A: 'Кызгылт Ñары алÑу', + FFA500: 'Кызгылт Ñары', + FFFF00: 'Сары', + '00FF00': 'Лайм', + AFEEEE: 'Тонык күк', + ADD8E6: 'Тонык күкбаш', + DDA0DD: 'ÐкÑыл шәмәхә', + D3D3D3: 'Ðчык Ñоры', + FFF0F5: 'Ðл ала миләүшә', + FAEBD7: 'Җитен', + FFFFE0: 'Ðчык Ñары', + F0FFF0: 'ÐкÑыл көрән', + F0FFFF: 'Ðп-ак', + F0F8FF: 'ÐкÑыл зәңгәр диңгез', + E6E6FA: 'Ðла миләүшә', + FFF: 'Ðк' + }, + more: 'Башка Ñ‚Ó©Ñләр...', + panelTitle: 'ТөÑләр', + textColorTitle: 'ТекÑÑ‚ Ñ‚Ó©Ñе' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ug.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ug.js new file mode 100644 index 0000000..3e64360 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ug.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ug', { + auto: 'ئۆزلۈكىدىن', + bgColorTitle: 'تەگلىك رەÚÚ¯Ù‰', + colors: { + '000': 'قارا', + '800000': 'قىزغۇچ سÛرىق', + '8B4513': 'توق قوÚۇر', + '2F4F4F': 'قارامتۇل ÙŠÛشىل', + '008080': 'كۆكۈش ÙŠÛشىل', + '000080': 'قارامتۇل ÙƒÛ†Ùƒ', + '4B0082': 'كۆكۈش كۈلرەÚ', + '696969': 'قارامتۇل كۈلرەÚ', + B22222: 'خىش قىزىل', + A52A2A: 'قوÚۇر', + DAA520: 'ئالتۇن سÛرىق', + '006400': 'توق ÙŠÛشىل', + '40E0D0': 'ÙƒÛ†ÙƒÛˆÚ† ÙŠÛشىل', + '0000CD': 'ئوتتۇراھال ÙƒÛ†Ùƒ', + '800080': 'بىنەپشە', + '808080': 'كۈلرەÚ', + F00: 'قىزىل', + FF8C00: 'توق قىزغۇچ سÛرىق', + FFD700: 'ئالتۇن', + '008000': 'ÙŠÛشىل', + '0FF': 'ÙŠÛشىل ÙƒÛ†Ùƒ', + '00F': 'ÙƒÛ†Ùƒ', + EE82EE: 'قىزغۇچ بىنەپشە', + A9A9A9: 'توق كۈلرەÚ', + FFA07A: 'كاۋا Ú†Ûچىكى سÛرىق', + FFA500: 'قىزغۇچ سÛرىق', + FFFF00: 'سÛرىق', + '00FF00': 'Lime', + AFEEEE: 'سۇس ھاۋا رەÚ', + ADD8E6: 'ئوچۇق ÙƒÛ†Ùƒ', + DDA0DD: 'قىزغۇچ بىنەپشە', + D3D3D3: 'سۇس ÙƒÛ†ÙƒÛˆÚ† كۈلرەÚ', + FFF0F5: 'سۇس قىزغۇچ بىنەپشە', + FAEBD7: 'Antique White', + FFFFE0: 'سۇس سÛرىق', + F0FFF0: 'Honeydew', + F0FFFF: 'ئاسمان كۆكى', + F0F8FF: 'سۇس ÙƒÛ†Ùƒ', + E6E6FA: 'سۇس بىنەپشە', + FFF: 'ئاق' + }, + more: 'باشقا رەÚ', + panelTitle: 'رەÚ', + textColorTitle: 'تÛكىست رەÚÚ¯Ù‰' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/uk.js b/plugins/ckeditor4/enhancedcolorbutton/lang/uk.js new file mode 100644 index 0000000..08d54ae --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/uk.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'uk', { + auto: 'Ðвто', + bgColorTitle: 'Колір фону', + colors: { + '000': 'Чорний', + '800000': 'Бордовий', + '8B4513': 'Коричневий', + '2F4F4F': 'Темний Ñіро-зелений', + '008080': 'МорÑької хвилі', + '000080': 'Сливовий', + '4B0082': 'Індиго', + '696969': 'ТемноÑірий', + B22222: 'Темночервоний', + A52A2A: 'Каштановий', + DAA520: 'Бежевий', + '006400': 'Темнозелений', + '40E0D0': 'Бірюзовий', + '0000CD': 'ТемноÑиній', + '800080': 'Пурпурний', + '808080': 'Сірий', + F00: 'Червоний', + FF8C00: 'Темнооранжевий', + FFD700: 'Жовтий', + '008000': 'Зелений', + '0FF': 'Синьо-зелений', + '00F': 'Синій', + EE82EE: 'Фіолетовий', + A9A9A9: 'СвітлоÑірий', + FFA07A: 'Рожевий', + FFA500: 'Оранжевий', + FFFF00: 'ЯÑкравожовтий', + '00FF00': 'Салатовий', + AFEEEE: 'Світлобірюзовий', + ADD8E6: 'Блакитний', + DDA0DD: 'Світлофіолетовий', + D3D3D3: 'СріблÑÑтий', + FFF0F5: 'Світлорожевий', + FAEBD7: 'Світлооранжевий', + FFFFE0: 'Світложовтий', + F0FFF0: 'Світлозелений', + F0FFFF: 'Світлий Ñиньо-зелений', + F0F8FF: 'Світлоблакитний', + E6E6FA: 'Лавандовий', + FFF: 'Білий' + }, + more: 'Кольори...', + panelTitle: 'Кольори', + textColorTitle: 'Колір текÑту' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/vi.js b/plugins/ckeditor4/enhancedcolorbutton/lang/vi.js new file mode 100644 index 0000000..350a79d --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/vi.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'vi', { + auto: 'Tá»± Ä‘á»™ng', + bgColorTitle: 'Mà u ná»n', + colors: { + '000': 'Äen', + '800000': 'Maroon', + '8B4513': 'Saddle Brown', + '2F4F4F': 'Dark Slate Gray', + '008080': 'Teal', + '000080': 'Navy', + '4B0082': 'Indigo', + '696969': 'Dark Gray', + B22222: 'Fire Brick', + A52A2A: 'Nâu', + DAA520: 'Golden Rod', + '006400': 'Dark Green', + '40E0D0': 'Turquoise', + '0000CD': 'Medium Blue', + '800080': 'Purple', + '808080': 'Xám', + F00: 'Äá»', + FF8C00: 'Dark Orange', + FFD700: 'Và ng', + '008000': 'Xanh lá cây', + '0FF': 'Cyan', + '00F': 'Xanh da trá»i', + EE82EE: 'TÃm', + A9A9A9: 'Xám tối', + FFA07A: 'Light Salmon', + FFA500: 'Mà u cam', + FFFF00: 'Và ng', + '00FF00': 'Lime', + AFEEEE: 'Pale Turquoise', + ADD8E6: 'Light Blue', + DDA0DD: 'Plum', + D3D3D3: 'Light Grey', + FFF0F5: 'Lavender Blush', + FAEBD7: 'Antique White', + FFFFE0: 'Light Yellow', + F0FFF0: 'Honeydew', + F0FFFF: 'Azure', + F0F8FF: 'Alice Blue', + E6E6FA: 'Lavender', + FFF: 'Trắng' + }, + more: 'Mà u khác...', + panelTitle: 'Mà u sắc', + textColorTitle: 'Mà u chữ' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/zh-cn.js b/plugins/ckeditor4/enhancedcolorbutton/lang/zh-cn.js new file mode 100644 index 0000000..2b8eaac --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/zh-cn.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'zh-cn', { + auto: '自动', + bgColorTitle: '背景颜色', + colors: { + '000': '黑', + '800000': 'è¤çº¢', + '8B4513': 'æ·±è¤', + '2F4F4F': '墨绿', + '008080': '绿æ¾çŸ³', + '000080': '海军è“', + '4B0082': 'é›è“', + '696969': 'æš—ç°', + B22222: 'ç –çº¢', + A52A2A: 'è¤', + DAA520: '金黄', + '006400': '深绿', + '40E0D0': 'è“绿', + '0000CD': 'ä¸è“', + '800080': 'ç´«', + '808080': 'ç°', + F00: '红', + FF8C00: '深橙', + FFD700: '金', + '008000': '绿', + '0FF': 'é’', + '00F': 'è“', + EE82EE: 'ç´«ç½—å…°', + A9A9A9: 'æ·±ç°', + FFA07A: '亮橙', + FFA500: 'æ©™', + FFFF00: '黄', + '00FF00': '水绿', + AFEEEE: '粉è“', + ADD8E6: '亮è“', + DDA0DD: '梅红', + D3D3D3: 'æ·¡ç°', + FFF0F5: '淡紫红', + FAEBD7: 'å¤è‘£ç™½', + FFFFE0: '淡黄', + F0FFF0: '蜜白', + F0FFFF: '天è“', + F0F8FF: 'æ·¡è“', + E6E6FA: 'æ·¡ç´«', + FFF: '白' + }, + more: '其它颜色...', + panelTitle: '颜色', + textColorTitle: '文本颜色' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/zh.js b/plugins/ckeditor4/enhancedcolorbutton/lang/zh.js new file mode 100644 index 0000000..413dd54 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/lang/zh.js @@ -0,0 +1,53 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'zh', { + auto: '自動', + bgColorTitle: '背景é¡è‰²', + colors: { + '000': '黑色', + '800000': 'æ —è‰²', + '8B4513': 'éžè¤è‰²', + '2F4F4F': '暗瓦ç°è‰²', + '008080': '水壓色', + '000080': '丈é’æ¾€', + '4B0082': 'é›é’', + '696969': 'æ·±ç°è‰²', + B22222: '磚紅色', + A52A2A: 'è¤è‰²', + DAA520: '金黃色', + '006400': 'æ·±ç¶ è‰²', + '40E0D0': 'é’ç¶ è‰²', + '0000CD': 'è—色', + '800080': '紫色', + '808080': 'ç°è‰²', + F00: '紅色', + FF8C00: '深橘色', + FFD700: '金色', + '008000': 'ç¶ è‰²', + '0FF': 'è—ç¶ è‰²', + '00F': 'è—色', + EE82EE: '紫色', + A9A9A9: 'æš—ç°è‰²', + FFA07A: '亮é®ç´…', + FFA500: '橘色', + FFFF00: '黃色', + '00FF00': 'é®®ç¶ è‰²', + AFEEEE: 'ç¶ æ¾è‰²', + ADD8E6: 'æ·ºè—色', + DDA0DD: '枚紅色', + D3D3D3: 'æ·ºç°è‰²', + FFF0F5: '淺紫色', + FAEBD7: '骨董白', + FFFFE0: '淺黃色', + F0FFF0: 'èœœç“œç¶ ', + F0FFFF: '天è—色', + F0F8FF: '愛麗斯è˜', + E6E6FA: '淺紫色', + FFF: '白色' + }, + more: '更多é¡è‰²', + panelTitle: 'é¡è‰²', + textColorTitle: 'æ–‡å—é¡è‰²' +} ); diff --git a/plugins/ckeditor4/enhancedcolorbutton/plugin.js b/plugins/ckeditor4/enhancedcolorbutton/plugin.js new file mode 100644 index 0000000..7466463 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/plugin.js @@ -0,0 +1,408 @@ +/** + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * @fileOverview The "enhancedcolorbutton" plugin that developed based on + * "colorbutton" that makes it possible to assign + * text and background colors to editor contents. + * "enhancedcolorbutton" will provide convinient to user + * through enhancing "colorbutton" plugin. + * For modified parts, see CHANGES.md file. + * + */ +CKEDITOR.plugins.add( 'enhancedcolorbutton', { + requires: 'panelbutton,floatpanel', + // jscs:disable maximumLineLength + lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% + // jscs:enable maximumLineLength + icons: 'bgcolor,textcolor', // %REMOVE_LINE_CORE% + hidpi: true, // %REMOVE_LINE_CORE% + init: function( editor ) { + var config = editor.config, + lang = editor.lang.enhancedcolorbutton; + + // Modified: loaded css file for icons apearence. + var link = document.createElement( 'link' ); + link.setAttribute( 'rel', 'stylesheet' ); + link.setAttribute( 'type', 'text/css' ); + link.setAttribute( 'href', this.path + 'css/content.css' ); + document.getElementsByTagName( 'head' )[0].appendChild( link ); + + // Modified: define object for custom variables. + var ENHANCED_COLOR_BUTTON = ENHANCED_COLOR_BUTTON || {}; + + if ( !CKEDITOR.env.hc ) { + addButton( 'TextColor2', 'fore', lang.textColorTitle, 10 ); + addButton( 'BGColor2', 'back', lang.bgColorTitle, 20 ); + + // Modified: add new buttons which set font color or background color with previous used color. + editor.ui.addButton( 'TextColor', { + label: lang.textColorTitle, + command: 'setForeFontColor', + toolbar: 'colors,' + 9 + } ); + editor.ui.addButton( 'BGColor', { + label: lang.bgColorTitle, + command: 'setBackFontColor', + toolbar: 'colors,' + 19 + } ); + } + // Modified: add new commands which set font color or background color with previous used color. + editor.addCommand( 'setForeFontColor', { + exec: function( editor, color ) { + color = color || ENHANCED_COLOR_BUTTON.previousForeColor; + CKEDITOR.tools.callFunction( ENHANCED_COLOR_BUTTON.applyColorStyle, color, 'fore' ); + } + } ); + editor.addCommand( 'setBackFontColor', { + exec: function( editor, color ) { + color = color || ENHANCED_COLOR_BUTTON.previousBackColor; + CKEDITOR.tools.callFunction( ENHANCED_COLOR_BUTTON.applyColorStyle, color, 'back' ); + } + } ); + + // Function for adding indicator of guick apply buttons. + var qaFn = function( editor, qaFn ) { + return function() { + // Modified: add child node to enhanced color button icons. + if ( !ENHANCED_COLOR_BUTTON.currentTextColorDiv || !ENHANCED_COLOR_BUTTON.currentBgColorDiv ) { + + var textColorBtn = document.getElementById( 'cke_' + editor.name ).querySelectorAll( '.cke_button_icon.cke_button__textcolor_icon' )[0], + bgColorBtn = document.getElementById( 'cke_' + editor.name ).querySelectorAll( '.cke_button_icon.cke_button__bgcolor_icon' )[0]; + + var currentTextColorDiv = document.createElement( 'div' ), + currentBgColorDiv = document.createElement( 'div' ); + + currentTextColorDiv.setAttribute( 'id', editor.name + '_enhanced_color_button_text' ); + currentBgColorDiv.setAttribute( 'id', editor.name + '_enhanced_color_button_bg' ); + + if ( currentTextColorDiv.classList ) { + currentTextColorDiv.classList.add( 'enhanced_color_button_text_color' ); + currentBgColorDiv.classList.add( 'enhanced_color_button_bg_color' ); + } else { // For IE 9-. + currentTextColorDiv.className += ' enhanced_color_button_text_color'; + currentBgColorDiv.className += ' enhanced_color_button_bg_color'; + } + + textColorBtn.appendChild( currentTextColorDiv ); + bgColorBtn.appendChild( currentBgColorDiv ); + + ENHANCED_COLOR_BUTTON.currentTextColorDiv = currentTextColorDiv; + ENHANCED_COLOR_BUTTON.currentBgColorDiv = currentBgColorDiv; + + // Remove event listener. + editor.removeListener( 'instanceReady', qaFn ); + } + + }; + }; + + // Add event listener. + editor.on( 'instanceReady', qaFn( editor, qaFn ) ); + + function addButton( name, type, title, order ) { + var style = new CKEDITOR.style( config[ 'colorButton_' + type + 'Style' ] ), + colorBoxId = CKEDITOR.tools.getNextId() + '_colorBox'; + + editor.ui.add( name, CKEDITOR.UI_PANELBUTTON, { + label: title, + title: title, + modes: { wysiwyg: 1 }, + editorFocus: 0, + toolbar: 'colors,' + order, + allowedContent: style, + requiredContent: style, + + panel: { + css: CKEDITOR.skin.getPath( 'editor' ), + attributes: { role: 'listbox', 'aria-label': lang.panelTitle } + }, + + onBlock: function( panel, block ) { + block.autoSize = true; + block.element.addClass( 'cke_colorblock' ); + block.element.setHtml( renderColors( panel, type, colorBoxId ) ); + // The block should not have scrollbars (#5933, #6056) + block.element.getDocument().getBody().setStyle( 'overflow', 'hidden' ); + + CKEDITOR.ui.fire( 'ready', this ); + + var keys = block.keys; + var rtl = editor.lang.dir == 'rtl'; + keys[ rtl ? 37 : 39 ] = 'next'; // ARROW-RIGHT + keys[ 40 ] = 'next'; // ARROW-DOWN + keys[ 9 ] = 'next'; // TAB + keys[ rtl ? 39 : 37 ] = 'prev'; // ARROW-LEFT + keys[ 38 ] = 'prev'; // ARROW-UP + keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB + keys[ 32 ] = 'click'; // SPACE + }, + + refresh: function() { + if ( !editor.activeFilter.check( style ) ) + this.setState( CKEDITOR.TRISTATE_DISABLED ); + }, + + // The automatic colorbox should represent the real color (#6010) + onOpen: function() { + + var selection = editor.getSelection(), + block = selection && selection.getStartElement(), + path = editor.elementPath( block ), + color; + + if ( !path ) + return; + + // Find the closest block element. + block = path.block || path.blockLimit || editor.document.getBody(); + + // The background color might be transparent. In that case, look up the color in the DOM tree. + do { + color = block && block.getComputedStyle( type == 'back' ? 'background-color' : 'color' ) || 'transparent'; + } + while ( type == 'back' && color == 'transparent' && block && ( block = block.getParent() ) ); + + // The box should never be transparent. + if ( !color || color == 'transparent' ) + color = '#ffffff'; + + if ( config.colorButton_enableAutomatic !== false ) { + this._.panel._.iframe.getFrameDocument().getById( colorBoxId ).setStyle( 'background-color', color ); + } + + return color; + } + } ); + } + + function renderColors( panel, type, colorBoxId ) { + var output = [], + colors = config.colorButton_colors.split( ',' ), + // Tells if we should include "More Colors..." button. + moreColorsEnabled = editor.plugins.colordialog && config.colorButton_enableMore !== false, + // aria-setsize and aria-posinset attributes are used to indicate size of options, because + // screen readers doesn't play nice with table, based layouts (#12097). + total = colors.length + ( moreColorsEnabled ? 2 : 1 ); + + var clickFn = CKEDITOR.tools.addFunction( function( color, type ) { + var applyColorStyle = arguments.callee; + function onColorDialogClose( evt ) { + this.removeListener( 'ok', onColorDialogClose ); + this.removeListener( 'cancel', onColorDialogClose ); + + evt.name == 'ok' && applyColorStyle( this.getContentElement( 'picker', 'selectedColor' ).getValue(), type ); + } + + if ( color == '?' ) { + editor.openDialog( 'colordialog', function() { + this.on( 'ok', onColorDialogClose ); + this.on( 'cancel', onColorDialogClose ); + } ); + + return; + } + + editor.focus(); + + panel.hide(); + + editor.fire( 'saveSnapshot' ); + + // Clean up any conflicting style within the range. + editor.removeStyle( new CKEDITOR.style( config[ 'colorButton_' + type + 'Style' ], { color: 'inherit' } ) ); + + if ( color ) { + var colorStyle = config[ 'colorButton_' + type + 'Style' ]; + + colorStyle.childRule = type == 'back' ? + function( element ) { + // It's better to apply background color as the innermost style. (#3599) + // Except for "unstylable elements". (#6103) + return isUnstylable( element ); + } : function( element ) { + // Fore color style must be applied inside links instead of around it. (#4772,#6908) + return !( element.is( 'a' ) || element.getElementsByTag( 'a' ).count() ) || isUnstylable( element ); + }; + + editor.applyStyle( new CKEDITOR.style( colorStyle, { color: color } ) ); + } + + // Modified: store current color. + // Modified: set background color with the color user selected. + if ( type == 'fore' ) { + ENHANCED_COLOR_BUTTON.previousForeColor = color ? color : ''; + ENHANCED_COLOR_BUTTON.currentTextColorDiv.style.backgroundColor = ENHANCED_COLOR_BUTTON.previousForeColor; + } else { + ENHANCED_COLOR_BUTTON.previousBackColor = color ? color : ''; + ENHANCED_COLOR_BUTTON.currentBgColorDiv.style.backgroundColor = ENHANCED_COLOR_BUTTON.previousBackColor; + } + + editor.fire( 'saveSnapshot' ); + } ); + + // Modified: store the function to make newly added buttons available to call a function which applies the color previously used. + ENHANCED_COLOR_BUTTON.applyColorStyle = clickFn; + + if ( config.colorButton_enableAutomatic !== false ) { + // Render the "Automatic" button. + output.push( '<a class="cke_colorauto" _cke_focus=1 hidefocus=true' + + ' title="', lang.auto, '"' + + ' onclick="CKEDITOR.tools.callFunction(', clickFn, ',null,\'', type, '\');return false;"' + + ' href="javascript:void(\'', lang.auto, '\')"' + + ' role="option" aria-posinset="1" aria-setsize="', total, '">' + + '<table role="presentation" cellspacing=0 cellpadding=0 width="100%">' + + '<tr>' + + '<td>' + + '<span class="cke_colorbox" id="', colorBoxId, '"></span>' + + '</td>' + + '<td colspan=7 align=center>', lang.auto, '</td>' + + '</tr>' + + '</table>' + + '</a>' ); + } + output.push( '<table role="presentation" cellspacing=0 cellpadding=0 width="100%">' ); + + // Render the color boxes. + for ( var i = 0; i < colors.length; i++ ) { + if ( ( i % 8 ) === 0 ) + output.push( '</tr><tr>' ); + + var parts = colors[ i ].split( '/' ), + colorName = parts[ 0 ], + colorCode = parts[ 1 ] || colorName; + + // The data can be only a color code (without #) or colorName + color code + // If only a color code is provided, then the colorName is the color with the hash + // Convert the color from RGB to RRGGBB for better compatibility with IE and <font>. See #5676 + if ( !parts[ 1 ] ) + colorName = '#' + colorName.replace( /^(.)(.)(.)$/, '$1$1$2$2$3$3' ); + + var colorLabel = editor.lang.enhancedcolorbutton.colors[ colorCode ] || colorCode; + output.push( '<td>' + + '<a class="cke_colorbox" _cke_focus=1 hidefocus=true' + + ' title="', colorLabel, '"' + + ' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'', colorName, '\',\'', type, '\'); return false;"' + + ' href="javascript:void(\'', colorLabel, '\')"' + + ' role="option" aria-posinset="', ( i + 2 ), '" aria-setsize="', total, '">' + + '<span class="cke_colorbox" style="background-color:#', colorCode, '"></span>' + + '</a>' + + '</td>' ); + } + + // Render the "More Colors" button. + if ( moreColorsEnabled ) { + output.push( '</tr>' + + '<tr>' + + '<td colspan=8 align=center>' + + '<a class="cke_colormore" _cke_focus=1 hidefocus=true' + + ' title="', lang.more, '"' + + ' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'?\',\'', type, '\');return false;"' + + ' href="javascript:void(\'', lang.more, '\')"', ' role="option" aria-posinset="', total, '" aria-setsize="', total, '">', lang.more, '</a>' + + '</td>' ); // tr is later in the code. + } + + output.push( '</tr></table>' ); + + return output.join( '' ); + } + + function isUnstylable( ele ) { + return ( ele.getAttribute( 'contentEditable' ) == 'false' ) || ele.getAttribute( 'data-nostyle' ); + } + } +} ); + +/** + * Whether to enable the **More Colors** button in the color selectors. + * + * Read more in the [documentation](#!/guide/dev_colorbutton) + * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html). + * + * config.colorButton_enableMore = false; + * + * @cfg {Boolean} [colorButton_enableMore=true] + * @member CKEDITOR.config + */ + +/** + * Defines the colors to be displayed in the color selectors. This is a string + * containing hexadecimal notation for HTML colors, without the `'#'` prefix. + * + * **Since 3.3:** A color name may optionally be defined by prefixing the entries with + * a name and the slash character. For example, `'FontColor1/FF9900'` will be + * displayed as the color `#FF9900` in the selector, but will be output as `'FontColor1'`. + * + * Read more in the [documentation](#!/guide/dev_colorbutton) + * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html). + * + * // Brazil colors only. + * config.colorButton_colors = '00923E,F8C100,28166F'; + * + * config.colorButton_colors = 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00'; + * + * @cfg {String} [colorButton_colors=see source] + * @member CKEDITOR.config + */ +CKEDITOR.config.colorButton_colors = '000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,' + + 'B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,' + + 'F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,' + + 'FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,' + + 'FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF'; + +/** + * Stores the style definition that applies the text foreground color. + * + * Read more in the [documentation](#!/guide/dev_colorbutton) + * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html). + * + * // This is actually the default value. + * config.colorButton_foreStyle = { + * element: 'span', + * styles: { color: '#(color)' } + * }; + * + * @cfg [colorButton_foreStyle=see source] + * @member CKEDITOR.config + */ +CKEDITOR.config.colorButton_foreStyle = { + element: 'span', + styles: { 'color': '#(color)' }, + overrides: [ { + element: 'font', attributes: { 'color': null } + } ] +}; + +/** + * Stores the style definition that applies the text background color. + * + * Read more in the [documentation](#!/guide/dev_colorbutton) + * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html). + * + * // This is actually the default value. + * config.colorButton_backStyle = { + * element: 'span', + * styles: { 'background-color': '#(color)' } + * }; + * + * @cfg [colorButton_backStyle=see source] + * @member CKEDITOR.config + */ +CKEDITOR.config.colorButton_backStyle = { + element: 'span', + styles: { 'background-color': '#(color)' } +}; + +/** + * Whether to enable the **Automatic** button in the color selectors. + * + * Read more in the [documentation](#!/guide/dev_colorbutton) + * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html). + * + * config.colorButton_enableAutomatic = false; + * + * @cfg {Boolean} [colorButton_enableAutomatic=true] + * @member CKEDITOR.config + */ diff --git a/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.html b/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.html new file mode 100644 index 0000000..889ef0f --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.html @@ -0,0 +1 @@ +<textarea id='noFocus'></textarea> diff --git a/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.js b/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.js new file mode 100644 index 0000000..ddd0c70 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.js @@ -0,0 +1,174 @@ +/* bender-tags: editor,unit */ +/* bender-ckeditor-plugins: enhancedcolorbutton,toolbar,wysiwygarea */ + +( function() { + 'use strict'; + + bender.editor = true; + + bender.test( { + 'test opening text/background color': function() { + var ed = this.editor, bot = this.editorBot; + var txtColorBtn = ed.ui.get( 'TextColor2' ), + bgColorBtn = ed.ui.get( 'BGColor2' ); + + bot.setHtmlWithSelection( '[<h1 style="color: #00FF00; background: #FF0000">Moo</h1>]' ); + + // Check if automatic text color is obtained correctly. + txtColorBtn.click( ed ); + assert.areEqual( '#00ff00', CKEDITOR.tools.convertRgbToHex( txtColorBtn.onOpen() ), 'Text color must match.' ); + + // Check if automatic background color is obtained correctly. + bgColorBtn.click( ed ); + assert.areEqual( '#ff0000', CKEDITOR.tools.convertRgbToHex( bgColorBtn.onOpen() ), 'Text color must match.' ); + }, + + // #10975 + 'test open palette without focus': function() { + var editor = CKEDITOR.replace( 'noFocus' ); + editor.on( 'instanceReady', function() { + resume( function() { + var txtColorBtn = editor.ui.get( 'TextColor2' ); + txtColorBtn.click( editor ); + + assert.areEqual( CKEDITOR.TRISTATE_ON, txtColorBtn._.state, 'txtColorBtn.click should not throw an error.' ); + } ); + } ); + + wait(); + }, + + 'test enableAutomatic=true option': function() { + bender.editorBot.create( { + name: 'editor1', + config: { + colorButton_enableAutomatic: true + } + }, function( bot ) { + var editor = bot.editor, + txtColorBtn = editor.ui.get( 'TextColor2' ), + bgColorBtn = editor.ui.get( 'BGColor2' ); + + txtColorBtn.click( editor ); + assert.areEqual( 1, txtColorBtn._.panel.getBlock( txtColorBtn._.id ).element.find( '.cke_colorauto' ).count(), 'Automatic button should be visible.' ); + + bgColorBtn.click( editor ); + assert.areEqual( 1, bgColorBtn._.panel.getBlock( bgColorBtn._.id ).element.find( '.cke_colorauto' ).count(), 'Automatic button should be visible.' ); + } ); + }, + + 'test enableAutomatic=false option': function() { + bender.editorBot.create( { + name: 'editor2', + config: { + colorButton_enableAutomatic: false + } + }, function( bot ) { + var editor = bot.editor, + txtColorBtn = editor.ui.get( 'TextColor2' ), + bgColorBtn = editor.ui.get( 'BGColor2' ); + + txtColorBtn.click( editor ); + assert.areEqual( 0, txtColorBtn._.panel.getBlock( txtColorBtn._.id ).element.find( '.cke_colorauto' ).count(), 'Automatic button should not be visible.' ); + + bgColorBtn.click( editor ); + assert.areEqual( 0, bgColorBtn._.panel.getBlock( bgColorBtn._.id ).element.find( '.cke_colorauto' ).count(), 'Automatic button should not be visible.' ); + } ); + }, + + // Additional test cases for enhanced color button. + 'test applying text colors': function() { + var ed = this.editor, + bot = this.editorBot, + color = '#ffff00', + expected = 'color:' + color, + actual; + + bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' ); + ed.execCommand( 'setForeFontColor', [ color ] ); + + actual = CKEDITOR.tools.convertRgbToHex( ed.editable().find( 'span' ).getItem( 0 ).getAttributes().style ).replace( /\s+/g, '' ).replace( /;+/g, '' ).toLowerCase(); + assert.areEqual( expected, actual, 'text color should be changed with selected one' ); + }, + + 'test applying background colors': function() { + var ed = this.editor, + bot = this.editorBot, + color = '#ffd700', + expected = 'background-color:' + color, + actual; + + bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' ); + ed.execCommand( 'setBackFontColor', [ color ] ); + + actual = CKEDITOR.tools.convertRgbToHex( ed.editable().find( 'span' ).getItem( 0 ).getAttributes().style ).replace( /\s+/g, '' ).replace( /;+/g, '' ).toLowerCase(); + assert.areEqual( expected, actual, 'background color should be changed with selected one' ); + }, + + 'test quick apply button of text color': function() { + var ed = this.editor, + bot = this.editorBot, + color = '#008000', + expected = 'color:' + color, + actual, + txtColorBtn = ed.ui.get( 'TextColor' ); + + bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' ); + ed.execCommand( 'setForeFontColor', [ color ] ); + bot.setHtmlWithSelection( '[<p>Another test sentence for color change</p>]' ); + txtColorBtn.click( ed ); + + actual = CKEDITOR.tools.convertRgbToHex( ed.editable().find( 'span' ).getItem( 0 ).getAttributes().style ).replace( /\s+/g, '' ).replace( /;+/g, '' ).toLowerCase(); + assert.areEqual( expected, actual, 'text color should be changed with lastly used one' ); + }, + + 'test quick apply button of backgound color': function() { + var ed = this.editor, + bot = this.editorBot, + color = '#d3d3d3', + expected = 'background-color:' + color, + actual, + bgColorBtn = ed.ui.get( 'BGColor' ); + + bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' ); + ed.execCommand( 'setBackFontColor', [ color ] ); + bot.setHtmlWithSelection( '[<p>Another test sentence for color change</p>]' ); + bgColorBtn.click( ed ); + + actual = CKEDITOR.tools.convertRgbToHex( ed.editable().find( 'span' ).getItem( 0 ).getAttributes().style ).replace( /\s+/g, '' ).replace( /;+/g, '' ).toLowerCase(); + assert.areEqual( expected, actual, 'text color should be changed with lastly used one' ); + }, + + 'test indicator of text color': function() { + if ( CKEDITOR.env.ie ) + assert.ignore(); + + var ed = this.editor, + bot = this.editorBot, + color = '#faebd7', + actual; + + bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' ); + ed.execCommand( 'setForeFontColor', [ color ] ); + + actual = CKEDITOR.tools.convertRgbToHex( document.getElementById( ed.name + '_enhanced_color_button_text' ).style.backgroundColor ).toLowerCase(); + assert.areEqual( color, actual, 'background color of indicator should be set with lastly used one' ); + }, + + 'test indicator of background color': function() { + if ( CKEDITOR.env.ie ) + assert.ignore(); + + var ed = this.editor, + bot = this.editorBot, + color = '#ffd700', + actual; + + bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' ); + ed.execCommand( 'setBackFontColor', [ color ] ); + + actual = CKEDITOR.tools.convertRgbToHex( document.getElementById( ed.name + '_enhanced_color_button_bg' ).style.backgroundColor ).toLowerCase(); + assert.areEqual( color, actual, 'background color of indicator should be set with lastly used one' ); + } + } ); +} )(); diff --git a/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.html b/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.html new file mode 100644 index 0000000..02195ae --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.html @@ -0,0 +1,16 @@ +<p>Editor 1</p> +<textarea cols="80" id="editor1" name="editor1" rows="10"> + <p><strong>Apollo 11</strong> was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p> +</textarea> + +<p>Editor 2</p> +<div contenteditable="true" id="editor2"> + <p><strong>Apollo 11</strong> was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p> +</div> + +<script> + CKEDITOR.replace( 'editor1', { + colorButton_enableAutomatic: false + } ); + CKEDITOR.inline( 'editor2' ); +</script> diff --git a/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.md b/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.md new file mode 100644 index 0000000..8f90075 --- /dev/null +++ b/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.md @@ -0,0 +1,17 @@ +@bender-tags: 12440, tc, 4.5.8 +@bender-ui: collapsed +@bender-ckeditor-plugins: wysiwygarea, toolbar, colorbutton, floatingspace + +### Scenario 1: + +1. Click *Text Color* button in Editor 1. + * **Expected**: There is no *Automatic* option. +1. Click *Background Color* button in Editor 1. + * **Expected**: There is no *Automatic* option. + +### Scenario 2: + +1. Click *Text Color* button in Editor 2. + * **Expected**: There is *Automatic* option. +1. Click *Background Color* button in Editor 2. + * **Expected**: There is *Automatic* option. diff --git a/plugins/ckeditor4/eqneditor/_notes/dwsync.xml b/plugins/ckeditor4/eqneditor/_notes/dwsync.xml new file mode 100755 index 0000000..6ad5557 --- /dev/null +++ b/plugins/ckeditor4/eqneditor/_notes/dwsync.xml @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8" ?> <dwsync> <file name="plugin.js" server="70.86.99.35//home/codecogs/domains/latex.codecogs.com/public_html/" local="3453964725" remote="319783739114188684" Dst="-1" /> <file name="plugin.js" server="192.155.228.10/html/" local="3480571058" remote="319783739124432508" Dst="-1" /> <file name=".DS_Store" server="192.168.1.106//home/codecogs/html/" local="3454008094" remote="319783739123571165" Dst="-1" /> <file name="plugin.js" server="192.168.1.106//home/codecogs/html/" local="3476475718" remote="319783739123571165" Dst="-1" /> <file name=".DS_Store" server="192.168.1.107//home/codecogs/html/" local="3454008094" remote="319783739123607449" Dst="-1" /> <file name="plugin.js" server="192.168.1.107//home/codecogs/html/" local="3479896453" remote="319783739123765133" Dst="-1" /> <file name=".DS_Store" server="192.168.1.108//home/codecogs/html/" local="3454008094" remote="319783739123884034" Dst="-1" /> <file name="plugin.js" server="192.168.1.108//home/codecogs/html/" local="3480571058" remote="319783739124450335" Dst="-1" /> </dwsync> \ No newline at end of file diff --git a/plugins/ckeditor4/eqneditor/dialogs/_notes/dwsync.xml b/plugins/ckeditor4/eqneditor/dialogs/_notes/dwsync.xml new file mode 100755 index 0000000..b846c44 --- /dev/null +++ b/plugins/ckeditor4/eqneditor/dialogs/_notes/dwsync.xml @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8" ?> <dwsync> <file name="eqneditor.js" server="70.86.99.35//home/codecogs/domains/latex.codecogs.com/public_html/" local="3465626774" remote="319783739114188674" Dst="-1" /> <file name="eqneditor.js" server="192.155.228.10/html/" local="3479836247" remote="319783739123832448" Dst="-1" /> <file name="eqneditor.js" server="192.168.1.106//home/codecogs/html/" local="3476468861" remote="319783739123571165" Dst="-1" /> <file name="eqneditor.js" server="192.168.1.107//home/codecogs/html/" local="3479836247" remote="319783739123704929" Dst="-1" /> <file name="eqneditor.js" server="192.168.1.108//home/codecogs/html/" local="3479836247" remote="319783739123884034" Dst="-1" /> </dwsync> \ No newline at end of file diff --git a/plugins/ckeditor4/eqneditor/dialogs/eqneditor.js b/plugins/ckeditor4/eqneditor/dialogs/eqneditor.js new file mode 100755 index 0000000..6af9935 --- /dev/null +++ b/plugins/ckeditor4/eqneditor/dialogs/eqneditor.js @@ -0,0 +1,87 @@ +/* + Equation Editor Plugin for CKEditor v4 + Version 1.4 + + This plugin allows equations to be created and edited from within CKEditor. + For more information goto: http://www.codecogs.com/latex/integration/ckeditor_v4/install.php + + Copyright CodeCogs 2006-2013 + Written by Will Bateman. + + Special Thanks to: + - Kyle Jones for a fix to allow multiple editor to load on one page +*/ +window.CCounter=0; +CKEDITOR.dialog.add( 'eqneditorDialog', function(editor) +{ + var http = ('https:' == document.location.protocol ? 'https://' : 'http://'); + window.CCounter++; + + return { + title : editor.lang.eqneditor.title, + minWidth : 550, + minHeight : 380, + resizable: CKEDITOR.DIALOG_RESIZE_NONE, + contents : [ + { + id : 'CCEquationEditor', + label : 'EqnEditor', + elements : [ + { + type: 'html', + html: '<div id="CCtoolbar'+window.CCounter+'"></div>', + style: 'margin-top:-9px' + }, + { + type: 'html', + html: '<label for="CClatex'+window.CCounter+'">Equation (LaTeX):</label>', + }, + { + type: 'html', + html: '<textarea id="CClatex'+window.CCounter+'" rows="5"></textarea>', + style:'border:1px solid #8fb6bd; width:540px; font-size:16px; padding:5px; background-color:#ffc', + }, + { + type: 'html', + html: '<label for="CCequation'+window.CCounter+'">Preview:</label>' + }, + { + type :'html', + html: '<div style="position:absolute; left:5px; bottom:0; z-index:999"><a href="http://www.codecogs.com" target="_blank"><img src="'+http+'latex.codecogs.com/images/poweredbycc.gif" alt="Powered by CodeCogs" style="vertical-align:-4px; border:none"/></a> <a href="http://www.codecogs.com/latex/about.php" target="_blank">About</a> | <a href="http://www.codecogs.com/latex/popup.php" target="_blank">Install</a> | <a href="http://www.codecogs.com/pages/forums/forum_view.php?f=28" target="_blank">Forum</a> | <a href="http://www.codecogs.com" target="_blank">CodeCogs</a> © 2007-2014</div><img id="CCequation'+window.CCounter+'" src="'+http+'www.codecogs.com/images/spacer.gif" />' + } + ] + } + ], + + onLoad : function() { + EqEditor.embed('CCtoolbar'+window.CCounter,'','efull'); + EqEditor.add(new EqTextArea('CCequation'+window.CCounter, 'CClatex'+window.CCounter),false); + }, + + onShow : function() { + var dialog = this, + sel = editor.getSelection(), + image = sel.getStartElement().getAscendant('img',true); + + // has the users selected an equation. Make sure we have the image element, include itself + if(image) + { + var sName = image.getAttribute('src').match( /(gif|svg)\.latex\?(.*)/ ); + if(sName!=null) EqEditor.getTextArea().setText(sName[2]); + dialog.insertMode = true; + } + + // set-up the field values based on selected or newly created image + dialog.setupContent( dialog.image ); + }, + + onOk : function() { + var eqn = editor.document.createElement( 'img' ); + eqn.setAttribute( 'alt', EqEditor.getTextArea().getLaTeX()); + eqn.setAttribute( 'src', EqEditor.getTextArea().exportEquation('urlencoded')); + editor.insertElement(eqn); + Example.add_history(EqEditor.getTextArea().getLaTeX()); + } + }; +}); + diff --git a/plugins/ckeditor4/eqneditor/dialogs/lang/_notes/dwsync.xml b/plugins/ckeditor4/eqneditor/dialogs/lang/_notes/dwsync.xml new file mode 100755 index 0000000..9676e75 --- /dev/null +++ b/plugins/ckeditor4/eqneditor/dialogs/lang/_notes/dwsync.xml @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8" ?> <dwsync> <file name="en.js" server="70.86.99.35//home/codecogs/domains/latex.codecogs.com/public_html/" local="3453645807" remote="319783739114188676" Dst="-1" /> <file name="en.js" server="192.168.1.106//home/codecogs/html/" local="3453645807" remote="319783739123571165" Dst="-1" /> <file name="en.js" server="192.168.1.107//home/codecogs/html/" local="3453645807" remote="319783739123607450" Dst="-1" /> <file name="en.js" server="192.155.228.10/html/" local="3453645807" remote="319783739123836048" Dst="-1" /> <file name="en.js" server="192.168.1.108//home/codecogs/html/" local="3453645807" remote="319783739123884035" Dst="-1" /> </dwsync> \ No newline at end of file diff --git a/plugins/ckeditor4/eqneditor/dialogs/lang/en.js b/plugins/ckeditor4/eqneditor/dialogs/lang/en.js new file mode 100755 index 0000000..eaf1e3a --- /dev/null +++ b/plugins/ckeditor4/eqneditor/dialogs/lang/en.js @@ -0,0 +1,8 @@ + +CKEDITOR.plugins.setLang( 'eqneditor', 'en', +{ + title : 'CodeCogs Equation Editor', + menu : 'Maths', + toolbar : 'Insert Equation', + edit : 'Edit Equation' +}); diff --git a/plugins/ckeditor4/eqneditor/icons/_notes/dwsync.xml b/plugins/ckeditor4/eqneditor/icons/_notes/dwsync.xml new file mode 100755 index 0000000..5f956b2 --- /dev/null +++ b/plugins/ckeditor4/eqneditor/icons/_notes/dwsync.xml @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8" ?> <dwsync> <file name="eqneditor.png" server="70.86.99.35//home/codecogs/domains/latex.codecogs.com/public_html/" local="3438414374" remote="319783739114188679" Dst="-1" /> <file name=".DS_Store" server="192.168.1.106//home/codecogs/html/" local="3438414387" remote="319783739123571165" Dst="-1" /> <file name="eqneditor.png" server="192.168.1.106//home/codecogs/html/" local="3438414374" remote="319783739123571165" Dst="-1" /> <file name=".DS_Store" server="192.168.1.107//home/codecogs/html/" local="3438414387" remote="319783739123607450" Dst="-1" /> <file name="eqneditor.png" server="192.168.1.107//home/codecogs/html/" local="3438414374" remote="319783739123607450" Dst="-1" /> <file name="eqneditor.png" server="192.155.228.10/html/" local="3438414374" remote="319783739123836048" Dst="-1" /> <file name=".DS_Store" server="192.168.1.108//home/codecogs/html/" local="3438414387" remote="319783739123884035" Dst="-1" /> <file name="eqneditor.png" server="192.168.1.108//home/codecogs/html/" local="3438414374" remote="319783739123884035" Dst="-1" /> </dwsync> \ No newline at end of file diff --git a/plugins/ckeditor4/eqneditor/icons/eqneditor.png b/plugins/ckeditor4/eqneditor/icons/eqneditor.png new file mode 100755 index 0000000000000000000000000000000000000000..2915f424ee0b711a8f4b2d47cc953049654e8994 GIT binary patch literal 1093 zcmaJ=TSyd97@jgDB*AV_5p|d~&}!$lj_nR^vb*DD!?A5$a(k+A=BSg-oN4ChuKN&V z^w0%Ck)Y`E(1jo@D5{5&$m$`i2qKDlDX8c|7pNW*!p^8`J+uv+Ip_TR-}m3Xvp><? zP+GF0grca@c%z&odzrW97nA?$Z<8w7mgBlKZb9uhqdJg^=%@{XxT$u)BvkdjUH4!O zMHQ7BsWeV2O_GL8M)iD{tZ5T8Mb*@1ZB^@n7_`9-!wS=1uHU4Ap@->KQQ;Ij20M+$ zoC8~O%_%L{rG<35b|a|CN`%0KSOr<L+j6CBn4aR5$k{WqG?;S1U154UskD*+G2}oX zGMr!Is(Dad#qd>Js4BD`2prF`yuflB{5&U#8zhbgGapT&IeNR4l<Q|=kz1JV#MqWt zHj~LPnE->F4wesvLM$h+g5W0}ez(uUYSwSLzC42rUCl9UY#<AGjA|R|!C{(YI$eTk z&(d1%Oq)o<*sN-^Ji~b<<sB8}|E{Jv>+Rws{FCoLiQQD64cR1gQIDgM!L|FmP_`6v zpo)=`La006#Y88<$n8Wnh_#3e4-{21EYC89P!uU{xmdL{7?;B|;b06ymx5eSs20Sk zfE)?(e4P-9@`0c%M<R8iC<H@+JXS_pj|nZD$LfEuVnM7Y2Gb^yW#|~aP_K8838spc zjKaAH1^H&Mdf{9G1+gqihV@4K*QoO*q95-#D_nA!l|HnH-W?+BWN+dDc@)>;awL^~ zek>U&y~8ayKX9vJI9fRztvEDRv1Ghrcx=lvFdVhQa0tG+`jLLKc+J44@_DsqeNTN) zF74a%?lxNXd0PWj(!I23<$(v(;jch=G~j#D@pyEw_sYbGksJK6{lnbY<vE*m>-3R+ zu#j5hFB|gpo_Q<&${j5MJ9oqGwAD2Jdc5`F!Se6Vj=yTmWiEa>z4hFQmpAT~uYKH5 ubob}|;*;+;jS5_-wQ|+oiPw|0a~DvFQ%%v2>jp-=haInLmM=ti^#2CB<7#98 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/eqneditor/lang/_notes/dwsync.xml b/plugins/ckeditor4/eqneditor/lang/_notes/dwsync.xml new file mode 100755 index 0000000..85ee306 --- /dev/null +++ b/plugins/ckeditor4/eqneditor/lang/_notes/dwsync.xml @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8" ?> <dwsync> <file name="en.js" server="70.86.99.36//home/codecogs/domains/latex.codecogs.com/public_html/" local="3383988448" remote="24858853597" Dst="-1" /> <file name="en.js" server="70.86.99.35" local="3383988448" remote="12028370156" Dst="-1" /> <file name="en.js" server="70.86.99.35//home/codecogs/domains/latex.codecogs.com/public_html/" local="3453645337" remote="319783739114188682" Dst="-1" /> <file name="en.js" server="192.168.1.106//home/codecogs/html/" local="3453645337" remote="319783739123571165" Dst="-1" /> <file name="en.js" server="192.168.1.107//home/codecogs/html/" local="3453645337" remote="319783739123607450" Dst="-1" /> <file name="en.js" server="192.155.228.10/html/" local="3453645337" remote="319783739123836048" Dst="-1" /> <file name="en.js" server="192.168.1.108//home/codecogs/html/" local="3453645337" remote="319783739123884035" Dst="-1" /> </dwsync> \ No newline at end of file diff --git a/plugins/ckeditor4/eqneditor/lang/en.js b/plugins/ckeditor4/eqneditor/lang/en.js new file mode 100755 index 0000000..eaf1e3a --- /dev/null +++ b/plugins/ckeditor4/eqneditor/lang/en.js @@ -0,0 +1,8 @@ + +CKEDITOR.plugins.setLang( 'eqneditor', 'en', +{ + title : 'CodeCogs Equation Editor', + menu : 'Maths', + toolbar : 'Insert Equation', + edit : 'Edit Equation' +}); diff --git a/plugins/ckeditor4/eqneditor/plugin.js b/plugins/ckeditor4/eqneditor/plugin.js new file mode 100755 index 0000000..40232e7 --- /dev/null +++ b/plugins/ckeditor4/eqneditor/plugin.js @@ -0,0 +1,102 @@ +/* + Equation Editor Plugin for CKEditor v4 + Version 1.4 + + This plugin allows equations to be created and edited from within CKEditor. + For more information goto: http://www.codecogs.com/latex/integration/ckeditor_v4/install.php + + Copyright CodeCogs 2006-2013 + Written by Will Bateman. +*/ +CKEDITOR.plugins.add( 'eqneditor', { + availableLangs:{en:1}, + lang : "en", + requires: [ 'dialog' ], + icons: "eqneditor", + + init : function(editor) + { + var host='latex.codecogs.com'; + var http=('https:' == document.location.protocol ? 'https://' : 'http://'); + + // First make sure we have loaded the necessary scripts + CKEDITOR.scriptLoader.load( [ + http+host+'/js/eq_config.js', + http+host+'/js/eq_editor-lite-17.js', + ]); + + // Load Additional CSS + var fileref=document.createElement("link"); + fileref.setAttribute("rel", "stylesheet"); + fileref.setAttribute("type", "text/css"); + fileref.setAttribute("href", http+host+'/eqneditor/css/equation-embed.css'); + document.getElementsByTagName("head")[0].appendChild(fileref); + + var pluginCmd='eqneditorDialog'; + + // Add the link and unlink buttons. + editor.addCommand(pluginCmd, new CKEDITOR.dialogCommand(pluginCmd, + { + allowedContent: 'img[src,alt]', + requiredContent: 'img[src,alt]' + }) + ); + + CKEDITOR.dialog.add(pluginCmd, this.path+"dialogs/eqneditor.js"); + + editor.ui.addButton( 'EqnEditor', { + label : editor.lang.eqneditor.toolbar, + command : pluginCmd, + icon: this.path + 'icons/eqneditor.png', + toolbar: 'insert' + }); + + // add context-menu entry + if (editor.contextMenu) + { + editor.addMenuGroup(editor.lang.eqneditor.menu); + editor.addMenuItem( 'eqneditor', { + label : editor.lang.eqneditor.edit, + icon : this.path + 'icons/eqneditor.png', + command : pluginCmd, + group : editor.lang.eqneditor.menu + }); + + // if the selected item is image of class 'mathImg', + // we shold be interested in it + editor.contextMenu.addListener( function(element) { + var res={}; + if (element.getAscendant('img', true)) + { + var sName = element.getAttribute('src').match( /(gif|svg)\.latex\?(.*)/ ); + if(sName!=null) + { + res['eqneditor'] = CKEDITOR.TRISTATE_OFF; + return res; + } + } + }); + + } + + editor.on( 'doubleclick', function(evt) + { + var element = evt.data.element; + if (element && element.is('img')) + { + var sName = element.getAttribute('src').match( /(gif|svg)\.latex\?(.*)/ ); + if(sName!=null) + { + evt.data.dialog = pluginCmd; + evt.cancelBubble = true; + evt.returnValue = false; + evt.stop(); + } + } + }, null, null, 1); + + } +}); + + + diff --git a/plugins/ckeditor4/fixed/plugin.js b/plugins/ckeditor4/fixed/plugin.js new file mode 100644 index 0000000..a7a0e9e --- /dev/null +++ b/plugins/ckeditor4/fixed/plugin.js @@ -0,0 +1,47 @@ +/* +* Plugin developed by Netbroad, C.B. +* +* LICENCE: GPL, LGPL, MPL +* NON-COMMERCIAL PLUGIN. +* +* Website: netbroad.eu +* Twitter: @netbroadcb +* Facebook: Netbroad +* LinkedIn: Netbroad +* +*/ + +CKEDITOR.plugins.add( 'fixed', { + init: function( editor ) { + window.addEventListener('scroll', function(){ + var content = document.getElementsByClassName('cke_contents').item(0); + var toolbar = document.getElementsByClassName('cke_top').item(0); + var editor = document.getElementsByClassName('cke').item(0); + var inner = document.getElementsByClassName('cke_inner').item(0); + var scrollvalue = document.documentElement.scrollTop > document.body.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop; + + toolbar.style.width = content.offsetWidth + "px"; + toolbar.style.top = "0px"; + toolbar.style.left = "0px"; + toolbar.style.right = "0px"; + toolbar.style.margin = "0 auto"; + toolbar.style.boxSizing = "border-box"; + + if(toolbar.offsetTop <= scrollvalue){ + toolbar.style.position = "fixed"; + content.style.paddingTop = toolbar.offsetHeight + "px"; + } + + if(editor.offsetTop > scrollvalue && (editor.offsetTop + editor.offsetHeight) >= (scrollvalue + toolbar.offsetHeight)){ + toolbar.style.position = "relative"; + content.style.paddingTop = "0px"; + } + + if((editor.offsetTop + editor.offsetHeight) < (scrollvalue + toolbar.offsetHeight)){ + toolbar.style.position = "absolute"; + toolbar.style.top = "calc(100% - " + toolbar.offsetHeight + "px)"; + inner.style.position = "relative"; + } + }, false); + } +}); \ No newline at end of file diff --git a/plugins/ckeditor4/floating-tools/README.md b/plugins/ckeditor4/floating-tools/README.md new file mode 100644 index 0000000..a5070c1 --- /dev/null +++ b/plugins/ckeditor4/floating-tools/README.md @@ -0,0 +1,20 @@ + + +----- + +Floating-Tools +============== + +Plugin for CKEditor to show an floating toolbar for quick access to formatting functions! + + +Documentation +============= + +Also have a look at the project-page at +http://stracker-phil.github.com/Floating-Tools/ + +----- + +Philipp Stracker +http://www.stracker.net diff --git a/plugins/ckeditor4/floating-tools/plugin.js b/plugins/ckeditor4/floating-tools/plugin.js new file mode 100644 index 0000000..e332868 --- /dev/null +++ b/plugins/ckeditor4/floating-tools/plugin.js @@ -0,0 +1,582 @@ +/** + * Floating-Tools + * Author: Philipp Stracker (2013) + * Project page: http://stracker-phil.github.com/Floating-Tools/ + */ +(function() { + + var floatingtools = function() { + this.dom = null; // the main toolbar-object + this.toolbars = []; + this.is_visible = false; + + this.hide_on_blur = true; //!TODO: Make this an configuration option + + this.toolbarsize = false; + this.editoroffset = false; + this.mousepos = {x:0, y:0}; + }; + + + + + CKEDITOR.plugins.add( 'floating-tools', { + requires: 'toolbar', + + + init: function( editor ) { + + + /** + * Create the UI elements required by this plugin + * UI is the floating toolbar + * Many parts of this function are taken from the toolbar plugin + */ + editor.on( 'uiSpace', function( event ) { + // Create toolbar only once... + event.removeListener(); + + editor.floatingtools = new floatingtools(); + + var labelId = CKEDITOR.tools.getNextId(); + + var output = [ + // Did not find a nicer way to include the CSS required for the toolbar... + '<style>', + '.pos-relative {position:relative}', + '.cke_floatingtools{', + 'position:absolute;', + 'left:0;', + 'top:-500px;', + 'padding: 5px 0 0 6px;', + 'border:1px solid #b1b1b1;', + 'border-radius:3px;', + 'box-shadow: 0 1px 10px rgba(0,0,0,0.3);', + 'transition:opacity .1s;-o-transition:opacity .1s;-moz-transition:opacity .1s;-webkit-transition:opacity .1s;', + '}', + '</style>', + '<span id="', labelId, '" class="cke_voice_label">', editor.lang.toolbar.toolbars, '</span>', + '<span id="' + editor.ui.spaceId( 'floatingtools' ) + '" class="cke_floatingtools cke_top" role="group" aria-labelledby="', labelId, '" onmousedown="return false;">' ]; + + var groupStarted, pendingSeparator; + var toolbars = editor.floatingtools.toolbars, + toolbar = getFloatingToolbarConfig( editor ); + + + // Build the toolbar + for ( var r = 0; r < toolbar.length; r++ ) { + var toolbarId, + toolbarObj = 0, + toolbarName, + row = toolbar[ r ], + items; + + // It's better to check if the row object is really + // available because it's a common mistake to leave + // an extra comma in the toolbar definition + // settings, which leads on the editor not loading + // at all in IE. (#3983) + if ( !row ) + continue; + + if ( groupStarted ) { + output.push( '</span>' ); + groupStarted = 0; + pendingSeparator = 0; + } + + if ( row === '/' ) { + output.push( '<span class="cke_toolbar_break"></span>' ); + continue; + } + + items = row.items || row; + + // Create all items defined for this toolbar. + for ( var i = 0; i < items.length; i++ ) { + var item = items[ i ], + canGroup; + + if ( item ) { + if ( item.type == CKEDITOR.UI_SEPARATOR ) { + // Do not add the separator immediately. Just save + // it be included if we already have something in + // the toolbar and if a new item is to be added (later). + pendingSeparator = groupStarted && item; + continue; + } + + canGroup = item.canGroup !== false; + + // Initialize the toolbar first, if needed. + if ( !toolbarObj ) { + // Create the basic toolbar object. + toolbarId = CKEDITOR.tools.getNextId(); + toolbarObj = { id: toolbarId, items: [] }; + toolbarName = row.name && ( editor.lang.toolbar.toolbarGroups[ row.name ] || row.name ); + + // Output the toolbar opener. + output.push( '<span id="', toolbarId, '" class="cke_toolbar"', ( toolbarName ? ' aria-labelledby="' + toolbarId + '_label"' : '' ), ' role="toolbar">' ); + + // If a toolbar name is available, send the voice label. + toolbarName && output.push( '<span id="', toolbarId, '_label" class="cke_voice_label">', toolbarName, '</span>' ); + + output.push( '<span class="cke_toolbar_start"></span>' ); + + // Add the toolbar to the "editor.toolbox.toolbars" + // array. + var index = toolbars.push( toolbarObj ) - 1; + + // Create the next/previous reference. + if ( index > 0 ) { + toolbarObj.previous = toolbars[ index - 1 ]; + toolbarObj.previous.next = toolbarObj; + } + } + + if ( canGroup ) { + if ( !groupStarted ) { + output.push( '<span class="cke_toolgroup" role="presentation">' ); + groupStarted = 1; + } + } else if ( groupStarted ) { + output.push( '</span>' ); + groupStarted = 0; + } + + function addItem( item ) { + var itemObj = item.render( editor, output ); + index = toolbarObj.items.push( itemObj ) - 1; + + if ( index > 0 ) { + itemObj.previous = toolbarObj.items[ index - 1 ]; + itemObj.previous.next = itemObj; + } + + itemObj.toolbar = toolbarObj; + + // No need for keyboard handlers, the toolbar is only accessibly by mouse + /* + itemObj.onkey = itemKeystroke; + + // Fix for #3052: + // Prevent JAWS from focusing the toolbar after document load. + itemObj.onfocus = function() { + if ( !editor.toolbox.focusCommandExecuted ) + editor.focus(); + }; + */ + } + + if ( pendingSeparator ) { + addItem( pendingSeparator ); + pendingSeparator = 0; + } + + addItem( item ); + + } + } + + if ( groupStarted ) { + output.push( '</span>' ); + groupStarted = 0; + pendingSeparator = 0; + } + + if ( toolbarObj ) + output.push( '<span class="cke_toolbar_end"></span></span>' ); + + } + + + output.push( '</span>' ); + event.data.html += output.join( '' ); + }); + + + + /** + * Do the magic: Attach eventhandlers to see if text is selected + * When text is selected then show the floating toolbar, else hide it + */ + editor.on('contentDom', function( event ) { + + unfocus_toolbar(); + + /** + * Attach an eventhandler to the mouse-up event + */ + editor.document.on('mouseup', function( mouse_event ) { + // When user right-clicks, ctrl-clicks, etc. then do not show the toolbar + data = mouse_event.data.$; + if (data.button !== 0 || data.ctrlKey || data.altKey || data.shiftKey) return true; + + // When the user clears the selection by single-clicking in the editor then this event is fired before the selection is removed + // So we add a short delay to give the browser a chance to remove the selection before we do anything + setTimeout( function() { + if (is_text_selected()) { + // Save the current mouse-position + set_mousepos (mouse_event.data.$); + // when there is text selected after mouse-up: show the toolbar + editor.execCommand('showFloatingTools'); + } else { + // when no text is selected then hide the toolbar + editor.execCommand('hideFloatingTools'); + } + }, 100); + }); + + + /** + * On keypress we will always hide the toolbar + * The toolbar is only accessible via mouse + */ + editor.document.on('keyup', function( key_event ) { + editor.execCommand('hideFloatingTools'); + }); + + + /** + * On blur hide the toolbar (editor looses focus) + */ + editor.on('blur', function( e ) { + if (editor.floatingtools.hide_on_blur) { + hide_toolbar(); + } + }); + + + /** + * Attach the mouse-over event to the toolbar. + * When cursor is above the toolbar then set opacity to 1 + */ + toolbar = get_element(); + toolbar.on('mouseover', function( mouse_event ) { + focus_toolbar(); + }); + + + /** + * When the mouse moves out of the toolbar then make it transparent again + */ + toolbar.on('mouseout', function( mouse_event ) { + unfocus_toolbar(); + }) + + editor.container.addClass('pos-relative'); + console.log(editor.container); + }); + + + + /** + * Display the floating toolbar + */ + editor.addCommand( 'showFloatingTools', { + exec : function( editor ) { + if (is_text_selected()) { + toolbar = get_element(); + unfocus_toolbar(); + toolbar.show(); + + // Get the size of the toolbar + size = get_toolbar_size() + // Get the offset of the editor + offset = get_editor_offset(); + // Get the mouse position + pos = get_mousepos(); + + // Calculate the position for the toolbar + toolpos = calculate_position(pos, size, offset); + + toolbar.setStyles({ + 'left' : toolpos.x + 'px', + 'top' : toolpos.y + 'px' + }); + editor.floatingtools.is_visible = true; + } + } + }); + + + /** + * Hide the floating toolbar + */ + editor.addCommand( 'hideFloatingTools', { + exec : function( editor ) { + hide_toolbar(); + } + }); + + + /** + * ===== Behind the scenes. Getters, setters, calculation, etc. + */ + + + hide_toolbar = function() { + if (false != editor.floatingtools.is_visible) { + toolbar = get_element(); + toolbar.hide(); + editor.floatingtools.is_visible = false; + } + } + + + /** + * Store the current mouse-position, so we can position the toolbar near the cursor + */ + set_mousepos = function(data) { + editor.floatingtools.mousepos = { + left: data.clientX, + top: data.clientY + }; + } + + + + /** + * Store the current mouse-position, so we can position the toolbar near the cursor + */ + get_mousepos = function() { + return editor.floatingtools.mousepos; + } + + + /** + * Returns the main toolbar-object (the parent of all items in the floating-toolbar) + */ + get_element = function() { + if (! editor.floatingtools.dom) { + var dom_id = editor.ui.spaceId( 'floatingtools' ); + editor.floatingtools.dom = CKEDITOR.document.getById( dom_id ); + } + return editor.floatingtools.dom; + } + + + + /** + * Returns the offset of the editor area (effectively the height of the top-toolbar) + */ + get_editor_offset = function() { + if (! editor.floatingtools.editoroffset) { + var editor_id = editor.ui.spaceId( 'contents' ); + var obj = CKEDITOR.document.getById( editor_id ); + editor.floatingtools.editoroffset = { + left: obj.$.offsetLeft, + top: obj.$.offsetTop, + width: obj.$.offsetWidth, + height: obj.$.offsetHeight + }; + } + return editor.floatingtools.editoroffset; + } + + + /** + * Calculates the position for the toolbar + */ + calculate_position = function(pos, toolbar_size, offset) { + toolpos = { + x: pos.left + offset.left - (toolbar_size.width/2), + y: pos.top + offset.top - (toolbar_size.height + 20) + } + + // make sure toolbar does not extend out of the left CKEditor border + if (toolpos.x < offset.left + 2) toolpos.x = offset.left + 2; + + // make sure toolbar does not extend out of the right CKEditor border + if (pos.left + (toolbar_size.width/2) >= offset.left + offset.width-2 ) + toolpos.x = offset.left + offset.width - toolbar_size.width - 2; + + // Make sure toolbar does no go into the top toolbar area + if (toolpos.y < offset.top) toolpos.y = offset.top; + + // make sure toolbar does not cover the mouse-cursor when text in the top line is selected + if (offset.top+pos.top > toolpos.y + && offset.top+pos.top < toolpos.y+toolbar_size.height) + toolpos.y = offset.top + pos.top + 24; // display toolbar below the cursor + + return toolpos; + } + + + /** + * Returns the size of the floating toolbar + */ + get_toolbar_size = function() { + if (! editor.floatingtools.toolbarsize) { + var obj = get_element(); + editor.floatingtools.toolbarsize = { + width: obj.$.offsetWidth, + height: obj.$.offsetHeight + }; + } + return editor.floatingtools.toolbarsize; + } + + + /** + * Check if text is selected. + * Retrns true when there is at least 1 character selected in the editor + */ + is_text_selected = function () { + var text = editor.getSelection().getSelectedText(); + return text != ''; + } + + + /** + * Make the toolbar opaque + */ + focus_toolbar = function() { + obj = get_element(); + obj.setOpacity(1); + } + + + /** + * Make the toolbar transparent + */ + unfocus_toolbar = function() { + obj = get_element(); + obj.setOpacity(0.25); + }, + + + /** + * Get the plugin configuration. + * Kidnapped from the toolbar-plugin... + */ + getFloatingToolbarConfig = function( editor ) { + var removeButtons = editor.config.removeButtons; + + removeButtons = removeButtons && removeButtons.split( ',' ); + + function buildToolbarConfig() { + // Take the base for the new toolbar, which is basically a toolbar + // definition without items. + var toolbar = getPrivateFloatingToolbarGroups( editor ); + return populateToolbarConfig( toolbar ); + + } + + // Returns an object containing all toolbar groups used by ui items. + function getItemDefinedGroups() { + var groups = {}, + itemName, item, itemToolbar, group, order; + + for ( itemName in editor.ui.items ) { + item = editor.ui.items[ itemName ]; + itemToolbar = item.toolbar || 'others'; + if ( itemToolbar ) { + // Break the toolbar property into its parts: "group_name[,order]". + itemToolbar = itemToolbar.split( ',' ); + group = itemToolbar[ 0 ]; + order = parseInt( itemToolbar[ 1 ] || -1, 10 ); + + // Initialize the group, if necessary. + groups[ group ] || ( groups[ group ] = [] ); + + // Push the data used to build the toolbar later. + groups[ group ].push( { name: itemName, order: order} ); + } + } + + // Put the items in the right order. + for ( group in groups ) { + groups[ group ] = groups[ group ].sort( function( a, b ) { + return a.order == b.order ? 0 : + b.order < 0 ? -1 : + a.order < 0 ? 1 : + a.order < b.order ? -1 : + 1; + }); + } + + return groups; + } + + function fillGroup( toolbarGroup, uiItems ) { + if ( uiItems.length ) { + if ( toolbarGroup.items ) + toolbarGroup.items.push( editor.ui.create( '-' ) ); + else + toolbarGroup.items = []; + + var item, name; + while ( ( item = uiItems.shift() ) ) { + name = typeof item == 'string' ? item : item.name; + + // Ignore items that are configured to be removed. + if ( !removeButtons || CKEDITOR.tools.indexOf( removeButtons, name ) == -1 ) { + item = editor.ui.create( name ); + + if ( !item ) + continue; + + if ( !editor.addFeature( item ) ) + continue; + + toolbarGroup.items.push( item ); + } + } + } + } + + function populateToolbarConfig( config ) { + var toolbar = [], + i, group, newGroup; + + for ( i = 0; i < config.length; ++i ) { + group = config[ i ]; + newGroup = {}; + + if ( group == '/' ) + toolbar.push( group ); + else if ( CKEDITOR.tools.isArray( group) ) { + fillGroup( newGroup, CKEDITOR.tools.clone( group ) ); + toolbar.push( newGroup ); + } + else if ( group.items ) { + fillGroup( newGroup, CKEDITOR.tools.clone( group.items ) ); + newGroup.name = group.name; + toolbar.push( newGroup); + } + } + + return toolbar; + } + + var toolbar = editor.config.floatingtools; + + // If it is a string, return the relative "toolbar_name" config. + if ( typeof toolbar == 'string' ) + toolbar = editor.config[ 'floatingtools_' + toolbar ]; + + return ( editor.toolbar = toolbar ? populateToolbarConfig( toolbar ) : buildToolbarConfig() ); + }, + + + /** + * Return the default toolbar configuration. + */ + getPrivateFloatingToolbarGroups = function( editor ) { + return editor._.floatingToolsGroups || ( editor._.floatingToolsGroups = [ + { name: 'styles', items: [ 'Font','FontSize' ]}, + { name: 'format', items: [ 'Bold','Italic' ]}, + { name: 'paragraph', items: [ 'JustifyCenter','Outdent','Indent','NumberedList','BulletedList' ]} + ]); + } + + } + + } ); + + +})(); + + + diff --git a/plugins/ckeditor4/footnotes/dialogs/footnotes.js b/plugins/ckeditor4/footnotes/dialogs/footnotes.js new file mode 100644 index 0000000..c7e1c08 --- /dev/null +++ b/plugins/ckeditor4/footnotes/dialogs/footnotes.js @@ -0,0 +1,175 @@ +/** + * The footnotes dialog definition. + * + * Version 1.0.9 + * https://github.com/andykirk/CKEditorFootnotes + * + */ + +(function($) { + "use strict"; + + // Dialog definition. + CKEDITOR.dialog.add( 'footnotesDialog', function( editor ) { + + return { + editor_name: false, + // Basic properties of the dialog window: title, minimum size. + title: 'Manage Footnotes', + minWidth: 400, + minHeight: 200, + footnotes_el: false, + + // Dialog window contents definition. + contents: [ + { + // Definition of the Basic Settings dialog tab (page). + id: 'tab-basic', + label: 'Basic Settings', + + // The tab contents. + elements: [ + { + // Text input field for the footnotes text. + type: 'textarea', + id: 'new_footnote', + 'class': 'footnote_text', + label: 'New footnote:', + inputStyle: 'height: 100px', + }, + { + // Text input field for the footnotes title (explanation). + type: 'text', + id: 'footnote_id', + name: 'footnote_id', + label: 'No existing footnotes', + + + // Called by the main setupContent call on dialog initialization. + setup: function( element ) { + var dialog = this.getDialog(), + $el = $('#' + this.domId), + $footnotes, $this; + + dialog.footnotes_el = $el; + + editor = dialog.getParentEditor(); + // Dynamically add existing footnotes: + $footnotes = $(editor.editable().$).find('.footnotes ol'); + $this = this; + + if ($footnotes.length > 0) { + if ($el.find('p').length == 0) { + $el.append('<p style="margin-bottom: 10px;"><strong>OR:</strong> Choose footnote:</p><ol class="footnotes_list"></ol>'); + } else { + $el.find('ol').empty(); + } + + var radios = ''; + $footnotes.find('li').each(function(){ + var $item = $(this); + var footnote_id = $item.attr('data-footnote-id'); + radios += '<li style="margin-left: 15px;"><input type="radio" name="footnote_id" value="' + footnote_id + '" id="fn_' + footnote_id + '" /> <label for="fn_' + footnote_id + '" style="white-space: normal; display: inline-block; padding: 0 25px 0 5px; vertical-align: top; margin-bottom: 10px;">' + $item.find('cite').text() + '</label></li>'; + }); + + $el.children('label,div').css('display', 'none'); + $el.find('ol').html(radios); + $el.find(':radio').change(function(){; + $el.find(':text').val($(this).val()); + }); + + } else { + $el.children('div').css('display', 'none'); + } + } + } + ] + }, + ], + + // Invoked when the dialog is loaded. + onShow: function() { + this.setupContent(); + + var dialog = this; + CKEDITOR.on( 'instanceLoaded', function( evt ) { + dialog.editor_name = evt.editor.name; + } ); + + // Allow page to scroll with dialog to allow for many/long footnotes + // (https://github.com/andykirk/CKEditorFootnotes/issues/12) + jQuery('.cke_dialog').css({'position': 'absolute', 'top': '2%'}); + + var current_editor_id = dialog.getParentEditor().id; + + CKEDITOR.replaceAll( function( textarea, config ) { + // Make sure the textarea has the correct class: + if (!textarea.className.match(/footnote_text/)) { + return false; + } + + // Make sure we only instantiate the relevant editor: + var el = textarea; + while ((el = el.parentElement) && !el.classList.contains(current_editor_id)); + if (!el) { + return false; + } + //console.log(el); + config.toolbarGroups = [ + { name: 'editing', groups: [ 'undo', 'find', 'selection', 'spellchecker' ] }, + { name: 'clipboard', groups: [ 'clipboard' ] }, + { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, + ] + config.allowedContent = 'br em strong; a[!href]'; + config.enterMode = CKEDITOR.ENTER_BR; + config.autoParagraph = false; + config.height = 80; + config.resize_enabled = false; + config.autoGrow_minHeight = 80; + config.removePlugins = 'footnotes'; + + config.on = { + focus: function( evt ){ + var $editor_el = $('#' + evt.editor.id + '_contents'); + $editor_el.parents('tr').next().find(':checked').attr('checked', false); + $editor_el.parents('tr').next().find(':text').val(''); + } + }; + return true; + }); + + }, + + // This method is invoked once a user clicks the OK button, confirming the dialog. + onOk: function() { + var dialog = this; + var footnote_editor = CKEDITOR.instances[dialog.editor_name]; + var footnote_id = dialog.getValueOf('tab-basic', 'footnote_id'); + var footnote_data = footnote_editor.getData(); + footnote_editor.destroy(); + + if (footnote_id == '') { + // No existing id selected, check for new footnote: + if (footnote_data == '') { + // Nothing entered, so quit: + return; + } else { + // Insert new footnote: + editor.plugins.footnotes.build(footnote_data, true, editor); + } + } else { + // Insert existing footnote: + editor.plugins.footnotes.build(footnote_id, false, editor); + } + // Destroy the editor so it's rebuilt properly next time: + return; + }, + + onCancel: function() { + var dialog = this; + var footnote_editor = CKEDITOR.instances[dialog.editor_name]; + footnote_editor.destroy(); + } + }; + }); +}(window.jQuery)); diff --git a/plugins/ckeditor4/footnotes/icons/footnotes.png b/plugins/ckeditor4/footnotes/icons/footnotes.png new file mode 100644 index 0000000000000000000000000000000000000000..77157440b13aea4705697b239b955a8e3cf7af1e GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<w6XvX4FM)i?64!{5 z;QX|b^2DN42FH~Aq*MjZ+{E<Mpwz^a%EFVWHb6zL0X`wFT3TB2^77{9=DNDNDk>^g zR#s+aX6owdMn*<5GBS2{cJ}u6tgNg$Iy!oKdQwtS1_lNuCMKeyqDo3iKr{Y>L4CB& zD<DU_B*-rqB7#mbJac#!2UN1b)5S5Q;#QJ?GcyC@kp?{m0f!Szca)TRk{B3UbQH9- zPU*3MgnE>ea==0dm_n3*A`Xm#f&y$pJW5J2K;a__YD!vKO2@dATpYC+m^vJL9794J zdOSm>NGbtM<ViY{lq8enqolM*pcyRf@8S~BBff-{2h0l&36V%)w0B`pXgJXJse|+2 yRt6S<W{C-kT!#EW6&z{|<+2V8i9f^?4lo?g74b7_I~D?TJA<dIpUXO@geCwVcy^-z literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/footnotes/plugin.js b/plugins/ckeditor4/footnotes/plugin.js new file mode 100644 index 0000000..e6ee2d0 --- /dev/null +++ b/plugins/ckeditor4/footnotes/plugin.js @@ -0,0 +1,317 @@ +/** + * Basic sample plugin inserting footnotes elements into CKEditor editing area. + * + * Version 1.0.9 + * https://github.com/andykirk/CKEditorFootnotes + * + */ +// Register the plugin within the editor. +(function($) { + "use strict"; + + + + CKEDITOR.plugins.add( 'footnotes', { + + footnote_ids: [], + requires: 'widget', + icons: 'footnotes', + + + // The plugin initialization logic goes inside this method. + init: function(editor) { + + // Check for jQuery + // @TODO - remove if/when JQ dep. is removed. + if (typeof(window.jQuery) == 'undefined') { + console.warn('jQuery required but undetected so quitting footnotes.'); + return false; + } + + // Allow `cite` to be editable: + CKEDITOR.dtd.$editable['cite'] = 1; + + // Add some CSS tweaks: + var css = '.footnotes{background:#eee; padding:1px 15px;} .footnotes cite{font-style: normal;}'; + CKEDITOR.addCss(css); + + var $this = this; + + /*editor.on('saveSnapshot', function(evt) { + console.log('saveSnapshot'); + });*/ + + // Force a reorder on startup to make sure all vars are set: (e.g. footnotes store): + editor.on('instanceReady', function(evt) { + $this.reorderMarkers(editor); + }); + + // Add the reorder change event: + editor.on('change', function(evt) { + // Copy the footnotes_store as we may be doing a cut: + if(!evt.editor.footnotes_tmp) { + evt.editor.footnotes_tmp = evt.editor.footnotes_store; + } + + // Prevent no selection errors: + if (!evt.editor.getSelection().getStartElement()) { + return; + } + // Don't reorder the markers if editing a cite: + var footnote_section = evt.editor.getSelection().getStartElement().getAscendant('section'); + if (footnote_section && footnote_section.$.className.indexOf('footnotes') != -1) { + return; + } + // SetTimeout seems to be necessary (it's used in the core but can't be 100% sure why) + setTimeout(function(){ + $this.reorderMarkers(editor); + }, + 0 + ); + }); + + // Build the initial footnotes widget editables definition: + var prefix = editor.config.footnotesPrefix ? '-' + editor.config.footnotesPrefix : ''; + var def = { + header: { + selector: 'header > *', + //allowedContent: '' + allowedContent: 'strong em span sub sup;' + } + }; + var contents = $('<div>' + editor.element.$.textContent + '</div>') + , l = contents.find('.footnotes li').length + , i = 1; + for (i; i <= l; i++) { + def['footnote_' + i] = {selector: '#footnote' + prefix + '-' + i + ' cite', allowedContent: 'a[href]; cite[*](*); strong em span br'}; + } + + // Register the footnotes widget. + editor.widgets.add('footnotes', { + + // Minimum HTML which is required by this widget to work. + requiredContent: 'section(footnotes)', + + // Check the elements that need to be converted to widgets. + upcast: function(element) { + return element.name == 'section' && element.hasClass('footnotes'); + }, + + editables: def + }); + + // Register the footnotemarker widget. + editor.widgets.add('footnotemarker', { + + // Minimum HTML which is required by this widget to work. + requiredContent: 'sup[data-footnote-id]', + + // Check the elements that need to be converted to widgets. + upcast: function(element) { + return element.name == 'sup' && element.attributes['data-footnote-id'] != 'undefined'; + }, + }); + + // Define an editor command that opens our dialog. + editor.addCommand('footnotes', new CKEDITOR.dialogCommand('footnotesDialog', { + // @TODO: This needs work: + allowedContent: 'section[*](*);header[*](*);li[*];a[*];cite(*)[*];sup[*]', + requiredContent: 'section[*](*);header[*](*);li[*];a[*];cite(*)[*];sup[*]' + })); + + // Create a toolbar button that executes the above command. + editor.ui.addButton('Footnotes', { + + // The text part of the button (if available) and tooptip. + label: 'Insert Footnotes', + + // The command to execute on click. + command: 'footnotes', + + // The button placement in the toolbar (toolbar group name). + toolbar: 'insert' + }); + + // Register our dialog file. this.path is the plugin folder path. + CKEDITOR.dialog.add('footnotesDialog', this.path + 'dialogs/footnotes.js'); + }, + + + build: function(footnote, is_new, editor) { + var footnote_id; + if (is_new) { + // Generate new id: + footnote_id = this.generateFootnoteId(); + } else { + // Existing footnote id passed: + footnote_id = footnote; + } + + // Insert the marker: + var footnote_marker = '<sup data-footnote-id="' + footnote_id + '">X</sup>'; + + editor.insertHtml(footnote_marker); + + if (is_new) { + editor.fire('lockSnapshot'); + this.addFootnote(this.buildFootnote(footnote_id, footnote, false, editor), editor); + editor.fire('unlockSnapshot'); + } + this.reorderMarkers(editor); + }, + + buildFootnote: function(footnote_id, footnote_text, data, editor) { + var links = '', + footnote, + letters = 'abcdefghijklmnopqrstuvwxyz', + order = data ? data.order.indexOf(footnote_id) + 1 : 1, + prefix = editor.config.footnotesPrefix ? '-' + editor.config.footnotesPrefix : ''; + + if (data && data.occurrences[footnote_id] == 1) { + links = '<a href="#footnote-marker' + prefix + '-' + order + '-1">^</a> '; + } else if (data && data.occurrences[footnote_id] > 1) { + var i = 0 + , l = data.occurrences[footnote_id] + , n = l; + for (i; i < l; i++) { + links += '<a href="#footnote-marker' + prefix + '-' + order + '-' + (i + 1) + '">' + letters.charAt(i) + '</a>'; + if (i < l-1) { + links += ', '; + } else { + links += ' '; + } + } + } + footnote = '<li id="footnote' + prefix + '-' + order + '" data-footnote-id="' + footnote_id + '"><sup>' + links + '</sup><cite>' + footnote_text + '</cite></li>'; + return footnote; + }, + + addFootnote: function(footnote, editor) { + var $contents = $(editor.editable().$); + var $footnotes = $contents.find('.footnotes'); + + if ($footnotes.length == 0) { + var header_title = editor.config.footnotesTitle ? editor.config.footnotesTitle : 'Footnotes'; + var header_els = ['<h2>', '</h2>'];//editor.config.editor.config.footnotesHeaderEls + if (editor.config.footnotesHeaderEls) { + header_els = editor.config.footnotesHeaderEls; + } + var container = '<section class="footnotes"><header>' + header_els[0] + header_title + header_els[1] + '</header><ol>' + footnote + '</ol></section>'; + // Move cursor to end of content: + var range = editor.createRange(); + range.moveToElementEditEnd(range.root); + editor.getSelection().selectRanges([range]); + // Insert the container: + editor.insertHtml(container); + } else { + $footnotes.find('ol').append(footnote); + } + }, + + generateFootnoteId: function() { + var id = Math.random().toString(36).substr(2, 5); + while ($.inArray(id, this.footnote_ids) != -1) { + id = String(this.generateFootnoteId()); + } + this.footnote_ids.push(id); + return id; + }, + + reorderMarkers: function(editor) { + editor.fire('lockSnapshot'); + var prefix = editor.config.footnotesPrefix ? '-' + editor.config.footnotesPrefix : ''; + var $contents = $(editor.editable().$); + var data = { + order: [], + occurrences: {} + }; + + // Check that there's a footnotes section. If it's been deleted the markers are useless: + if ($contents.find('.footnotes').length == 0) { + $contents.find('sup[data-footnote-id]').remove(); + editor.fire('unlockSnapshot'); + return; + } + + // Find all the markers in the document: + var $markers = $contents.find('sup[data-footnote-id]'); + // If there aren't any, remove the Footnotes container: + if ($markers.length == 0) { + $contents.find('.footnotes').parent().remove(); + editor.fire('unlockSnapshot'); + return; + } + + // Otherwise reorder the markers: + $markers.each(function(){ + var footnote_id = $(this).attr('data-footnote-id') + , marker_ref + , n = data.order.indexOf(footnote_id); + + // If this is the markers first occurrence: + if (n == -1) { + // Store the id: + data.order.push(footnote_id); + n = data.order.length; + data.occurrences[footnote_id] = 1; + marker_ref = n + '-1'; + } else { + // Otherwise increment the number of occurrences: + // (increment n due to zero-index array) + n++; + data.occurrences[footnote_id]++; + marker_ref = n + '-' + data.occurrences[footnote_id]; + } + // Replace the marker contents: + var marker = '<a href="#footnote' + prefix + '-' + n + '" id="footnote-marker' + prefix + '-' + marker_ref + '" rel="footnote">[' + n + ']</a>'; + $(this).html(marker); + }); + + // Prepare the footnotes_store object: + editor.footnotes_store = {}; + + // Then rebuild the Footnotes content to match marker order: + var footnotes = '' + , footnote_text = '' + , footnote_id + , i = 0 + , l = data.order.length; + for (i; i < l; i++) { + footnote_id = data.order[i]; + footnote_text = $contents.find('.footnotes [data-footnote-id=' + footnote_id + '] cite').html(); + // If the footnotes text can't be found in the editor, it may be in the tmp store + // following a cut: + if (!footnote_text) { + footnote_text = editor.footnotes_tmp[footnote_id]; + } + footnotes += this.buildFootnote(footnote_id, footnote_text, data, editor); + // Store the footnotes for later use (post cut/paste): + editor.footnotes_store[footnote_id] = footnote_text; + } + + // Insert the footnotes into the list: + $contents.find('.footnotes ol').html(footnotes); + + // Next we need to reinstate the 'editable' properties of the footnotes. + // (we have to do this individually due to Widgets 'fireOnce' for editable selectors) + var el = $contents.find('.footnotes') + , n + , footnote_widget; + // So first we need to find the right Widget instance: + // (I hope there's a better way of doing this but I can't find one) + for (i in editor.widgets.instances) { + if (editor.widgets.instances[i].name == 'footnotes') { + footnote_widget = editor.widgets.instances[i]; + break; + } + } + // Then we `initEditable` each footnote, giving it a unique selector: + for (i in data.order) { + n = parseInt(i) + 1; + footnote_widget.initEditable('footnote_' + n, {selector: '#footnote' + prefix + '-' + n +' cite', allowedContent: 'a[href]; cite[*](*); em strong span'}); + } + + editor.fire('unlockSnapshot'); + } + }); +}(window.jQuery)); diff --git a/plugins/ckeditor4/googlethisterm/LICENSE b/plugins/ckeditor4/googlethisterm/LICENSE new file mode 100644 index 0000000..9451d76 --- /dev/null +++ b/plugins/ckeditor4/googlethisterm/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Ahmad Faiyaz + +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. diff --git a/plugins/ckeditor4/googlethisterm/README.md b/plugins/ckeditor4/googlethisterm/README.md new file mode 100644 index 0000000..64647ac --- /dev/null +++ b/plugins/ckeditor4/googlethisterm/README.md @@ -0,0 +1,2 @@ +# Google-This-Term-CKEditor +A simple CKEditor context menu plugin to add a menu button for searching selected text on the google. diff --git a/plugins/ckeditor4/googlethisterm/plugin.js b/plugins/ckeditor4/googlethisterm/plugin.js new file mode 100644 index 0000000..e42419c --- /dev/null +++ b/plugins/ckeditor4/googlethisterm/plugin.js @@ -0,0 +1,41 @@ +/* + * # Google this term Plugin for CKEditor # + * + * (C) Copyright Ahmad Faiyaz (all rights reserverd) + * MIT License + * + * +*/ + + +/* +* A simple plugin to add button to the CKEditor context menu. By clicking the +* button one can search selected text on the google on new tab +*/ + + +(function() { + CKEDITOR.plugins.add('googlethisterm', { + init: function(editor) { + if (editor.contextMenu) { + editor.addMenuGroup('googleTermGroup'); + editor.addMenuItem('googleTermItem', { + label: 'Google this term', + onClick : function(){ + var sel = editor.getSelection(); + var url = "https://www.google.com/search?gws_rd=ssl&q="+sel.getSelectedText(); + window.open(url, '_blank'); + }, + group: 'googleTermGroup' + }); + + editor.contextMenu.addListener( function( element ) { + var sel = editor.getSelection(); + if ( !(sel.getSelectedText()=="") ) { + return { googleTermItem: CKEDITOR.TRISTATE_OFF }; + } + }); + } + } + }); +})(); diff --git a/plugins/ckeditor4/html5audio/dialogs/html5audio.js b/plugins/ckeditor4/html5audio/dialogs/html5audio.js new file mode 100755 index 0000000..2525233 --- /dev/null +++ b/plugins/ckeditor4/html5audio/dialogs/html5audio.js @@ -0,0 +1,117 @@ +CKEDITOR.dialog.add( 'html5audio', function( editor ) { + return { + title: editor.lang.html5audio.title, + minWidth: 500, + minHeight: 100, + contents: [ { + id: 'info', + label: editor.lang.html5audio.infoLabel, + elements: [ { + type: 'vbox', + padding: 0, + children: [ { + type: 'hbox', + widths: [ '365px', '110px' ], + align: 'right', + children: [ { + type: 'text', + id: 'url', + label: editor.lang.common.url, + required: true, + validate: CKEDITOR.dialog.validate.notEmpty( editor.lang.html5audio.urlMissing ), + setup: function( widget ) { + this.setValue( widget.data.src ); + }, + commit: function( widget ) { + widget.setData( 'src', this.getValue() ); + } + }, + { + type: 'button', + id: 'browse', + // v-align with the 'txtUrl' field. + // TODO: We need something better than a fixed size here. + style: 'display:inline-block;margin-top:14px;', + align: 'center', + label: editor.lang.common.browseServer, + hidden: true, + filebrowser: 'info:url' + } ] + } ] + }, + { + type: 'hbox', + id: 'alignment', + children: [ { + type: 'radio', + id: 'align', + label: editor.lang.common.align, + items: [ + [editor.lang.common.alignCenter, 'center'], + [editor.lang.common.alignLeft, 'left'], + [editor.lang.common.alignRight, 'right'], + [editor.lang.common.alignNone, 'none'] + ], + 'default': 'center', + setup: function( widget ) { + if ( widget.data.align ) { + this.setValue( widget.data.align ); + } + }, + commit: function( widget ) { + widget.setData( 'align', this.getValue() ); + } + } ] + } ] + }, + { + id: 'Upload', + hidden: true, + filebrowser: 'uploadButton', + label: editor.lang.html5audio.upload, + elements: [ { + type: 'file', + id: 'upload', + label: editor.lang.html5audio.btnUpload, + style: 'height:40px', + size: 38 + }, + { + type: 'fileButton', + id: 'uploadButton', + filebrowser: 'info:url', + label: editor.lang.html5audio.btnUpload, + 'for': [ 'Upload', 'upload' ] + } ] + }, + { + id: 'advanced', + label: editor.lang.html5audio.advanced, + elements: [ { + type: 'vbox', + padding: 0, + children: [ { + type: 'hbox', + children: [ { + type: 'radio', + id: 'autoplay', + label: editor.lang.html5audio.autoplay, + items: [ + [editor.lang.html5audio.yes, 'yes'], + [editor.lang.html5audio.no, 'no'] + ], + 'default': 'no', + setup: function( widget ) { + if ( widget.data.autoplay ) { + this.setValue( widget.data.autoplay ); + } + }, + commit: function( widget ) { + widget.setData( 'autoplay', this.getValue() ); + } + } ] + } ] + } ] + } ] + }; +} ); diff --git a/plugins/ckeditor4/html5audio/icons/html5audio.png b/plugins/ckeditor4/html5audio/icons/html5audio.png new file mode 100755 index 0000000000000000000000000000000000000000..4367015f185a6619eb6648590822d875b0417eee GIT binary patch literal 560 zcmV-00?+-4P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~t5-C>f(Kk<0)902y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00EduL_t(I%gs?eYgADXJ#%N~ zzP<0=B_OD=5EQjoMEqcjMGRK{0zpWlwO~qZY^=q9V66y3>Qq*#(pd^ZAOy6Ei0rPL z_vVhx1}q+7I~_R94CkCVGr+$tK5ban^?3lFi0IheKLdcOUSQ_8BGQ@JmtNx9+8X7Y zuQT&c05c-m0)U+JxvHujtLmc=!r^2x>0cnFbT5QZ062gt5j_Kd!C-JJgz&AZs)r)7 z&CD+d07T@YnVnto1Aq;8Khc|p5MIX^uM*Kt+qRbh+!c{`i^XCKO95ZH^<f%9cphVX z%FMgN;c!Gm-*e74MPwRQJoa2wcg$>*QkpUI4|l&vM88)OaCa}I6aZ-3mH;>r1$VcV z1c)e=QXYuN*ZF*|W_E^|4~Qr;0K^!tF!Pa!>@)L0Ddo~%{9_{8W9Hkcy4`i%oe)Cq zx^CahuJt-LO|#MW#=5RY%zPMQ+!T=y%>1%9f|>26lx{HdF95UzQc6c6^2*(3W_Eu( y9=|y?d($-QBC@BdPfmKOx~{74V~m^lFX|7SRE6k7zY9$O0000<MNUMnLSTZs=Ijmt literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/html5audio/lang/de.js b/plugins/ckeditor4/html5audio/lang/de.js new file mode 100644 index 0000000..2b4bf73 --- /dev/null +++ b/plugins/ckeditor4/html5audio/lang/de.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang( 'html5audio', 'de', { + button: 'HTML5 Audio einfügen', + title: 'HTML5 Audio', + infoLabel: 'Audio Infos', + urlMissing: 'Sie haben keine URL zur Audio-Datei angegeben.', + audioProperties: 'Audio-Einstellungen', + upload: 'Hochladen', + btnUpload: 'Zum Server senden', + advanced: 'Erweitert', + autoplay: 'Autoplay?', + yes: 'Ja', + no: 'Nein' +} ); diff --git a/plugins/ckeditor4/html5audio/lang/en.js b/plugins/ckeditor4/html5audio/lang/en.js new file mode 100755 index 0000000..dba6fa6 --- /dev/null +++ b/plugins/ckeditor4/html5audio/lang/en.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang( 'html5audio', 'en', { + button: 'Insert HTML5 audio', + title: 'HTML5 audio', + infoLabel: 'Audio info', + urlMissing: 'Audio source URL is missing.', + audioProperties: 'Audio properties', + upload: 'Upload', + btnUpload: 'Send it to the server', + advanced: 'Advanced', + autoplay: 'Autoplay?', + yes: 'Yes', + no: 'No' +} ); diff --git a/plugins/ckeditor4/html5audio/lang/es.js b/plugins/ckeditor4/html5audio/lang/es.js new file mode 100644 index 0000000..905cac5 --- /dev/null +++ b/plugins/ckeditor4/html5audio/lang/es.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang( 'html5audio', 'es', { + button: 'Insertar audio HTML5', + title: 'Audio HTML5', + infoLabel: 'Información del audio', + urlMissing: 'La URL del audio no puede estar vacia.', + audioProperties: 'Propiedades del audio', + upload: 'Cargar', + btnUpload: 'Enviar al servidor', + advanced: 'Avanzado', + autoplay: '¿Reproducir automáticamente?', + yes: 'Si', + no: 'No' +} ); diff --git a/plugins/ckeditor4/html5audio/lang/eu.js b/plugins/ckeditor4/html5audio/lang/eu.js new file mode 100755 index 0000000..78ef9e9 --- /dev/null +++ b/plugins/ckeditor4/html5audio/lang/eu.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang( 'html5audio', 'eu', { + button: 'Txertatu HTML5 audioa', + title: 'HTML5 audioa', + infoLabel: 'Audioaren informazioa', + urlMissing: 'Audioaren URLak ezin du hutsik egon.', + audioProperties: 'Audioaren propietateak', + upload: 'Kargatu', + btnUpload: 'Bidali zerbitzarira', + advanced: 'Aurreratua', + autoplay: 'Automatikoki erreproduzitu?', + yes: 'Bai', + no: 'Ez' +} ); diff --git a/plugins/ckeditor4/html5audio/lang/fr.js b/plugins/ckeditor4/html5audio/lang/fr.js new file mode 100644 index 0000000..1e693b3 --- /dev/null +++ b/plugins/ckeditor4/html5audio/lang/fr.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang( 'html5audio', 'fr', { + button: 'Insérer un lecteur audio HTML5', + title: 'HTML5 audio', + infoLabel: 'Informations audio', + urlMissing: 'URL de la source audio manquante. Veuillez la renseigner.', + audioProperties: 'Propriétés Audio', + upload: 'Télécharger', + btnUpload: 'Envoyer vers le serveur', + advanced: 'Avancé', + autoplay: 'Jouer automatiquement ?', + yes: 'Oui', + no: 'Non' +} ); diff --git a/plugins/ckeditor4/html5audio/lang/ru.js b/plugins/ckeditor4/html5audio/lang/ru.js new file mode 100644 index 0000000..5f53827 --- /dev/null +++ b/plugins/ckeditor4/html5audio/lang/ru.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang( 'html5audio', 'ru', { + button: 'Ð’Ñтавить HTML5 аудио', + title: 'HTML5 аудио', + infoLabel: 'Ðудио', + urlMissing: 'Ðе выбран иÑточник аудио', + audioProperties: 'СвойÑтва аудио', + upload: 'Загрузить', + btnUpload: 'Загрузить на Ñервер', + advanced: 'Дополнительно', + autoplay: 'ÐвтовоÑпроизведение', + yes: 'Да', + no: 'Ðет' +} ); diff --git a/plugins/ckeditor4/html5audio/lang/uk.js b/plugins/ckeditor4/html5audio/lang/uk.js new file mode 100644 index 0000000..fbba300 --- /dev/null +++ b/plugins/ckeditor4/html5audio/lang/uk.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang( 'html5audio', 'uk', { + button: 'Ð’Ñтавити HTML5 аудіо', + title: 'HTML5 аудіо', + infoLabel: 'ІнформаціÑ', + urlMissing: 'Ðе обрано джерела аудіо', + audioProperties: 'ВлаÑтивоÑÑ‚Ñ– аудіо', + upload: 'Відвантажити', + btnUpload: 'Відвантажити на Ñервер', + advanced: 'Додатково', + autoplay: 'ÐвтовідтвореннÑ?', + yes: 'Так', + no: 'ÐÑ–' +} ); diff --git a/plugins/ckeditor4/html5audio/lang/uz.js b/plugins/ckeditor4/html5audio/lang/uz.js new file mode 100644 index 0000000..a0b14ca --- /dev/null +++ b/plugins/ckeditor4/html5audio/lang/uz.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang( 'html5audio', 'uz', { + button: 'HTML5 audio qo‘shing', + title: 'HTML5 audio', + infoLabel: 'Audio ma\'lumot', + urlMissing: 'Audio\'ning URL manbasi topilmadi.', + audioProperties: 'Audio xususiyatlari', + upload: 'Yuklash', + btnUpload: 'Serverga jo‘natish', + advanced: 'Kengaytrilgan', + autoplay: 'Avtoijro?', + yes: 'Ha', + no: 'Yo‘q' +} ); diff --git a/plugins/ckeditor4/html5audio/plugin.js b/plugins/ckeditor4/html5audio/plugin.js new file mode 100755 index 0000000..e5c76e6 --- /dev/null +++ b/plugins/ckeditor4/html5audio/plugin.js @@ -0,0 +1,112 @@ +CKEDITOR.plugins.add( 'html5audio', { + requires: 'widget', + lang: 'de,en,eu,es,fr,ru,uk,uz', + icons: 'html5audio', + init: function( editor ) { + editor.widgets.add( 'html5audio', { + button: editor.lang.html5audio.button, + template: '<div class="ckeditor-html5-audio"></div>', // We add the audio element when needed in the data function, to avoid having an undefined src attribute. + // See issue #9 on github: https://github.com/iametza/ckeditor-html5-audio/issues/9 + editables: {}, + /* + * Allowed content rules (http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules): + * - div-s with text-align,float,margin-left,margin-right inline style rules and required ckeditor-html5-audio class. + * - audio tags with src and controls attributes. + */ + allowedContent: 'div(!ckeditor-html5-audio){text-align,float,margin-left,margin-right}; audio[src,controls,autoplay];', + requiredContent: 'div(ckeditor-html5-audio); audio[src,controls];', + upcast: function( element ) { + return element.name === 'div' && element.hasClass( 'ckeditor-html5-audio' ); + }, + dialog: 'html5audio', + init: function() { + var src = ''; + var autoplay = ''; + var align = this.element.getStyle( 'text-align' ); + + // If there's a child (the audio element) + if ( this.element.getChild( 0 ) ) { + // get it's attributes. + src = this.element.getChild( 0 ).getAttribute( 'src' ); + autoplay = this.element.getChild( 0 ).getAttribute( 'autoplay' ); + } + + if ( src ) { + this.setData( 'src', src ); + + if ( align ) { + this.setData( 'align', align ); + } else { + this.setData( 'align', 'none' ); + } + + if ( autoplay ) { + this.setData( 'autoplay', 'yes' ); + } + } + }, + data: function() { + // If there is an audio source + if ( this.data.src ) { + // and there isn't a child (the audio element) + if ( !this.element.getChild( 0 ) ) { + // Create a new <audio> element. + var audioElement = new CKEDITOR.dom.element( 'audio' ); + // Set the controls attribute. + audioElement.setAttribute( 'controls', 'controls' ); + // Append it to the container of the plugin. + this.element.append( audioElement ); + } + this.element.getChild( 0 ).setAttribute( 'src', this.data.src ); + } + + this.element.removeStyle( 'float' ); + this.element.removeStyle( 'margin-left' ); + this.element.removeStyle( 'margin-right' ); + + if ( this.data.align === 'none' ) { + this.element.removeStyle( 'text-align' ); + } else { + this.element.setStyle( 'text-align', this.data.align ); + } + + if ( this.data.align === 'left' ) { + this.element.setStyle( 'float', this.data.align ); + this.element.setStyle( 'margin-right', '10px' ); + } else if ( this.data.align === 'right' ) { + this.element.setStyle( 'float', this.data.align ); + this.element.setStyle( 'margin-left', '10px' ); + } + + if ( this.element.getChild( 0 ) ) { + if ( this.data.autoplay === 'yes' ) { + this.element.getChild( 0 ).setAttribute( 'autoplay', 'autoplay' ); + } else { + this.element.getChild( 0 ).removeAttribute( 'autoplay' ); + } + } + } + } ); + + if ( editor.contextMenu ) { + editor.addMenuGroup( 'html5audioGroup' ); + editor.addMenuItem( 'html5audioPropertiesItem', { + label: editor.lang.html5audio.audioProperties, + icon: 'html5audio', + command: 'html5audio', + group: 'html5audioGroup' + }); + + editor.contextMenu.addListener( function( element ) { + if ( element && + element.getChild( 0 ) && + element.getChild( 0 ).hasClass && + element.getChild( 0 ).hasClass( 'ckeditor-html5-audio' ) ) { + return { html5audioPropertiesItem: CKEDITOR.TRISTATE_OFF }; + } + }); + } + + CKEDITOR.dialog.add( 'html5audio', this.path + 'dialogs/html5audio.js' ); + } +} ); diff --git a/plugins/ckeditor4/html5video/dialogs/html5video.js b/plugins/ckeditor4/html5video/dialogs/html5video.js new file mode 100644 index 0000000..ada03ec --- /dev/null +++ b/plugins/ckeditor4/html5video/dialogs/html5video.js @@ -0,0 +1,161 @@ +CKEDITOR.dialog.add( 'html5video', function( editor ) { + return { + title: editor.lang.html5video.title, + minWidth: 500, + minHeight: 100, + contents: [ { + id: 'info', + label: editor.lang.html5video.infoLabel, + elements: [ { + type: 'vbox', + padding: 0, + children: [ + { + type: 'hbox', + widths: [ '365px', '110px' ], + align: 'right', + children: [ { + type: 'text', + id: 'url', + label: editor.lang.html5video.allowed, + required: true, + validate: CKEDITOR.dialog.validate.notEmpty( editor.lang.html5video.urlMissing ), + setup: function( widget ) { + this.setValue( widget.data.src ); + }, + commit: function( widget ) { + widget.setData( 'src', this.getValue() ); + } + }, + { + type: 'button', + id: 'browse', + // v-align with the 'txtUrl' field. + // TODO: We need something better than a fixed size here. + style: 'display:inline-block;margin-top:14px;', + align: 'center', + label: editor.lang.common.browseServer, + hidden: true, + filebrowser: 'info:url' + } ] + } ] + }, + { + type: 'checkbox', + id: 'responsive', + label: editor.lang.html5video.responsive, + setup: function( widget ) { + this.setValue( widget.data.responsive ); + }, + commit: function( widget ) { + widget.setData( 'responsive', this.getValue()?'true':'' ); + } + }, + { + type: 'hbox', + id: 'size', + children: [ { + type: 'text', + id: 'width', + label: editor.lang.common.width, + setup: function( widget ) { + if ( widget.data.width ) { + this.setValue( widget.data.width ); + } + }, + commit: function( widget ) { + widget.setData( 'width', this.getValue() ); + } + }, + { + type: 'text', + id: 'height', + label: editor.lang.common.height, + setup: function( widget ) { + if ( widget.data.height ) { + this.setValue( widget.data.height ); + } + }, + commit: function( widget ) { + widget.setData( 'height', this.getValue() ); + } + }, + ] + }, + + { + type: 'hbox', + id: 'alignment', + children: [ { + type: 'radio', + id: 'align', + label: editor.lang.common.align, + items: [ + [editor.lang.common.alignCenter, 'center'], + [editor.lang.common.alignLeft, 'left'], + [editor.lang.common.alignRight, 'right'], + [editor.lang.common.alignNone, 'none'] + ], + 'default': 'center', + setup: function( widget ) { + if ( widget.data.align ) { + this.setValue( widget.data.align ); + } + }, + commit: function( widget ) { + widget.setData( 'align', this.getValue() ); + } + } ] + } ] + }, + { + id: 'Upload', + hidden: true, + filebrowser: 'uploadButton', + label: editor.lang.html5video.upload, + elements: [ { + type: 'file', + id: 'upload', + label: editor.lang.html5video.btnUpload, + style: 'height:40px', + size: 38 + }, + { + type: 'fileButton', + id: 'uploadButton', + filebrowser: 'info:url', + label: editor.lang.html5video.btnUpload, + 'for': [ 'Upload', 'upload' ] + } ] + }, + { + id: 'advanced', + label: editor.lang.html5video.advanced, + elements: [ { + type: 'vbox', + padding: 0, + children: [ { + type: 'hbox', + children: [ { + type: 'radio', + id: 'autoplay', + label: editor.lang.html5video.autoplay, + items: [ + [editor.lang.html5video.yes, 'yes'], + [editor.lang.html5video.no, 'no'] + ], + 'default': 'no', + setup: function( widget ) { + if ( widget.data.autoplay ) { + this.setValue( widget.data.autoplay ); + } + }, + commit: function( widget ) { + widget.setData( 'autoplay', this.getValue() ); + } + } ] + } ] + } ] + } ] + }; +} ); diff --git a/plugins/ckeditor4/html5video/icons/html5video.png b/plugins/ckeditor4/html5video/icons/html5video.png new file mode 100644 index 0000000000000000000000000000000000000000..a2465177448241d4c3988ae25c22cd3690a80fff GIT binary patch literal 14773 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 G(SHGko*mBs literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/html5video/lang/de.js b/plugins/ckeditor4/html5video/lang/de.js new file mode 100644 index 0000000..bc81b7a --- /dev/null +++ b/plugins/ckeditor4/html5video/lang/de.js @@ -0,0 +1,14 @@ +CKEDITOR.plugins.setLang( 'html5video', 'de', { + button: 'HTML5 Video einfügen', + title: 'HTML5 Video', + infoLabel: 'Video Infos', + allowed: 'Erlaubte Dateierweiterungen: MP4, WebM, Ogv', + urlMissing: 'Sie haben keine URL zur Video-Datei angegeben.', + videoProperties: 'Video-Einstellungen', + upload: 'Hochladen', + btnUpload: 'Zum Server senden', + advanced: 'Erweitert', + autoplay: 'Autoplay?', + yes: 'Ja', + no: 'Nein' +} ); diff --git a/plugins/ckeditor4/html5video/lang/en.js b/plugins/ckeditor4/html5video/lang/en.js new file mode 100644 index 0000000..88b54e3 --- /dev/null +++ b/plugins/ckeditor4/html5video/lang/en.js @@ -0,0 +1,15 @@ +CKEDITOR.plugins.setLang( 'html5video', 'en', { + button: 'Insert HTML5 video', + title: 'HTML5 video', + infoLabel: 'Video info', + allowed: 'Allowed file extensions: MP4, WebM, Ogv', + urlMissing: 'Video source URL is missing.', + videoProperties: 'Video properties', + upload: 'Upload', + btnUpload: 'Send it to the server', + advanced: 'Advanced', + autoplay: 'Autoplay?', + yes: 'Yes', + no: 'No', + responsive: 'Responsive width' +} ); diff --git a/plugins/ckeditor4/html5video/lang/es.js b/plugins/ckeditor4/html5video/lang/es.js new file mode 100644 index 0000000..856a3a4 --- /dev/null +++ b/plugins/ckeditor4/html5video/lang/es.js @@ -0,0 +1,14 @@ +CKEDITOR.plugins.setLang( 'html5video', 'es', { + button: 'Insertar video HTML5', + title: 'Video HTML5', + infoLabel: 'Información del video', + allowed: 'Extensiones de archivo permitidas: MP4, WebM, Ogv', + urlMissing: 'La URL del video no puede estar vacia.', + videoProperties: 'Propiedades del video', + upload: 'Cargar', + btnUpload: 'Enviar al servidor', + advanced: 'Avanzado', + autoplay: '¿Reproducir automáticamente?', + yes: 'Si', + no: 'No' +} ); diff --git a/plugins/ckeditor4/html5video/lang/eu.js b/plugins/ckeditor4/html5video/lang/eu.js new file mode 100644 index 0000000..820585f --- /dev/null +++ b/plugins/ckeditor4/html5video/lang/eu.js @@ -0,0 +1,14 @@ +CKEDITOR.plugins.setLang( 'html5video', 'eu', { + button: 'Txertatu HTML5 bideoa', + title: 'HTML5 bideoa', + infoLabel: 'Bideoaren informazioa', + allowed: 'Baimendutako fitxategi luzapenak: MP4, WebM, Ogv', + urlMissing: 'Bideoaren URLak ezin du hutsik egon.', + videoProperties: 'Bideoaren propietateak', + upload: 'Kargatu', + btnUpload: 'Bidali zerbitzarira', + advanced: 'Aurreratua', + autoplay: 'Automatikoki erreproduzitu?', + yes: 'Bai', + no: 'Ez' +} ); diff --git a/plugins/ckeditor4/html5video/lang/fr.js b/plugins/ckeditor4/html5video/lang/fr.js new file mode 100644 index 0000000..b6df423 --- /dev/null +++ b/plugins/ckeditor4/html5video/lang/fr.js @@ -0,0 +1,14 @@ +CKEDITOR.plugins.setLang( 'html5video', 'fr', { + button: 'Insérer un lecteur video HTML5', + title: 'HTML5 video', + infoLabel: 'Informations video', + allowed: 'Extensions de fichiers autorisées: MP4, WebM, Ogv', + urlMissing: 'URL de la source video manquante. Veuillez la renseigner.', + videoProperties: 'Propriétés Video', + upload: 'Télécharger', + btnUpload: 'Envoyer vers le serveur', + advanced: 'Avancé', + autoplay: 'Jouer automatiquement ?', + yes: 'Oui', + no: 'Non' +} ); diff --git a/plugins/ckeditor4/html5video/lang/ru.js b/plugins/ckeditor4/html5video/lang/ru.js new file mode 100644 index 0000000..68c09fa --- /dev/null +++ b/plugins/ckeditor4/html5video/lang/ru.js @@ -0,0 +1,15 @@ +CKEDITOR.plugins.setLang( 'html5video', 'ru', { + button: 'Ð’Ñтавить HTML5 видео', + title: 'HTML5 видео', + infoLabel: 'Видео', + allowed: 'ДопуÑтимые раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²: MP4, WebM, Ogv', + urlMissing: 'Ðе выбран иÑточник видео', + videoProperties: 'СвойÑтва видео', + upload: 'Загрузить', + btnUpload: 'Загрузить на Ñервер', + advanced: 'Дополнительно', + autoplay: 'ÐвтовоÑпроизведение', + yes: 'Да', + no: 'Ðет', + responsive: 'ÐÐ´Ð°Ð¿Ñ‚Ð¸Ð²Ð½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð°' +} ); diff --git a/plugins/ckeditor4/html5video/lang/uk.js b/plugins/ckeditor4/html5video/lang/uk.js new file mode 100644 index 0000000..399ecb6 --- /dev/null +++ b/plugins/ckeditor4/html5video/lang/uk.js @@ -0,0 +1,14 @@ +CKEDITOR.plugins.setLang( 'html5video', 'uk', { + button: 'Ð’Ñтавити HTML5 відео', + title: 'HTML5 відео', + infoLabel: 'ІнформаціÑ', + allowed: 'ДопуÑтимі Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²: MP4, WebM, Ogv', + urlMissing: 'Ðе обрано джерела відео', + videoProperties: 'ВлаÑтивоÑÑ‚Ñ– відео', + upload: 'Відвантажити', + btnUpload: 'Відвантажити на Ñервер', + advanced: 'Додатково', + autoplay: 'ÐвтовідтвореннÑ?', + yes: 'Так', + no: 'ÐÑ–' +} ); diff --git a/plugins/ckeditor4/html5video/lang/uz.js b/plugins/ckeditor4/html5video/lang/uz.js new file mode 100644 index 0000000..f70933e --- /dev/null +++ b/plugins/ckeditor4/html5video/lang/uz.js @@ -0,0 +1,14 @@ +CKEDITOR.plugins.setLang( 'html5video', 'uz', { + button: 'HTML5 video qo‘shing', + title: 'HTML5 video', + infoLabel: 'Video ma\'lumot', + allowed: 'Ruxsat etilgan kengaytmalar: MP4, WebM, Ogv', + urlMissing: 'Video\'ning URL manbasi topilmadi.', + videoProperties: 'Video xususiyatlari', + upload: 'Yuklash', + btnUpload: 'Serverga jo‘natish', + advanced: 'Kengaytrilgan', + autoplay: 'Avtoijro?', + yes: 'Ha', + no: 'Yo‘q' +} ); diff --git a/plugins/ckeditor4/html5video/plugin.js b/plugins/ckeditor4/html5video/plugin.js new file mode 100644 index 0000000..54f4d21 --- /dev/null +++ b/plugins/ckeditor4/html5video/plugin.js @@ -0,0 +1,139 @@ +CKEDITOR.plugins.add( 'html5video', { + requires: 'widget', + lang: 'de,en,eu,es,ru,uk,fr', + icons: 'html5video', + init: function( editor ) { + editor.widgets.add( 'html5video', { + button: editor.lang.html5video.button, + template: '<div class="ckeditor-html5-video"></div>', + /* + * Allowed content rules (http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules): + * - div-s with text-align,float,margin-left,margin-right inline style rules and required ckeditor-html5-video class. + * - video tags with src, controls, width and height attributes. + */ + allowedContent: 'div[data-responsive](!ckeditor-html5-video){text-align,float,margin-left,margin-right}; video[src,controls,autoplay,width, height]{max-width,height};', + requiredContent: 'div(ckeditor-html5-video); video[src,controls];', + upcast: function( element ) { + return element.name === 'div' && element.hasClass( 'ckeditor-html5-video' ); + }, + dialog: 'html5video', + init: function() { + var src = ''; + var autoplay = ''; + var align = this.element.getStyle( 'text-align' ); + + var width = ''; + var height = ''; + + // If there's a child (the video element) + if ( this.element.getChild( 0 ) ) { + // get it's attributes. + src = this.element.getChild( 0 ).getAttribute( 'src' ); + width = this.element.getChild( 0 ).getAttribute( 'width' ); + height = this.element.getChild( 0 ).getAttribute( 'height' ); + autoplay = this.element.getChild( 0 ).getAttribute( 'autoplay' ); + responsive = this.element.getAttribute( 'data-responsive' ); + } + + if ( src ) { + this.setData( 'src', src ); + + if ( align ) { + this.setData( 'align', align ); + } else { + this.setData( 'align', 'none' ); + } + + if ( width ) { + this.setData( 'width', width ); + } + + if ( height ) { + this.setData( 'height', height ); + } + + if ( autoplay ) { + this.setData( 'autoplay', 'yes' ); + } + + if ( responsive ) { + this.setData( 'responsive', responsive ); + } + } + }, + data: function() { + // If there is an video source + if ( this.data.src ) { + // and there isn't a child (the video element) + if ( !this.element.getChild( 0 ) ) { + // Create a new <video> element. + var videoElement = new CKEDITOR.dom.element( 'video' ); + // Set the controls attribute. + videoElement.setAttribute( 'controls', 'controls' ); + // Append it to the container of the plugin. + this.element.append( videoElement ); + } + this.element.getChild( 0 ).setAttribute( 'src', this.data.src ); + if (this.data.width) this.element.getChild( 0 ).setAttribute( 'width', this.data.width ); + if (this.data.height) this.element.getChild( 0 ).setAttribute( 'height', this.data.height ); + + if ( this.data.responsive ) { + this.element.setAttribute("data-responsive", this.data.responsive); + this.element.getChild( 0 ).setStyle( 'max-width', '100%' ); + this.element.getChild( 0 ).setStyle( 'height', 'auto' ); + } else { + this.element.getChild( 0 ).removeStyle( 'max-width' ); + this.element.getChild( 0 ).removeStyle( 'height' ); + } + } + + this.element.removeStyle( 'float' ); + this.element.removeStyle( 'margin-left' ); + this.element.removeStyle( 'margin-right' ); + + if ( this.data.align === 'none' ) { + this.element.removeStyle( 'text-align' ); + } else { + this.element.setStyle( 'text-align', this.data.align ); + } + + if ( this.data.align === 'left' ) { + this.element.setStyle( 'float', this.data.align ); + this.element.setStyle( 'margin-right', '10px' ); + } else if ( this.data.align === 'right' ) { + this.element.setStyle( 'float', this.data.align ); + this.element.setStyle( 'margin-left', '10px' ); + } + + if ( this.element.getChild( 0 ) ) { + if ( this.data.autoplay === 'yes' ) { + this.element.getChild( 0 ).setAttribute( 'autoplay', 'autoplay' ); + } else { + this.element.getChild( 0 ).removeAttribute( 'autoplay' ); + } + } + } + } ); + + if ( editor.contextMenu ) { + editor.addMenuGroup( 'html5videoGroup' ); + editor.addMenuItem( 'html5videoPropertiesItem', { + label: editor.lang.html5video.videoProperties, + icon: 'html5video', + command: 'html5video', + group: 'html5videoGroup' + }); + + editor.contextMenu.addListener( function( element ) { + if ( element && + element.getChild( 0 ) && + element.getChild( 0 ).hasClass && + element.getChild( 0 ).hasClass( 'ckeditor-html5-video' ) ) { + return { html5videoPropertiesItem: CKEDITOR.TRISTATE_OFF }; + } + }); + } + + CKEDITOR.dialog.add( 'html5video', this.path + 'dialogs/html5video.js' ); + } +} ); diff --git a/plugins/ckeditor4/inserthtml4x b/plugins/ckeditor4/inserthtml4x new file mode 160000 index 0000000..6a4fa63 --- /dev/null +++ b/plugins/ckeditor4/inserthtml4x @@ -0,0 +1 @@ +Subproject commit 6a4fa6340373600125654874fcef59743fbef140 diff --git a/plugins/ckeditor4/lineheight/LICENSE b/plugins/ckeditor4/lineheight/LICENSE new file mode 100644 index 0000000..78f4754 --- /dev/null +++ b/plugins/ckeditor4/lineheight/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Kamlesh Kushwaha + +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. + diff --git a/plugins/ckeditor4/lineheight/README.md b/plugins/ckeditor4/lineheight/README.md new file mode 100644 index 0000000..a7fdba0 --- /dev/null +++ b/plugins/ckeditor4/lineheight/README.md @@ -0,0 +1,2 @@ +# lineheight +Ckeditor lineheight plugin repository diff --git a/plugins/ckeditor4/lineheight/lang/LANG.js b/plugins/ckeditor4/lineheight/lang/LANG.js new file mode 100644 index 0000000..66a7c5f --- /dev/null +++ b/plugins/ckeditor4/lineheight/lang/LANG.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','{LANGUAGE_CODE}', { + title: '{LINE-HEIGHT}' +} ); diff --git a/plugins/ckeditor4/lineheight/lang/ar.js b/plugins/ckeditor4/lineheight/lang/ar.js new file mode 100644 index 0000000..be7347b --- /dev/null +++ b/plugins/ckeditor4/lineheight/lang/ar.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','ar', { + title: 'خط الطول' +} ); diff --git a/plugins/ckeditor4/lineheight/lang/de.js b/plugins/ckeditor4/lineheight/lang/de.js new file mode 100644 index 0000000..4a5ee25 --- /dev/null +++ b/plugins/ckeditor4/lineheight/lang/de.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','de', { + title: 'Zeilenhöhe' +} ); diff --git a/plugins/ckeditor4/lineheight/lang/en.js b/plugins/ckeditor4/lineheight/lang/en.js new file mode 100644 index 0000000..ea74fbc --- /dev/null +++ b/plugins/ckeditor4/lineheight/lang/en.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','en', { + title: 'Line Height' +} ); diff --git a/plugins/ckeditor4/lineheight/lang/es.js b/plugins/ckeditor4/lineheight/lang/es.js new file mode 100644 index 0000000..1498176 --- /dev/null +++ b/plugins/ckeditor4/lineheight/lang/es.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','es', { + title: 'Altura de LÃnea' +} ); diff --git a/plugins/ckeditor4/lineheight/lang/fr.js b/plugins/ckeditor4/lineheight/lang/fr.js new file mode 100644 index 0000000..1679889 --- /dev/null +++ b/plugins/ckeditor4/lineheight/lang/fr.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','fr', { + title: 'Hauteur de Ligne' +} ); diff --git a/plugins/ckeditor4/lineheight/lang/ko.js b/plugins/ckeditor4/lineheight/lang/ko.js new file mode 100644 index 0000000..782bd87 --- /dev/null +++ b/plugins/ckeditor4/lineheight/lang/ko.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','ko', { + title: '줄 높ì´' +} ); diff --git a/plugins/ckeditor4/lineheight/lang/pt.js b/plugins/ckeditor4/lineheight/lang/pt.js new file mode 100644 index 0000000..f8ca6e4 --- /dev/null +++ b/plugins/ckeditor4/lineheight/lang/pt.js @@ -0,0 +1,3 @@ +CKEDITOR.plugins.setLang('lineheight','af', { + title: 'linha Altura' +} ); diff --git a/plugins/ckeditor4/lineheight/plugin.js b/plugins/ckeditor4/lineheight/plugin.js new file mode 100644 index 0000000..464c747 --- /dev/null +++ b/plugins/ckeditor4/lineheight/plugin.js @@ -0,0 +1,81 @@ +( function() { + function addCombo( editor, comboName, styleType, lang, entries, defaultLabel, styleDefinition, order ) { + var config = editor.config,style = new CKEDITOR.style( styleDefinition ); + var names = entries.split( ';' ),values = []; + var styles = {}; + for ( var i = 0; i < names.length; i++ ) { + var parts = names[ i ]; + if ( parts ) { + parts = parts.split( '/' ); + var vars = {},name = names[ i ] = parts[ 0 ]; + vars[ styleType ] = values[ i ] = parts[ 1 ] || name; + styles[ name ] = new CKEDITOR.style( styleDefinition, vars ); + styles[ name ]._.definition.name = name; + } else + names.splice( i--, 1 ); + } + editor.ui.addRichCombo( comboName, { + label: editor.lang.lineheight.title, + title: editor.lang.lineheight.title, + toolbar: 'styles,' + order, + allowedContent: style, + requiredContent: style, + panel: { + css: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ), + multiSelect: false, + attributes: { 'aria-label': editor.lang.lineheight.title } + }, + init: function() { + this.startGroup(editor.lang.lineheight.title); + for ( var i = 0; i < names.length; i++ ) { + var name = names[ i ]; + this.add( name, styles[ name ].buildPreview(), name ); + } + }, + onClick: function( value ) { + editor.focus(); + editor.fire( 'saveSnapshot' ); + var style = styles[ value ]; + editor[ this.getValue() == value ? 'removeStyle' : 'applyStyle' ]( style ); + editor.fire( 'saveSnapshot' ); + }, + onRender: function() { + editor.on( 'selectionChange', function( ev ) { + var currentValue = this.getValue(); + var elementPath = ev.data.path,elements = elementPath.elements; + for ( var i = 0, element; i < elements.length; i++ ) { + element = elements[ i ]; + for ( var value in styles ) { + if ( styles[ value ].checkElementMatch( element, true, editor ) ) { + if ( value != currentValue ) + this.setValue( value ); + return; + } + } + } + this.setValue( '', defaultLabel ); + }, this ); + }, + refresh: function() { + if ( !editor.activeFilter.check( style ) ) + this.setState( CKEDITOR.TRISTATE_DISABLED ); + } + } ); + } + CKEDITOR.plugins.add( 'lineheight', { + requires: 'richcombo', + lang: 'ar,de,en,es,fr,ko,pt', + init: function( editor ) { + var config = editor.config; + addCombo( editor, 'lineheight', 'size', editor.lang.lineheight.title, config.line_height, editor.lang.lineheight.title, config.lineHeight_style, 40 ); + } + } ); +} )(); +CKEDITOR.config.line_height = '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72'; +CKEDITOR.config.lineHeight_style = { + element: 'span', + styles: { 'line-height': '#(size)' }, + overrides: [ { + element: 'line-height', attributes: { 'size': null } + } ] +}; diff --git a/plugins/ckeditor4/lineheight/readme.txt b/plugins/ckeditor4/lineheight/readme.txt new file mode 100644 index 0000000..313beca --- /dev/null +++ b/plugins/ckeditor4/lineheight/readme.txt @@ -0,0 +1,30 @@ +lineheight +========== + +CKEDITOR Line-height plugin documentation +---------------------------------------------- + +Installation Notes: + + Adding plugin into the toolbar: + Using CKBuilder is a recommended solution, however, if you have plugins developed by yourself or by third parties, you can add plugins to your local installation manually by following the steps described below: + Extract the plugin .zip archive. + Copy the plugin files to the plugins folder of your CKEditor installation. Each plugin must be placed in a sub-folder that matches its "technical" name. + + For example, the lineheight plugin would be installed into this folder: <CKEditor folder>/plugins/lineheight. + Check and resolve plugin dependencies. If a plugin needs others to work, you will need to add these manually as well. + Enable the plugin. Use the extraPlugins setting to add the plugin to your confiuration: + + config.extraPlugins = 'lineheight'; + +Refer this link for configuring the toolbar: http://docs.ckeditor.com/#!/guide/dev_toolbar + + +Customizing the lineheight values in the dropdown +------------------------------------------------------- +In order to have custom values of line-height instead of the default, you can add following line in the config.js file: + + config.line_height="1em;1.1em;1.2em;1.3em;1.4em;1.5em"; + + Here, "em" is the unit of line-height which you can change to "px","%" or any other allowed unit for line-height. + You can also change the numbers based on your requirements. You can have more range or low range , it all depends on your requirements. diff --git a/plugins/ckeditor4/loremipsum/icons/hidpi/loremipsum.png b/plugins/ckeditor4/loremipsum/icons/hidpi/loremipsum.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd9d2f70a657c1f285cc47ff5d8399668e22f94 GIT binary patch literal 401 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X3<7*YT$vacgarlPy?fW$(P3(Ayn5BDGiT1+y?b}h?%fsT z<*qI+vu4f=3k_9KQc6!t`~Uy{y|hzzfO-W=g8YJkTx7uTKsi<tD0kb_#WAGf)|SaP z#hMj(T+|h;U;O`{>zu0n<-+t=lV@Zb83)GL>-~`oDB4lVonUh=O#O)D1(r)+3mB@H zc<f&bGoAEg{?2m7EoI&Bx!lqhRqM89GHzvM$&e3`Q034Uci>YCb&6<Uu~lK(z2iWj z@Y&KRlO2=(rfO)J>|$Q&HKF}NJOi)LRmRtA-&#HRW&M-EocZIl)O)Y3F2<NOO#RH^ zzEI|k>LeM4YrMKEOU{)nh!)8@mm?cDeeDMB2~zGi{+Qm_W~N~IdF4U=*$EFsy!px^ j3PaBSjqGR8XJlij-)HRiHO}@w(3=dNu6{1-oD!M<Z9=34 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/loremipsum/icons/loremipsum.png b/plugins/ckeditor4/loremipsum/icons/loremipsum.png new file mode 100644 index 0000000000000000000000000000000000000000..f67a9f9ef6d39d7631c578133b74c9c5cc8a0bda GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!fog8-ip*LUyU-MxEv*36kIN=i%&45r4$!h(XXE-q)zoLRkU zRYiGudRkg%M@Lv_=$_rX|Ns9l%`C7NWLrs)Uoeo13>Y3L$4Ua_@;zM~Ln?07^hfeF z7;w1U<hncM_x)?vwz>6A<oAeclVqqDtzp)<V#PL#fhk$~hylZfC*E~h9+xgFzmnMD zur+U{scynf_YHddSN6UvfBe+3N$#%YkDjxW)>ve$yv;ECi*VqTf^}C4^L|yn3u|X! ZX2`zG!#!ay*DIja44$rjF6*2UngHm&b~XS2 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/loremipsum/lang/en.js b/plugins/ckeditor4/loremipsum/lang/en.js new file mode 100644 index 0000000..0f11c8c --- /dev/null +++ b/plugins/ckeditor4/loremipsum/lang/en.js @@ -0,0 +1,8 @@ +CKEDITOR.plugins.setLang( 'loremipsum', 'en', { + title: 'Lorem Ipsum Generator', + toolbar: 'Lorem Ipsum Generator', + paragraph: 'Paraghraph', + sentence: 'Sentence', + paragraphs: 'Paraghraphs', + sentences: 'Sentences' +} ); \ No newline at end of file diff --git a/plugins/ckeditor4/loremipsum/lang/fr.js b/plugins/ckeditor4/loremipsum/lang/fr.js new file mode 100644 index 0000000..6946ee1 --- /dev/null +++ b/plugins/ckeditor4/loremipsum/lang/fr.js @@ -0,0 +1,8 @@ +CKEDITOR.plugins.setLang( 'loremipsum', 'fr', { + title: 'Lorem Ipsum Generator', + toolbar: 'Lorem Ipsum Generator', + paragraph: 'Paraghraphe', + sentence: 'Phrase', + paragraphs: 'Paraghraphes', + sentences: 'Phrases' +} ); \ No newline at end of file diff --git a/plugins/ckeditor4/loremipsum/plugin.js b/plugins/ckeditor4/loremipsum/plugin.js new file mode 100644 index 0000000..bbf0ae9 --- /dev/null +++ b/plugins/ckeditor4/loremipsum/plugin.js @@ -0,0 +1,131 @@ +(function() { + var pluginName = 'loremipsum'; + + var LOREM_TEXT_TYPE = {PARAGRAPH: 1, SENTENCE: 2, WORD: 3 }; + + var LOREM_WORDS = [ + "lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing", "elit", "ut", "aliquam,", "purus", "sit", "amet", "luctus", "venenatis,", "lectus", "magna", "fringilla", "urna,", "porttitor", "rhoncus", "dolor", "purus", "non", "enim", "praesent", "elementum", "facilisis", "leo,", "vel", "fringilla", "est", "ullamcorper", "eget", "nulla", "facilisi", "etiam", "dignissim", "diam", "quis", "enim", "lobortis", "scelerisque", "fermentum", "dui", "faucibus", "in", "ornare", "quam", "viverra", "orci", "sagittis", "eu", "volutpat", "odio", "facilisis", "mauris", "sit", "amet", "massa", "vitae", "tortor", "condimentum", "lacinia", "quis", "vel", "eros", "donec", "ac", "odio", "tempor", "orci", "dapibus", "ultrices", "in", "iaculis", "nunc", "sed", "augue", "lacus,", "viverra", "vitae", "congue", "eu,", "consequat", "ac", "felis", "donec", "et", "odio", "pellentesque", "diam", "volutpat", "commodo", "sed", "egestas", "egestas", "fringilla", "phasellus", "faucibus", "scelerisque", "eleifend", "donec", "pretium", "vulputate", "sapien", "nec", "sagittis", "aliquam", "malesuada", "bibendum", "arcu", "vitae", "elementum", + "curabitur", "vitae", "nunc", "sed", "velit", "dignissim", "sodales", "ut", "eu", "sem", "integer", "vitae", "justo", "eget", "magna", "fermentum", "iaculis", "eu", "non", "diam", "phasellus", "vestibulum", "lorem", "sed", "risus", "ultricies", "tristique", "nulla", "aliquet", "enim", "tortor,", "at", "auctor", "urna", "nunc", "id", "cursus", "metus", "aliquam", "eleifend", "mi", "in", "nulla", "posuere", "sollicitudin", "aliquam", "ultrices", "sagittis", "orci,", "a", "scelerisque", "purus", "semper", "eget", "duis", "at", "tellus", "at", "urna", "condimentum", "mattis", "pellentesque", "id", "nibh", "tortor,", "id", "aliquet", "lectus", "proin", "nibh", "nisl,", "condimentum", "id", "venenatis", "a,", "condimentum", "vitae", "sapien", "pellentesque", "habitant", "morbi", "tristique", "senectus", "et", "netus", "et", "malesuada", "fames", "ac", "turpis", "egestas", "sed", "tempus,", "urna", "et", "pharetra", "pharetra,", "massa", "massa", "ultricies", "mi,", "quis", "hendrerit", "dolor", "magna", "eget", "est", "lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing", "elit", "pellentesque", "habitant", "morbi", "tristique", "senectus", "et", "netus", "et", "malesuada", "fames", "ac", "turpis", "egestas", "integer", "eget", "aliquet", "nibh", "praesent", "tristique", "magna", "sit", "amet", "purus", "gravida", "quis", "blandit", "turpis", "cursus", "in", "hac", "habitasse", "platea", "dictumst", "quisque", "sagittis,", "purus", "sit", "amet", "volutpat", "consequat,", "mauris", "nunc", "congue", "nisi,", "vitae", "suscipit", "tellus", "mauris", "a", "diam", + "maecenas", "sed", "enim", "ut", "sem", "viverra", "aliquet", "eget", "sit", "amet", "tellus", "cras", "adipiscing", "enim", "eu", "turpis", "egestas", "pretium", "aenean", "pharetra,", "magna", "ac", "placerat", "vestibulum,", "lectus", "mauris", "ultrices", "eros,", "in", "cursus", "turpis", "massa", "tincidunt", "dui", "ut", "ornare", "lectus", "sit", "amet", "est", "placerat", "in", "egestas", "erat", "imperdiet", "sed", "euismod", "nisi", "porta", "lorem", "mollis", "aliquam", "ut", "porttitor", "leo", "a", "diam", "sollicitudin", "tempor", "id", "eu", "nisl", "nunc", "mi", "ipsum,", "faucibus", "vitae", "aliquet", "nec,", "ullamcorper", "sit", "amet", "risus", "nullam", "eget", "felis", "eget", "nunc", "lobortis", "mattis", "aliquam", "faucibus", "purus", "in", "massa", "tempor", "nec", "feugiat", "nisl", "pretium", "fusce", "id", "velit", "ut", "tortor", "pretium", "viverra", "suspendisse", "potenti", "nullam", "ac", "tortor", "vitae", "purus", "faucibus", "ornare", "suspendisse", "sed", "nisi", "lacus,", "sed", "viverra", "tellus", "in", "hac", "habitasse", "platea", "dictumst", "vestibulum", "rhoncus", "est", "pellentesque", "elit", "ullamcorper", "dignissim", "cras", "tincidunt", "lobortis", "feugiat", "vivamus", "at", "augue", "eget", "arcu", "dictum", "varius", "duis", "at", "consectetur", "lorem", + "donec", "massa", "sapien,", "faucibus", "et", "molestie", "ac,", "feugiat", "sed", "lectus", "vestibulum", "mattis", "ullamcorper", "velit", "sed", "ullamcorper", "morbi", "tincidunt", "ornare", "massa,", "eget", "egestas", "purus", "viverra", "accumsan", "in", "nisl", "nisi,", "scelerisque", "eu", "ultrices", "vitae,", "auctor", "eu", "augue", "ut", "lectus", "arcu,", "bibendum", "at", "varius", "vel,", "pharetra", "vel", "turpis", "nunc", "eget", "lorem", "dolor,", "sed", "viverra", "ipsum", "nunc", "aliquet", "bibendum", "enim,", "facilisis", "gravida", "neque", "convallis", "a", "cras", "semper", "auctor", "neque,", "vitae", "tempus", "quam", "pellentesque", "nec", "nam", "aliquam", "sem", "et", "tortor", "consequat", "id", "porta", "nibh", "venenatis", "cras", "sed", "felis", "eget", "velit", "aliquet", "sagittis", "id", "consectetur", "purus", "ut", "faucibus", "pulvinar", "elementum", "integer", "enim", "neque,", "volutpat", "ac", "tincidunt", "vitae,", "semper", "quis", "lectus", "nulla", "at", "volutpat", "diam", "ut", "venenatis", "tellus", "in", "metus", "vulputate", "eu", "scelerisque", "felis", "imperdiet", "proin", "fermentum", "leo", "vel", "orci", "porta", "non", "pulvinar", "neque", "laoreet", "suspendisse", "interdum", "consectetur", "libero,", "id", "faucibus", "nisl", "tincidunt", "eget", "nullam", "non", "nisi", "est,", "sit", "amet", "facilisis", "magna", + "etiam", "tempor,", "orci", "eu", "lobortis", "elementum,", "nibh", "tellus", "molestie", "nunc,", "non", "blandit", "massa", "enim", "nec", "dui", "nunc", "mattis", "enim", "ut", "tellus", "elementum", "sagittis", "vitae", "et", "leo", "duis", "ut", "diam", "quam", "nulla", "porttitor", "massa", "id", "neque", "aliquam", "vestibulum", "morbi", "blandit", "cursus", "risus,", "at", "ultrices", "mi", "tempus", "imperdiet", "nulla", "malesuada", "pellentesque", "elit", "eget", "gravida", "cum", "sociis", "natoque", "penatibus", "et", "magnis", "dis", "parturient", "montes,", "nascetur", "ridiculus", "mus", "mauris", "vitae", "ultricies", "leo", "integer", "malesuada", "nunc", "vel", "risus", "commodo", "viverra", "maecenas", "accumsan,", "lacus", "vel", "facilisis", "volutpat,", "est", "velit", "egestas", "dui,", "id", "ornare", "arcu", "odio", "ut", "sem", "nulla", "pharetra", "diam", "sit", "amet", "nisl", "suscipit", "adipiscing", "bibendum", "est", "ultricies", "integer", "quis", "auctor", "elit", + "sed", "vulputate", "mi", "sit", "amet", "mauris", "commodo", "quis", "imperdiet", "massa", "tincidunt", "nunc", "pulvinar", "sapien", "et", "ligula", "ullamcorper", "malesuada", "proin", "libero", "nunc,", "consequat", "interdum", "varius", "sit", "amet,", "mattis", "vulputate", "enim", "nulla", "aliquet", "porttitor", "lacus,", "luctus", "accumsan", "tortor", "posuere", "ac", "ut", "consequat", "semper", "viverra", "nam", "libero", "justo,", "laoreet", "sit", "amet", "cursus", "sit", "amet,", "dictum", "sit", "amet", "justo", "donec", "enim", "diam,", "vulputate", "ut", "pharetra", "sit", "amet,", "aliquam", "id", "diam", "maecenas", "ultricies", "mi", "eget", "mauris", "pharetra", "et", "ultrices", "neque", "ornare", "aenean", "euismod", "elementum", "nisi,", "quis", "eleifend", "quam", "adipiscing", "vitae", "proin", "sagittis,", "nisl", "rhoncus", "mattis", "rhoncus,", "urna", "neque", "viverra", "justo,", "nec", "ultrices", "dui", "sapien", "eget", "mi", "proin", "sed", "libero", "enim,", "sed", "faucibus", "turpis", "in", "eu", "mi", "bibendum", "neque", "egestas", "congue", "quisque", "egestas", "diam", "in", "arcu", "cursus", "euismod", "quis", "viverra", "nibh", "cras", "pulvinar", "mattis", "nunc,", "sed", "blandit", "libero", "volutpat", "sed", "cras", "ornare", "arcu", "dui", "vivamus", "arcu", "felis,", "bibendum", "ut", "tristique", "et,", "egestas", "quis", "ipsum", "suspendisse", "ultrices", "gravida", "dictum", + "fusce", "ut", "placerat", "orci", "nulla", "pellentesque", "dignissim", "enim,", "sit", "amet", "venenatis", "urna", "cursus", "eget", "nunc", "scelerisque", "viverra", "mauris,", "in", "aliquam", "sem", "fringilla", "ut", "morbi", "tincidunt", "augue", "interdum", "velit", "euismod", "in", "pellentesque", "massa", "placerat", "duis", "ultricies", "lacus", "sed", "turpis", "tincidunt", "id", "aliquet", "risus", "feugiat", "in", "ante", "metus,", "dictum", "at", "tempor", "commodo,", "ullamcorper", "a", "lacus", "vestibulum", "sed", "arcu", "non", "odio", "euismod", "lacinia", "at", "quis", "risus", "sed", "vulputate", "odio", "ut", "enim", "blandit", "volutpat", "maecenas", "volutpat", "blandit", "aliquam", "etiam", "erat", "velit,", "scelerisque", "in", "dictum", "non,", "consectetur", "a", "erat", "nam", "at", "lectus", "urna", "duis", "convallis", "convallis", "tellus,", "id", "interdum", "velit", "laoreet", "id", "donec", "ultrices", "tincidunt", "arcu,", "non", "sodales", "neque", "sodales", "ut", "etiam", "sit", "amet", "nisl", "purus,", "in", "mollis", "nunc", + "sed", "id", "semper", "risus", "in", "hendrerit", "gravida", "rutrum", "quisque", "non", "tellus", "orci,", "ac", "auctor", "augue", "mauris", "augue", "neque,", "gravida", "in", "fermentum", "et,", "sollicitudin", "ac", "orci", "phasellus", "egestas", "tellus", "rutrum", "tellus", "pellentesque", "eu", "tincidunt", "tortor", "aliquam", "nulla", "facilisi", "cras", "fermentum,", "odio", "eu", "feugiat", "pretium,", "nibh", "ipsum", "consequat", "nisl,", "vel", "pretium", "lectus", "quam", "id", "leo", "in", "vitae", "turpis", "massa", "sed", "elementum", "tempus", "egestas", "sed", "sed", "risus", "pretium", "quam", "vulputate", "dignissim", "suspendisse", "in", "est", "ante", "in", "nibh", "mauris,", "cursus", "mattis", "molestie", "a,", "iaculis", "at", "erat", + "pellentesque", "adipiscing", "commodo", "elit,", "at", "imperdiet", "dui", "accumsan", "sit", "amet", "nulla", "facilisi", "morbi", "tempus", "iaculis", "urna,", "id", "volutpat", "lacus", "laoreet", "non", "curabitur", "gravida", "arcu", "ac", "tortor", "dignissim", "convallis", "aenean", "et", "tortor", "at", "risus", "viverra", "adipiscing", "at", "in", "tellus", "integer", "feugiat", "scelerisque", "varius", "morbi", "enim", "nunc,", "faucibus", "a", "pellentesque", "sit", "amet,", "porttitor", "eget", "dolor", "morbi", "non", "arcu", "risus,", "quis", "varius", "quam", "quisque", "id", "diam", "vel", "quam", "elementum", "pulvinar", "etiam", "non", "quam", "lacus", "suspendisse", "faucibus", "interdum", "posuere", "lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing", "elit", "duis", "tristique", "sollicitudin", "nibh", "sit", "amet", "commodo", "nulla", "facilisi", + "nullam", "vehicula", "ipsum", "a", "arcu", "cursus", "vitae", "congue", "mauris", "rhoncus", "aenean", "vel", "elit", "scelerisque", "mauris", "pellentesque", "pulvinar", "pellentesque", "habitant", "morbi", "tristique", "senectus", "et", "netus", "et", "malesuada", "fames", "ac", "turpis", "egestas", "maecenas", "pharetra", "convallis", "posuere", "morbi", "leo", "urna,", "molestie", "at", "elementum", "eu,", "facilisis", "sed", "odio", "morbi", "quis", "commodo", "odio", "aenean", "sed", "adipiscing", "diam", "donec", "adipiscing", "tristique", "risus", "nec", "feugiat", "in", "fermentum", "posuere", "urna", "nec", "tincidunt", "praesent", "semper", "feugiat", "nibh", "sed", "pulvinar", "proin", "gravida", "hendrerit", "lectus", "a", "molestie" + ]; + + function generateLoremText(count, type) { + + switch (type) { + + case LOREM_TEXT_TYPE.PARAGRAPH: + + var paragraphsArray = new Array (); + + for (var i = 0; i < count; i++) { + // random number between 10 and 20 + paragraphsArray.push('<p>' + generateLoremText(Math.floor((Math.random() * 10) + 10), LOREM_TEXT_TYPE.SENTENCE) + '</p>'); + } + + return paragraphsArray.join('\n'); + + break; + + case LOREM_TEXT_TYPE.SENTENCE: + + var sentencesArray = new Array (); + + for (var i = 0; i < count; i++) { + // random number between 5 and 10 + var words = generateLoremText(Math.floor((Math.random() * 5) + 5), LOREM_TEXT_TYPE.WORD).split(' '); + // Capitalize first letter + words[0] = words[0].substr(0, 1).toUpperCase() + words[0].substr(1); + var sentences = words.join(' '); + + sentencesArray.push(sentences); + } + + return (sentencesArray.join('. ') + '.').replace(/(\.\,|\,\.)/g, '.'); + + break; + + case LOREM_TEXT_TYPE.WORD: + // random integer between 1 et LOREM_WORDS.length + var randomWordIndex = Math.floor((Math.random() * (LOREM_WORDS.length - 1)) + 1); + + return LOREM_WORDS.slice(randomWordIndex, randomWordIndex + count).join(' '); + + break; + } + }; + + CKEDITOR.plugins.add( pluginName, { + icons: 'loremipsum', + requires: 'richcombo', + lang: 'fr,en', + hidpi: true, + init: function( editor ) { + + var config = editor.config, + lang = editor.lang.loremipsum, + paragraphOptionsList = [], + sentenceOptionsList = [], + allowedContent = []; + + paragraphOptionsList[0]=["1p", "1 " + lang.paragraph, "1 " + lang.paragraph]; + paragraphOptionsList[1]=["2p", "2 " + lang.paragraphs, "2 " + lang.paragraphs]; + paragraphOptionsList[2]=["3p", "3 " + lang.paragraphs, "3 " + lang.paragraphs]; + paragraphOptionsList[3]=["4p", "4 " + lang.paragraphs, "4 " + lang.paragraphs]; + paragraphOptionsList[4]=["5p", "5 " + lang.paragraphs, "5 " + lang.paragraphs]; + paragraphOptionsList[5]=["6p", "6 " + lang.paragraphs, "6 " + lang.paragraphs]; + + sentenceOptionsList[0]=["1s", "1 " + lang.sentence, "1 " + lang.sentence]; + sentenceOptionsList[1]=["2s", "2 " + lang.sentences, "2 " + lang.sentences]; + sentenceOptionsList[2]=["3s", "3 " + lang.sentences, "3 " + lang.sentences]; + sentenceOptionsList[3]=["4s", "4 " + lang.sentences, "4 " + lang.sentences]; + sentenceOptionsList[4]=["5s", "5 " + lang.sentences, "5 " + lang.sentences]; + sentenceOptionsList[5]=["6s", "6 " + lang.sentences, "6 " + lang.sentences]; + + editor.ui.addRichCombo( 'Loremipsum', { + label: 'Loremipsum', + title: 'Loremipsum', + toolbar: 'loremipsum,70', + allowedContent: allowedContent, + + panel: { + css: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ), + multiSelect: true, + attributes: { 'aria-label': 'Loremipsum' } + }, + init: function() { + + this.startGroup( lang.paragraphs ); + + for (var paragraphOption in paragraphOptionsList){ + this.add(paragraphOptionsList[paragraphOption][0], paragraphOptionsList[paragraphOption][1], paragraphOptionsList[paragraphOption][2]); + } + + this.startGroup( lang.sentences ); + + for (var sentenceOption in sentenceOptionsList){ + this.add(sentenceOptionsList[sentenceOption][0], sentenceOptionsList[sentenceOption][1], sentenceOptionsList[sentenceOption][2]); + } + + this.commit(); + }, + onClick: function( value ) { + + editor.focus(); + editor.fire( 'saveSnapshot' ); + var type = value.charAt(1) == 'p' ? LOREM_TEXT_TYPE.PARAGRAPH : LOREM_TEXT_TYPE.SENTENCE; + var text = generateLoremText(value.charAt(0), type); + editor.insertHtml(text); + editor.fire( 'saveSnapshot' ); + } + }); + } + }); + +})(); \ No newline at end of file diff --git a/plugins/ckeditor4/markdown/.gitattributes b/plugins/ckeditor4/markdown/.gitattributes new file mode 100755 index 0000000..412eeda --- /dev/null +++ b/plugins/ckeditor4/markdown/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/plugins/ckeditor4/markdown/.gitignore b/plugins/ckeditor4/markdown/.gitignore new file mode 100755 index 0000000..b9d6bd9 --- /dev/null +++ b/plugins/ckeditor4/markdown/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/plugins/ckeditor4/markdown/README.md b/plugins/ckeditor4/markdown/README.md new file mode 100755 index 0000000..e030880 --- /dev/null +++ b/plugins/ckeditor4/markdown/README.md @@ -0,0 +1,60 @@ +# CKEditor-Markdown-Plugin +Markdown Plugin for CKEditor +This is a plugin for CKEditor, you can use `markdown` mode in CKEditor. Moreover, your article in `WYSIWYG` mode can be translated to `markdown`. + +## Get Started +It needs [ckeditor standard version](http://download.cksource.com/CKEditor/CKEditor/CKEditor%204.4.7/ckeditor_4.4.7_standard.zip) + +You can see the [DEMO](http://hectorguo.github.io/CKEditor-Markdown-Plugin/) + +## Usage +1. Create a folder named `markdown` in `ckeditor/plugins` path; +2. Download the source, and uncompress it in the folder; +3. Edit `config.js` (such as `ckeditor/config.js`): +```javascript + config.extraPlugins = 'markdown'; // add this plugin +``` +Enjoy it! + +`config.js` example: +```javascript +CKEDITOR.editorConfig = function( config ) { + // Define changes to default configuration here. + // For complete reference see: + // http://docs.ckeditor.com/#!/api/CKEDITOR.config + + // The toolbar groups arrangement, optimized for two toolbar rows. + config.toolbarGroups = [ + // { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, + // { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, + // { name: 'links' }, + // { name: 'insert' }, + // { name: 'forms' }, + { name: 'tools' }, + // { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, + + // '/', + { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, + // { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, + { name: 'styles' }, + { name: 'others' } + // { name: 'colors' }, + // { name: 'about' } + ]; + + // Remove some buttons provided by the standard plugins, which are + // not needed in the Standard(s) toolbar. + config.removeButtons = 'Underline,Subscript,Superscript'; + config.extraPlugins = 'markdown'; // this is the point! + // Set the most common block elements. + config.format_tags = 'p;h1;h2;h3;pre'; + + // Simplify the dialog windows. + config.removeDialogTabs = 'image:advanced;link:advanced'; +}; +``` + +## Thanks +- [marked](https://github.com/chjj/marked) +- [to-markdown](http://domchristie.github.io/to-markdown) +- [codemirror](https://github.com/codemirror/CodeMirror) diff --git a/plugins/ckeditor4/markdown/css/codemirror.min.css b/plugins/ckeditor4/markdown/css/codemirror.min.css new file mode 100755 index 0000000..3690c79 --- /dev/null +++ b/plugins/ckeditor4/markdown/css/codemirror.min.css @@ -0,0 +1 @@ +.CodeMirror{font-family:monospace;height:300px}.CodeMirror-scroll{overflow:auto}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumbers{}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror div.CodeMirror-cursor{border-left:1px solid #000}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor{width:auto;border:0;background:#7e7}div.CodeMirror-overwrite div.CodeMirror-cursor{}.cm-tab{display:inline-block}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable,.cm-s-default .cm-punctuation,.cm-s-default .cm-property,.cm-s-default .cm-operator{}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{line-height:1;position:relative;overflow:hidden;background:#fff;color:#000}.CodeMirror-scroll{margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative;-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-sizer{position:relative;border-right:30px solid transparent;-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;padding-bottom:30px;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;-moz-box-sizing:content-box;box-sizing:content-box;padding-bottom:30px;margin-bottom:-32px;display:inline-block;*zoom:1;*display:inline}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-widget{}.CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-measure pre{position:static}.CodeMirror div.CodeMirror-cursor{position:absolute;border-right:none;width:0}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:1}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.CodeMirror span{*vertical-align:text-bottom}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.CodeMirror{font:13px/1.4em monospace;text-align:left}.CodeMirror .activeline{background:#e8f2ff}.CodeMirror .CodeMirror-foldmarker{color:blue;-ms-text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;-webkit-text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-matchingtag{background:#ff9600;background:rgba(255,150,0,.3)}.searchCodeButton span,.autoFormat span,.CommentSelectedRange span,.UncommentSelectedRange span{width:16px;height:16px;margin-left:6px}.searchCodeButton span{background:url("../icons/SearchCode.png") no-repeat}.autoFormat span{background:url("../icons/AutoFormat.png") no-repeat}.CommentSelectedRange span{background:url("../icons/CommentSelectedRange.png") no-repeat}.UncommentSelectedRange span{background:url("../icons/UncommentSelectedRange.png") no-repeat}.cke_reset_all .CodeMirror-scroll *{white-space:normal}.cke_reset_all .cm-s-cobalt *,.cke_reset_all .cm-s-erlang-dark *,.cke_reset_all .cm-s-lesser-dark *,.cke_reset_all .cm-s-monokai *,.cke_reset_all .cm-s-night *,.cke_reset_all .cm-s-rubyblue *,.cke_reset_all .cm-s-twilight *,.cke_reset_all .cm-s-xq-dark *,.cke_reset_all .cm-s-base16-dark *,.cke_reset_all .cm-s-3024-night *,.cke_reset_all .cm-s-the-matrix *,.cke_reset_all .cm-s-paraiso-dark *,.cke_reset_all .cm-s-paraiso-light *{color:inherit;font:inherit}.cm-s-cobalt .CodeMirror-selected{background:#b36539!important}.cm-s-erlang-dark .CodeMirror-selected{background:#b36539!important}.cm-s-lesser-dark .CodeMirror-selected{background:#45443b!important}.cm-s-monokai .CodeMirror-selected{background:#49483e!important}.cm-s-night .CodeMirror-selected{background:#447!important}.cm-s-rubyblue .CodeMirror-selected{background:#38566f!important}.cm-s-twilight .CodeMirror-selected{background:#323232!important}.cm-s-xq-dark .CodeMirror-selected{background:#a8f!important}.cm-s-the-matrix .CodeMirror-selected{background:#494949!important}.cm-s-mbo .CodeMirror-selected{background:#716c62!important}.cm-s-blackboard .activeline,.cm-s-cobalt .activeline,.cm-s-erlang-dark .activeline,.cm-s-lesser-dark .activeline,.cm-s-monokai .activeline,.cm-s-night .activeline,.cm-s-rubyblue .activeline,.cm-s-vibrant-ink .activeline,.cm-s-xq-dark .activeline,.cm-s-base16-dark .activeline,.cm-s-3024-night .activeline,.cm-s-paraiso-light .activeline,.cm-s-paraiso-dark .activeline,.cm-s-pastel-on-dark .activeline{background:#757575}.cm-s-pastel-on-dark .activeline{background:#404040}.cm-s-mbo .activeline{background:#716c62}.cm-s-twilight .activeline{background:#494949}.cm-s-the-matrix .activeline{background:#060}.CodeMirror-focused .cm-matchhighlight{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==);background-position:bottom;background-repeat:repeat-x}.CodeMirror-dialog{position:absolute;left:0;right:0;background:#fff;z-index:15;padding:.1em .8em;overflow:hidden;color:#333}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:none;outline:none;background:transparent;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%}.CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2px 3px 5px #000;-ms-box-shadow:2px 3px 5px #000;box-shadow:2px 3px 5px #000;border-radius:3px;border:1px solid silver;background:#fff;font-size:90%;font-family:monospace;max-height:20em;overflow-y:auto}.CodeMirror-hint{margin:0;padding:0 4px;border-radius:2px;max-width:19em;overflow:hidden;white-space:pre;color:#000;cursor:pointer}.CodeMirror-hint-active{background:#08f;color:#fff}.cm-trailingspace{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAYAAAB/qH1jAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUXCToH00Y1UgAAACFJREFUCNdjPMDBUc/AwNDAAAFMTAwMDA0OP34wQgX/AQBYgwYEx4f9lQAAAABJRU5ErkJggg==);background-position:bottom left;background-repeat:repeat-x} \ No newline at end of file diff --git a/plugins/ckeditor4/markdown/icons/hidpi/markdown.png b/plugins/ckeditor4/markdown/icons/hidpi/markdown.png new file mode 100755 index 0000000000000000000000000000000000000000..054675a253ef07e7e63c53823d842c2fbb5a2627 GIT binary patch literal 3022 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 QM*si-07*qoM6N<$f-^P5jsO4v literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/markdown/icons/markdown.png b/plugins/ckeditor4/markdown/icons/markdown.png new file mode 100755 index 0000000000000000000000000000000000000000..62f19d2baab4a463463665370f4b9ec27dabf7dd GIT binary patch literal 3026 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 U%Igzj<^TWy07*qoM6N<$f*(P}tN;K2 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/markdown/js/codemirror-gfm-min.js b/plugins/ckeditor4/markdown/js/codemirror-gfm-min.js new file mode 100755 index 0000000..c80db41 --- /dev/null +++ b/plugins/ckeditor4/markdown/js/codemirror-gfm-min.js @@ -0,0 +1,25 @@ +/* CodeMirror - Minified & Bundled + Generated on 2014å¹´9月22æ—¥ with http://codemirror.net/doc/compress.html + Version: 4.6 + + CodeMirror Library: + - codemirror.js + Modes: + - clike.js + - css.js + - gfm.js + - htmlmixed.js + - javascript.js + - markdown.js + - xml.js + Add-ons: + - overlay.js + */ + +!function(a){if("object"==typeof exports&&"object"==typeof module)module.exports=a();else{if("function"==typeof define&&define.amd)return define([],a);this.CodeMirror=a()}}(function(){"use strict";function w(a,b){if(!(this instanceof w))return new w(a,b);this.options=b=b||{},Og(ie,b,!1),K(b);var c=b.value;"string"==typeof c&&(c=new Jf(c,b.mode)),this.doc=c;var f=this.display=new x(a,c);f.wrapper.CodeMirror=this,G(this),E(this),b.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),b.autofocus&&!o&&ad(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,draggingText:!1,highlight:new Eg},d&&11>e&&setTimeout(Pg(_c,this,!0),20),dd(this),gh();var g=this;Kc(this,function(){g.curOp.forceUpdate=!0,Nf(g,c),b.autofocus&&!o||_g()==f.input?setTimeout(Pg(Hd,g),20):Id(g);for(var a in je)je.hasOwnProperty(a)&&je[a](g,b[a],le);Q(g);for(var d=0;d<pe.length;++d)pe[d](g)})}function x(a,b){var c=this,g=c.input=Wg("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em; outline: none");f?g.style.width="1000px":g.setAttribute("wrap","off"),n&&(g.style.border="1px solid black"),g.setAttribute("autocorrect","off"),g.setAttribute("autocapitalize","off"),g.setAttribute("spellcheck","false"),c.inputDiv=Wg("div",[g],null,"overflow: hidden; position: relative; width: 3px; height: 0px;"),c.scrollbarH=Wg("div",[Wg("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar"),c.scrollbarV=Wg("div",[Wg("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),c.scrollbarFiller=Wg("div",null,"CodeMirror-scrollbar-filler"),c.gutterFiller=Wg("div",null,"CodeMirror-gutter-filler"),c.lineDiv=Wg("div",null,"CodeMirror-code"),c.selectionDiv=Wg("div",null,null,"position: relative; z-index: 1"),c.cursorDiv=Wg("div",null,"CodeMirror-cursors"),c.measure=Wg("div",null,"CodeMirror-measure"),c.lineMeasure=Wg("div",null,"CodeMirror-measure"),c.lineSpace=Wg("div",[c.measure,c.lineMeasure,c.selectionDiv,c.cursorDiv,c.lineDiv],null,"position: relative; outline: none"),c.mover=Wg("div",[Wg("div",[c.lineSpace],"CodeMirror-lines")],null,"position: relative"),c.sizer=Wg("div",[c.mover],"CodeMirror-sizer"),c.heightForcer=Wg("div",null,null,"position: absolute; height: "+zg+"px; width: 1px;"),c.gutters=Wg("div",null,"CodeMirror-gutters"),c.lineGutter=null,c.scroller=Wg("div",[c.sizer,c.heightForcer,c.gutters],"CodeMirror-scroll"),c.scroller.setAttribute("tabIndex","-1"),c.wrapper=Wg("div",[c.inputDiv,c.scrollbarH,c.scrollbarV,c.scrollbarFiller,c.gutterFiller,c.scroller],"CodeMirror"),d&&8>e&&(c.gutters.style.zIndex=-1,c.scroller.style.paddingRight=0),n&&(g.style.width="0px"),f||(c.scroller.draggable=!0),k&&(c.inputDiv.style.height="1px",c.inputDiv.style.position="absolute"),d&&8>e&&(c.scrollbarH.style.minHeight=c.scrollbarV.style.minWidth="18px"),a.appendChild?a.appendChild(c.wrapper):a(c.wrapper),c.viewFrom=c.viewTo=b.first,c.view=[],c.externalMeasured=null,c.viewOffset=0,c.lastSizeC=0,c.updateLineNumbers=null,c.lineNumWidth=c.lineNumInnerWidth=c.lineNumChars=null,c.prevInput="",c.alignWidgets=!1,c.pollingFast=!1,c.poll=new Eg,c.cachedCharWidth=c.cachedTextHeight=c.cachedPaddingH=null,c.inaccurateSelection=!1,c.maxLine=null,c.maxLineLength=0,c.maxLineChanged=!1,c.wheelDX=c.wheelDY=c.wheelStartX=c.wheelStartY=null,c.shift=!1,c.selForContextMenu=null}function y(a){a.doc.mode=w.getMode(a.options,a.doc.modeOption),z(a)}function z(a){a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null)}),a.doc.frontier=a.doc.first,Ub(a,100),a.state.modeGen++,a.curOp&&Qc(a)}function A(a){a.options.lineWrapping?(ch(a.display.wrapper,"CodeMirror-wrap"),a.display.sizer.style.minWidth=""):(bh(a.display.wrapper,"CodeMirror-wrap"),J(a)),C(a),Qc(a),lc(a),setTimeout(function(){N(a)},100)}function B(a){var b=xc(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/yc(a.display)-3);return function(e){if(df(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;g<e.widgets.length;g++)e.widgets[g].height&&(f+=e.widgets[g].height);return c?f+(Math.ceil(e.text.length/d)||1)*b:f+b}}function C(a){var b=a.doc,c=B(a);b.iter(function(a){var b=c(a);b!=a.height&&Rf(a,b)})}function D(a){var b=ue[a.options.keyMap],c=b.style;a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-keymap-\S+/g,"")+(c?" cm-keymap-"+c:"")}function E(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),lc(a)}function F(a){G(a),Qc(a),setTimeout(function(){P(a)},20)}function G(a){var b=a.display.gutters,c=a.options.gutters;Yg(b);for(var d=0;d<c.length;++d){var e=c[d],f=b.appendChild(Wg("div",null,"CodeMirror-gutter "+e));"CodeMirror-linenumbers"==e&&(a.display.lineGutter=f,f.style.width=(a.display.lineNumWidth||1)+"px")}b.style.display=d?"":"none",H(a)}function H(a){var b=a.display.gutters.offsetWidth;a.display.sizer.style.marginLeft=b+"px",a.display.scrollbarH.style.left=a.options.fixedGutter?b+"px":0}function I(a){if(0==a.height)return 0;for(var c,b=a.text.length,d=a;c=Ye(d);){var e=c.find(0,!0);d=e.from.line,b+=e.from.ch-e.to.ch}for(d=a;c=Ze(d);){var e=c.find(0,!0);b-=d.text.length-e.from.ch,d=e.to.line,b+=d.text.length-e.to.ch}return b}function J(a){var b=a.display,c=a.doc;b.maxLine=Of(c,c.first),b.maxLineLength=I(b.maxLine),b.maxLineChanged=!0,c.iter(function(a){var c=I(a);c>b.maxLineLength&&(b.maxLineLength=c,b.maxLine=a)})}function K(a){var b=Lg(a.gutters,"CodeMirror-linenumbers");-1==b&&a.lineNumbers?a.gutters=a.gutters.concat(["CodeMirror-linenumbers"]):b>-1&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function L(a){return a.display.scroller.clientHeight-a.display.wrapper.clientHeight<zg-3}function M(a){var b=a.display.scroller;return{clientHeight:b.clientHeight,barHeight:a.display.scrollbarV.clientHeight,scrollWidth:b.scrollWidth,clientWidth:b.clientWidth,hScrollbarTakesSpace:L(a),barWidth:a.display.scrollbarH.clientWidth,docHeight:Math.round(a.doc.height+Zb(a.display))}}function N(a,b){b||(b=M(a));var c=a.display,d=kh(c.measure),e=b.docHeight+zg,f=b.scrollWidth>b.clientWidth;f&&b.scrollWidth<=b.clientWidth+1&&d>0&&!b.hScrollbarTakesSpace&&(f=!1);var g=e>b.clientHeight;if(g?(c.scrollbarV.style.display="block",c.scrollbarV.style.bottom=f?d+"px":"0",c.scrollbarV.firstChild.style.height=Math.max(0,e-b.clientHeight+(b.barHeight||c.scrollbarV.clientHeight))+"px"):(c.scrollbarV.style.display="",c.scrollbarV.firstChild.style.height="0"),f?(c.scrollbarH.style.display="block",c.scrollbarH.style.right=g?d+"px":"0",c.scrollbarH.firstChild.style.width=b.scrollWidth-b.clientWidth+(b.barWidth||c.scrollbarH.clientWidth)+"px"):(c.scrollbarH.style.display="",c.scrollbarH.firstChild.style.width="0"),f&&g?(c.scrollbarFiller.style.display="block",c.scrollbarFiller.style.height=c.scrollbarFiller.style.width=d+"px"):c.scrollbarFiller.style.display="",f&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(c.gutterFiller.style.display="block",c.gutterFiller.style.height=d+"px",c.gutterFiller.style.width=c.gutters.offsetWidth+"px"):c.gutterFiller.style.display="",!a.state.checkedOverlayScrollbar&&b.clientHeight>0){if(0===d){var h=p&&!l?"12px":"18px";c.scrollbarV.style.minWidth=c.scrollbarH.style.minHeight=h;var i=function(b){ng(b)!=c.scrollbarV&&ng(b)!=c.scrollbarH&&Lc(a,hd)(b)};pg(c.scrollbarV,"mousedown",i),pg(c.scrollbarH,"mousedown",i)}a.state.checkedOverlayScrollbar=!0}}function O(a,b,c){var d=c&&null!=c.top?Math.max(0,c.top):a.scroller.scrollTop;d=Math.floor(d-Yb(a));var e=c&&null!=c.bottom?c.bottom:d+a.wrapper.clientHeight,f=Tf(b,d),g=Tf(b,e);if(c&&c.ensure){var h=c.ensure.from.line,i=c.ensure.to.line;if(f>h)return{from:h,to:Tf(b,Uf(Of(b,h))+a.wrapper.clientHeight)};if(Math.min(i,b.lastLine())>=g)return{from:Tf(b,Uf(Of(b,i))-a.wrapper.clientHeight),to:i}}return{from:f,to:Math.max(g,f+1)}}function P(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=S(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,f=d+"px",g=0;g<c.length;g++)if(!c[g].hidden){a.options.fixedGutter&&c[g].gutter&&(c[g].gutter.style.left=f);var h=c[g].alignable;if(h)for(var i=0;i<h.length;i++)h[i].style.left=f}a.options.fixedGutter&&(b.gutters.style.left=d+e+"px")}}function Q(a){if(!a.options.lineNumbers)return!1;var b=a.doc,c=R(a.options,b.first+b.size-1),d=a.display;if(c.length!=d.lineNumChars){var e=d.measure.appendChild(Wg("div",[Wg("div",c)],"CodeMirror-linenumber CodeMirror-gutter-elt")),f=e.firstChild.offsetWidth,g=e.offsetWidth-f;return d.lineGutter.style.width="",d.lineNumInnerWidth=Math.max(f,d.lineGutter.offsetWidth-g),d.lineNumWidth=d.lineNumInnerWidth+g,d.lineNumChars=d.lineNumInnerWidth?c.length:-1,d.lineGutter.style.width=d.lineNumWidth+"px",H(a),!0}return!1}function R(a,b){return String(a.lineNumberFormatter(b+a.firstLineNumber))}function S(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function T(a,b,c){var d=a.display;this.viewport=b,this.visible=O(d,a.doc,b),this.editorIsHidden=!d.wrapper.offsetWidth,this.wrapperHeight=d.wrapper.clientHeight,this.oldViewFrom=d.viewFrom,this.oldViewTo=d.viewTo,this.oldScrollerWidth=d.scroller.clientWidth,this.force=c,this.dims=_(a)}function U(a,b){var c=a.display,d=a.doc;if(b.editorIsHidden)return Sc(a),!1;if(!b.force&&b.visible.from>=c.viewFrom&&b.visible.to<=c.viewTo&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo)&&0==Wc(a))return!1;Q(a)&&(Sc(a),b.dims=_(a));var e=d.first+d.size,f=Math.max(b.visible.from-a.options.viewportMargin,d.first),g=Math.min(e,b.visible.to+a.options.viewportMargin);c.viewFrom<f&&f-c.viewFrom<20&&(f=Math.max(d.first,c.viewFrom)),c.viewTo>g&&c.viewTo-g<20&&(g=Math.min(e,c.viewTo)),v&&(f=bf(a.doc,f),g=cf(a.doc,g));var h=f!=c.viewFrom||g!=c.viewTo||c.lastSizeC!=b.wrapperHeight;Vc(a,f,g),c.viewOffset=Uf(Of(a.doc,c.viewFrom)),a.display.mover.style.top=c.viewOffset+"px";var i=Wc(a);if(!h&&0==i&&!b.force&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo))return!1;var j=_g();return i>4&&(c.lineDiv.style.display="none"),ab(a,c.updateLineNumbers,b.dims),i>4&&(c.lineDiv.style.display=""),j&&_g()!=j&&j.offsetHeight&&j.focus(),Yg(c.cursorDiv),Yg(c.selectionDiv),h&&(c.lastSizeC=b.wrapperHeight,Ub(a,400)),c.updateLineNumbers=null,!0}function V(a,b){for(var c=b.force,d=b.viewport,e=!0;;e=!1){if(e&&a.options.lineWrapping&&b.oldScrollerWidth!=a.display.scroller.clientWidth)c=!0;else if(c=!1,d&&null!=d.top&&(d={top:Math.min(a.doc.height+Zb(a.display)-zg-a.display.scroller.clientHeight,d.top)}),b.visible=O(a.display,a.doc,d),b.visible.from>=a.display.viewFrom&&b.visible.to<=a.display.viewTo)break;if(!U(a,b))break;Z(a);var f=M(a);Qb(a),X(a,f),N(a,f)}tg(a,"update",a),(a.display.viewFrom!=b.oldViewFrom||a.display.viewTo!=b.oldViewTo)&&tg(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo)}function W(a,b){var c=new T(a,b);if(U(a,c)){Z(a),V(a,c);var d=M(a);Qb(a),X(a,d),N(a,d)}}function X(a,b){a.display.sizer.style.minHeight=a.display.heightForcer.style.top=b.docHeight+"px",a.display.gutters.style.height=Math.max(b.docHeight,b.clientHeight-zg)+"px"}function Y(a,b){a.display.sizer.offsetWidth+a.display.gutters.offsetWidth<a.display.scroller.clientWidth-1&&(a.display.sizer.style.minHeight=a.display.heightForcer.style.top="0px",a.display.gutters.style.height=b.docHeight+"px")}function Z(a){for(var b=a.display,c=b.lineDiv.offsetTop,f=0;f<b.view.length;f++){var h,g=b.view[f];if(!g.hidden){if(d&&8>e){var i=g.node.offsetTop+g.node.offsetHeight;h=i-c,c=i}else{var j=g.node.getBoundingClientRect();h=j.bottom-j.top}var k=g.line.height-h;if(2>h&&(h=xc(b)),(k>.001||-.001>k)&&(Rf(g.line,h),$(g.line),g.rest))for(var l=0;l<g.rest.length;l++)$(g.rest[l])}}}function $(a){if(a.widgets)for(var b=0;b<a.widgets.length;++b)a.widgets[b].height=a.widgets[b].node.offsetHeight}function _(a){for(var b=a.display,c={},d={},e=b.gutters.firstChild,f=0;e;e=e.nextSibling,++f)c[a.options.gutters[f]]=e.offsetLeft,d[a.options.gutters[f]]=e.offsetWidth;return{fixedPos:S(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function ab(a,b,c){function i(b){var c=b.nextSibling;return f&&p&&a.display.currentWheelTarget==b?b.style.display="none":b.parentNode.removeChild(b),c}for(var d=a.display,e=a.options.lineNumbers,g=d.lineDiv,h=g.firstChild,j=d.view,k=d.viewFrom,l=0;l<j.length;l++){var m=j[l];if(m.hidden);else if(m.node){for(;h!=m.node;)h=i(h);var o=e&&null!=b&&k>=b&&m.lineNumber;m.changes&&(Lg(m.changes,"gutter")>-1&&(o=!1),bb(a,m,k,c)),o&&(Yg(m.lineNumber),m.lineNumber.appendChild(document.createTextNode(R(a.options,k)))),h=m.node.nextSibling}else{var n=jb(a,m,k,c);g.insertBefore(n,h)}k+=m.size}for(;h;)h=i(h)}function bb(a,b,c,d){for(var e=0;e<b.changes.length;e++){var f=b.changes[e];"text"==f?fb(a,b):"gutter"==f?hb(a,b,c,d):"class"==f?gb(b):"widget"==f&&ib(b,d)}b.changes=null}function cb(a){return a.node==a.text&&(a.node=Wg("div",null,null,"position: relative"),a.text.parentNode&&a.text.parentNode.replaceChild(a.node,a.text),a.node.appendChild(a.text),d&&8>e&&(a.node.style.zIndex=2)),a.node}function db(a){var b=a.bgClass?a.bgClass+" "+(a.line.bgClass||""):a.line.bgClass;if(b&&(b+=" CodeMirror-linebackground"),a.background)b?a.background.className=b:(a.background.parentNode.removeChild(a.background),a.background=null);else if(b){var c=cb(a);a.background=c.insertBefore(Wg("div",null,b),c.firstChild)}}function eb(a,b){var c=a.display.externalMeasured;return c&&c.line==b.line?(a.display.externalMeasured=null,b.measure=c.measure,c.built):xf(a,b)}function fb(a,b){var c=b.text.className,d=eb(a,b);b.text==b.node&&(b.node=d.pre),b.text.parentNode.replaceChild(d.pre,b.text),b.text=d.pre,d.bgClass!=b.bgClass||d.textClass!=b.textClass?(b.bgClass=d.bgClass,b.textClass=d.textClass,gb(b)):c&&(b.text.className=c)}function gb(a){db(a),a.line.wrapClass?cb(a).className=a.line.wrapClass:a.node!=a.text&&(a.node.className="");var b=a.textClass?a.textClass+" "+(a.line.textClass||""):a.line.textClass;a.text.className=b||""}function hb(a,b,c,d){b.gutter&&(b.node.removeChild(b.gutter),b.gutter=null);var e=b.line.gutterMarkers;if(a.options.lineNumbers||e){var f=cb(b),g=b.gutter=f.insertBefore(Wg("div",null,"CodeMirror-gutter-wrapper","position: absolute; left: "+(a.options.fixedGutter?d.fixedPos:-d.gutterTotalWidth)+"px"),b.text);if(!a.options.lineNumbers||e&&e["CodeMirror-linenumbers"]||(b.lineNumber=g.appendChild(Wg("div",R(a.options,c),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+d.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+a.display.lineNumInnerWidth+"px"))),e)for(var h=0;h<a.options.gutters.length;++h){var i=a.options.gutters[h],j=e.hasOwnProperty(i)&&e[i];j&&g.appendChild(Wg("div",[j],"CodeMirror-gutter-elt","left: "+d.gutterLeft[i]+"px; width: "+d.gutterWidth[i]+"px"))}}}function ib(a,b){a.alignable&&(a.alignable=null);for(var d,c=a.node.firstChild;c;c=d){var d=c.nextSibling;"CodeMirror-linewidget"==c.className&&a.node.removeChild(c)}kb(a,b)}function jb(a,b,c,d){var e=eb(a,b);return b.text=b.node=e.pre,e.bgClass&&(b.bgClass=e.bgClass),e.textClass&&(b.textClass=e.textClass),gb(b),hb(a,b,c,d),kb(b,d),b.node}function kb(a,b){if(lb(a.line,a,b,!0),a.rest)for(var c=0;c<a.rest.length;c++)lb(a.rest[c],a,b,!1)}function lb(a,b,c,d){if(a.widgets)for(var e=cb(b),f=0,g=a.widgets;f<g.length;++f){var h=g[f],i=Wg("div",[h.node],"CodeMirror-linewidget");h.handleMouseEvents||(i.ignoreEvents=!0),mb(h,i,b,c),d&&h.above?e.insertBefore(i,b.gutter||b.text):e.appendChild(i),tg(h,"redraw")}}function mb(a,b,c,d){if(a.noHScroll){(c.alignable||(c.alignable=[])).push(b);var e=d.wrapperWidth;b.style.left=d.fixedPos+"px",a.coverGutter||(e-=d.gutterTotalWidth,b.style.paddingLeft=d.gutterTotalWidth+"px"),b.style.width=e+"px"}a.coverGutter&&(b.style.zIndex=5,b.style.position="relative",a.noHScroll||(b.style.marginLeft=-d.gutterTotalWidth+"px"))}function pb(a){return nb(a.line,a.ch)}function qb(a,b){return ob(a,b)<0?b:a}function rb(a,b){return ob(a,b)<0?a:b}function sb(a,b){this.ranges=a,this.primIndex=b}function tb(a,b){this.anchor=a,this.head=b}function ub(a,b){var c=a[b];a.sort(function(a,b){return ob(a.from(),b.from())}),b=Lg(a,c);for(var d=1;d<a.length;d++){var e=a[d],f=a[d-1];if(ob(f.to(),e.from())>=0){var g=rb(f.from(),e.from()),h=qb(f.to(),e.to()),i=f.empty()?e.from()==e.head:f.from()==f.head;b>=d&&--b,a.splice(--d,2,new tb(i?h:g,i?g:h))}}return new sb(a,b)}function vb(a,b){return new sb([new tb(a,b||a)],0)}function wb(a,b){return Math.max(a.first,Math.min(b,a.first+a.size-1))}function xb(a,b){if(b.line<a.first)return nb(a.first,0);var c=a.first+a.size-1;return b.line>c?nb(c,Of(a,c).text.length):yb(b,Of(a,b.line).text.length)}function yb(a,b){var c=a.ch;return null==c||c>b?nb(a.line,b):0>c?nb(a.line,0):a}function zb(a,b){return b>=a.first&&b<a.first+a.size}function Ab(a,b){for(var c=[],d=0;d<b.length;d++)c[d]=xb(a,b[d]);return c}function Bb(a,b,c,d){if(a.cm&&a.cm.display.shift||a.extend){var e=b.anchor;if(d){var f=ob(c,e)<0;f!=ob(d,e)<0?(e=c,c=d):f!=ob(c,d)<0&&(c=d)}return new tb(e,c)}return new tb(d||c,c)}function Cb(a,b,c,d){Ib(a,new sb([Bb(a,a.sel.primary(),b,c)],0),d)}function Db(a,b,c){for(var d=[],e=0;e<a.sel.ranges.length;e++)d[e]=Bb(a,a.sel.ranges[e],b[e],null);var f=ub(d,a.sel.primIndex);Ib(a,f,c)}function Eb(a,b,c,d){var e=a.sel.ranges.slice(0);e[b]=c,Ib(a,ub(e,a.sel.primIndex),d)}function Fb(a,b,c,d){Ib(a,vb(b,c),d)}function Gb(a,b){var c={ranges:b.ranges,update:function(b){this.ranges=[];for(var c=0;c<b.length;c++)this.ranges[c]=new tb(xb(a,b[c].anchor),xb(a,b[c].head))}};return rg(a,"beforeSelectionChange",a,c),a.cm&&rg(a.cm,"beforeSelectionChange",a.cm,c),c.ranges!=b.ranges?ub(c.ranges,c.ranges.length-1):b}function Hb(a,b,c){var d=a.history.done,e=Jg(d);e&&e.ranges?(d[d.length-1]=b,Jb(a,b,c)):Ib(a,b,c)}function Ib(a,b,c){Jb(a,b,c),ag(a,a.sel,a.cm?a.cm.curOp.id:0/0,c)}function Jb(a,b,c){(xg(a,"beforeSelectionChange")||a.cm&&xg(a.cm,"beforeSelectionChange"))&&(b=Gb(a,b));var d=c&&c.bias||(ob(b.primary().head,a.sel.primary().head)<0?-1:1);Kb(a,Mb(a,b,d,!0)),c&&c.scroll===!1||!a.cm||be(a.cm)}function Kb(a,b){b.equals(a.sel)||(a.sel=b,a.cm&&(a.cm.curOp.updateInput=a.cm.curOp.selectionChanged=!0,wg(a.cm)),tg(a,"cursorActivity",a))}function Lb(a){Kb(a,Mb(a,a.sel,null,!1),Bg)}function Mb(a,b,c,d){for(var e,f=0;f<b.ranges.length;f++){var g=b.ranges[f],h=Nb(a,g.anchor,c,d),i=Nb(a,g.head,c,d);(e||h!=g.anchor||i!=g.head)&&(e||(e=b.ranges.slice(0,f)),e[f]=new tb(h,i))}return e?ub(e,b.primIndex):b}function Nb(a,b,c,d){var e=!1,f=b,g=c||1;a.cantEdit=!1;a:for(;;){var h=Of(a,f.line);if(h.markedSpans)for(var i=0;i<h.markedSpans.length;++i){var j=h.markedSpans[i],k=j.marker;if((null==j.from||(k.inclusiveLeft?j.from<=f.ch:j.from<f.ch))&&(null==j.to||(k.inclusiveRight?j.to>=f.ch:j.to>f.ch))){if(d&&(rg(k,"beforeCursorEnter"),k.explicitlyCleared)){if(h.markedSpans){--i;continue}break}if(!k.atomic)continue;var l=k.find(0>g?-1:1);if(0==ob(l,f)&&(l.ch+=g,l.ch<0?l=l.line>a.first?xb(a,nb(l.line-1)):null:l.ch>h.text.length&&(l=l.line<a.first+a.size-1?nb(l.line+1,0):null),!l)){if(e)return d?(a.cantEdit=!0,nb(a.first,0)):Nb(a,b,c,!0);e=!0,l=b,g=-g}f=l;continue a}}return f}}function Ob(a){for(var b=a.display,c=a.doc,d={},e=d.cursors=document.createDocumentFragment(),f=d.selection=document.createDocumentFragment(),g=0;g<c.sel.ranges.length;g++){var h=c.sel.ranges[g],i=h.empty();(i||a.options.showCursorWhenSelecting)&&Rb(a,h,e),i||Sb(a,h,f)}if(a.options.moveInputWithCursor){var j=rc(a,c.sel.primary().head,"div"),k=b.wrapper.getBoundingClientRect(),l=b.lineDiv.getBoundingClientRect();d.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,j.top+l.top-k.top)),d.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,j.left+l.left-k.left))}return d}function Pb(a,b){Zg(a.display.cursorDiv,b.cursors),Zg(a.display.selectionDiv,b.selection),null!=b.teTop&&(a.display.inputDiv.style.top=b.teTop+"px",a.display.inputDiv.style.left=b.teLeft+"px")}function Qb(a){Pb(a,Ob(a))}function Rb(a,b,c){var d=rc(a,b.head,"div",null,null,!a.options.singleCursorHeightPerLine),e=c.appendChild(Wg("div","\xa0","CodeMirror-cursor"));if(e.style.left=d.left+"px",e.style.top=d.top+"px",e.style.height=Math.max(0,d.bottom-d.top)*a.options.cursorHeight+"px",d.other){var f=c.appendChild(Wg("div","\xa0","CodeMirror-cursor CodeMirror-secondarycursor"));f.style.display="",f.style.left=d.other.left+"px",f.style.top=d.other.top+"px",f.style.height=.85*(d.other.bottom-d.other.top)+"px"}}function Sb(a,b,c){function j(a,b,c,d){0>b&&(b=0),b=Math.round(b),d=Math.round(d),f.appendChild(Wg("div",null,"CodeMirror-selected","position: absolute; left: "+a+"px; top: "+b+"px; width: "+(null==c?i-a:c)+"px; height: "+(d-b)+"px"))}function k(b,c,d){function m(c,d){return qc(a,nb(b,c),"div",f,d)}var k,l,f=Of(e,b),g=f.text.length;return vh(Vf(f),c||0,null==d?g:d,function(a,b,e){var n,o,p,f=m(a,"left");if(a==b)n=f,o=p=f.left;else{if(n=m(b-1,"right"),"rtl"==e){var q=f;f=n,n=q}o=f.left,p=n.right}null==c&&0==a&&(o=h),n.top-f.top>3&&(j(o,f.top,null,f.bottom),o=h,f.bottom<n.top&&j(o,f.bottom,null,n.top)),null==d&&b==g&&(p=i),(!k||f.top<k.top||f.top==k.top&&f.left<k.left)&&(k=f),(!l||n.bottom>l.bottom||n.bottom==l.bottom&&n.right>l.right)&&(l=n),h+1>o&&(o=h),j(o,n.top,p-o,n.bottom)}),{start:k,end:l}}var d=a.display,e=a.doc,f=document.createDocumentFragment(),g=$b(a.display),h=g.left,i=d.lineSpace.offsetWidth-g.right,l=b.from(),m=b.to();if(l.line==m.line)k(l.line,l.ch,m.ch);else{var n=Of(e,l.line),o=Of(e,m.line),p=_e(n)==_e(o),q=k(l.line,l.ch,p?n.text.length+1:null).end,r=k(m.line,p?0:null,m.ch).start;p&&(q.top<r.top-2?(j(q.right,q.top,null,q.bottom),j(h,r.top,r.left,r.bottom)):j(q.right,q.top,r.left-q.right,q.bottom)),q.bottom<r.top&&j(h,q.bottom,null,r.top)}c.appendChild(f)}function Tb(a){if(a.state.focused){var b=a.display;clearInterval(b.blinker);var c=!0;b.cursorDiv.style.visibility="",a.options.cursorBlinkRate>0?b.blinker=setInterval(function(){b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate):a.options.cursorBlinkRate<0&&(b.cursorDiv.style.visibility="hidden")}}function Ub(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.viewTo&&a.state.highlight.set(b,Pg(Vb,a))}function Vb(a){var b=a.doc;if(b.frontier<b.first&&(b.frontier=b.first),!(b.frontier>=a.display.viewTo)){var c=+new Date+a.options.workTime,d=re(b.mode,Xb(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=rf(a,f,d,!0);f.styles=h.styles;var i=f.styleClasses,j=h.classes;j?f.styleClasses=j:i&&(f.styleClasses=null);for(var k=!g||g.length!=f.styles.length||i!=j&&(!i||!j||i.bgClass!=j.bgClass||i.textClass!=j.textClass),l=0;!k&&l<g.length;++l)k=g[l]!=f.styles[l];k&&e.push(b.frontier),f.stateAfter=re(b.mode,d)}else tf(a,f.text,d),f.stateAfter=0==b.frontier%5?re(b.mode,d):null;return++b.frontier,+new Date>c?(Ub(a,a.options.workDelay),!0):void 0}),e.length&&Kc(a,function(){for(var b=0;b<e.length;b++)Rc(a,e[b],"text")})}}function Wb(a,b,c){for(var d,e,f=a.doc,g=c?-1:b-(a.doc.mode.innerMode?1e3:100),h=b;h>g;--h){if(h<=f.first)return f.first;var i=Of(f,h-1);if(i.stateAfter&&(!c||h<=f.frontier))return h;var j=Fg(i.text,null,a.options.tabSize);(null==e||d>j)&&(e=h-1,d=j)}return e}function Xb(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=Wb(a,b,c),g=f>d.first&&Of(d,f-1).stateAfter;return g=g?re(d.mode,g):se(d.mode),d.iter(f,b,function(c){tf(a,c.text,g);var h=f==b-1||0==f%5||f>=e.viewFrom&&f<e.viewTo;c.stateAfter=h?re(d.mode,g):null,++f}),c&&(d.frontier=f),g}function Yb(a){return a.lineSpace.offsetTop}function Zb(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}function $b(a){if(a.cachedPaddingH)return a.cachedPaddingH;var b=Zg(a.measure,Wg("pre","x")),c=window.getComputedStyle?window.getComputedStyle(b):b.currentStyle,d={left:parseInt(c.paddingLeft),right:parseInt(c.paddingRight)};return isNaN(d.left)||isNaN(d.right)||(a.cachedPaddingH=d),d}function _b(a,b,c){var d=a.options.lineWrapping,e=d&&a.display.scroller.clientWidth;if(!b.measure.heights||d&&b.measure.width!=e){var f=b.measure.heights=[];if(d){b.measure.width=e;for(var g=b.text.firstChild.getClientRects(),h=0;h<g.length-1;h++){var i=g[h],j=g[h+1];Math.abs(i.bottom-j.bottom)>2&&f.push((i.bottom+j.top)/2-c.top)}}f.push(c.bottom-c.top)}}function ac(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure.cache};for(var d=0;d<a.rest.length;d++)if(a.rest[d]==b)return{map:a.measure.maps[d],cache:a.measure.caches[d]};for(var d=0;d<a.rest.length;d++)if(Sf(a.rest[d])>c)return{map:a.measure.maps[d],cache:a.measure.caches[d],before:!0}}function bc(a,b){b=_e(b);var c=Sf(b),d=a.display.externalMeasured=new Oc(a.doc,b,c);d.lineN=c;var e=d.built=xf(a,d);return d.text=e.pre,Zg(a.display.lineMeasure,e.pre),d}function cc(a,b,c,d){return fc(a,ec(a,b),c,d)}function dc(a,b){if(b>=a.display.viewFrom&&b<a.display.viewTo)return a.display.view[Tc(a,b)];var c=a.display.externalMeasured;return c&&b>=c.lineN&&b<c.lineN+c.size?c:void 0}function ec(a,b){var c=Sf(b),d=dc(a,c);d&&!d.text?d=null:d&&d.changes&&bb(a,d,c,_(a)),d||(d=bc(a,b));var e=ac(d,b,c);return{line:b,view:d,rect:null,map:e.map,cache:e.cache,before:e.before,hasHeights:!1}}function fc(a,b,c,d,e){b.before&&(c=-1);var g,f=c+(d||"");return b.cache.hasOwnProperty(f)?g=b.cache[f]:(b.rect||(b.rect=b.view.text.getBoundingClientRect()),b.hasHeights||(_b(a,b.view,b.rect),b.hasHeights=!0),g=hc(a,b,c,d),g.bogus||(b.cache[f]=g)),{left:g.left,right:g.right,top:e?g.rtop:g.top,bottom:e?g.rbottom:g.bottom}}function hc(a,b,c,f){for(var h,i,j,k,g=b.map,l=0;l<g.length;l+=3){var m=g[l],n=g[l+1];if(m>c?(i=0,j=1,k="left"):n>c?(i=c-m,j=i+1):(l==g.length-3||c==n&&g[l+3]>c)&&(j=n-m,i=j-1,c>=n&&(k="right")),null!=i){if(h=g[l+2],m==n&&f==(h.insertLeft?"left":"right")&&(k=f),"left"==f&&0==i)for(;l&&g[l-2]==g[l-3]&&g[l-1].insertLeft;)h=g[(l-=3)+2],k="left";if("right"==f&&i==n-m)for(;l<g.length-3&&g[l+3]==g[l+4]&&!g[l+5].insertLeft;)h=g[(l+=3)+2],k="right";break}}var o;if(3==h.nodeType){for(var l=0;4>l;l++){for(;i&&Vg(b.line.text.charAt(m+i));)--i;for(;n>m+j&&Vg(b.line.text.charAt(m+j));)++j;if(d&&9>e&&0==i&&j==n-m)o=h.parentNode.getBoundingClientRect();else if(d&&a.options.lineWrapping){var p=Xg(h,i,j).getClientRects();o=p.length?p["right"==f?p.length-1:0]:gc}else o=Xg(h,i,j).getBoundingClientRect()||gc;if(o.left||o.right||0==i)break;j=i,i-=1,k="right"}d&&11>e&&(o=ic(a.display.measure,o))}else{i>0&&(k=f="right");var p;o=a.options.lineWrapping&&(p=h.getClientRects()).length>1?p["right"==f?p.length-1:0]:h.getBoundingClientRect()}if(d&&9>e&&!i&&(!o||!o.left&&!o.right)){var q=h.parentNode.getClientRects()[0];o=q?{left:q.left,right:q.left+yc(a.display),top:q.top,bottom:q.bottom}:gc}for(var r=o.top-b.rect.top,s=o.bottom-b.rect.top,t=(r+s)/2,u=b.view.measure.heights,l=0;l<u.length-1&&!(t<u[l]);l++);var v=l?u[l-1]:0,w=u[l],x={left:("right"==k?o.right:o.left)-b.rect.left,right:("left"==k?o.left:o.right)-b.rect.left,top:v,bottom:w};return o.left||o.right||(x.bogus=!0),a.options.singleCursorHeightPerLine||(x.rtop=r,x.rbottom=s),x}function ic(a,b){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!th(a))return b;var c=screen.logicalXDPI/screen.deviceXDPI,d=screen.logicalYDPI/screen.deviceYDPI;return{left:b.left*c,right:b.right*c,top:b.top*d,bottom:b.bottom*d}}function jc(a){if(a.measure&&(a.measure.cache={},a.measure.heights=null,a.rest))for(var b=0;b<a.rest.length;b++)a.measure.caches[b]={}}function kc(a){a.display.externalMeasure=null,Yg(a.display.lineMeasure);for(var b=0;b<a.display.view.length;b++)jc(a.display.view[b])}function lc(a){kc(a),a.display.cachedCharWidth=a.display.cachedTextHeight=a.display.cachedPaddingH=null,a.options.lineWrapping||(a.display.maxLineChanged=!0),a.display.lineNumChars=null}function mc(){return window.pageXOffset||(document.documentElement||document.body).scrollLeft}function nc(){return window.pageYOffset||(document.documentElement||document.body).scrollTop}function oc(a,b,c,d){if(b.widgets)for(var e=0;e<b.widgets.length;++e)if(b.widgets[e].above){var f=hf(b.widgets[e]);c.top+=f,c.bottom+=f}if("line"==d)return c;d||(d="local");var g=Uf(b);if("local"==d?g+=Yb(a.display):g-=a.display.viewOffset,"page"==d||"window"==d){var h=a.display.lineSpace.getBoundingClientRect();g+=h.top+("window"==d?0:nc());var i=h.left+("window"==d?0:mc());c.left+=i,c.right+=i}return c.top+=g,c.bottom+=g,c}function pc(a,b,c){if("div"==c)return b;var d=b.left,e=b.top;if("page"==c)d-=mc(),e-=nc();else if("local"==c||!c){var f=a.display.sizer.getBoundingClientRect();d+=f.left,e+=f.top}var g=a.display.lineSpace.getBoundingClientRect();return{left:d-g.left,top:e-g.top}}function qc(a,b,c,d,e){return d||(d=Of(a.doc,b.line)),oc(a,d,cc(a,d,b.ch,e),c)}function rc(a,b,c,d,e,f){function g(b,g){var h=fc(a,e,b,g?"right":"left",f);return g?h.left=h.right:h.right=h.left,oc(a,d,h,c)}function h(a,b){var c=i[b],d=c.level%2;return a==wh(c)&&b&&c.level<i[b-1].level?(c=i[--b],a=xh(c)-(c.level%2?0:1),d=!0):a==xh(c)&&b<i.length-1&&c.level<i[b+1].level&&(c=i[++b],a=wh(c)-c.level%2,d=!1),d&&a==c.to&&a>c.from?g(a-1):g(a,d)}d=d||Of(a.doc,b.line),e||(e=ec(a,d));var i=Vf(d),j=b.ch;if(!i)return g(j);var k=Fh(i,j),l=h(j,k);return null!=Eh&&(l.other=h(j,Eh)),l}function sc(a,b){var c=0,b=xb(a.doc,b);a.options.lineWrapping||(c=yc(a.display)*b.ch);var d=Of(a.doc,b.line),e=Uf(d)+Yb(a.display);return{left:c,right:c,top:e,bottom:e+d.height}}function tc(a,b,c,d){var e=nb(a,b);return e.xRel=d,c&&(e.outside=!0),e}function uc(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,0>c)return tc(d.first,0,!0,-1);var e=Tf(d,c),f=d.first+d.size-1;if(e>f)return tc(d.first+d.size-1,Of(d,f).text.length,!0,1);0>b&&(b=0);for(var g=Of(d,e);;){var h=vc(a,g,e,b,c),i=Ze(g),j=i&&i.find(0,!0);if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=Sf(g=j.to.line)}}function vc(a,b,c,d,e){function j(d){var e=rc(a,nb(c,d),"line",b,i);return g=!0,f>e.bottom?e.left-h:f<e.top?e.left+h:(g=!1,e.left)}var f=e-Uf(b),g=!1,h=2*a.display.wrapper.clientWidth,i=ec(a,b),k=Vf(b),l=b.text.length,m=yh(b),n=zh(b),o=j(m),p=g,q=j(n),r=g;if(d>q)return tc(c,n,r,1);for(;;){if(k?n==m||n==Hh(b,m,1):1>=n-m){for(var s=o>d||q-d>=d-o?m:n,t=d-(s==m?o:q);Vg(b.text.charAt(s));)++s;var u=tc(c,s,s==m?p:r,-1>t?-1:t>1?1:0);return u}var v=Math.ceil(l/2),w=m+v;if(k){w=m;for(var x=0;v>x;++x)w=Hh(b,w,1)}var y=j(w);y>d?(n=w,q=y,(r=g)&&(q+=1e3),l=v):(m=w,o=y,p=g,l-=v)}}function xc(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==wc){wc=Wg("pre");for(var b=0;49>b;++b)wc.appendChild(document.createTextNode("x")),wc.appendChild(Wg("br"));wc.appendChild(document.createTextNode("x"))}Zg(a.measure,wc);var c=wc.offsetHeight/50;return c>3&&(a.cachedTextHeight=c),Yg(a.measure),c||1}function yc(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=Wg("span","xxxxxxxxxx"),c=Wg("pre",[b]);Zg(a.measure,c);var d=b.getBoundingClientRect(),e=(d.right-d.left)/10;return e>2&&(a.cachedCharWidth=e),e||10}function Bc(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,id:++Ac},zc?zc.ops.push(a.curOp):a.curOp.ownsGroup=zc={ops:[a.curOp],delayedCallbacks:[]}}function Cc(a){var b=a.delayedCallbacks,c=0;do{for(;c<b.length;c++)b[c]();for(var d=0;d<a.ops.length;d++){var e=a.ops[d];if(e.cursorActivityHandlers)for(;e.cursorActivityCalled<e.cursorActivityHandlers.length;)e.cursorActivityHandlers[e.cursorActivityCalled++](e.cm)}}while(c<b.length)}function Dc(a){var b=a.curOp,c=b.ownsGroup;if(c)try{Cc(c)}finally{zc=null;for(var d=0;d<c.ops.length;d++)c.ops[d].cm.curOp=null;Ec(c)}}function Ec(a){for(var b=a.ops,c=0;c<b.length;c++)Fc(b[c]);for(var c=0;c<b.length;c++)Gc(b[c]);for(var c=0;c<b.length;c++)Hc(b[c]);for(var c=0;c<b.length;c++)Ic(b[c]);for(var c=0;c<b.length;c++)Jc(b[c])}function Fc(a){var b=a.cm,c=b.display; +a.updateMaxLine&&J(b),a.mustUpdate=a.viewChanged||a.forceUpdate||null!=a.scrollTop||a.scrollToPos&&(a.scrollToPos.from.line<c.viewFrom||a.scrollToPos.to.line>=c.viewTo)||c.maxLineChanged&&b.options.lineWrapping,a.update=a.mustUpdate&&new T(b,a.mustUpdate&&{top:a.scrollTop,ensure:a.scrollToPos},a.forceUpdate)}function Gc(a){a.updatedDisplay=a.mustUpdate&&U(a.cm,a.update)}function Hc(a){var b=a.cm,c=b.display;a.updatedDisplay&&Z(b),a.barMeasure=M(b),c.maxLineChanged&&!b.options.lineWrapping&&(a.adjustWidthTo=cc(b,c.maxLine,c.maxLine.text.length).left+3,a.maxScrollLeft=Math.max(0,c.sizer.offsetLeft+a.adjustWidthTo+zg-c.scroller.clientWidth)),(a.updatedDisplay||a.selectionChanged)&&(a.newSelectionNodes=Ob(b))}function Ic(a){var b=a.cm;null!=a.adjustWidthTo&&(b.display.sizer.style.minWidth=a.adjustWidthTo+"px",a.maxScrollLeft<b.doc.scrollLeft&&td(b,Math.min(b.display.scroller.scrollLeft,a.maxScrollLeft),!0),b.display.maxLineChanged=!1),a.newSelectionNodes&&Pb(b,a.newSelectionNodes),a.updatedDisplay&&X(b,a.barMeasure),(a.updatedDisplay||a.startHeight!=b.doc.height)&&N(b,a.barMeasure),a.selectionChanged&&Tb(b),b.state.focused&&a.updateInput&&_c(b,a.typing)}function Jc(a){var b=a.cm,c=b.display,d=b.doc;if(null!=a.adjustWidthTo&&Math.abs(a.barMeasure.scrollWidth-b.display.scroller.scrollWidth)>1&&N(b),a.updatedDisplay&&V(b,a.update),null==c.wheelStartX||null==a.scrollTop&&null==a.scrollLeft&&!a.scrollToPos||(c.wheelStartX=c.wheelStartY=null),null!=a.scrollTop&&(c.scroller.scrollTop!=a.scrollTop||a.forceScroll)){var e=Math.max(0,Math.min(c.scroller.scrollHeight-c.scroller.clientHeight,a.scrollTop));c.scroller.scrollTop=c.scrollbarV.scrollTop=d.scrollTop=e}if(null!=a.scrollLeft&&(c.scroller.scrollLeft!=a.scrollLeft||a.forceScroll)){var g=Math.max(0,Math.min(c.scroller.scrollWidth-c.scroller.clientWidth,a.scrollLeft));c.scroller.scrollLeft=c.scrollbarH.scrollLeft=d.scrollLeft=g,P(b)}if(a.scrollToPos){var h=Zd(b,xb(d,a.scrollToPos.from),xb(d,a.scrollToPos.to),a.scrollToPos.margin);a.scrollToPos.isCursor&&b.state.focused&&Yd(b,h)}var i=a.maybeHiddenMarkers,j=a.maybeUnhiddenMarkers;if(i)for(var k=0;k<i.length;++k)i[k].lines.length||rg(i[k],"hide");if(j)for(var k=0;k<j.length;++k)j[k].lines.length&&rg(j[k],"unhide");c.wrapper.offsetHeight&&(d.scrollTop=b.display.scroller.scrollTop),a.updatedDisplay&&f&&(b.options.lineWrapping&&Y(b,a.barMeasure),a.barMeasure.scrollWidth>a.barMeasure.clientWidth&&a.barMeasure.scrollWidth<a.barMeasure.clientWidth+1&&!L(b)&&N(b)),a.changeObjs&&rg(b,"changes",b,a.changeObjs)}function Kc(a,b){if(a.curOp)return b();Bc(a);try{return b()}finally{Dc(a)}}function Lc(a,b){return function(){if(a.curOp)return b.apply(a,arguments);Bc(a);try{return b.apply(a,arguments)}finally{Dc(a)}}}function Mc(a){return function(){if(this.curOp)return a.apply(this,arguments);Bc(this);try{return a.apply(this,arguments)}finally{Dc(this)}}}function Nc(a){return function(){var b=this.cm;if(!b||b.curOp)return a.apply(this,arguments);Bc(b);try{return a.apply(this,arguments)}finally{Dc(b)}}}function Oc(a,b,c){this.line=b,this.rest=af(b),this.size=this.rest?Sf(Jg(this.rest))-c+1:1,this.node=this.text=null,this.hidden=df(a,b)}function Pc(a,b,c){for(var e,d=[],f=b;c>f;f=e){var g=new Oc(a.doc,Of(a.doc,f),f);e=f+g.size,d.push(g)}return d}function Qc(a,b,c,d){null==b&&(b=a.doc.first),null==c&&(c=a.doc.first+a.doc.size),d||(d=0);var e=a.display;if(d&&c<e.viewTo&&(null==e.updateLineNumbers||e.updateLineNumbers>b)&&(e.updateLineNumbers=b),a.curOp.viewChanged=!0,b>=e.viewTo)v&&bf(a.doc,b)<e.viewTo&&Sc(a);else if(c<=e.viewFrom)v&&cf(a.doc,c+d)>e.viewFrom?Sc(a):(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)Sc(a);else if(b<=e.viewFrom){var f=Uc(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):Sc(a)}else if(c>=e.viewTo){var f=Uc(a,b,b,-1);f?(e.view=e.view.slice(0,f.index),e.viewTo=f.lineN):Sc(a)}else{var g=Uc(a,b,b,-1),h=Uc(a,c,c+d,1);g&&h?(e.view=e.view.slice(0,g.index).concat(Pc(a,g.lineN,h.lineN)).concat(e.view.slice(h.index)),e.viewTo+=d):Sc(a)}var i=e.externalMeasured;i&&(c<i.lineN?i.lineN+=d:b<i.lineN+i.size&&(e.externalMeasured=null))}function Rc(a,b,c){a.curOp.viewChanged=!0;var d=a.display,e=a.display.externalMeasured;if(e&&b>=e.lineN&&b<e.lineN+e.size&&(d.externalMeasured=null),!(b<d.viewFrom||b>=d.viewTo)){var f=d.view[Tc(a,b)];if(null!=f.node){var g=f.changes||(f.changes=[]);-1==Lg(g,c)&&g.push(c)}}}function Sc(a){a.display.viewFrom=a.display.viewTo=a.doc.first,a.display.view=[],a.display.viewOffset=0}function Tc(a,b){if(b>=a.display.viewTo)return null;if(b-=a.display.viewFrom,0>b)return null;for(var c=a.display.view,d=0;d<c.length;d++)if(b-=c[d].size,0>b)return d}function Uc(a,b,c,d){var f,e=Tc(a,b),g=a.display.view;if(!v||c==a.doc.first+a.doc.size)return{index:e,lineN:c};for(var h=0,i=a.display.viewFrom;e>h;h++)i+=g[h].size;if(i!=b){if(d>0){if(e==g.length-1)return null;f=i+g[e].size-b,e++}else f=i-b;b+=f,c+=f}for(;bf(a.doc,c)!=c;){if(e==(0>d?0:g.length-1))return null;c+=d*g[e-(0>d?1:0)].size,e+=d}return{index:e,lineN:c}}function Vc(a,b,c){var d=a.display,e=d.view;0==e.length||b>=d.viewTo||c<=d.viewFrom?(d.view=Pc(a,b,c),d.viewFrom=b):(d.viewFrom>b?d.view=Pc(a,b,d.viewFrom).concat(d.view):d.viewFrom<b&&(d.view=d.view.slice(Tc(a,b))),d.viewFrom=b,d.viewTo<c?d.view=d.view.concat(Pc(a,d.viewTo,c)):d.viewTo>c&&(d.view=d.view.slice(0,Tc(a,c)))),d.viewTo=c}function Wc(a){for(var b=a.display.view,c=0,d=0;d<b.length;d++){var e=b[d];e.hidden||e.node&&!e.changes||++c}return c}function Xc(a){a.display.pollingFast||a.display.poll.set(a.options.pollInterval,function(){$c(a),a.state.focused&&Xc(a)})}function Yc(a){function c(){var d=$c(a);d||b?(a.display.pollingFast=!1,Xc(a)):(b=!0,a.display.poll.set(60,c))}var b=!1;a.display.pollingFast=!0,a.display.poll.set(20,c)}function $c(a){var b=a.display.input,c=a.display.prevInput,f=a.doc;if(!a.state.focused||qh(b)&&!c||cd(a)||a.options.disableInput)return!1;a.state.pasteIncoming&&a.state.fakedLastChar&&(b.value=b.value.substring(0,b.value.length-1),a.state.fakedLastChar=!1);var g=b.value;if(g==c&&!a.somethingSelected())return!1;if(d&&e>=9&&a.display.inputHasSelection===g||p&&/[\uf700-\uf7ff]/.test(g))return _c(a),!1;var h=!a.curOp;h&&Bc(a),a.display.shift=!1,8203!=g.charCodeAt(0)||f.sel!=a.display.selForContextMenu||c||(c="\u200b");for(var i=0,j=Math.min(c.length,g.length);j>i&&c.charCodeAt(i)==g.charCodeAt(i);)++i;var k=g.slice(i),l=ph(k),m=null;a.state.pasteIncoming&&f.sel.ranges.length>1&&(Zc&&Zc.join("\n")==k?m=0==f.sel.ranges.length%Zc.length&&Mg(Zc,ph):l.length==f.sel.ranges.length&&(m=Mg(l,function(a){return[a]})));for(var n=f.sel.ranges.length-1;n>=0;n--){var o=f.sel.ranges[n],q=o.from(),r=o.to();i<c.length?q=nb(q.line,q.ch-(c.length-i)):a.state.overwrite&&o.empty()&&!a.state.pasteIncoming&&(r=nb(r.line,Math.min(Of(f,r.line).text.length,r.ch+Jg(l).length)));var s=a.curOp.updateInput,t={from:q,to:r,text:m?m[n%m.length]:l,origin:a.state.pasteIncoming?"paste":a.state.cutIncoming?"cut":"+input"};if(Rd(a.doc,t),tg(a,"inputRead",a,t),k&&!a.state.pasteIncoming&&a.options.electricChars&&a.options.smartIndent&&o.head.ch<100&&(!n||f.sel.ranges[n-1].head.line!=o.head.line)){var u=a.getModeAt(o.head),v=Ld(t);if(u.electricChars){for(var w=0;w<u.electricChars.length;w++)if(k.indexOf(u.electricChars.charAt(w))>-1){de(a,v.line,"smart");break}}else u.electricInput&&u.electricInput.test(Of(f,v.line).text.slice(0,v.ch))&&de(a,v.line,"smart")}}return be(a),a.curOp.updateInput=s,a.curOp.typing=!0,g.length>1e3||g.indexOf("\n")>-1?b.value=a.display.prevInput="":a.display.prevInput=g,h&&Dc(a),a.state.pasteIncoming=a.state.cutIncoming=!1,!0}function _c(a,b){var c,f,g=a.doc;if(a.somethingSelected()){a.display.prevInput="";var h=g.sel.primary();c=rh&&(h.to().line-h.from().line>100||(f=a.getSelection()).length>1e3);var i=c?"-":f||a.getSelection();a.display.input.value=i,a.state.focused&&Kg(a.display.input),d&&e>=9&&(a.display.inputHasSelection=i)}else b||(a.display.prevInput=a.display.input.value="",d&&e>=9&&(a.display.inputHasSelection=null));a.display.inaccurateSelection=c}function ad(a){"nocursor"==a.options.readOnly||o&&_g()==a.display.input||a.display.input.focus()}function bd(a){a.state.focused||(ad(a),Hd(a))}function cd(a){return a.options.readOnly||a.doc.cantEdit}function dd(a){function c(){a.state.focused&&setTimeout(Pg(ad,a),0)}function g(b){vg(a,b)||mg(b)}function h(c){if(a.somethingSelected())Zc=a.getSelections(),b.inaccurateSelection&&(b.prevInput="",b.inaccurateSelection=!1,b.input.value=Zc.join("\n"),Kg(b.input));else{for(var d=[],e=[],f=0;f<a.doc.sel.ranges.length;f++){var g=a.doc.sel.ranges[f].head.line,h={anchor:nb(g,0),head:nb(g+1,0)};e.push(h),d.push(a.getRange(h.anchor,h.head))}"cut"==c.type?a.setSelections(e,null,Bg):(b.prevInput="",b.input.value=d.join("\n"),Kg(b.input)),Zc=d}"cut"==c.type&&(a.state.cutIncoming=!0)}var b=a.display;pg(b.scroller,"mousedown",Lc(a,hd)),d&&11>e?pg(b.scroller,"dblclick",Lc(a,function(b){if(!vg(a,b)){var c=gd(a,b);if(c&&!od(a,b)&&!fd(a.display,b)){jg(b);var d=a.findWordAt(c);Cb(a.doc,d.anchor,d.head)}}})):pg(b.scroller,"dblclick",function(b){vg(a,b)||jg(b)}),pg(b.lineSpace,"selectstart",function(a){fd(b,a)||jg(a)}),t||pg(b.scroller,"contextmenu",function(b){Jd(a,b)}),pg(b.scroller,"scroll",function(){b.scroller.clientHeight&&(sd(a,b.scroller.scrollTop),td(a,b.scroller.scrollLeft,!0),rg(a,"scroll",a))}),pg(b.scrollbarV,"scroll",function(){b.scroller.clientHeight&&sd(a,b.scrollbarV.scrollTop)}),pg(b.scrollbarH,"scroll",function(){b.scroller.clientHeight&&td(a,b.scrollbarH.scrollLeft)}),pg(b.scroller,"mousewheel",function(b){wd(a,b)}),pg(b.scroller,"DOMMouseScroll",function(b){wd(a,b)}),pg(b.scrollbarH,"mousedown",c),pg(b.scrollbarV,"mousedown",c),pg(b.wrapper,"scroll",function(){b.wrapper.scrollTop=b.wrapper.scrollLeft=0}),pg(b.input,"keyup",function(b){Fd.call(a,b)}),pg(b.input,"input",function(){d&&e>=9&&a.display.inputHasSelection&&(a.display.inputHasSelection=null),Yc(a)}),pg(b.input,"keydown",Lc(a,Dd)),pg(b.input,"keypress",Lc(a,Gd)),pg(b.input,"focus",Pg(Hd,a)),pg(b.input,"blur",Pg(Id,a)),a.options.dragDrop&&(pg(b.scroller,"dragstart",function(b){rd(a,b)}),pg(b.scroller,"dragenter",g),pg(b.scroller,"dragover",g),pg(b.scroller,"drop",Lc(a,qd))),pg(b.scroller,"paste",function(c){fd(b,c)||(a.state.pasteIncoming=!0,ad(a),Yc(a))}),pg(b.input,"paste",function(){if(f&&!a.state.fakedLastChar&&!(new Date-a.state.lastMiddleDown<200)){var c=b.input.selectionStart,d=b.input.selectionEnd;b.input.value+="$",b.input.selectionEnd=d,b.input.selectionStart=c,a.state.fakedLastChar=!0}a.state.pasteIncoming=!0,Yc(a)}),pg(b.input,"cut",h),pg(b.input,"copy",h),k&&pg(b.sizer,"mouseup",function(){_g()==b.input&&b.input.blur(),ad(a)})}function ed(a){var b=a.display;b.cachedCharWidth=b.cachedTextHeight=b.cachedPaddingH=null,a.setSize()}function fd(a,b){for(var c=ng(b);c!=a.wrapper;c=c.parentNode)if(!c||c.ignoreEvents||c.parentNode==a.sizer&&c!=a.mover)return!0}function gd(a,b,c,d){var e=a.display;if(!c){var f=ng(b);if(f==e.scrollbarH||f==e.scrollbarV||f==e.scrollbarFiller||f==e.gutterFiller)return null}var g,h,i=e.lineSpace.getBoundingClientRect();try{g=b.clientX-i.left,h=b.clientY-i.top}catch(b){return null}var k,j=uc(a,g,h);if(d&&1==j.xRel&&(k=Of(a.doc,j.line).text).length==j.ch){var l=Fg(k,k.length,a.options.tabSize)-k.length;j=nb(j.line,Math.max(0,Math.round((g-$b(a.display).left)/yc(a.display))-l))}return j}function hd(a){if(!vg(this,a)){var b=this,c=b.display;if(c.shift=a.shiftKey,fd(c,a))return f||(c.scroller.draggable=!1,setTimeout(function(){c.scroller.draggable=!0},100)),void 0;if(!od(b,a)){var d=gd(b,a);switch(window.focus(),og(a)){case 1:d?kd(b,a,d):ng(a)==c.scroller&&jg(a);break;case 2:f&&(b.state.lastMiddleDown=+new Date),d&&Cb(b.doc,d),setTimeout(Pg(ad,b),20),jg(a);break;case 3:t&&Jd(b,a)}}}}function kd(a,b,c){setTimeout(Pg(bd,a),0);var e,d=+new Date;jd&&jd.time>d-400&&0==ob(jd.pos,c)?e="triple":id&&id.time>d-400&&0==ob(id.pos,c)?(e="double",jd={time:d,pos:c}):(e="single",id={time:d,pos:c});var f=a.doc.sel,g=p?b.metaKey:b.ctrlKey;a.options.dragDrop&&ih&&!cd(a)&&"single"==e&&f.contains(c)>-1&&f.somethingSelected()?ld(a,b,c,g):md(a,b,c,e,g)}function ld(a,b,c,g){var h=a.display,i=Lc(a,function(j){f&&(h.scroller.draggable=!1),a.state.draggingText=!1,qg(document,"mouseup",i),qg(h.scroller,"drop",i),Math.abs(b.clientX-j.clientX)+Math.abs(b.clientY-j.clientY)<10&&(jg(j),g||Cb(a.doc,c),ad(a),d&&9==e&&setTimeout(function(){document.body.focus(),ad(a)},20))});f&&(h.scroller.draggable=!0),a.state.draggingText=i,h.scroller.dragDrop&&h.scroller.dragDrop(),pg(document,"mouseup",i),pg(h.scroller,"drop",i)}function md(a,b,c,d,e){function n(b){if(0!=ob(m,b))if(m=b,"rect"==d){for(var e=[],f=a.options.tabSize,k=Fg(Of(g,c.line).text,c.ch,f),l=Fg(Of(g,b.line).text,b.ch,f),n=Math.min(k,l),o=Math.max(k,l),p=Math.min(c.line,b.line),q=Math.min(a.lastLine(),Math.max(c.line,b.line));q>=p;p++){var r=Of(g,p).text,s=Gg(r,n,f);n==o?e.push(new tb(nb(p,s),nb(p,s))):r.length>s&&e.push(new tb(nb(p,s),nb(p,Gg(r,o,f))))}e.length||e.push(new tb(c,c)),Ib(g,ub(j.ranges.slice(0,i).concat(e),i),{origin:"*mouse",scroll:!1}),a.scrollIntoView(b)}else{var t=h,u=t.anchor,v=b;if("single"!=d){if("double"==d)var w=a.findWordAt(b);else var w=new tb(nb(b.line,0),xb(g,nb(b.line+1,0)));ob(w.anchor,u)>0?(v=w.head,u=rb(t.from(),w.anchor)):(v=w.anchor,u=qb(t.to(),w.head))}var e=j.ranges.slice(0);e[i]=new tb(xb(g,u),v),Ib(g,ub(e,i),Cg)}}function q(b){var c=++p,e=gd(a,b,!0,"rect"==d);if(e)if(0!=ob(e,m)){bd(a),n(e);var h=O(f,g);(e.line>=h.to||e.line<h.from)&&setTimeout(Lc(a,function(){p==c&&q(b)}),150)}else{var i=b.clientY<o.top?-20:b.clientY>o.bottom?20:0;i&&setTimeout(Lc(a,function(){p==c&&(f.scroller.scrollTop+=i,q(b))}),50)}}function r(b){p=1/0,jg(b),ad(a),qg(document,"mousemove",s),qg(document,"mouseup",t),g.history.lastSelOrigin=null}var f=a.display,g=a.doc;jg(b);var h,i,j=g.sel;if(e&&!b.shiftKey?(i=g.sel.contains(c),h=i>-1?g.sel.ranges[i]:new tb(c,c)):h=g.sel.primary(),b.altKey)d="rect",e||(h=new tb(c,c)),c=gd(a,b,!0,!0),i=-1;else if("double"==d){var k=a.findWordAt(c);h=a.display.shift||g.extend?Bb(g,h,k.anchor,k.head):k}else if("triple"==d){var l=new tb(nb(c.line,0),xb(g,nb(c.line+1,0)));h=a.display.shift||g.extend?Bb(g,h,l.anchor,l.head):l}else h=Bb(g,h,c);e?i>-1?Eb(g,i,h,Cg):(i=g.sel.ranges.length,Ib(g,ub(g.sel.ranges.concat([h]),i),{scroll:!1,origin:"*mouse"})):(i=0,Ib(g,new sb([h],0),Cg),j=g.sel);var m=c,o=f.wrapper.getBoundingClientRect(),p=0,s=Lc(a,function(a){og(a)?q(a):r(a)}),t=Lc(a,r);pg(document,"mousemove",s),pg(document,"mouseup",t)}function nd(a,b,c,d,e){try{var f=b.clientX,g=b.clientY}catch(b){return!1}if(f>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&jg(b);var h=a.display,i=h.lineDiv.getBoundingClientRect();if(g>i.bottom||!xg(a,c))return lg(b);g-=i.top-h.viewOffset;for(var j=0;j<a.options.gutters.length;++j){var k=h.gutters.childNodes[j];if(k&&k.getBoundingClientRect().right>=f){var l=Tf(a.doc,g),m=a.options.gutters[j];return e(a,c,a,l,m,b),lg(b)}}}function od(a,b){return nd(a,b,"gutterClick",!0,tg)}function qd(a){var b=this;if(!vg(b,a)&&!fd(b.display,a)){jg(a),d&&(pd=+new Date);var c=gd(b,a,!0),e=a.dataTransfer.files;if(c&&!cd(b))if(e&&e.length&&window.FileReader&&window.File)for(var f=e.length,g=Array(f),h=0,i=function(a,d){var e=new FileReader;e.onload=Lc(b,function(){if(g[d]=e.result,++h==f){c=xb(b.doc,c);var a={from:c,to:c,text:ph(g.join("\n")),origin:"paste"};Rd(b.doc,a),Hb(b.doc,vb(c,Ld(a)))}}),e.readAsText(a)},j=0;f>j;++j)i(e[j],j);else{if(b.state.draggingText&&b.doc.sel.contains(c)>-1)return b.state.draggingText(a),setTimeout(Pg(ad,b),20),void 0;try{var g=a.dataTransfer.getData("Text");if(g){if(b.state.draggingText&&!(p?a.metaKey:a.ctrlKey))var k=b.listSelections();if(Jb(b.doc,vb(c,c)),k)for(var j=0;j<k.length;++j)Xd(b.doc,"",k[j].anchor,k[j].head,"drag");b.replaceSelection(g,"around","paste"),ad(b)}}catch(a){}}}}function rd(a,b){if(d&&(!a.state.draggingText||+new Date-pd<100))return mg(b),void 0;if(!vg(a,b)&&!fd(a.display,b)&&(b.dataTransfer.setData("Text",a.getSelection()),b.dataTransfer.setDragImage&&!j)){var c=Wg("img",null,null,"position: fixed; left: 0; top: 0;");c.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",i&&(c.width=c.height=1,a.display.wrapper.appendChild(c),c._top=c.offsetTop),b.dataTransfer.setDragImage(c,0,0),i&&c.parentNode.removeChild(c)}}function sd(b,c){Math.abs(b.doc.scrollTop-c)<2||(b.doc.scrollTop=c,a||W(b,{top:c}),b.display.scroller.scrollTop!=c&&(b.display.scroller.scrollTop=c),b.display.scrollbarV.scrollTop!=c&&(b.display.scrollbarV.scrollTop=c),a&&W(b),Ub(b,100))}function td(a,b,c){(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2)||(b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,P(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbarH.scrollLeft!=b&&(a.display.scrollbarH.scrollLeft=b))}function wd(b,c){var d=c.wheelDeltaX,e=c.wheelDeltaY;null==d&&c.detail&&c.axis==c.HORIZONTAL_AXIS&&(d=c.detail),null==e&&c.detail&&c.axis==c.VERTICAL_AXIS?e=c.detail:null==e&&(e=c.wheelDelta);var g=b.display,h=g.scroller;if(d&&h.scrollWidth>h.clientWidth||e&&h.scrollHeight>h.clientHeight){if(e&&p&&f)a:for(var j=c.target,k=g.view;j!=h;j=j.parentNode)for(var l=0;l<k.length;l++)if(k[l].node==j){b.display.currentWheelTarget=j;break a}if(d&&!a&&!i&&null!=vd)return e&&sd(b,Math.max(0,Math.min(h.scrollTop+e*vd,h.scrollHeight-h.clientHeight))),td(b,Math.max(0,Math.min(h.scrollLeft+d*vd,h.scrollWidth-h.clientWidth))),jg(c),g.wheelStartX=null,void 0;if(e&&null!=vd){var m=e*vd,n=b.doc.scrollTop,o=n+g.wrapper.clientHeight;0>m?n=Math.max(0,n+m-50):o=Math.min(b.doc.height,o+m+50),W(b,{top:n,bottom:o})}20>ud&&(null==g.wheelStartX?(g.wheelStartX=h.scrollLeft,g.wheelStartY=h.scrollTop,g.wheelDX=d,g.wheelDY=e,setTimeout(function(){if(null!=g.wheelStartX){var a=h.scrollLeft-g.wheelStartX,b=h.scrollTop-g.wheelStartY,c=b&&g.wheelDY&&b/g.wheelDY||a&&g.wheelDX&&a/g.wheelDX;g.wheelStartX=g.wheelStartY=null,c&&(vd=(vd*ud+c)/(ud+1),++ud)}},200)):(g.wheelDX+=d,g.wheelDY+=e))}}function xd(a,b,c){if("string"==typeof b&&(b=te[b],!b))return!1;a.display.pollingFast&&$c(a)&&(a.display.pollingFast=!1);var d=a.display.shift,e=!1;try{cd(a)&&(a.state.suppressEdits=!0),c&&(a.display.shift=!1),e=b(a)!=Ag}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function yd(a){var b=a.state.keyMaps.slice(0);return a.options.extraKeys&&b.push(a.options.extraKeys),b.push(a.options.keyMap),b}function Ad(a,b){var c=ve(a.options.keyMap),d=c.auto;clearTimeout(zd),d&&!xe(b)&&(zd=setTimeout(function(){ve(a.options.keyMap)==c&&(a.options.keyMap=d.call?d.call(null,a):d,D(a))},50));var e=ye(b,!0),f=!1;if(!e)return!1;var g=yd(a);return f=b.shiftKey?we("Shift-"+e,g,function(b){return xd(a,b,!0)})||we(e,g,function(b){return("string"==typeof b?/^go[A-Z]/.test(b):b.motion)?xd(a,b):void 0}):we(e,g,function(b){return xd(a,b)}),f&&(jg(b),Tb(a),tg(a,"keyHandled",a,e,b)),f}function Bd(a,b,c){var d=we("'"+c+"'",yd(a),function(b){return xd(a,b,!0)});return d&&(jg(b),Tb(a),tg(a,"keyHandled",a,"'"+c+"'",b)),d}function Dd(a){var b=this;if(bd(b),!vg(b,a)){d&&11>e&&27==a.keyCode&&(a.returnValue=!1);var c=a.keyCode;b.display.shift=16==c||a.shiftKey;var f=Ad(b,a);i&&(Cd=f?c:null,!f&&88==c&&!rh&&(p?a.metaKey:a.ctrlKey)&&b.replaceSelection("",null,"cut")),18!=c||/\bCodeMirror-crosshair\b/.test(b.display.lineDiv.className)||Ed(b)}}function Ed(a){function c(a){18!=a.keyCode&&a.altKey||(bh(b,"CodeMirror-crosshair"),qg(document,"keyup",c),qg(document,"mouseover",c))}var b=a.display.lineDiv;ch(b,"CodeMirror-crosshair"),pg(document,"keyup",c),pg(document,"mouseover",c)}function Fd(a){16==a.keyCode&&(this.doc.sel.shift=!1),vg(this,a)}function Gd(a){var b=this;if(!(vg(b,a)||a.ctrlKey&&!a.altKey||p&&a.metaKey)){var c=a.keyCode,f=a.charCode;if(i&&c==Cd)return Cd=null,jg(a),void 0;if(!(i&&(!a.which||a.which<10)||k)||!Ad(b,a)){var g=String.fromCharCode(null==f?c:f);Bd(b,a,g)||(d&&e>=9&&(b.display.inputHasSelection=null),Yc(b))}}}function Hd(a){"nocursor"!=a.options.readOnly&&(a.state.focused||(rg(a,"focus",a),a.state.focused=!0,ch(a.display.wrapper,"CodeMirror-focused"),a.curOp||a.display.selForContextMenu==a.doc.sel||(_c(a),f&&setTimeout(Pg(_c,a,!0),0))),Xc(a),Tb(a))}function Id(a){a.state.focused&&(rg(a,"blur",a),a.state.focused=!1,bh(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.display.shift=!1)},150)}function Jd(a,b){function m(){if(null!=c.input.selectionStart){var b=a.somethingSelected(),d=c.input.value="\u200b"+(b?c.input.value:"");c.prevInput=b?"":"\u200b",c.input.selectionStart=1,c.input.selectionEnd=d.length,c.selForContextMenu=a.doc.sel}}function n(){if(c.inputDiv.style.position="relative",c.input.style.cssText=k,d&&9>e&&(c.scrollbarV.scrollTop=c.scroller.scrollTop=h),Xc(a),null!=c.input.selectionStart){(!d||d&&9>e)&&m();var b=0,f=function(){c.selForContextMenu==a.doc.sel&&0==c.input.selectionStart?Lc(a,te.selectAll)(a):b++<10?c.detectingSelectAll=setTimeout(f,500):_c(a)};c.detectingSelectAll=setTimeout(f,200)}}if(!vg(a,b,"contextmenu")){var c=a.display;if(!fd(c,b)&&!Kd(a,b)){var g=gd(a,b),h=c.scroller.scrollTop;if(g&&!i){var j=a.options.resetSelectionOnContextMenu;j&&-1==a.doc.sel.contains(g)&&Lc(a,Ib)(a.doc,vb(g),Bg);var k=c.input.style.cssText;if(c.inputDiv.style.position="absolute",c.input.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(b.clientY-5)+"px; left: "+(b.clientX-5)+"px; z-index: 1000; background: "+(d?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",f)var l=window.scrollY;if(ad(a),f&&window.scrollTo(null,l),_c(a),a.somethingSelected()||(c.input.value=c.prevInput=" "),c.selForContextMenu=a.doc.sel,clearTimeout(c.detectingSelectAll),d&&e>=9&&m(),t){mg(b);var o=function(){qg(window,"mouseup",o),setTimeout(n,20)};pg(window,"mouseup",o)}else setTimeout(n,50)}}}}function Kd(a,b){return xg(a,"gutterContextMenu")?nd(a,b,"gutterContextMenu",!1,rg):!1}function Md(a,b){if(ob(a,b.from)<0)return a;if(ob(a,b.to)<=0)return Ld(b);var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;return a.line==b.to.line&&(d+=Ld(b).ch-b.to.ch),nb(c,d)}function Nd(a,b){for(var c=[],d=0;d<a.sel.ranges.length;d++){var e=a.sel.ranges[d];c.push(new tb(Md(e.anchor,b),Md(e.head,b)))}return ub(c,a.sel.primIndex)}function Od(a,b,c){return a.line==b.line?nb(c.line,a.ch-b.ch+c.ch):nb(c.line+(a.line-b.line),a.ch)}function Pd(a,b,c){for(var d=[],e=nb(a.first,0),f=e,g=0;g<b.length;g++){var h=b[g],i=Od(h.from,e,f),j=Od(Ld(h),e,f);if(e=h.to,f=j,"around"==c){var k=a.sel.ranges[g],l=ob(k.head,k.anchor)<0;d[g]=new tb(l?j:i,l?i:j)}else d[g]=new tb(i,i)}return new sb(d,a.sel.primIndex)}function Qd(a,b,c){var d={canceled:!1,from:b.from,to:b.to,text:b.text,origin:b.origin,cancel:function(){this.canceled=!0}};return c&&(d.update=function(b,c,d,e){b&&(this.from=xb(a,b)),c&&(this.to=xb(a,c)),d&&(this.text=d),void 0!==e&&(this.origin=e)}),rg(a,"beforeChange",a,d),a.cm&&rg(a.cm,"beforeChange",a.cm,d),d.canceled?null:{from:d.from,to:d.to,text:d.text,origin:d.origin}}function Rd(a,b,c){if(a.cm){if(!a.cm.curOp)return Lc(a.cm,Rd)(a,b,c);if(a.cm.state.suppressEdits)return}if(!(xg(a,"beforeChange")||a.cm&&xg(a.cm,"beforeChange"))||(b=Qd(a,b,!0))){var d=u&&!c&&Re(a,b.from,b.to);if(d)for(var e=d.length-1;e>=0;--e)Sd(a,{from:d[e].from,to:d[e].to,text:e?[""]:b.text});else Sd(a,b)}}function Sd(a,b){if(1!=b.text.length||""!=b.text[0]||0!=ob(b.from,b.to)){var c=Nd(a,b);$f(a,b,c,a.cm?a.cm.curOp.id:0/0),Vd(a,b,c,Oe(a,b));var d=[];Mf(a,function(a,c){c||-1!=Lg(d,a.history)||(ig(a.history,b),d.push(a.history)),Vd(a,b,null,Oe(a,b))})}}function Td(a,b,c){if(!a.cm||!a.cm.state.suppressEdits){for(var e,d=a.history,f=a.sel,g="undo"==b?d.done:d.undone,h="undo"==b?d.undone:d.done,i=0;i<g.length&&(e=g[i],c?!e.ranges||e.equals(a.sel):e.ranges);i++);if(i!=g.length){for(d.lastOrigin=d.lastSelOrigin=null;e=g.pop(),e.ranges;){if(bg(e,h),c&&!e.equals(a.sel))return Ib(a,e,{clearRedo:!1}),void 0;f=e}var j=[];bg(f,h),h.push({changes:j,generation:d.generation}),d.generation=e.generation||++d.maxGeneration;for(var k=xg(a,"beforeChange")||a.cm&&xg(a.cm,"beforeChange"),i=e.changes.length-1;i>=0;--i){var l=e.changes[i];if(l.origin=b,k&&!Qd(a,l,!1))return g.length=0,void 0;j.push(Xf(a,l));var m=i?Nd(a,l):Jg(g);Vd(a,l,m,Qe(a,l)),!i&&a.cm&&a.cm.scrollIntoView({from:l.from,to:Ld(l)});var n=[];Mf(a,function(a,b){b||-1!=Lg(n,a.history)||(ig(a.history,l),n.push(a.history)),Vd(a,l,null,Qe(a,l))})}}}}function Ud(a,b){if(0!=b&&(a.first+=b,a.sel=new sb(Mg(a.sel.ranges,function(a){return new tb(nb(a.anchor.line+b,a.anchor.ch),nb(a.head.line+b,a.head.ch))}),a.sel.primIndex),a.cm)){Qc(a.cm,a.first,a.first-b,b);for(var c=a.cm.display,d=c.viewFrom;d<c.viewTo;d++)Rc(a.cm,d,"gutter")}}function Vd(a,b,c,d){if(a.cm&&!a.cm.curOp)return Lc(a.cm,Vd)(a,b,c,d);if(b.to.line<a.first)return Ud(a,b.text.length-1-(b.to.line-b.from.line)),void 0;if(!(b.from.line>a.lastLine())){if(b.from.line<a.first){var e=b.text.length-1-(a.first-b.from.line);Ud(a,e),b={from:nb(a.first,0),to:nb(b.to.line+e,b.to.ch),text:[Jg(b.text)],origin:b.origin}}var f=a.lastLine();b.to.line>f&&(b={from:b.from,to:nb(f,Of(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=Pf(a,b.from,b.to),c||(c=Nd(a,b)),a.cm?Wd(a.cm,b,d):Ff(a,b,d),Jb(a,c,Bg)}}function Wd(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,i=f.line;a.options.lineWrapping||(i=Sf(_e(Of(d,f.line))),d.iter(i,g.line+1,function(a){return a==e.maxLine?(h=!0,!0):void 0})),d.sel.contains(b.from,b.to)>-1&&wg(a),Ff(d,b,c,B(a)),a.options.lineWrapping||(d.iter(i,f.line+b.text.length,function(a){var b=I(a);b>e.maxLineLength&&(e.maxLine=a,e.maxLineLength=b,e.maxLineChanged=!0,h=!1)}),h&&(a.curOp.updateMaxLine=!0)),d.frontier=Math.min(d.frontier,f.line),Ub(a,400);var j=b.text.length-(g.line-f.line)-1;f.line!=g.line||1!=b.text.length||Ef(a.doc,b)?Qc(a,f.line,g.line+1,j):Rc(a,f.line,"text");var k=xg(a,"changes"),l=xg(a,"change");if(l||k){var m={from:f,to:g,text:b.text,removed:b.removed,origin:b.origin};l&&tg(a,"change",a,m),k&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(m)}a.display.selForContextMenu=null}function Xd(a,b,c,d,e){if(d||(d=c),ob(d,c)<0){var f=d;d=c,c=f}"string"==typeof b&&(b=ph(b)),Rd(a,{from:c,to:d,text:b,origin:e})}function Yd(a,b){var c=a.display,d=c.sizer.getBoundingClientRect(),e=null;if(b.top+d.top<0?e=!0:b.bottom+d.top>(window.innerHeight||document.documentElement.clientHeight)&&(e=!1),null!=e&&!m){var f=Wg("div","\u200b",null,"position: absolute; top: "+(b.top-c.viewOffset-Yb(a.display))+"px; height: "+(b.bottom-b.top+zg)+"px; left: "+b.left+"px; width: 2px;");a.display.lineSpace.appendChild(f),f.scrollIntoView(e),a.display.lineSpace.removeChild(f)}}function Zd(a,b,c,d){for(null==d&&(d=0);;){var e=!1,f=rc(a,b),g=c&&c!=b?rc(a,c):f,h=_d(a,Math.min(f.left,g.left),Math.min(f.top,g.top)-d,Math.max(f.left,g.left),Math.max(f.bottom,g.bottom)+d),i=a.doc.scrollTop,j=a.doc.scrollLeft;if(null!=h.scrollTop&&(sd(a,h.scrollTop),Math.abs(a.doc.scrollTop-i)>1&&(e=!0)),null!=h.scrollLeft&&(td(a,h.scrollLeft),Math.abs(a.doc.scrollLeft-j)>1&&(e=!0)),!e)return f}}function $d(a,b,c,d,e){var f=_d(a,b,c,d,e);null!=f.scrollTop&&sd(a,f.scrollTop),null!=f.scrollLeft&&td(a,f.scrollLeft)}function _d(a,b,c,d,e){var f=a.display,g=xc(a.display);0>c&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,i=f.scroller.clientHeight-zg,j={};e-c>i&&(e=c+i);var k=a.doc.height+Zb(f),l=g>c,m=e>k-g;if(h>c)j.scrollTop=l?0:c;else if(e>h+i){var n=Math.min(c,(m?k:e)-i);n!=h&&(j.scrollTop=n)}var o=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft,p=f.scroller.clientWidth-zg-f.gutters.offsetWidth,q=d-b>p;return q&&(d=c+i),10>b?j.scrollLeft=0:o>b?j.scrollLeft=Math.max(0,b-(q?0:10)):d>p+o-3&&(j.scrollLeft=d+(q?0:10)-p),j}function ae(a,b,c){(null!=b||null!=c)&&ce(a),null!=b&&(a.curOp.scrollLeft=(null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b),null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function be(a){ce(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?nb(b.line,b.ch-1):b,d=nb(b.line,b.ch+1)),a.curOp.scrollToPos={from:c,to:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function ce(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=sc(a,b.from),d=sc(a,b.to),e=_d(a,Math.min(c.left,d.left),Math.min(c.top,d.top)-b.margin,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(e.scrollLeft,e.scrollTop)}}function de(a,b,c,d){var f,e=a.doc;null==c&&(c="add"),"smart"==c&&(e.mode.indent?f=Xb(a,b):c="prev");var g=a.options.tabSize,h=Of(e,b),i=Fg(h.text,null,g);h.stateAfter&&(h.stateAfter=null);var k,j=h.text.match(/^\s*/)[0];if(d||/\S/.test(h.text)){if("smart"==c&&(k=e.mode.indent(f,h.text.slice(j.length),h.text),k==Ag||k>150)){if(!d)return;c="prev"}}else k=0,c="not";"prev"==c?k=b>e.first?Fg(Of(e,b-1).text,null,g):0:"add"==c?k=i+a.options.indentUnit:"subtract"==c?k=i-a.options.indentUnit:"number"==typeof c&&(k=i+c),k=Math.max(0,k);var l="",m=0;if(a.options.indentWithTabs)for(var n=Math.floor(k/g);n;--n)m+=g,l+=" ";if(k>m&&(l+=Ig(k-m)),l!=j)Xd(e,l,nb(b,0),nb(b,j.length),"+input");else for(var n=0;n<e.sel.ranges.length;n++){var o=e.sel.ranges[n];if(o.head.line==b&&o.head.ch<j.length){var m=nb(b,j.length);Eb(e,n,new tb(m,m));break}}h.stateAfter=null}function ee(a,b,c,d){var e=b,f=b;return"number"==typeof b?f=Of(a,wb(a,b)):e=Sf(b),null==e?null:(d(f,e)&&a.cm&&Rc(a.cm,e,c),f)}function fe(a,b){for(var c=a.doc.sel.ranges,d=[],e=0;e<c.length;e++){for(var f=b(c[e]);d.length&&ob(f.from,Jg(d).to)<=0;){var g=d.pop();if(ob(g.from,f.from)<0){f.from=g.from;break}}d.push(f)}Kc(a,function(){for(var b=d.length-1;b>=0;b--)Xd(a.doc,"",d[b].from,d[b].to,"+delete");be(a)})}function ge(a,b,c,d,e){function k(){var b=f+c;return b<a.first||b>=a.first+a.size?j=!1:(f=b,i=Of(a,b))}function l(a){var b=(e?Hh:Ih)(i,g,c,!0);if(null==b){if(a||!k())return j=!1;g=e?(0>c?zh:yh)(i):0>c?i.text.length:0}else g=b;return!0}var f=b.line,g=b.ch,h=c,i=Of(a,f),j=!0;if("char"==d)l();else if("column"==d)l(!0);else if("word"==d||"group"==d)for(var m=null,n="group"==d,o=a.cm&&a.cm.getHelper(b,"wordChars"),p=!0;!(0>c)||l(!p);p=!1){var q=i.text.charAt(g)||"\n",r=Sg(q,o)?"w":n&&"\n"==q?"n":!n||/\s/.test(q)?null:"p";if(!n||p||r||(r="s"),m&&m!=r){0>c&&(c=1,l());break}if(r&&(m=r),c>0&&!l(!p))break}var s=Nb(a,nb(f,g),h,!0);return j||(s.hitSide=!0),s}function he(a,b,c,d){var g,e=a.doc,f=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);g=b.top+c*(h-(0>c?1.5:.5)*xc(a.display))}else"line"==d&&(g=c>0?b.bottom+3:b.top-3);for(;;){var i=uc(a,f,g);if(!i.outside)break;if(0>c?0>=g:g>=e.height){i.hitSide=!0;break}g+=5*c}return i}function ke(a,b,c,d){w.defaults[a]=b,c&&(je[a]=d?function(a,b,d){d!=le&&c(a,b,d)}:c)}function ve(a){return"string"==typeof a?ue[a]:a}function Ce(a,b,c,d,e){if(d&&d.shared)return Ee(a,b,c,d,e);if(a.cm&&!a.cm.curOp)return Lc(a.cm,Ce)(a,b,c,d,e);var f=new Ae(a,e),g=ob(b,c);if(d&&Og(d,f,!1),g>0||0==g&&f.clearWhenEmpty!==!1)return f;if(f.replacedWith&&(f.collapsed=!0,f.widgetNode=Wg("span",[f.replacedWith],"CodeMirror-widget"),d.handleMouseEvents||(f.widgetNode.ignoreEvents=!0),d.insertLeft&&(f.widgetNode.insertLeft=!0)),f.collapsed){if($e(a,b.line,b,c,f)||b.line!=c.line&&$e(a,c.line,b,c,f))throw new Error("Inserting collapsed marker partially overlapping an existing one");v=!0}f.addToHistory&&$f(a,{from:b,to:c,origin:"markText"},a.sel,0/0);var j,h=b.line,i=a.cm;if(a.iter(h,c.line+1,function(a){i&&f.collapsed&&!i.options.lineWrapping&&_e(a)==i.display.maxLine&&(j=!0),f.collapsed&&h!=b.line&&Rf(a,0),Le(a,new Ie(f,h==b.line?b.ch:null,h==c.line?c.ch:null)),++h}),f.collapsed&&a.iter(b.line,c.line+1,function(b){df(a,b)&&Rf(b,0)}),f.clearOnEnter&&pg(f,"beforeCursorEnter",function(){f.clear() +}),f.readOnly&&(u=!0,(a.history.done.length||a.history.undone.length)&&a.clearHistory()),f.collapsed&&(f.id=++Be,f.atomic=!0),i){if(j&&(i.curOp.updateMaxLine=!0),f.collapsed)Qc(i,b.line,c.line+1);else if(f.className||f.title||f.startStyle||f.endStyle)for(var k=b.line;k<=c.line;k++)Rc(i,k,"text");f.atomic&&Lb(i.doc),tg(i,"markerAdded",i,f)}return f}function Ee(a,b,c,d,e){d=Og(d),d.shared=!1;var f=[Ce(a,b,c,d,e)],g=f[0],h=d.widgetNode;return Mf(a,function(a){h&&(d.widgetNode=h.cloneNode(!0)),f.push(Ce(a,xb(a,b),xb(a,c),d,e));for(var i=0;i<a.linked.length;++i)if(a.linked[i].isParent)return;g=Jg(f)}),new De(f,g)}function Fe(a){return a.findMarks(nb(a.first,0),a.clipPos(nb(a.lastLine())),function(a){return a.parent})}function Ge(a,b){for(var c=0;c<b.length;c++){var d=b[c],e=d.find(),f=a.clipPos(e.from),g=a.clipPos(e.to);if(ob(f,g)){var h=Ce(a,f,g,d.primary,d.primary.type);d.markers.push(h),h.parent=d}}}function He(a){for(var b=0;b<a.length;b++){var c=a[b],d=[c.primary.doc];Mf(c.primary.doc,function(a){d.push(a)});for(var e=0;e<c.markers.length;e++){var f=c.markers[e];-1==Lg(d,f.doc)&&(f.parent=null,c.markers.splice(e--,1))}}}function Ie(a,b,c){this.marker=a,this.from=b,this.to=c}function Je(a,b){if(a)for(var c=0;c<a.length;++c){var d=a[c];if(d.marker==b)return d}}function Ke(a,b){for(var c,d=0;d<a.length;++d)a[d]!=b&&(c||(c=[])).push(a[d]);return c}function Le(a,b){a.markedSpans=a.markedSpans?a.markedSpans.concat([b]):[b],b.marker.attachLine(a)}function Me(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.from||(g.inclusiveLeft?f.from<=b:f.from<b);if(h||f.from==b&&"bookmark"==g.type&&(!c||!f.marker.insertLeft)){var i=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);(e||(e=[])).push(new Ie(g,f.from,i?null:f.to))}}return e}function Ne(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);if(h||f.from==b&&"bookmark"==g.type&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?f.from<=b:f.from<b);(e||(e=[])).push(new Ie(g,i?null:f.from-b,null==f.to?null:f.to-b))}}return e}function Oe(a,b){var c=zb(a,b.from.line)&&Of(a,b.from.line).markedSpans,d=zb(a,b.to.line)&&Of(a,b.to.line).markedSpans;if(!c&&!d)return null;var e=b.from.ch,f=b.to.ch,g=0==ob(b.from,b.to),h=Me(c,e,g),i=Ne(d,f,g),j=1==b.text.length,k=Jg(b.text).length+(j?e:0);if(h)for(var l=0;l<h.length;++l){var m=h[l];if(null==m.to){var n=Je(i,m.marker);n?j&&(m.to=null==n.to?null:n.to+k):m.to=e}}if(i)for(var l=0;l<i.length;++l){var m=i[l];if(null!=m.to&&(m.to+=k),null==m.from){var n=Je(h,m.marker);n||(m.from=k,j&&(h||(h=[])).push(m))}else m.from+=k,j&&(h||(h=[])).push(m)}h&&(h=Pe(h)),i&&i!=h&&(i=Pe(i));var o=[h];if(!j){var q,p=b.text.length-2;if(p>0&&h)for(var l=0;l<h.length;++l)null==h[l].to&&(q||(q=[])).push(new Ie(h[l].marker,null,null));for(var l=0;p>l;++l)o.push(q);o.push(i)}return o}function Pe(a){for(var b=0;b<a.length;++b){var c=a[b];null!=c.from&&c.from==c.to&&c.marker.clearWhenEmpty!==!1&&a.splice(b--,1)}return a.length?a:null}function Qe(a,b){var c=eg(a,b),d=Oe(a,b);if(!c)return d;if(!d)return c;for(var e=0;e<c.length;++e){var f=c[e],g=d[e];if(f&&g)a:for(var h=0;h<g.length;++h){for(var i=g[h],j=0;j<f.length;++j)if(f[j].marker==i.marker)continue a;f.push(i)}else g&&(c[e]=g)}return c}function Re(a,b,c){var d=null;if(a.iter(b.line,c.line+1,function(a){if(a.markedSpans)for(var b=0;b<a.markedSpans.length;++b){var c=a.markedSpans[b].marker;!c.readOnly||d&&-1!=Lg(d,c)||(d||(d=[])).push(c)}}),!d)return null;for(var e=[{from:b,to:c}],f=0;f<d.length;++f)for(var g=d[f],h=g.find(0),i=0;i<e.length;++i){var j=e[i];if(!(ob(j.to,h.from)<0||ob(j.from,h.to)>0)){var k=[i,1],l=ob(j.from,h.from),m=ob(j.to,h.to);(0>l||!g.inclusiveLeft&&!l)&&k.push({from:j.from,to:h.from}),(m>0||!g.inclusiveRight&&!m)&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function Se(a){var b=a.markedSpans;if(b){for(var c=0;c<b.length;++c)b[c].marker.detachLine(a);a.markedSpans=null}}function Te(a,b){if(b){for(var c=0;c<b.length;++c)b[c].marker.attachLine(a);a.markedSpans=b}}function Ue(a){return a.inclusiveLeft?-1:0}function Ve(a){return a.inclusiveRight?1:0}function We(a,b){var c=a.lines.length-b.lines.length;if(0!=c)return c;var d=a.find(),e=b.find(),f=ob(d.from,e.from)||Ue(a)-Ue(b);if(f)return-f;var g=ob(d.to,e.to)||Ve(a)-Ve(b);return g?g:b.id-a.id}function Xe(a,b){var d,c=v&&a.markedSpans;if(c)for(var e,f=0;f<c.length;++f)e=c[f],e.marker.collapsed&&null==(b?e.from:e.to)&&(!d||We(d,e.marker)<0)&&(d=e.marker);return d}function Ye(a){return Xe(a,!0)}function Ze(a){return Xe(a,!1)}function $e(a,b,c,d,e){var f=Of(a,b),g=v&&f.markedSpans;if(g)for(var h=0;h<g.length;++h){var i=g[h];if(i.marker.collapsed){var j=i.marker.find(0),k=ob(j.from,c)||Ue(i.marker)-Ue(e),l=ob(j.to,d)||Ve(i.marker)-Ve(e);if(!(k>=0&&0>=l||0>=k&&l>=0)&&(0>=k&&(ob(j.to,c)>0||i.marker.inclusiveRight&&e.inclusiveLeft)||k>=0&&(ob(j.from,d)<0||i.marker.inclusiveLeft&&e.inclusiveRight)))return!0}}}function _e(a){for(var b;b=Ye(a);)a=b.find(-1,!0).line;return a}function af(a){for(var b,c;b=Ze(a);)a=b.find(1,!0).line,(c||(c=[])).push(a);return c}function bf(a,b){var c=Of(a,b),d=_e(c);return c==d?b:Sf(d)}function cf(a,b){if(b>a.lastLine())return b;var d,c=Of(a,b);if(!df(a,c))return b;for(;d=Ze(c);)c=d.find(1,!0).line;return Sf(c)+1}function df(a,b){var c=v&&b.markedSpans;if(c)for(var d,e=0;e<c.length;++e)if(d=c[e],d.marker.collapsed){if(null==d.from)return!0;if(!d.marker.widgetNode&&0==d.from&&d.marker.inclusiveLeft&&ef(a,b,d))return!0}}function ef(a,b,c){if(null==c.to){var d=c.marker.find(1,!0);return ef(a,d.line,Je(d.line.markedSpans,c.marker))}if(c.marker.inclusiveRight&&c.to==b.text.length)return!0;for(var e,f=0;f<b.markedSpans.length;++f)if(e=b.markedSpans[f],e.marker.collapsed&&!e.marker.widgetNode&&e.from==c.to&&(null==e.to||e.to!=c.from)&&(e.marker.inclusiveLeft||c.marker.inclusiveRight)&&ef(a,b,e))return!0}function gf(a,b,c){Uf(b)<(a.curOp&&a.curOp.scrollTop||a.doc.scrollTop)&&ae(a,null,c)}function hf(a){if(null!=a.height)return a.height;if(!$g(document.body,a.node)){var b="position: relative;";a.coverGutter&&(b+="margin-left: -"+a.cm.getGutterElement().offsetWidth+"px;"),Zg(a.cm.display.measure,Wg("div",[a.node],null,b))}return a.height=a.node.offsetHeight}function jf(a,b,c,d){var e=new ff(a,c,d);return e.noHScroll&&(a.display.alignWidgets=!0),ee(a.doc,b,"widget",function(b){var c=b.widgets||(b.widgets=[]);if(null==e.insertAt?c.push(e):c.splice(Math.min(c.length-1,Math.max(0,e.insertAt)),0,e),e.line=b,!df(a.doc,b)){var d=Uf(b)<a.doc.scrollTop;Rf(b,b.height+hf(e)),d&&ae(a,null,e.height),a.curOp.forceUpdate=!0}return!0}),e}function lf(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),null!=a.order&&(a.order=null),Se(a),Te(a,c);var e=d?d(a):1;e!=a.height&&Rf(a,e)}function mf(a){a.parent=null,Se(a)}function nf(a,b){if(a)for(;;){var c=a.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!c)break;a=a.slice(0,c.index)+a.slice(c.index+c[0].length);var d=c[1]?"bgClass":"textClass";null==b[d]?b[d]=c[2]:new RegExp("(?:^|s)"+c[2]+"(?:$|s)").test(b[d])||(b[d]+=" "+c[2])}return a}function of(a,b){if(a.blankLine)return a.blankLine(b);if(a.innerMode){var c=w.innerMode(a,b);return c.mode.blankLine?c.mode.blankLine(c.state):void 0}}function pf(a,b,c){for(var d=0;10>d;d++){var e=a.token(b,c);if(b.pos>b.start)return e}throw new Error("Mode "+a.name+" failed to advance stream.")}function qf(a,b,c,d,e,f,g){var h=c.flattenSpans;null==h&&(h=a.options.flattenSpans);var l,i=0,j=null,k=new ze(b,a.options.tabSize);for(""==b&&nf(of(c,d),f);!k.eol();){if(k.pos>a.options.maxHighlightLength?(h=!1,g&&tf(a,b,d,k.pos),k.pos=b.length,l=null):l=nf(pf(c,k,d),f),a.options.addModeClass){var m=w.innerMode(c,d).mode.name;m&&(l="m-"+(l?m+" "+l:m))}h&&j==l||(i<k.start&&e(k.start,j),i=k.start,j=l),k.start=k.pos}for(;i<k.pos;){var n=Math.min(k.pos,i+5e4);e(n,j),i=n}}function rf(a,b,c,d){var e=[a.state.modeGen],f={};qf(a,b.text,a.doc.mode,c,function(a,b){e.push(a,b)},f,d);for(var g=0;g<a.state.overlays.length;++g){var h=a.state.overlays[g],i=1,j=0;qf(a,b.text,h.mode,!0,function(a,b){for(var c=i;a>j;){var d=e[i];d>a&&e.splice(i,1,a,e[i+1],d),i+=2,j=Math.min(a,d)}if(b)if(h.opaque)e.splice(c,i-c,a,"cm-overlay "+b),i=c+2;else for(;i>c;c+=2){var f=e[c+1];e[c+1]=(f?f+" ":"")+"cm-overlay "+b}},f)}return{styles:e,classes:f.bgClass||f.textClass?f:null}}function sf(a,b){if(!b.styles||b.styles[0]!=a.state.modeGen){var c=rf(a,b,b.stateAfter=Xb(a,Sf(b)));b.styles=c.styles,c.classes?b.styleClasses=c.classes:b.styleClasses&&(b.styleClasses=null)}return b.styles}function tf(a,b,c,d){var e=a.doc.mode,f=new ze(b,a.options.tabSize);for(f.start=f.pos=d||0,""==b&&of(e,c);!f.eol()&&f.pos<=a.options.maxHighlightLength;)pf(e,f,c),f.start=f.pos}function wf(a,b){if(!a||/^\s*$/.test(a))return null;var c=b.addModeClass?vf:uf;return c[a]||(c[a]=a.replace(/\S+/g,"cm-$&"))}function xf(a,b){var c=Wg("span",null,null,f?"padding-right: .1px":null),e={pre:Wg("pre",[c]),content:c,col:0,pos:0,cm:a};b.measure={};for(var g=0;g<=(b.rest?b.rest.length:0);g++){var i,h=g?b.rest[g-1]:b.line;e.pos=0,e.addToken=zf,(d||f)&&a.getOption("lineWrapping")&&(e.addToken=Af(e.addToken)),oh(a.display.measure)&&(i=Vf(h))&&(e.addToken=Bf(e.addToken,i)),e.map=[],Df(h,e,sf(a,h)),h.styleClasses&&(h.styleClasses.bgClass&&(e.bgClass=dh(h.styleClasses.bgClass,e.bgClass||"")),h.styleClasses.textClass&&(e.textClass=dh(h.styleClasses.textClass,e.textClass||""))),0==e.map.length&&e.map.push(0,0,e.content.appendChild(mh(a.display.measure))),0==g?(b.measure.map=e.map,b.measure.cache={}):((b.measure.maps||(b.measure.maps=[])).push(e.map),(b.measure.caches||(b.measure.caches=[])).push({}))}return rg(a,"renderLine",a,b.line,e.pre),e.pre.className&&(e.textClass=dh(e.pre.className,e.textClass||"")),e}function yf(a){var b=Wg("span","\u2022","cm-invalidchar");return b.title="\\u"+a.charCodeAt(0).toString(16),b}function zf(a,b,c,f,g,h){if(b){var i=a.cm.options.specialChars,j=!1;if(i.test(b))for(var k=document.createDocumentFragment(),l=0;;){i.lastIndex=l;var m=i.exec(b),n=m?m.index-l:b.length-l;if(n){var o=document.createTextNode(b.slice(l,l+n));d&&9>e?k.appendChild(Wg("span",[o])):k.appendChild(o),a.map.push(a.pos,a.pos+n,o),a.col+=n,a.pos+=n}if(!m)break;if(l+=n+1," "==m[0]){var p=a.cm.options.tabSize,q=p-a.col%p,o=k.appendChild(Wg("span",Ig(q),"cm-tab"));a.col+=q}else{var o=a.cm.options.specialCharPlaceholder(m[0]);d&&9>e?k.appendChild(Wg("span",[o])):k.appendChild(o),a.col+=1}a.map.push(a.pos,a.pos+1,o),a.pos++}else{a.col+=b.length;var k=document.createTextNode(b);a.map.push(a.pos,a.pos+b.length,k),d&&9>e&&(j=!0),a.pos+=b.length}if(c||f||g||j){var r=c||"";f&&(r+=f),g&&(r+=g);var s=Wg("span",[k],r);return h&&(s.title=h),a.content.appendChild(s)}a.content.appendChild(k)}}function Af(a){function b(a){for(var b=" ",c=0;c<a.length-2;++c)b+=c%2?" ":"\xa0";return b+=" "}return function(c,d,e,f,g,h){a(c,d.replace(/ {3,}/g,b),e,f,g,h)}}function Bf(a,b){return function(c,d,e,f,g,h){e=e?e+" cm-force-border":"cm-force-border";for(var i=c.pos,j=i+d.length;;){for(var k=0;k<b.length;k++){var l=b[k];if(l.to>i&&l.from<=i)break}if(l.to>=j)return a(c,d,e,f,g,h);a(c,d.slice(0,l.to-i),e,f,null,h),f=null,d=d.slice(l.to-i),i=l.to}}}function Cf(a,b,c,d){var e=!d&&c.widgetNode;e&&(a.map.push(a.pos,a.pos+b,e),a.content.appendChild(e)),a.pos+=b}function Df(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var k,m,n,o,p,q,h=e.length,i=0,g=1,j="",l=0;;){if(l==i){m=n=o=p="",q=null,l=1/0;for(var r=[],s=0;s<d.length;++s){var t=d[s],u=t.marker;t.from<=i&&(null==t.to||t.to>i)?(null!=t.to&&l>t.to&&(l=t.to,n=""),u.className&&(m+=" "+u.className),u.startStyle&&t.from==i&&(o+=" "+u.startStyle),u.endStyle&&t.to==l&&(n+=" "+u.endStyle),u.title&&!p&&(p=u.title),u.collapsed&&(!q||We(q.marker,u)<0)&&(q=t)):t.from>i&&l>t.from&&(l=t.from),"bookmark"==u.type&&t.from==i&&u.widgetNode&&r.push(u)}if(q&&(q.from||0)==i&&(Cf(b,(null==q.to?h+1:q.to)-i,q.marker,null==q.from),null==q.to))return;if(!q&&r.length)for(var s=0;s<r.length;++s)Cf(b,0,r[s])}if(i>=h)break;for(var v=Math.min(h,l);;){if(j){var w=i+j.length;if(!q){var x=w>v?j.slice(0,v-i):j;b.addToken(b,x,k?k+m:m,o,i+x.length==l?n:"",p)}if(w>=v){j=j.slice(v-i),i=v;break}i=w,o=""}j=e.slice(f,f=c[g++]),k=wf(c[g++],b.cm.options)}}else for(var g=1;g<c.length;g+=2)b.addToken(b,e.slice(f,f=c[g]),wf(c[g+1],b.cm.options))}function Ef(a,b){return 0==b.from.ch&&0==b.to.ch&&""==Jg(b.text)&&(!a.cm||a.cm.options.wholeLineUpdateBefore)}function Ff(a,b,c,d){function e(a){return c?c[a]:null}function f(a,c,e){lf(a,c,e,d),tg(a,"change",a,b)}var g=b.from,h=b.to,i=b.text,j=Of(a,g.line),k=Of(a,h.line),l=Jg(i),m=e(i.length-1),n=h.line-g.line;if(Ef(a,b)){for(var o=0,p=[];o<i.length-1;++o)p.push(new kf(i[o],e(o),d));f(k,k.text,m),n&&a.remove(g.line,n),p.length&&a.insert(g.line,p)}else if(j==k)if(1==i.length)f(j,j.text.slice(0,g.ch)+l+j.text.slice(h.ch),m);else{for(var p=[],o=1;o<i.length-1;++o)p.push(new kf(i[o],e(o),d));p.push(new kf(l+j.text.slice(h.ch),m,d)),f(j,j.text.slice(0,g.ch)+i[0],e(0)),a.insert(g.line+1,p)}else if(1==i.length)f(j,j.text.slice(0,g.ch)+i[0]+k.text.slice(h.ch),e(0)),a.remove(g.line+1,n);else{f(j,j.text.slice(0,g.ch)+i[0],e(0)),f(k,l+k.text.slice(h.ch),m);for(var o=1,p=[];o<i.length-1;++o)p.push(new kf(i[o],e(o),d));n>1&&a.remove(g.line+1,n-1),a.insert(g.line+1,p)}tg(a,"change",a,b)}function Gf(a){this.lines=a,this.parent=null;for(var b=0,c=0;b<a.length;++b)a[b].parent=this,c+=a[b].height;this.height=c}function Hf(a){this.children=a;for(var b=0,c=0,d=0;d<a.length;++d){var e=a[d];b+=e.chunkSize(),c+=e.height,e.parent=this}this.size=b,this.height=c,this.parent=null}function Mf(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;g<a.linked.length;++g){var h=a.linked[g];if(h.doc!=e){var i=f&&h.sharedHist;(!c||i)&&(b(h.doc,i),d(h.doc,a,i))}}}d(a,null,!0)}function Nf(a,b){if(b.cm)throw new Error("This document is already in use.");a.doc=b,b.cm=a,C(a),y(a),a.options.lineWrapping||J(a),a.options.mode=b.modeOption,Qc(a)}function Of(a,b){if(b-=a.first,0>b||b>=a.size)throw new Error("There is no line "+(b+a.first)+" in the document.");for(var c=a;!c.lines;)for(var d=0;;++d){var e=c.children[d],f=e.chunkSize();if(f>b){c=e;break}b-=f}return c.lines[b]}function Pf(a,b,c){var d=[],e=b.line;return a.iter(b.line,c.line+1,function(a){var f=a.text;e==c.line&&(f=f.slice(0,c.ch)),e==b.line&&(f=f.slice(b.ch)),d.push(f),++e}),d}function Qf(a,b,c){var d=[];return a.iter(b,c,function(a){d.push(a.text)}),d}function Rf(a,b){var c=b-a.height;if(c)for(var d=a;d;d=d.parent)d.height+=c}function Sf(a){if(null==a.parent)return null;for(var b=a.parent,c=Lg(b.lines,a),d=b.parent;d;b=d,d=d.parent)for(var e=0;d.children[e]!=b;++e)c+=d.children[e].chunkSize();return c+b.first}function Tf(a,b){var c=a.first;a:do{for(var d=0;d<a.children.length;++d){var e=a.children[d],f=e.height;if(f>b){a=e;continue a}b-=f,c+=e.chunkSize()}return c}while(!a.lines);for(var d=0;d<a.lines.length;++d){var g=a.lines[d],h=g.height;if(h>b)break;b-=h}return c+d}function Uf(a){a=_e(a);for(var b=0,c=a.parent,d=0;d<c.lines.length;++d){var e=c.lines[d];if(e==a)break;b+=e.height}for(var f=c.parent;f;c=f,f=c.parent)for(var d=0;d<f.children.length;++d){var g=f.children[d];if(g==c)break;b+=g.height}return b}function Vf(a){var b=a.order;return null==b&&(b=a.order=Jh(a.text)),b}function Wf(a){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=a||1}function Xf(a,b){var c={from:pb(b.from),to:Ld(b),text:Pf(a,b.from,b.to)};return cg(a,c,b.from.line,b.to.line+1),Mf(a,function(a){cg(a,c,b.from.line,b.to.line+1)},!0),c}function Yf(a){for(;a.length;){var b=Jg(a);if(!b.ranges)break;a.pop()}}function Zf(a,b){return b?(Yf(a.done),Jg(a.done)):a.done.length&&!Jg(a.done).ranges?Jg(a.done):a.done.length>1&&!a.done[a.done.length-2].ranges?(a.done.pop(),Jg(a.done)):void 0}function $f(a,b,c,d){var e=a.history;e.undone.length=0;var g,f=+new Date;if((e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastModTime>f-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))&&(g=Zf(e,e.lastOp==d))){var h=Jg(g.changes);0==ob(b.from,b.to)&&0==ob(b.from,h.to)?h.to=Ld(b):g.changes.push(Xf(a,b))}else{var i=Jg(e.done);for(i&&i.ranges||bg(a.sel,e.done),g={changes:[Xf(a,b)],generation:e.generation},e.done.push(g);e.done.length>e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift()}e.done.push(c),e.generation=++e.maxGeneration,e.lastModTime=e.lastSelTime=f,e.lastOp=e.lastSelOp=d,e.lastOrigin=e.lastSelOrigin=b.origin,h||rg(a,"historyAdded")}function _f(a,b,c,d){var e=b.charAt(0);return"*"==e||"+"==e&&c.ranges.length==d.ranges.length&&c.somethingSelected()==d.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function ag(a,b,c,d){var e=a.history,f=d&&d.origin;c==e.lastSelOp||f&&e.lastSelOrigin==f&&(e.lastModTime==e.lastSelTime&&e.lastOrigin==f||_f(a,f,Jg(e.done),b))?e.done[e.done.length-1]=b:bg(b,e.done),e.lastSelTime=+new Date,e.lastSelOrigin=f,e.lastSelOp=c,d&&d.clearRedo!==!1&&Yf(e.undone)}function bg(a,b){var c=Jg(b);c&&c.ranges&&c.equals(a)||b.push(a)}function cg(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function dg(a){if(!a)return null;for(var c,b=0;b<a.length;++b)a[b].marker.explicitlyCleared?c||(c=a.slice(0,b)):c&&c.push(a[b]);return c?c.length?c:null:a}function eg(a,b){var c=b["spans_"+a.id];if(!c)return null;for(var d=0,e=[];d<b.text.length;++d)e.push(dg(c[d]));return e}function fg(a,b,c){for(var d=0,e=[];d<a.length;++d){var f=a[d];if(f.ranges)e.push(c?sb.prototype.deepCopy.call(f):f);else{var g=f.changes,h=[];e.push({changes:h});for(var i=0;i<g.length;++i){var k,j=g[i];if(h.push({from:j.from,to:j.to,text:j.text}),b)for(var l in j)(k=l.match(/^spans_(\d+)$/))&&Lg(b,Number(k[1]))>-1&&(Jg(h)[l]=j[l],delete j[l])}}}return e}function gg(a,b,c,d){c<a.line?a.line+=d:b<a.line&&(a.line=b,a.ch=0)}function hg(a,b,c,d){for(var e=0;e<a.length;++e){var f=a[e],g=!0;if(f.ranges){f.copied||(f=a[e]=f.deepCopy(),f.copied=!0);for(var h=0;h<f.ranges.length;h++)gg(f.ranges[h].anchor,b,c,d),gg(f.ranges[h].head,b,c,d)}else{for(var h=0;h<f.changes.length;++h){var i=f.changes[h];if(c<i.from.line)i.from=nb(i.from.line+d,i.from.ch),i.to=nb(i.to.line+d,i.to.ch);else if(b<=i.to.line){g=!1;break}}g||(a.splice(0,e+1),e=0)}}}function ig(a,b){var c=b.from.line,d=b.to.line,e=b.text.length-(d-c)-1;hg(a.done,c,d,e),hg(a.undone,c,d,e)}function lg(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function ng(a){return a.target||a.srcElement}function og(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?b=3:4&a.button&&(b=2)),p&&a.ctrlKey&&1==b&&(b=3),b}function tg(a,b){function f(a){return function(){a.apply(null,d)}}var c=a._handlers&&a._handlers[b];if(c){var e,d=Array.prototype.slice.call(arguments,2);zc?e=zc.delayedCallbacks:sg?e=sg:(e=sg=[],setTimeout(ug,0));for(var g=0;g<c.length;++g)e.push(f(c[g]))}}function ug(){var a=sg;sg=null;for(var b=0;b<a.length;++b)a[b]()}function vg(a,b,c){return rg(a,c||b.type,a,b),lg(b)||b.codemirrorIgnore}function wg(a){var b=a._handlers&&a._handlers.cursorActivity;if(b)for(var c=a.curOp.cursorActivityHandlers||(a.curOp.cursorActivityHandlers=[]),d=0;d<b.length;++d)-1==Lg(c,b[d])&&c.push(b[d])}function xg(a,b){var c=a._handlers&&a._handlers[b];return c&&c.length>0}function yg(a){a.prototype.on=function(a,b){pg(this,a,b)},a.prototype.off=function(a,b){qg(this,a,b)}}function Eg(){this.id=null}function Gg(a,b,c){for(var d=0,e=0;;){var f=a.indexOf(" ",d);-1==f&&(f=a.length);var g=f-d;if(f==a.length||e+g>=b)return d+Math.min(g,b-e);if(e+=f-d,e+=c-e%c,d=f+1,e>=b)return d}}function Ig(a){for(;Hg.length<=a;)Hg.push(Jg(Hg)+" ");return Hg[a]}function Jg(a){return a[a.length-1]}function Lg(a,b){for(var c=0;c<a.length;++c)if(a[c]==b)return c;return-1}function Mg(a,b){for(var c=[],d=0;d<a.length;d++)c[d]=b(a[d],d);return c}function Ng(a,b){var c;if(Object.create)c=Object.create(a);else{var d=function(){};d.prototype=a,c=new d}return b&&Og(b,c),c}function Og(a,b,c){b||(b={});for(var d in a)!a.hasOwnProperty(d)||c===!1&&b.hasOwnProperty(d)||(b[d]=a[d]);return b}function Pg(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}}function Sg(a,b){return b?b.source.indexOf("\\w")>-1&&Rg(a)?!0:b.test(a):Rg(a)}function Tg(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function Vg(a){return a.charCodeAt(0)>=768&&Ug.test(a)}function Wg(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)e.appendChild(document.createTextNode(b));else if(b)for(var f=0;f<b.length;++f)e.appendChild(b[f]);return e}function Yg(a){for(var b=a.childNodes.length;b>0;--b)a.removeChild(a.firstChild);return a}function Zg(a,b){return Yg(a).appendChild(b)}function $g(a,b){if(a.contains)return a.contains(b);for(;b=b.parentNode;)if(b==a)return!0}function _g(){return document.activeElement}function ah(a){return new RegExp("\\b"+a+"\\b\\s*")}function bh(a,b){var c=ah(b);c.test(a.className)&&(a.className=a.className.replace(c,""))}function ch(a,b){ah(b).test(a.className)||(a.className+=" "+b)}function dh(a,b){for(var c=a.split(" "),d=0;d<c.length;d++)c[d]&&!ah(c[d]).test(b)&&(b+=" "+c[d]);return b}function eh(a){if(document.body.getElementsByClassName)for(var b=document.body.getElementsByClassName("CodeMirror"),c=0;c<b.length;c++){var d=b[c].CodeMirror;d&&a(d)}}function gh(){fh||(hh(),fh=!0)}function hh(){var a;pg(window,"resize",function(){null==a&&(a=setTimeout(function(){a=null,jh=null,eh(ed)},100))}),pg(window,"blur",function(){eh(Id)})}function kh(a){if(null!=jh)return jh;var b=Wg("div",null,null,"width: 50px; height: 50px; overflow-x: scroll");return Zg(a,b),b.offsetWidth&&(jh=b.offsetHeight-b.clientHeight),jh||0}function mh(a){if(null==lh){var b=Wg("span","\u200b");Zg(a,Wg("span",[b,document.createTextNode("x")])),0!=a.firstChild.offsetHeight&&(lh=b.offsetWidth<=1&&b.offsetHeight>2&&!(d&&8>e))}return lh?Wg("span","\u200b"):Wg("span","\xa0",null,"display: inline-block; width: 1px; margin-right: -1px")}function oh(a){if(null!=nh)return nh;var b=Zg(a,document.createTextNode("A\u062eA")),c=Xg(b,0,1).getBoundingClientRect();if(!c||c.left==c.right)return!1;var d=Xg(b,1,2).getBoundingClientRect();return nh=d.right-c.right<3}function th(a){if(null!=sh)return sh;var b=Zg(a,Wg("span","x")),c=b.getBoundingClientRect(),d=Xg(b,0,1).getBoundingClientRect();return sh=Math.abs(c.left-d.left)>1}function vh(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;f<a.length;++f){var g=a[f];(g.from<c&&g.to>b||b==c&&g.to==b)&&(d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0)}e||d(b,c,"ltr")}function wh(a){return a.level%2?a.to:a.from}function xh(a){return a.level%2?a.from:a.to}function yh(a){var b=Vf(a);return b?wh(b[0]):0}function zh(a){var b=Vf(a);return b?xh(Jg(b)):a.text.length}function Ah(a,b){var c=Of(a.doc,b),d=_e(c);d!=c&&(b=Sf(d));var e=Vf(d),f=e?e[0].level%2?zh(d):yh(d):0;return nb(b,f)}function Bh(a,b){for(var c,d=Of(a.doc,b);c=Ze(d);)d=c.find(1,!0).line,b=null;var e=Vf(d),f=e?e[0].level%2?yh(d):zh(d):d.text.length;return nb(null==b?Sf(d):b,f)}function Ch(a,b){var c=Ah(a,b.line),d=Of(a.doc,c.line),e=Vf(d);if(!e||0==e[0].level){var f=Math.max(0,d.text.search(/\S/)),g=b.line==c.line&&b.ch<=f&&b.ch;return nb(c.line,g?0:f)}return c}function Dh(a,b,c){var d=a[0].level;return b==d?!0:c==d?!1:c>b}function Fh(a,b){Eh=null;for(var d,c=0;c<a.length;++c){var e=a[c];if(e.from<b&&e.to>b)return c;if(e.from==b||e.to==b){if(null!=d)return Dh(a,e.level,a[d].level)?(e.from!=e.to&&(Eh=d),c):(e.from!=e.to&&(Eh=c),d);d=c}}return d}function Gh(a,b,c,d){if(!d)return b+c;do b+=c;while(b>0&&Vg(a.text.charAt(b)));return b}function Hh(a,b,c,d){var e=Vf(a);if(!e)return Ih(a,b,c,d);for(var f=Fh(e,b),g=e[f],h=Gh(a,b,g.level%2?-c:c,d);;){if(h>g.from&&h<g.to)return h;if(h==g.from||h==g.to)return Fh(e,h)==f?h:(g=e[f+=c],c>0==g.level%2?g.to:g.from);if(g=e[f+=c],!g)return null;h=c>0==g.level%2?Gh(a,g.to,-1,d):Gh(a,g.from,1,d)}}function Ih(a,b,c,d){var e=b+c;if(d)for(;e>0&&Vg(a.text.charAt(e));)e+=c;return 0>e||e>a.text.length?null:e}var a=/gecko\/\d/i.test(navigator.userAgent),b=/MSIE \d/.test(navigator.userAgent),c=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),d=b||c,e=d&&(b?document.documentMode||6:c[1]),f=/WebKit\//.test(navigator.userAgent),g=f&&/Qt\/\d+\.\d+/.test(navigator.userAgent),h=/Chrome\//.test(navigator.userAgent),i=/Opera\//.test(navigator.userAgent),j=/Apple Computer/.test(navigator.vendor),k=/KHTML\//.test(navigator.userAgent),l=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent),m=/PhantomJS/.test(navigator.userAgent),n=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent),o=n||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent),p=n||/Mac/.test(navigator.platform),q=/win/i.test(navigator.platform),r=i&&navigator.userAgent.match(/Version\/(\d*\.\d*)/);r&&(r=Number(r[1])),r&&r>=15&&(i=!1,f=!0);var s=p&&(g||i&&(null==r||12.11>r)),t=a||d&&e>=9,u=!1,v=!1,nb=w.Pos=function(a,b){return this instanceof nb?(this.line=a,this.ch=b,void 0):new nb(a,b)},ob=w.cmpPos=function(a,b){return a.line-b.line||a.ch-b.ch};sb.prototype={primary:function(){return this.ranges[this.primIndex]},equals:function(a){if(a==this)return!0;if(a.primIndex!=this.primIndex||a.ranges.length!=this.ranges.length)return!1;for(var b=0;b<this.ranges.length;b++){var c=this.ranges[b],d=a.ranges[b];if(0!=ob(c.anchor,d.anchor)||0!=ob(c.head,d.head))return!1}return!0},deepCopy:function(){for(var a=[],b=0;b<this.ranges.length;b++)a[b]=new tb(pb(this.ranges[b].anchor),pb(this.ranges[b].head));return new sb(a,this.primIndex)},somethingSelected:function(){for(var a=0;a<this.ranges.length;a++)if(!this.ranges[a].empty())return!0;return!1},contains:function(a,b){b||(b=a);for(var c=0;c<this.ranges.length;c++){var d=this.ranges[c];if(ob(b,d.from())>=0&&ob(a,d.to())<=0)return c}return-1}},tb.prototype={from:function(){return rb(this.anchor,this.head)},to:function(){return qb(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};var wc,id,jd,gc={left:0,right:0,top:0,bottom:0},zc=null,Ac=0,Zc=null,pd=0,ud=0,vd=null;d?vd=-.53:a?vd=15:h?vd=-.7:j&&(vd=-1/3);var zd,Cd=null,Ld=w.changeEnd=function(a){return a.text?nb(a.from.line+a.text.length-1,Jg(a.text).length+(1==a.text.length?a.from.ch:0)):a.to};w.prototype={constructor:w,focus:function(){window.focus(),ad(this),Yc(this)},setOption:function(a,b){var c=this.options,d=c[a];(c[a]!=b||"mode"==a)&&(c[a]=b,je.hasOwnProperty(a)&&Lc(this,je[a])(this,b,d))},getOption:function(a){return this.options[a]},getDoc:function(){return this.doc},addKeyMap:function(a,b){this.state.keyMaps[b?"push":"unshift"](a)},removeKeyMap:function(a){for(var b=this.state.keyMaps,c=0;c<b.length;++c)if(b[c]==a||"string"!=typeof b[c]&&b[c].name==a)return b.splice(c,1),!0},addOverlay:Mc(function(a,b){var c=a.token?a:w.getMode(this.options,a);if(c.startState)throw new Error("Overlays may not be stateful.");this.state.overlays.push({mode:c,modeSpec:a,opaque:b&&b.opaque}),this.state.modeGen++,Qc(this)}),removeOverlay:Mc(function(a){for(var b=this.state.overlays,c=0;c<b.length;++c){var d=b[c].modeSpec;if(d==a||"string"==typeof a&&d.name==a)return b.splice(c,1),this.state.modeGen++,Qc(this),void 0}}),indentLine:Mc(function(a,b,c){"string"!=typeof b&&"number"!=typeof b&&(b=null==b?this.options.smartIndent?"smart":"prev":b?"add":"subtract"),zb(this.doc,a)&&de(this,a,b,c)}),indentSelection:Mc(function(a){for(var b=this.doc.sel.ranges,c=-1,d=0;d<b.length;d++){var e=b[d];if(e.empty())e.head.line>c&&(de(this,e.head.line,a,!0),c=e.head.line,d==this.doc.sel.primIndex&&be(this));else{var f=e.from(),g=e.to(),h=Math.max(c,f.line);c=Math.min(this.lastLine(),g.line-(g.ch?0:1))+1;for(var i=h;c>i;++i)de(this,i,a);var j=this.doc.sel.ranges;0==f.ch&&b.length==j.length&&j[d].from().ch>0&&Eb(this.doc,d,new tb(f,j[d].to()),Bg)}}}),getTokenAt:function(a,b){var c=this.doc;a=xb(c,a);for(var d=Xb(this,a.line,b),e=this.doc.mode,f=Of(c,a.line),g=new ze(f.text,this.options.tabSize);g.pos<a.ch&&!g.eol();){g.start=g.pos;var h=pf(e,g,d)}return{start:g.start,end:g.pos,string:g.current(),type:h||null,state:d}},getTokenTypeAt:function(a){a=xb(this.doc,a);var f,b=sf(this,Of(this.doc,a.line)),c=0,d=(b.length-1)/2,e=a.ch;if(0==e)f=b[2];else for(;;){var g=c+d>>1;if((g?b[2*g-1]:0)>=e)d=g;else{if(!(b[2*g+1]<e)){f=b[2*g+2];break}c=g+1}}var h=f?f.indexOf("cm-overlay "):-1;return 0>h?f:0==h?null:f.slice(0,h-1)},getModeAt:function(a){var b=this.doc.mode;return b.innerMode?w.innerMode(b,this.getTokenAt(a).state).mode:b},getHelper:function(a,b){return this.getHelpers(a,b)[0]},getHelpers:function(a,b){var c=[];if(!qe.hasOwnProperty(b))return qe;var d=qe[b],e=this.getModeAt(a);if("string"==typeof e[b])d[e[b]]&&c.push(d[e[b]]);else if(e[b])for(var f=0;f<e[b].length;f++){var g=d[e[b][f]];g&&c.push(g)}else e.helperType&&d[e.helperType]?c.push(d[e.helperType]):d[e.name]&&c.push(d[e.name]);for(var f=0;f<d._global.length;f++){var h=d._global[f];h.pred(e,this)&&-1==Lg(c,h.val)&&c.push(h.val)}return c},getStateAfter:function(a,b){var c=this.doc;return a=wb(c,null==a?c.first+c.size-1:a),Xb(this,a+1,b)},cursorCoords:function(a,b){var c,d=this.doc.sel.primary();return c=null==a?d.head:"object"==typeof a?xb(this.doc,a):a?d.from():d.to(),rc(this,c,b||"page")},charCoords:function(a,b){return qc(this,xb(this.doc,a),b||"page")},coordsChar:function(a,b){return a=pc(this,a,b||"page"),uc(this,a.left,a.top)},lineAtHeight:function(a,b){return a=pc(this,{top:a,left:0},b||"page").top,Tf(this.doc,a+this.display.viewOffset)},heightAtLine:function(a,b){var c=!1,d=this.doc.first+this.doc.size-1;a<this.doc.first?a=this.doc.first:a>d&&(a=d,c=!0);var e=Of(this.doc,a);return oc(this,e,{top:0,left:0},b||"page").top+(c?this.doc.height-Uf(e):0)},defaultTextHeight:function(){return xc(this.display)},defaultCharWidth:function(){return yc(this.display)},setGutterMarker:Mc(function(a,b,c){return ee(this.doc,a,"gutter",function(a){var d=a.gutterMarkers||(a.gutterMarkers={});return d[b]=c,!c&&Tg(d)&&(a.gutterMarkers=null),!0})}),clearGutter:Mc(function(a){var b=this,c=b.doc,d=c.first;c.iter(function(c){c.gutterMarkers&&c.gutterMarkers[a]&&(c.gutterMarkers[a]=null,Rc(b,d,"gutter"),Tg(c.gutterMarkers)&&(c.gutterMarkers=null)),++d})}),addLineWidget:Mc(function(a,b,c){return jf(this,a,b,c)}),removeLineWidget:function(a){a.clear()},lineInfo:function(a){if("number"==typeof a){if(!zb(this.doc,a))return null;var b=a;if(a=Of(this.doc,a),!a)return null}else{var b=Sf(a);if(null==b)return null}return{line:b,handle:a,text:a.text,gutterMarkers:a.gutterMarkers,textClass:a.textClass,bgClass:a.bgClass,wrapClass:a.wrapClass,widgets:a.widgets}},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(a,b,c,d,e){var f=this.display;a=rc(this,xb(this.doc,a));var g=a.bottom,h=a.left;if(b.style.position="absolute",f.sizer.appendChild(b),"over"==d)g=a.top;else if("above"==d||"near"==d){var i=Math.max(f.wrapper.clientHeight,this.doc.height),j=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);("above"==d||a.bottom+b.offsetHeight>i)&&a.top>b.offsetHeight?g=a.top-b.offsetHeight:a.bottom+b.offsetHeight<=i&&(g=a.bottom),h+b.offsetWidth>j&&(h=j-b.offsetWidth)}b.style.top=g+"px",b.style.left=b.style.right="","right"==e?(h=f.sizer.clientWidth-b.offsetWidth,b.style.right="0px"):("left"==e?h=0:"middle"==e&&(h=(f.sizer.clientWidth-b.offsetWidth)/2),b.style.left=h+"px"),c&&$d(this,h,g,h+b.offsetWidth,g+b.offsetHeight)},triggerOnKeyDown:Mc(Dd),triggerOnKeyPress:Mc(Gd),triggerOnKeyUp:Fd,execCommand:function(a){return te.hasOwnProperty(a)?te[a](this):void 0},findPosH:function(a,b,c,d){var e=1;0>b&&(e=-1,b=-b);for(var f=0,g=xb(this.doc,a);b>f&&(g=ge(this.doc,g,e,c,d),!g.hitSide);++f);return g +},moveH:Mc(function(a,b){var c=this;c.extendSelectionsBy(function(d){return c.display.shift||c.doc.extend||d.empty()?ge(c.doc,d.head,a,b,c.options.rtlMoveVisually):0>a?d.from():d.to()},Dg)}),deleteH:Mc(function(a,b){var c=this.doc.sel,d=this.doc;c.somethingSelected()?d.replaceSelection("",null,"+delete"):fe(this,function(c){var e=ge(d,c.head,a,b,!1);return 0>a?{from:e,to:c.head}:{from:c.head,to:e}})}),findPosV:function(a,b,c,d){var e=1,f=d;0>b&&(e=-1,b=-b);for(var g=0,h=xb(this.doc,a);b>g;++g){var i=rc(this,h,"div");if(null==f?f=i.left:i.left=f,h=he(this,i,e,c),h.hitSide)break}return h},moveV:Mc(function(a,b){var c=this,d=this.doc,e=[],f=!c.display.shift&&!d.extend&&d.sel.somethingSelected();if(d.extendSelectionsBy(function(g){if(f)return 0>a?g.from():g.to();var h=rc(c,g.head,"div");null!=g.goalColumn&&(h.left=g.goalColumn),e.push(h.left);var i=he(c,h,a,b);return"page"==b&&g==d.sel.primary()&&ae(c,null,qc(c,i,"div").top-h.top),i},Dg),e.length)for(var g=0;g<d.sel.ranges.length;g++)d.sel.ranges[g].goalColumn=e[g]}),findWordAt:function(a){var b=this.doc,c=Of(b,a.line).text,d=a.ch,e=a.ch;if(c){var f=this.getHelper(a,"wordChars");(a.xRel<0||e==c.length)&&d?--d:++e;for(var g=c.charAt(d),h=Sg(g,f)?function(a){return Sg(a,f)}:/\s/.test(g)?function(a){return/\s/.test(a)}:function(a){return!/\s/.test(a)&&!Sg(a)};d>0&&h(c.charAt(d-1));)--d;for(;e<c.length&&h(c.charAt(e));)++e}return new tb(nb(a.line,d),nb(a.line,e))},toggleOverwrite:function(a){(null==a||a!=this.state.overwrite)&&((this.state.overwrite=!this.state.overwrite)?ch(this.display.cursorDiv,"CodeMirror-overwrite"):bh(this.display.cursorDiv,"CodeMirror-overwrite"),rg(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return _g()==this.display.input},scrollTo:Mc(function(a,b){(null!=a||null!=b)&&ce(this),null!=a&&(this.curOp.scrollLeft=a),null!=b&&(this.curOp.scrollTop=b)}),getScrollInfo:function(){var a=this.display.scroller,b=zg;return{left:a.scrollLeft,top:a.scrollTop,height:a.scrollHeight-b,width:a.scrollWidth-b,clientHeight:a.clientHeight-b,clientWidth:a.clientWidth-b}},scrollIntoView:Mc(function(a,b){if(null==a?(a={from:this.doc.sel.primary().head,to:null},null==b&&(b=this.options.cursorScrollMargin)):"number"==typeof a?a={from:nb(a,0),to:null}:null==a.from&&(a={from:a,to:null}),a.to||(a.to=a.from),a.margin=b||0,null!=a.from.line)ce(this),this.curOp.scrollToPos=a;else{var c=_d(this,Math.min(a.from.left,a.to.left),Math.min(a.from.top,a.to.top)-a.margin,Math.max(a.from.right,a.to.right),Math.max(a.from.bottom,a.to.bottom)+a.margin);this.scrollTo(c.scrollLeft,c.scrollTop)}}),setSize:Mc(function(a,b){function d(a){return"number"==typeof a||/^\d+$/.test(String(a))?a+"px":a}var c=this;null!=a&&(c.display.wrapper.style.width=d(a)),null!=b&&(c.display.wrapper.style.height=d(b)),c.options.lineWrapping&&kc(this);var e=c.display.viewFrom;c.doc.iter(e,c.display.viewTo,function(a){if(a.widgets)for(var b=0;b<a.widgets.length;b++)if(a.widgets[b].noHScroll){Rc(c,e,"widget");break}++e}),c.curOp.forceUpdate=!0,rg(c,"refresh",this)}),operation:function(a){return Kc(this,a)},refresh:Mc(function(){var a=this.display.cachedTextHeight;Qc(this),this.curOp.forceUpdate=!0,lc(this),this.scrollTo(this.doc.scrollLeft,this.doc.scrollTop),H(this),(null==a||Math.abs(a-xc(this.display))>.5)&&C(this),rg(this,"refresh",this)}),swapDoc:Mc(function(a){var b=this.doc;return b.cm=null,Nf(this,a),lc(this),_c(this),this.scrollTo(a.scrollLeft,a.scrollTop),this.curOp.forceScroll=!0,tg(this,"swapDoc",this,b),b}),getInputField:function(){return this.display.input},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},yg(w);var ie=w.defaults={},je=w.optionHandlers={},le=w.Init={toString:function(){return"CodeMirror.Init"}};ke("value","",function(a,b){a.setValue(b)},!0),ke("mode",null,function(a,b){a.doc.modeOption=b,y(a)},!0),ke("indentUnit",2,y,!0),ke("indentWithTabs",!1),ke("smartIndent",!0),ke("tabSize",4,function(a){z(a),lc(a),Qc(a)},!0),ke("specialChars",/[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(a,b){a.options.specialChars=new RegExp(b.source+(b.test(" ")?"":"| "),"g"),a.refresh()},!0),ke("specialCharPlaceholder",yf,function(a){a.refresh()},!0),ke("electricChars",!0),ke("rtlMoveVisually",!q),ke("wholeLineUpdateBefore",!0),ke("theme","default",function(a){E(a),F(a)},!0),ke("keyMap","default",D),ke("extraKeys",null),ke("lineWrapping",!1,A,!0),ke("gutters",[],function(a){K(a.options),F(a)},!0),ke("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?S(a.display)+"px":"0",a.refresh()},!0),ke("coverGutterNextToScrollbar",!1,N,!0),ke("lineNumbers",!1,function(a){K(a.options),F(a)},!0),ke("firstLineNumber",1,F,!0),ke("lineNumberFormatter",function(a){return a},F,!0),ke("showCursorWhenSelecting",!1,Qb,!0),ke("resetSelectionOnContextMenu",!0),ke("readOnly",!1,function(a,b){"nocursor"==b?(Id(a),a.display.input.blur(),a.display.disabled=!0):(a.display.disabled=!1,b||_c(a))}),ke("disableInput",!1,function(a,b){b||_c(a)},!0),ke("dragDrop",!0),ke("cursorBlinkRate",530),ke("cursorScrollMargin",0),ke("cursorHeight",1,Qb,!0),ke("singleCursorHeightPerLine",!0,Qb,!0),ke("workTime",100),ke("workDelay",100),ke("flattenSpans",!0,z,!0),ke("addModeClass",!1,z,!0),ke("pollInterval",100),ke("undoDepth",200,function(a,b){a.doc.history.undoDepth=b}),ke("historyEventDelay",1250),ke("viewportMargin",10,function(a){a.refresh()},!0),ke("maxHighlightLength",1e4,z,!0),ke("moveInputWithCursor",!0,function(a,b){b||(a.display.inputDiv.style.top=a.display.inputDiv.style.left=0)}),ke("tabindex",null,function(a,b){a.display.input.tabIndex=b||""}),ke("autofocus",null);var me=w.modes={},ne=w.mimeModes={};w.defineMode=function(a,b){if(w.defaults.mode||"null"==a||(w.defaults.mode=a),arguments.length>2){b.dependencies=[];for(var c=2;c<arguments.length;++c)b.dependencies.push(arguments[c])}me[a]=b},w.defineMIME=function(a,b){ne[a]=b},w.resolveMode=function(a){if("string"==typeof a&&ne.hasOwnProperty(a))a=ne[a];else if(a&&"string"==typeof a.name&&ne.hasOwnProperty(a.name)){var b=ne[a.name];"string"==typeof b&&(b={name:b}),a=Ng(b,a),a.name=b.name}else if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return w.resolveMode("application/xml");return"string"==typeof a?{name:a}:a||{name:"null"}},w.getMode=function(a,b){var b=w.resolveMode(b),c=me[b.name];if(!c)return w.getMode(a,"text/plain");var d=c(a,b);if(oe.hasOwnProperty(b.name)){var e=oe[b.name];for(var f in e)e.hasOwnProperty(f)&&(d.hasOwnProperty(f)&&(d["_"+f]=d[f]),d[f]=e[f])}if(d.name=b.name,b.helperType&&(d.helperType=b.helperType),b.modeProps)for(var f in b.modeProps)d[f]=b.modeProps[f];return d},w.defineMode("null",function(){return{token:function(a){a.skipToEnd()}}}),w.defineMIME("text/plain","null");var oe=w.modeExtensions={};w.extendMode=function(a,b){var c=oe.hasOwnProperty(a)?oe[a]:oe[a]={};Og(b,c)},w.defineExtension=function(a,b){w.prototype[a]=b},w.defineDocExtension=function(a,b){Jf.prototype[a]=b},w.defineOption=ke;var pe=[];w.defineInitHook=function(a){pe.push(a)};var qe=w.helpers={};w.registerHelper=function(a,b,c){qe.hasOwnProperty(a)||(qe[a]=w[a]={_global:[]}),qe[a][b]=c},w.registerGlobalHelper=function(a,b,c,d){w.registerHelper(a,b,d),qe[a]._global.push({pred:c,val:d})};var re=w.copyState=function(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c},se=w.startState=function(a,b,c){return a.startState?a.startState(b,c):!0};w.innerMode=function(a,b){for(;a.innerMode;){var c=a.innerMode(b);if(!c||c.mode==a)break;b=c.state,a=c.mode}return c||{mode:a,state:b}};var te=w.commands={selectAll:function(a){a.setSelection(nb(a.firstLine(),0),nb(a.lastLine()),Bg)},singleSelection:function(a){a.setSelection(a.getCursor("anchor"),a.getCursor("head"),Bg)},killLine:function(a){fe(a,function(b){if(b.empty()){var c=Of(a.doc,b.head.line).text.length;return b.head.ch==c&&b.head.line<a.lastLine()?{from:b.head,to:nb(b.head.line+1,0)}:{from:b.head,to:nb(b.head.line,c)}}return{from:b.from(),to:b.to()}})},deleteLine:function(a){fe(a,function(b){return{from:nb(b.from().line,0),to:xb(a.doc,nb(b.to().line+1,0))}})},delLineLeft:function(a){fe(a,function(a){return{from:nb(a.from().line,0),to:a.from()}})},delWrappedLineLeft:function(a){fe(a,function(b){var c=a.charCoords(b.head,"div").top+5,d=a.coordsChar({left:0,top:c},"div");return{from:d,to:b.from()}})},delWrappedLineRight:function(a){fe(a,function(b){var c=a.charCoords(b.head,"div").top+5,d=a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:c},"div");return{from:b.from(),to:d}})},undo:function(a){a.undo()},redo:function(a){a.redo()},undoSelection:function(a){a.undoSelection()},redoSelection:function(a){a.redoSelection()},goDocStart:function(a){a.extendSelection(nb(a.firstLine(),0))},goDocEnd:function(a){a.extendSelection(nb(a.lastLine()))},goLineStart:function(a){a.extendSelectionsBy(function(b){return Ah(a,b.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(a){a.extendSelectionsBy(function(b){return Ch(a,b.head)},{origin:"+move",bias:1})},goLineEnd:function(a){a.extendSelectionsBy(function(b){return Bh(a,b.head.line)},{origin:"+move",bias:-1})},goLineRight:function(a){a.extendSelectionsBy(function(b){var c=a.charCoords(b.head,"div").top+5;return a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:c},"div")},Dg)},goLineLeft:function(a){a.extendSelectionsBy(function(b){var c=a.charCoords(b.head,"div").top+5;return a.coordsChar({left:0,top:c},"div")},Dg)},goLineLeftSmart:function(a){a.extendSelectionsBy(function(b){var c=a.charCoords(b.head,"div").top+5,d=a.coordsChar({left:0,top:c},"div");return d.ch<a.getLine(d.line).search(/\S/)?Ch(a,b.head):d},Dg)},goLineUp:function(a){a.moveV(-1,"line")},goLineDown:function(a){a.moveV(1,"line")},goPageUp:function(a){a.moveV(-1,"page")},goPageDown:function(a){a.moveV(1,"page")},goCharLeft:function(a){a.moveH(-1,"char")},goCharRight:function(a){a.moveH(1,"char")},goColumnLeft:function(a){a.moveH(-1,"column")},goColumnRight:function(a){a.moveH(1,"column")},goWordLeft:function(a){a.moveH(-1,"word")},goGroupRight:function(a){a.moveH(1,"group")},goGroupLeft:function(a){a.moveH(-1,"group")},goWordRight:function(a){a.moveH(1,"word")},delCharBefore:function(a){a.deleteH(-1,"char")},delCharAfter:function(a){a.deleteH(1,"char")},delWordBefore:function(a){a.deleteH(-1,"word")},delWordAfter:function(a){a.deleteH(1,"word")},delGroupBefore:function(a){a.deleteH(-1,"group")},delGroupAfter:function(a){a.deleteH(1,"group")},indentAuto:function(a){a.indentSelection("smart")},indentMore:function(a){a.indentSelection("add")},indentLess:function(a){a.indentSelection("subtract")},insertTab:function(a){a.replaceSelection(" ")},insertSoftTab:function(a){for(var b=[],c=a.listSelections(),d=a.options.tabSize,e=0;e<c.length;e++){var f=c[e].from(),g=Fg(a.getLine(f.line),f.ch,d);b.push(new Array(d-g%d+1).join(" "))}a.replaceSelections(b)},defaultTab:function(a){a.somethingSelected()?a.indentSelection("add"):a.execCommand("insertTab")},transposeChars:function(a){Kc(a,function(){for(var b=a.listSelections(),c=[],d=0;d<b.length;d++){var e=b[d].head,f=Of(a.doc,e.line).text;if(f)if(e.ch==f.length&&(e=new nb(e.line,e.ch-1)),e.ch>0)e=new nb(e.line,e.ch+1),a.replaceRange(f.charAt(e.ch-1)+f.charAt(e.ch-2),nb(e.line,e.ch-2),e,"+transpose");else if(e.line>a.doc.first){var g=Of(a.doc,e.line-1).text;g&&a.replaceRange(f.charAt(0)+"\n"+g.charAt(g.length-1),nb(e.line-1,g.length-1),nb(e.line,1),"+transpose")}c.push(new tb(e,e))}a.setSelections(c)})},newlineAndIndent:function(a){Kc(a,function(){for(var b=a.listSelections().length,c=0;b>c;c++){var d=a.listSelections()[c];a.replaceRange("\n",d.anchor,d.head,"+input"),a.indentLine(d.from().line+1,null,!0),be(a)}})},toggleOverwrite:function(a){a.toggleOverwrite()}},ue=w.keyMap={};ue.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},ue.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-Up":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Down":"goDocEnd","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","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","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},ue.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","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","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection",fallthrough:["basic","emacsy"]},ue.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":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars"},ue["default"]=p?ue.macDefault:ue.pcDefault;var we=w.lookupKey=function(a,b,c){function d(b){b=ve(b);var e=b[a];if(e===!1)return"stop";if(null!=e&&c(e))return!0;if(b.nofallthrough)return"stop";var f=b.fallthrough;if(null==f)return!1;if("[object Array]"!=Object.prototype.toString.call(f))return d(f);for(var g=0;g<f.length;++g){var h=d(f[g]);if(h)return h}return!1}for(var e=0;e<b.length;++e){var f=d(b[e]);if(f)return"stop"!=f}},xe=w.isModifierKey=function(a){var b=uh[a.keyCode];return"Ctrl"==b||"Alt"==b||"Shift"==b||"Mod"==b},ye=w.keyName=function(a,b){if(i&&34==a.keyCode&&a["char"])return!1;var c=uh[a.keyCode];return null==c||a.altGraphKey?!1:(a.altKey&&(c="Alt-"+c),(s?a.metaKey:a.ctrlKey)&&(c="Ctrl-"+c),(s?a.ctrlKey:a.metaKey)&&(c="Cmd-"+c),!b&&a.shiftKey&&(c="Shift-"+c),c)};w.fromTextArea=function(a,b){function d(){a.value=i.getValue()}if(b||(b={}),b.value=a.value,!b.tabindex&&a.tabindex&&(b.tabindex=a.tabindex),!b.placeholder&&a.placeholder&&(b.placeholder=a.placeholder),null==b.autofocus){var c=_g();b.autofocus=c==a||null!=a.getAttribute("autofocus")&&c==document.body}if(a.form&&(pg(a.form,"submit",d),!b.leaveSubmitMethodAlone)){var e=a.form,f=e.submit;try{var g=e.submit=function(){d(),e.submit=f,e.submit(),e.submit=g}}catch(h){}}a.style.display="none";var i=w(function(b){a.parentNode.insertBefore(b,a.nextSibling)},b);return i.save=d,i.getTextArea=function(){return a},i.toTextArea=function(){d(),a.parentNode.removeChild(i.getWrapperElement()),a.style.display="",a.form&&(qg(a.form,"submit",d),"function"==typeof a.form.submit&&(a.form.submit=f))},i};var ze=w.StringStream=function(a,b){this.pos=this.start=0,this.string=a,this.tabSize=b||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0};ze.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){return this.pos<this.string.length?this.string.charAt(this.pos++):void 0},eat:function(a){var b=this.string.charAt(this.pos);if("string"==typeof a)var c=b==a;else var c=b&&(a.test?a.test(b):a(b));return c?(++this.pos,b):void 0},eatWhile:function(a){for(var b=this.pos;this.eat(a););return this.pos>b},eatSpace:function(){for(var a=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);return b>-1?(this.pos=b,!0):void 0},backUp:function(a){this.pos-=a},column:function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Fg(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?Fg(this.string,this.lineStart,this.tabSize):0)},indentation:function(){return Fg(this.string,null,this.tabSize)-(this.lineStart?Fg(this.string,this.lineStart,this.tabSize):0)},match:function(a,b,c){if("string"!=typeof a){var f=this.string.slice(this.pos).match(a);return f&&f.index>0?null:(f&&b!==!1&&(this.pos+=f[0].length),f)}var d=function(a){return c?a.toLowerCase():a},e=this.string.substr(this.pos,a.length);return d(e)==d(a)?(b!==!1&&(this.pos+=a.length),!0):void 0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(a,b){this.lineStart+=a;try{return b()}finally{this.lineStart-=a}}};var Ae=w.TextMarker=function(a,b){this.lines=[],this.type=b,this.doc=a};yg(Ae),Ae.prototype.clear=function(){if(!this.explicitlyCleared){var a=this.doc.cm,b=a&&!a.curOp;if(b&&Bc(a),xg(this,"clear")){var c=this.find();c&&tg(this,"clear",c.from,c.to)}for(var d=null,e=null,f=0;f<this.lines.length;++f){var g=this.lines[f],h=Je(g.markedSpans,this);a&&!this.collapsed?Rc(a,Sf(g),"text"):a&&(null!=h.to&&(e=Sf(g)),null!=h.from&&(d=Sf(g))),g.markedSpans=Ke(g.markedSpans,h),null==h.from&&this.collapsed&&!df(this.doc,g)&&a&&Rf(g,xc(a.display))}if(a&&this.collapsed&&!a.options.lineWrapping)for(var f=0;f<this.lines.length;++f){var i=_e(this.lines[f]),j=I(i);j>a.display.maxLineLength&&(a.display.maxLine=i,a.display.maxLineLength=j,a.display.maxLineChanged=!0)}null!=d&&a&&this.collapsed&&Qc(a,d,e+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,a&&Lb(a.doc)),a&&tg(a,"markerCleared",a,this),b&&Dc(a),this.parent&&this.parent.clear()}},Ae.prototype.find=function(a,b){null==a&&"bookmark"==this.type&&(a=1);for(var c,d,e=0;e<this.lines.length;++e){var f=this.lines[e],g=Je(f.markedSpans,this);if(null!=g.from&&(c=nb(b?f:Sf(f),g.from),-1==a))return c;if(null!=g.to&&(d=nb(b?f:Sf(f),g.to),1==a))return d}return c&&{from:c,to:d}},Ae.prototype.changed=function(){var a=this.find(-1,!0),b=this,c=this.doc.cm;a&&c&&Kc(c,function(){var d=a.line,e=Sf(a.line),f=dc(c,e);if(f&&(jc(f),c.curOp.selectionChanged=c.curOp.forceUpdate=!0),c.curOp.updateMaxLine=!0,!df(b.doc,d)&&null!=b.height){var g=b.height;b.height=null;var h=hf(b)-g;h&&Rf(d,d.height+h)}})},Ae.prototype.attachLine=function(a){if(!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;b.maybeHiddenMarkers&&-1!=Lg(b.maybeHiddenMarkers,this)||(b.maybeUnhiddenMarkers||(b.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(a)},Ae.prototype.detachLine=function(a){if(this.lines.splice(Lg(this.lines,a),1),!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;(b.maybeHiddenMarkers||(b.maybeHiddenMarkers=[])).push(this)}};var Be=0,De=w.SharedTextMarker=function(a,b){this.markers=a,this.primary=b;for(var c=0;c<a.length;++c)a[c].parent=this};yg(De),De.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var a=0;a<this.markers.length;++a)this.markers[a].clear();tg(this,"clear")}},De.prototype.find=function(a,b){return this.primary.find(a,b)};var ff=w.LineWidget=function(a,b,c){if(c)for(var d in c)c.hasOwnProperty(d)&&(this[d]=c[d]);this.cm=a,this.node=b};yg(ff),ff.prototype.clear=function(){var a=this.cm,b=this.line.widgets,c=this.line,d=Sf(c);if(null!=d&&b){for(var e=0;e<b.length;++e)b[e]==this&&b.splice(e--,1);b.length||(c.widgets=null);var f=hf(this);Kc(a,function(){gf(a,c,-f),Rc(a,d,"widget"),Rf(c,Math.max(0,c.height-f))})}},ff.prototype.changed=function(){var a=this.height,b=this.cm,c=this.line;this.height=null;var d=hf(this)-a;d&&Kc(b,function(){b.curOp.forceUpdate=!0,gf(b,c,d),Rf(c,c.height+d)})};var kf=w.Line=function(a,b,c){this.text=a,Te(this,b),this.height=c?c(this):1};yg(kf),kf.prototype.lineNo=function(){return Sf(this)};var uf={},vf={};Gf.prototype={chunkSize:function(){return this.lines.length},removeInner:function(a,b){for(var c=a,d=a+b;d>c;++c){var e=this.lines[c];this.height-=e.height,mf(e),tg(e,"delete")}this.lines.splice(a,b)},collapse:function(a){a.push.apply(a,this.lines)},insertInner:function(a,b,c){this.height+=c,this.lines=this.lines.slice(0,a).concat(b).concat(this.lines.slice(a));for(var d=0;d<b.length;++d)b[d].parent=this},iterN:function(a,b,c){for(var d=a+b;d>a;++a)if(c(this.lines[a]))return!0}},Hf.prototype={chunkSize:function(){return this.size},removeInner:function(a,b){this.size-=b;for(var c=0;c<this.children.length;++c){var d=this.children[c],e=d.chunkSize();if(e>a){var f=Math.min(b,e-a),g=d.height;if(d.removeInner(a,f),this.height-=g-d.height,e==f&&(this.children.splice(c--,1),d.parent=null),0==(b-=f))break;a=0}else a-=e}if(this.size-b<25&&(this.children.length>1||!(this.children[0]instanceof Gf))){var h=[];this.collapse(h),this.children=[new Gf(h)],this.children[0].parent=this}},collapse:function(a){for(var b=0;b<this.children.length;++b)this.children[b].collapse(a)},insertInner:function(a,b,c){this.size+=b.length,this.height+=c;for(var d=0;d<this.children.length;++d){var e=this.children[d],f=e.chunkSize();if(f>=a){if(e.insertInner(a,b,c),e.lines&&e.lines.length>50){for(;e.lines.length>50;){var g=e.lines.splice(e.lines.length-25,25),h=new Gf(g);e.height-=h.height,this.children.splice(d+1,0,h),h.parent=this}this.maybeSpill()}break}a-=f}},maybeSpill:function(){if(!(this.children.length<=10)){var a=this;do{var b=a.children.splice(a.children.length-5,5),c=new Hf(b);if(a.parent){a.size-=c.size,a.height-=c.height;var e=Lg(a.parent.children,a);a.parent.children.splice(e+1,0,c)}else{var d=new Hf(a.children);d.parent=a,a.children=[d,c],a=d}c.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=0;d<this.children.length;++d){var e=this.children[d],f=e.chunkSize();if(f>a){var g=Math.min(b,f-a);if(e.iterN(a,g,c))return!0;if(0==(b-=g))break;a=0}else a-=f}}};var If=0,Jf=w.Doc=function(a,b,c){if(!(this instanceof Jf))return new Jf(a,b,c);null==c&&(c=0),Hf.call(this,[new Gf([new kf("",null)])]),this.first=c,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.frontier=c;var d=nb(c,0);this.sel=vb(d),this.history=new Wf(null),this.id=++If,this.modeOption=b,"string"==typeof a&&(a=ph(a)),Ff(this,{from:d,to:d,text:a}),Ib(this,vb(d),Bg)};Jf.prototype=Ng(Hf.prototype,{constructor:Jf,iter:function(a,b,c){c?this.iterN(a-this.first,b-a,c):this.iterN(this.first,this.first+this.size,a)},insert:function(a,b){for(var c=0,d=0;d<b.length;++d)c+=b[d].height;this.insertInner(a-this.first,b,c)},remove:function(a,b){this.removeInner(a-this.first,b)},getValue:function(a){var b=Qf(this,this.first,this.first+this.size);return a===!1?b:b.join(a||"\n")},setValue:Nc(function(a){var b=nb(this.first,0),c=this.first+this.size-1;Rd(this,{from:b,to:nb(c,Of(this,c).text.length),text:ph(a),origin:"setValue"},!0),Ib(this,vb(b))}),replaceRange:function(a,b,c,d){b=xb(this,b),c=c?xb(this,c):b,Xd(this,a,b,c,d)},getRange:function(a,b,c){var d=Pf(this,xb(this,a),xb(this,b));return c===!1?d:d.join(c||"\n")},getLine:function(a){var b=this.getLineHandle(a);return b&&b.text},getLineHandle:function(a){return zb(this,a)?Of(this,a):void 0},getLineNumber:function(a){return Sf(a)},getLineHandleVisualStart:function(a){return"number"==typeof a&&(a=Of(this,a)),_e(a)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(a){return xb(this,a)},getCursor:function(a){var c,b=this.sel.primary();return c=null==a||"head"==a?b.head:"anchor"==a?b.anchor:"end"==a||"to"==a||a===!1?b.to():b.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Nc(function(a,b,c){Fb(this,xb(this,"number"==typeof a?nb(a,b||0):a),null,c)}),setSelection:Nc(function(a,b,c){Fb(this,xb(this,a),xb(this,b||a),c)}),extendSelection:Nc(function(a,b,c){Cb(this,xb(this,a),b&&xb(this,b),c)}),extendSelections:Nc(function(a,b){Db(this,Ab(this,a,b))}),extendSelectionsBy:Nc(function(a,b){Db(this,Mg(this.sel.ranges,a),b)}),setSelections:Nc(function(a,b,c){if(a.length){for(var d=0,e=[];d<a.length;d++)e[d]=new tb(xb(this,a[d].anchor),xb(this,a[d].head));null==b&&(b=Math.min(a.length-1,this.sel.primIndex)),Ib(this,ub(e,b),c)}}),addSelection:Nc(function(a,b,c){var d=this.sel.ranges.slice(0);d.push(new tb(xb(this,a),xb(this,b||a))),Ib(this,ub(d,d.length-1),c)}),getSelection:function(a){for(var c,b=this.sel.ranges,d=0;d<b.length;d++){var e=Pf(this,b[d].from(),b[d].to());c=c?c.concat(e):e}return a===!1?c:c.join(a||"\n")},getSelections:function(a){for(var b=[],c=this.sel.ranges,d=0;d<c.length;d++){var e=Pf(this,c[d].from(),c[d].to());a!==!1&&(e=e.join(a||"\n")),b[d]=e}return b},replaceSelection:function(a,b,c){for(var d=[],e=0;e<this.sel.ranges.length;e++)d[e]=a;this.replaceSelections(d,b,c||"+input")},replaceSelections:Nc(function(a,b,c){for(var d=[],e=this.sel,f=0;f<e.ranges.length;f++){var g=e.ranges[f];d[f]={from:g.from(),to:g.to(),text:ph(a[f]),origin:c}}for(var h=b&&"end"!=b&&Pd(this,d,b),f=d.length-1;f>=0;f--)Rd(this,d[f]);h?Hb(this,h):this.cm&&be(this.cm)}),undo:Nc(function(){Td(this,"undo")}),redo:Nc(function(){Td(this,"redo")}),undoSelection:Nc(function(){Td(this,"undo",!0)}),redoSelection:Nc(function(){Td(this,"redo",!0)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){for(var a=this.history,b=0,c=0,d=0;d<a.done.length;d++)a.done[d].ranges||++b;for(var d=0;d<a.undone.length;d++)a.undone[d].ranges||++c;return{undo:b,redo:c}},clearHistory:function(){this.history=new Wf(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(a){return a&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(a){return this.history.generation==(a||this.cleanGeneration)},getHistory:function(){return{done:fg(this.history.done),undone:fg(this.history.undone)}},setHistory:function(a){var b=this.history=new Wf(this.history.maxGeneration);b.done=fg(a.done.slice(0),null,!0),b.undone=fg(a.undone.slice(0),null,!0)},addLineClass:Nc(function(a,b,c){return ee(this,a,"class",function(a){var d="text"==b?"textClass":"background"==b?"bgClass":"wrapClass";if(a[d]){if(new RegExp("(?:^|\\s)"+c+"(?:$|\\s)").test(a[d]))return!1;a[d]+=" "+c}else a[d]=c;return!0})}),removeLineClass:Nc(function(a,b,c){return ee(this,a,"class",function(a){var d="text"==b?"textClass":"background"==b?"bgClass":"wrapClass",e=a[d];if(!e)return!1;if(null==c)a[d]=null;else{var f=e.match(new RegExp("(?:^|\\s+)"+c+"(?:$|\\s+)"));if(!f)return!1;var g=f.index+f[0].length;a[d]=e.slice(0,f.index)+(f.index&&g!=e.length?" ":"")+e.slice(g)||null}return!0})}),markText:function(a,b,c){return Ce(this,xb(this,a),xb(this,b),c,"range")},setBookmark:function(a,b){var c={replacedWith:b&&(null==b.nodeType?b.widget:b),insertLeft:b&&b.insertLeft,clearWhenEmpty:!1,shared:b&&b.shared};return a=xb(this,a),Ce(this,a,a,c,"bookmark")},findMarksAt:function(a){a=xb(this,a);var b=[],c=Of(this,a.line).markedSpans;if(c)for(var d=0;d<c.length;++d){var e=c[d];(null==e.from||e.from<=a.ch)&&(null==e.to||e.to>=a.ch)&&b.push(e.marker.parent||e.marker)}return b},findMarks:function(a,b,c){a=xb(this,a),b=xb(this,b);var d=[],e=a.line;return this.iter(a.line,b.line+1,function(f){var g=f.markedSpans;if(g)for(var h=0;h<g.length;h++){var i=g[h];e==a.line&&a.ch>i.to||null==i.from&&e!=a.line||e==b.line&&i.from>b.ch||c&&!c(i.marker)||d.push(i.marker.parent||i.marker)}++e}),d},getAllMarks:function(){var a=[];return this.iter(function(b){var c=b.markedSpans;if(c)for(var d=0;d<c.length;++d)null!=c[d].from&&a.push(c[d].marker)}),a},posFromIndex:function(a){var b,c=this.first;return this.iter(function(d){var e=d.text.length+1;return e>a?(b=a,!0):(a-=e,++c,void 0)}),xb(this,nb(c,b))},indexFromPos:function(a){a=xb(this,a);var b=a.ch;return a.line<this.first||a.ch<0?0:(this.iter(this.first,a.line,function(a){b+=a.text.length+1}),b)},copy:function(a){var b=new Jf(Qf(this,this.first,this.first+this.size),this.modeOption,this.first);return b.scrollTop=this.scrollTop,b.scrollLeft=this.scrollLeft,b.sel=this.sel,b.extend=!1,a&&(b.history.undoDepth=this.history.undoDepth,b.setHistory(this.getHistory())),b},linkedDoc:function(a){a||(a={});var b=this.first,c=this.first+this.size;null!=a.from&&a.from>b&&(b=a.from),null!=a.to&&a.to<c&&(c=a.to);var d=new Jf(Qf(this,b,c),a.mode||this.modeOption,b);return a.sharedHist&&(d.history=this.history),(this.linked||(this.linked=[])).push({doc:d,sharedHist:a.sharedHist}),d.linked=[{doc:this,isParent:!0,sharedHist:a.sharedHist}],Ge(d,Fe(this)),d},unlinkDoc:function(a){if(a instanceof w&&(a=a.doc),this.linked)for(var b=0;b<this.linked.length;++b){var c=this.linked[b];if(c.doc==a){this.linked.splice(b,1),a.unlinkDoc(this),He(Fe(this));break}}if(a.history==this.history){var d=[a.id];Mf(a,function(a){d.push(a.id)},!0),a.history=new Wf(null),a.history.done=fg(this.history.done,d),a.history.undone=fg(this.history.undone,d)}},iterLinkedDocs:function(a){Mf(this,a)},getMode:function(){return this.mode},getEditor:function(){return this.cm}}),Jf.prototype.eachLine=Jf.prototype.iter;var Kf="iter insert remove copy getEditor".split(" ");for(var Lf in Jf.prototype)Jf.prototype.hasOwnProperty(Lf)&&Lg(Kf,Lf)<0&&(w.prototype[Lf]=function(a){return function(){return a.apply(this.doc,arguments)}}(Jf.prototype[Lf]));yg(Jf);var jg=w.e_preventDefault=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},kg=w.e_stopPropagation=function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},mg=w.e_stop=function(a){jg(a),kg(a)},pg=w.on=function(a,b,c){if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent)a.attachEvent("on"+b,c);else{var d=a._handlers||(a._handlers={}),e=d[b]||(d[b]=[]);e.push(c)}},qg=w.off=function(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1);else if(a.detachEvent)a.detachEvent("on"+b,c);else{var d=a._handlers&&a._handlers[b];if(!d)return;for(var e=0;e<d.length;++e)if(d[e]==c){d.splice(e,1);break}}},rg=w.signal=function(a,b){var c=a._handlers&&a._handlers[b];if(c)for(var d=Array.prototype.slice.call(arguments,2),e=0;e<c.length;++e)c[e].apply(null,d)},sg=null,zg=30,Ag=w.Pass={toString:function(){return"CodeMirror.Pass"}},Bg={scroll:!1},Cg={origin:"*mouse"},Dg={origin:"+move"};Eg.prototype.set=function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)};var Fg=w.countColumn=function(a,b,c,d,e){null==b&&(b=a.search(/[^\s\u00a0]/),-1==b&&(b=a.length));for(var f=d||0,g=e||0;;){var h=a.indexOf(" ",f);if(0>h||h>=b)return g+(b-f);g+=h-f,g+=c-g%c,f=h+1}},Hg=[""],Kg=function(a){a.select()};n?Kg=function(a){a.selectionStart=0,a.selectionEnd=a.value.length}:d&&(Kg=function(a){try{a.select()}catch(b){}}),[].indexOf&&(Lg=function(a,b){return a.indexOf(b)}),[].map&&(Mg=function(a,b){return a.map(b)});var Xg,Qg=/[\u00df\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Rg=w.isWordChar=function(a){return/\w/.test(a)||a>"\x80"&&(a.toUpperCase()!=a.toLowerCase()||Qg.test(a))},Ug=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; +Xg=document.createRange?function(a,b,c){var d=document.createRange();return d.setEnd(a,c),d.setStart(a,b),d}:function(a,b,c){var d=document.body.createTextRange();return d.moveToElementText(a.parentNode),d.collapse(!0),d.moveEnd("character",c),d.moveStart("character",b),d},d&&11>e&&(_g=function(){try{return document.activeElement}catch(a){return document.body}});var jh,lh,nh,fh=!1,ih=function(){if(d&&9>e)return!1;var a=Wg("div");return"draggable"in a||"dragDrop"in a}(),ph=w.splitLines=3!="\n\nb".split(/\n/).length?function(a){for(var b=0,c=[],d=a.length;d>=b;){var e=a.indexOf("\n",b);-1==e&&(e=a.length);var f=a.slice(b,"\r"==a.charAt(e-1)?e-1:e),g=f.indexOf("\r");-1!=g?(c.push(f.slice(0,g)),b+=g+1):(c.push(f),b=e+1)}return c}:function(a){return a.split(/\r\n?|\n/)},qh=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return b&&b.parentElement()==a?0!=b.compareEndPoints("StartToEnd",b):!1},rh=function(){var a=Wg("div");return"oncopy"in a?!0:(a.setAttribute("oncopy","return;"),"function"==typeof a.oncopy)}(),sh=null,uh={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:";",61:"=",91:"Mod",92:"Mod",93:"Mod",107:"=",109:"-",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"};w.keyNames=uh,function(){for(var a=0;10>a;a++)uh[a+48]=uh[a+96]=String(a);for(var a=65;90>=a;a++)uh[a]=String.fromCharCode(a);for(var a=1;12>=a;a++)uh[a+111]=uh[a+63235]="F"+a}();var Eh,Jh=function(){function c(c){return 247>=c?a.charAt(c):c>=1424&&1524>=c?"R":c>=1536&&1773>=c?b.charAt(c-1536):c>=1774&&2220>=c?"r":c>=8192&&8203>=c?"w":8204==c?"b":"L"}function j(a,b,c){this.level=a,this.from=b,this.to=c}var a="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",b="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm",d=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,e=/[stwN]/,f=/[LRr]/,g=/[Lb1n]/,h=/[1n]/,i="L";return function(a){if(!d.test(a))return!1;for(var m,b=a.length,k=[],l=0;b>l;++l)k.push(m=c(a.charCodeAt(l)));for(var l=0,n=i;b>l;++l){var m=k[l];"m"==m?k[l]=n:n=m}for(var l=0,o=i;b>l;++l){var m=k[l];"1"==m&&"r"==o?k[l]="n":f.test(m)&&(o=m,"r"==m&&(k[l]="R"))}for(var l=1,n=k[0];b-1>l;++l){var m=k[l];"+"==m&&"1"==n&&"1"==k[l+1]?k[l]="1":","!=m||n!=k[l+1]||"1"!=n&&"n"!=n||(k[l]=n),n=m}for(var l=0;b>l;++l){var m=k[l];if(","==m)k[l]="N";else if("%"==m){for(var p=l+1;b>p&&"%"==k[p];++p);for(var q=l&&"!"==k[l-1]||b>p&&"1"==k[p]?"1":"N",r=l;p>r;++r)k[r]=q;l=p-1}}for(var l=0,o=i;b>l;++l){var m=k[l];"L"==o&&"1"==m?k[l]="L":f.test(m)&&(o=m)}for(var l=0;b>l;++l)if(e.test(k[l])){for(var p=l+1;b>p&&e.test(k[p]);++p);for(var s="L"==(l?k[l-1]:i),t="L"==(b>p?k[p]:i),q=s||t?"L":"R",r=l;p>r;++r)k[r]=q;l=p-1}for(var v,u=[],l=0;b>l;)if(g.test(k[l])){var w=l;for(++l;b>l&&g.test(k[l]);++l);u.push(new j(0,w,l))}else{var x=l,y=u.length;for(++l;b>l&&"L"!=k[l];++l);for(var r=x;l>r;)if(h.test(k[r])){r>x&&u.splice(y,0,new j(1,x,r));var z=r;for(++r;l>r&&h.test(k[r]);++r);u.splice(y,0,new j(2,z,r)),x=r}else++r;l>x&&u.splice(y,0,new j(1,x,l))}return 1==u[0].level&&(v=a.match(/^\s+/))&&(u[0].from=v[0].length,u.unshift(new j(0,0,v[0].length))),1==Jg(u).level&&(v=a.match(/\s+$/))&&(Jg(u).to-=v[0].length,u.push(new j(0,b-v[0].length,b))),u[0].level!=Jg(u).level&&u.push(new j(u[0].level,b,b)),u}}();return w.version="4.6.0",w}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";function b(a){for(var b={},c=a.split(" "),d=0;d<c.length;++d)b[c[d]]=!0;return b}function d(a,b){if(!b.startOfLine)return!1;for(;;){if(!a.skipTo("\\")){a.skipToEnd(),b.tokenize=null;break}if(a.next(),a.eol()){b.tokenize=d;break}}return"meta"}function e(a,b){if(a.backUp(1),a.match(/(R|u8R|uR|UR|LR)/)){var c=a.match(/"([^\s\\()]{0,16})\(/);return c?(b.cpp11RawStringDelim=c[1],b.tokenize=g,g(a,b)):!1}return a.match(/(u8|u|U|L)/)?a.match(/["']/,!1)?"string":!1:(a.next(),!1)}function f(a,b){for(var c;null!=(c=a.next());)if('"'==c&&!a.eat('"')){b.tokenize=null;break}return"string"}function g(a,b){var c=b.cpp11RawStringDelim.replace(/[^\w\s]/g,"\\$&"),d=a.match(new RegExp(".*?\\)"+c+'"'));return d?b.tokenize=null:a.skipToEnd(),"string"}function h(b,c){function e(a){if(a)for(var b in a)a.hasOwnProperty(b)&&d.push(b)}"string"==typeof b&&(b=[b]);var d=[];e(c.keywords),e(c.builtin),e(c.atoms),d.length&&(c.helperType=b[0],a.registerHelper("hintWords",b[0],d));for(var f=0;f<b.length;++f)a.defineMIME(b[f],c)}a.defineMode("clike",function(b,c){function o(a,b){var c=a.next();if(k[c]){var d=k[c](a,b);if(d!==!1)return d}if('"'==c||"'"==c)return b.tokenize=p(c),b.tokenize(a,b);if(/[\[\]{}\(\),;\:\.]/.test(c))return n=c,null;if(/\d/.test(c))return a.eatWhile(/[\w\.]/),"number";if("/"==c){if(a.eat("*"))return b.tokenize=q,q(a,b);if(a.eat("/"))return a.skipToEnd(),"comment"}if(m.test(c))return a.eatWhile(m),"operator";a.eatWhile(/[\w\$_]/);var e=a.current();return g.propertyIsEnumerable(e)?(i.propertyIsEnumerable(e)&&(n="newstatement"),"keyword"):h.propertyIsEnumerable(e)?(i.propertyIsEnumerable(e)&&(n="newstatement"),"builtin"):j.propertyIsEnumerable(e)?"atom":"variable"}function p(a){return function(b,c){for(var e,d=!1,f=!1;null!=(e=b.next());){if(e==a&&!d){f=!0;break}d=!d&&"\\"==e}return(f||!d&&!l)&&(c.tokenize=null),"string"}}function q(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=null;break}c="*"==d}return"comment"}function r(a,b,c,d,e){this.indented=a,this.column=b,this.type=c,this.align=d,this.prev=e}function s(a,b,c){var d=a.indented;return a.context&&"statement"==a.context.type&&(d=a.context.indented),a.context=new r(d,b,c,null,a.context)}function t(a){var b=a.context.type;return(")"==b||"]"==b||"}"==b)&&(a.indented=a.context.indented),a.context=a.context.prev}var n,d=b.indentUnit,e=c.statementIndentUnit||d,f=c.dontAlignCalls,g=c.keywords||{},h=c.builtin||{},i=c.blockKeywords||{},j=c.atoms||{},k=c.hooks||{},l=c.multiLineStrings,m=/[+\-*&%=<>!?|\/]/;return{startState:function(a){return{tokenize:null,context:new r((a||0)-d,0,"top",!1),indented:0,startOfLine:!0}},token:function(a,b){var c=b.context;if(a.sol()&&(null==c.align&&(c.align=!1),b.indented=a.indentation(),b.startOfLine=!0),a.eatSpace())return null;n=null;var d=(b.tokenize||o)(a,b);if("comment"==d||"meta"==d)return d;if(null==c.align&&(c.align=!0),";"!=n&&":"!=n&&","!=n||"statement"!=c.type)if("{"==n)s(b,a.column(),"}");else if("["==n)s(b,a.column(),"]");else if("("==n)s(b,a.column(),")");else if("}"==n){for(;"statement"==c.type;)c=t(b);for("}"==c.type&&(c=t(b));"statement"==c.type;)c=t(b)}else n==c.type?t(b):(("}"==c.type||"top"==c.type)&&";"!=n||"statement"==c.type&&"newstatement"==n)&&s(b,a.column(),"statement");else t(b);return b.startOfLine=!1,d},indent:function(b,c){if(b.tokenize!=o&&null!=b.tokenize)return a.Pass;var g=b.context,h=c&&c.charAt(0);"statement"==g.type&&"}"==h&&(g=g.prev);var i=h==g.type;return"statement"==g.type?g.indented+("{"==h?0:e):!g.align||f&&")"==g.type?")"!=g.type||i?g.indented+(i?0:d):g.indented+e:g.column+(i?0:1)},electricChars:"{}",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"brace"}});var c="auto if break int case long char register continue return default short do sizeof double static else struct entry switch extern typedef float union for unsigned goto while enum void const signed volatile";h(["text/x-csrc","text/x-c","text/x-chdr"],{name:"clike",keywords:b(c),blockKeywords:b("case do else for if switch while struct"),atoms:b("null"),hooks:{"#":d},modeProps:{fold:["brace","include"]}}),h(["text/x-c++src","text/x-c++hdr"],{name:"clike",keywords:b(c+" asm dynamic_cast namespace reinterpret_cast try bool explicit new "+"static_cast typeid catch operator template typename class friend private "+"this using const_cast inline public throw virtual delete mutable protected "+"wchar_t alignas alignof constexpr decltype nullptr noexcept thread_local final "+"static_assert override"),blockKeywords:b("catch class do else finally for if struct switch try while"),atoms:b("true false null"),hooks:{"#":d,u:e,U:e,L:e,R:e},modeProps:{fold:["brace","include"]}}),h("text/x-java",{name:"clike",keywords:b("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while"),blockKeywords:b("catch class do else finally for if switch try while"),atoms:b("true false null"),hooks:{"@":function(a){return a.eatWhile(/[\w\$_]/),"meta"}},modeProps:{fold:["brace","import"]}}),h("text/x-csharp",{name:"clike",keywords:b("abstract as base break case catch checked class const continue default delegate do else enum event explicit extern finally fixed for foreach goto if implicit in interface internal is lock namespace new operator out override params private protected public readonly ref return sealed sizeof stackalloc static struct switch this throw try typeof unchecked unsafe using virtual void volatile while add alias ascending descending dynamic from get global group into join let orderby partial remove select set value var yield"),blockKeywords:b("catch class do else finally for foreach if struct switch try while"),builtin:b("Boolean Byte Char DateTime DateTimeOffset Decimal Double Guid Int16 Int32 Int64 Object SByte Single String TimeSpan UInt16 UInt32 UInt64 bool byte char decimal double short int long object sbyte float string ushort uint ulong"),atoms:b("true false null"),hooks:{"@":function(a,b){return a.eat('"')?(b.tokenize=f,f(a,b)):(a.eatWhile(/[\w\$_]/),"meta")}}}),h("text/x-scala",{name:"clike",keywords:b("abstract case catch class def do else extends false final finally for forSome if implicit import lazy match new null object override package private protected return sealed super this throw trait try trye type val var while with yield _ : = => <- <: <% >: # @ assert assume require print println printf readLine readBoolean readByte readShort readChar readInt readLong readFloat readDouble AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either Enumeration Equiv Error Exception Fractional Function IndexedSeq Integral Iterable Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector :: #:: Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void"),multiLineStrings:!0,blockKeywords:b("catch class do else finally for forSome if match switch try while"),atoms:b("true false null"),hooks:{"@":function(a){return a.eatWhile(/[\w\$_]/),"meta"}}}),h(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:b("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4 sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadowconst attribute uniform varying break continue discard return for while do if else struct in out inout"),blockKeywords:b("for while do if else struct"),builtin:b("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smootstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:b("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragColor gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),hooks:{"#":d},modeProps:{fold:["brace","include"]}}),h("text/x-nesc",{name:"clike",keywords:b(c+"as atomic async call command component components configuration event generic "+"implementation includes interface module new norace nx_struct nx_union post provides "+"signal task uses abstract extends"),blockKeywords:b("case do else for if switch while struct"),atoms:b("null"),hooks:{"#":d},modeProps:{fold:["brace","include"]}})}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";function b(a){for(var b={},c=0;c<a.length;++c)b[a[c]]=!0;return b}function r(a,b){for(var d,c=!1;null!=(d=a.next());){if(c&&"/"==d){b.tokenize=null;break}c="*"==d}return["comment","comment"]}function s(a,b){return a.skipTo("-->")?(a.match("-->"),b.tokenize=null):a.skipToEnd(),["comment","comment"]}a.defineMode("css",function(b,c){function p(a,b){return n=b,a}function q(a,b){var c=a.next();if(e[c]){var d=e[c](a,b);if(d!==!1)return d}return"@"==c?(a.eatWhile(/[\w\\\-]/),p("def",a.current())):"="==c||("~"==c||"|"==c)&&a.eat("=")?p(null,"compare"):'"'==c||"'"==c?(b.tokenize=r(c),b.tokenize(a,b)):"#"==c?(a.eatWhile(/[\w\\\-]/),p("atom","hash")):"!"==c?(a.match(/^\s*\w*/),p("keyword","important")):/\d/.test(c)||"."==c&&a.eat(/\d/)?(a.eatWhile(/[\w.%]/),p("number","unit")):"-"!==c?/[,+>*\/]/.test(c)?p(null,"select-op"):"."==c&&a.match(/^-?[_a-z][_a-z0-9-]*/i)?p("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(c)?p(null,c):"u"==c&&a.match("rl(")?(a.backUp(1),b.tokenize=s,p("property","word")):/[\w\\\-]/.test(c)?(a.eatWhile(/[\w\\\-]/),p("property","word")):p(null,null):/[\d.]/.test(a.peek())?(a.eatWhile(/[\w.%]/),p("number","unit")):a.match(/^\w+-/)?p("meta","meta"):void 0}function r(a){return function(b,c){for(var e,d=!1;null!=(e=b.next());){if(e==a&&!d){")"==a&&b.backUp(1);break}d=!d&&"\\"==e}return(e==a||!d&&")"!=a)&&(c.tokenize=null),p("string","string")}}function s(a,b){return a.next(),b.tokenize=a.match(/\s*[\"\')]/,!1)?null:r(")"),p(null,"(")}function t(a,b,c){this.type=a,this.indent=b,this.prev=c}function u(a,b,c){return a.context=new t(c,b.indentation()+d,a.context),c}function v(a){return a.context=a.context.prev,a.context.type}function w(a,b,c){return z[c.context.type](a,b,c)}function x(a,b,c,d){for(var e=d||1;e>0;e--)c.context=c.context.prev;return w(a,b,c)}function y(a){var b=a.current().toLowerCase();o=k.hasOwnProperty(b)?"atom":j.hasOwnProperty(b)?"keyword":"variable"}c.propertyKeywords||(c=a.resolveMode("text/css"));var n,o,d=b.indentUnit,e=c.tokenHooks,f=c.mediaTypes||{},g=c.mediaFeatures||{},h=c.propertyKeywords||{},i=c.nonStandardPropertyKeywords||{},j=c.colorKeywords||{},k=c.valueKeywords||{},l=c.fontProperties||{},m=c.allowNested,z={};return z.top=function(a,b,c){if("{"==a)return u(c,b,"block");if("}"==a&&c.context.prev)return v(c);if("@media"==a)return u(c,b,"media");if("@font-face"==a)return"font_face_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(a))return"keyframes";if(a&&"@"==a.charAt(0))return u(c,b,"at");if("hash"==a)o="builtin";else if("word"==a)o="tag";else{if("variable-definition"==a)return"maybeprop";if("interpolation"==a)return u(c,b,"interpolation");if(":"==a)return"pseudo";if(m&&"("==a)return u(c,b,"parens")}return c.context.type},z.block=function(a,b,c){if("word"==a){var d=b.current().toLowerCase();return h.hasOwnProperty(d)?(o="property","maybeprop"):i.hasOwnProperty(d)?(o="string-2","maybeprop"):m?(o=b.match(/^\s*:/,!1)?"property":"tag","block"):(o+=" error","maybeprop")}return"meta"==a?"block":m||"hash"!=a&&"qualifier"!=a?z.top(a,b,c):(o="error","block")},z.maybeprop=function(a,b,c){return":"==a?u(c,b,"prop"):w(a,b,c)},z.prop=function(a,b,c){if(";"==a)return v(c);if("{"==a&&m)return u(c,b,"propBlock");if("}"==a||"{"==a)return x(a,b,c);if("("==a)return u(c,b,"parens");if("hash"!=a||/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(b.current())){if("word"==a)y(b);else if("interpolation"==a)return u(c,b,"interpolation")}else o+=" error";return"prop"},z.propBlock=function(a,b,c){return"}"==a?v(c):"word"==a?(o="property","maybeprop"):c.context.type},z.parens=function(a,b,c){return"{"==a||"}"==a?x(a,b,c):")"==a?v(c):"("==a?u(c,b,"parens"):("word"==a&&y(b),"parens")},z.pseudo=function(a,b,c){return"word"==a?(o="variable-3",c.context.type):w(a,b,c)},z.media=function(a,b,c){if("("==a)return u(c,b,"media_parens");if("}"==a)return x(a,b,c);if("{"==a)return v(c)&&u(c,b,m?"block":"top");if("word"==a){var d=b.current().toLowerCase();o="only"==d||"not"==d||"and"==d?"keyword":f.hasOwnProperty(d)?"attribute":g.hasOwnProperty(d)?"property":"error"}return c.context.type},z.media_parens=function(a,b,c){return")"==a?v(c):"{"==a||"}"==a?x(a,b,c,2):z.media(a,b,c)},z.font_face_before=function(a,b,c){return"{"==a?u(c,b,"font_face"):w(a,b,c)},z.font_face=function(a,b,c){return"}"==a?v(c):"word"==a?(o=l.hasOwnProperty(b.current().toLowerCase())?"property":"error","maybeprop"):"font_face"},z.keyframes=function(a,b,c){return"word"==a?(o="variable","keyframes"):"{"==a?u(c,b,"top"):w(a,b,c)},z.at=function(a,b,c){return";"==a?v(c):"{"==a||"}"==a?x(a,b,c):("word"==a?o="tag":"hash"==a&&(o="builtin"),"at")},z.interpolation=function(a,b,c){return"}"==a?v(c):"{"==a||";"==a?x(a,b,c):("variable"!=a&&(o="error"),"interpolation")},{startState:function(a){return{tokenize:null,state:"top",context:new t("top",a||0,null)}},token:function(a,b){if(!b.tokenize&&a.eatSpace())return null;var c=(b.tokenize||q)(a,b);return c&&"object"==typeof c&&(n=c[1],c=c[0]),o=c,b.state=z[b.state](n,a,b),o},indent:function(a,b){var c=a.context,e=b&&b.charAt(0),f=c.indent;return"prop"!=c.type||"}"!=e&&")"!=e||(c=c.prev),!c.prev||("}"!=e||"block"!=c.type&&"top"!=c.type&&"interpolation"!=c.type&&"font_face"!=c.type)&&(")"!=e||"parens"!=c.type&&"media_parens"!=c.type)&&("{"!=e||"at"!=c.type&&"media"!=c.type)||(f=c.indent-d,c=c.prev),f},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}});var c=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],d=b(c),e=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"],f=b(e),g=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],h=b(g),i=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],j=b(i),k=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],l=b(k),m=["above","absolute","activeborder","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","content-box","context-menu","continuous","copy","cover","crop","cross","crosshair","currentcolor","cursive","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ew-resize","expanded","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-table","inset","inside","intrinsic","invert","italic","justify","kannada","katakana","katakana-iroha","keep-all","khmer","landscape","lao","large","larger","left","level","lighter","line-through","linear","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","single","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","x-large","x-small","xor","xx-large","xx-small"],n=b(m),o=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],p=b(o),q=c.concat(e).concat(g).concat(i).concat(k).concat(m); +a.registerHelper("hintWords","css",q),a.defineMIME("text/css",{mediaTypes:d,mediaFeatures:f,propertyKeywords:h,nonStandardPropertyKeywords:j,colorKeywords:l,valueKeywords:n,fontProperties:p,tokenHooks:{"<":function(a,b){return a.match("!--")?(b.tokenize=s,s(a,b)):!1},"/":function(a,b){return a.eat("*")?(b.tokenize=r,r(a,b)):!1}},name:"css"}),a.defineMIME("text/x-scss",{mediaTypes:d,mediaFeatures:f,propertyKeywords:h,nonStandardPropertyKeywords:j,colorKeywords:l,valueKeywords:n,fontProperties:p,allowNested:!0,tokenHooks:{"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=r,r(a,b)):["operator","operator"]},":":function(a){return a.match(/\s*\{/)?[null,"{"]:!1},$:function(a){return a.match(/^[\w-]+/),a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(a){return a.eat("{")?[null,"interpolation"]:!1}},name:"css",helperType:"scss"}),a.defineMIME("text/x-less",{mediaTypes:d,mediaFeatures:f,propertyKeywords:h,nonStandardPropertyKeywords:j,colorKeywords:l,valueKeywords:n,fontProperties:p,allowNested:!0,tokenHooks:{"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=r,r(a,b)):["operator","operator"]},"@":function(a){return a.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/,!1)?!1:(a.eatWhile(/[\w\\\-]/),a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"})}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror"),require("../markdown/markdown"),require("../../addon/mode/overlay")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../markdown/markdown","../../addon/mode/overlay"],a):a(CodeMirror)}(function(a){"use strict";a.defineMode("gfm",function(b,c){function e(a){return a.code=!1,null}var d=0,f={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(a){return{code:a.code,codeBlock:a.codeBlock,ateSpace:a.ateSpace}},token:function(a,b){if(b.combineTokens=null,b.codeBlock)return a.match(/^```/)?(b.codeBlock=!1,null):(a.skipToEnd(),null);if(a.sol()&&(b.code=!1),a.sol()&&a.match(/^```/))return a.skipToEnd(),b.codeBlock=!0,null;if("`"===a.peek()){a.next();var c=a.pos;a.eatWhile("`");var e=1+a.pos-c;return b.code?e===d&&(b.code=!1):(d=e,b.code=!0),null}if(b.code)return a.next(),null;if(a.eatSpace())return b.ateSpace=!0,null;if(a.sol()||b.ateSpace){if(b.ateSpace=!1,a.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/))return b.combineTokens=!0,"link";if(a.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return b.combineTokens=!0,"link"}return a.match(/^((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?\xab\xbb\u201c\u201d\u2018\u2019]))/i)&&"]("!=a.string.slice(a.start-2,a.start)?(b.combineTokens=!0,"link"):(a.next(),null)},blankLine:e},g={underscoresBreakWords:!1,taskLists:!0,fencedCodeBlocks:!0};for(var h in c)g[h]=c[h];return g.name="markdown",a.defineMIME("gfmBase",g),a.overlayMode(a.getMode(b,"gfmBase"),f)},"markdown")}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror"),require("../xml/xml"),require("../javascript/javascript"),require("../css/css")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],a):a(CodeMirror)}(function(a){"use strict";a.defineMode("htmlmixed",function(b,c){function j(a,b){var c=b.htmlState.tagName;c&&(c=c.toLowerCase());var g=d.token(a,b.htmlState);if("script"==c&&/\btag\b/.test(g)&&">"==a.current()){var h=a.string.slice(Math.max(0,a.pos-100),a.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i);h=h?h[1]:"",h&&/[\"\']/.test(h.charAt(0))&&(h=h.slice(1,h.length-1));for(var i=0;i<f.length;++i){var j=f[i];if("string"==typeof j.matches?h==j.matches:j.matches.test(h)){j.mode&&(b.token=l,b.localMode=j.mode,b.localState=j.mode.startState&&j.mode.startState(d.indent(b.htmlState,"")));break}}}else"style"==c&&/\btag\b/.test(g)&&">"==a.current()&&(b.token=m,b.localMode=e,b.localState=e.startState(d.indent(b.htmlState,"")));return g}function k(a,b,c){var f,d=a.current(),e=d.search(b);return e>-1?a.backUp(d.length-e):(f=d.match(/<\/?$/))&&(a.backUp(d.length),a.match(b,!1)||a.match(d)),c}function l(a,b){return a.match(/^<\/\s*script\s*>/i,!1)?(b.token=j,b.localState=b.localMode=null,j(a,b)):k(a,/<\/\s*script\s*>/,b.localMode.token(a,b.localState))}function m(a,b){return a.match(/^<\/\s*style\s*>/i,!1)?(b.token=j,b.localState=b.localMode=null,j(a,b)):k(a,/<\/\s*style\s*>/,e.token(a,b.localState))}var d=a.getMode(b,{name:"xml",htmlMode:!0,multilineTagIndentFactor:c.multilineTagIndentFactor,multilineTagIndentPastTag:c.multilineTagIndentPastTag}),e=a.getMode(b,"css"),f=[],g=c&&c.scriptTypes;if(f.push({matches:/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i,mode:a.getMode(b,"javascript")}),g)for(var h=0;h<g.length;++h){var i=g[h];f.push({matches:i.matches,mode:i.mode&&a.getMode(b,i.mode)})}return f.push({matches:/./,mode:a.getMode(b,"text/plain")}),{startState:function(){var a=d.startState();return{token:j,localMode:null,localState:null,htmlState:a}},copyState:function(b){if(b.localState)var c=a.copyState(b.localMode,b.localState);return{token:b.token,localMode:b.localMode,localState:c,htmlState:a.copyState(d,b.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(b,c){return!b.localMode||/^\s*<\//.test(c)?d.indent(b.htmlState,c):b.localMode.indent?b.localMode.indent(b.localState,c):a.Pass},innerMode:function(a){return{state:a.localState||a.htmlState,mode:a.localMode||d}}}},"xml","javascript","css"),a.defineMIME("text/html","htmlmixed")}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";a.defineMode("javascript",function(b,c){function m(a){for(var c,b=!1,d=!1;null!=(c=a.next());){if(!b){if("/"==c&&!d)return;"["==c?d=!0:d&&"]"==c&&(d=!1)}b=!b&&"\\"==c}}function p(a,b,c){return n=a,o=c,b}function q(a,b){var c=a.next();if('"'==c||"'"==c)return b.tokenize=r(c),b.tokenize(a,b);if("."==c&&a.match(/^\d+(?:[eE][+\-]?\d+)?/))return p("number","number");if("."==c&&a.match(".."))return p("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(c))return p(c);if("="==c&&a.eat(">"))return p("=>","operator");if("0"==c&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),p("number","number");if(/\d/.test(c))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),p("number","number");if("/"==c)return a.eat("*")?(b.tokenize=s,s(a,b)):a.eat("/")?(a.skipToEnd(),p("comment","comment")):"operator"==b.lastType||"keyword c"==b.lastType||"sof"==b.lastType||/^[\[{}\(,;:]$/.test(b.lastType)?(m(a),a.eatWhile(/[gimy]/),p("regexp","string-2")):(a.eatWhile(k),p("operator","operator",a.current()));if("`"==c)return b.tokenize=t,t(a,b);if("#"==c)return a.skipToEnd(),p("error","error");if(k.test(c))return a.eatWhile(k),p("operator","operator",a.current());if(i.test(c)){a.eatWhile(i);var d=a.current(),e=j.propertyIsEnumerable(d)&&j[d];return e&&"."!=b.lastType?p(e.type,e.style,d):p("variable","variable",d)}}function r(a){return function(b,c){var e,d=!1;if(f&&"@"==b.peek()&&b.match(l))return c.tokenize=q,p("jsonld-keyword","meta");for(;null!=(e=b.next())&&(e!=a||d);)d=!d&&"\\"==e;return d||(c.tokenize=q),p("string","string")}}function s(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=q;break}c="*"==d}return p("comment","comment")}function t(a,b){for(var d,c=!1;null!=(d=a.next());){if(!c&&("`"==d||"$"==d&&a.eat("{"))){b.tokenize=q;break}c=!c&&"\\"==d}return p("quasi","string-2",a.current())}function v(a,b){b.fatArrowAt&&(b.fatArrowAt=null);var c=a.string.indexOf("=>",a.start);if(!(0>c)){for(var d=0,e=!1,f=c-1;f>=0;--f){var g=a.string.charAt(f),h=u.indexOf(g);if(h>=0&&3>h){if(!d){++f;break}if(0==--d)break}else if(h>=3&&6>h)++d;else if(i.test(g))e=!0;else if(e&&!d){++f;break}}e&&!d&&(b.fatArrowAt=f)}}function x(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function y(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0;for(var d=a.context;d;d=d.prev)for(var c=d.vars;c;c=c.next)if(c.name==b)return!0}function z(a,b,c,d,e){var f=a.cc;for(A.state=a,A.stream=e,A.marked=null,A.cc=f,A.style=b,a.lexical.hasOwnProperty("align")||(a.lexical.align=!0);;){var h=f.length?f.pop():g?L:K;if(h(c,d)){for(;f.length&&f[f.length-1].lex;)f.pop()();return A.marked?A.marked:"variable"==c&&y(a,d)?"variable-2":b}}}function B(){for(var a=arguments.length-1;a>=0;a--)A.cc.push(arguments[a])}function C(){return B.apply(null,arguments),!0}function D(a){function b(b){for(var c=b;c;c=c.next)if(c.name==a)return!0;return!1}var d=A.state;if(d.context){if(A.marked="def",b(d.localVars))return;d.localVars={name:a,next:d.localVars}}else{if(b(d.globalVars))return;c.globalVars&&(d.globalVars={name:a,next:d.globalVars})}}function F(){A.state.context={prev:A.state.context,vars:A.state.localVars},A.state.localVars=E}function G(){A.state.localVars=A.state.context.vars,A.state.context=A.state.context.prev}function H(a,b){var c=function(){var c=A.state,d=c.indented;if("stat"==c.lexical.type)d=c.lexical.indented;else for(var e=c.lexical;e&&")"==e.type&&e.align;e=e.prev)d=e.indented;c.lexical=new x(d,A.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function I(){var a=A.state;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function J(a){function b(c){return c==a?C():";"==a?B():C(b)}return b}function K(a,b){return"var"==a?C(H("vardef",b.length),eb,J(";"),I):"keyword a"==a?C(H("form"),L,K,I):"keyword b"==a?C(H("form"),K,I):"{"==a?C(H("}"),bb,I):";"==a?C():"if"==a?("else"==A.state.lexical.info&&A.state.cc[A.state.cc.length-1]==I&&A.state.cc.pop()(),C(H("form"),L,K,I,jb)):"function"==a?C(pb):"for"==a?C(H("form"),kb,K,I):"variable"==a?C(H("stat"),W):"switch"==a?C(H("form"),L,H("}","switch"),J("{"),bb,I,I):"case"==a?C(L,J(":")):"default"==a?C(J(":")):"catch"==a?C(H("form"),F,J("("),qb,J(")"),K,I,G):"module"==a?C(H("form"),F,vb,G,I):"class"==a?C(H("form"),rb,I):"export"==a?C(H("form"),wb,I):"import"==a?C(H("form"),xb,I):B(H("stat"),L,J(";"),I)}function L(a){return N(a,!1)}function M(a){return N(a,!0)}function N(a,b){if(A.state.fatArrowAt==A.stream.start){var c=b?V:U;if("("==a)return C(F,H(")"),_(fb,")"),I,J("=>"),c,G);if("variable"==a)return B(F,fb,J("=>"),c,G)}var d=b?R:Q;return w.hasOwnProperty(a)?C(d):"function"==a?C(pb,d):"keyword c"==a?C(b?P:O):"("==a?C(H(")"),O,Cb,J(")"),I,d):"operator"==a||"spread"==a?C(b?M:L):"["==a?C(H("]"),Ab,I,d):"{"==a?ab(Y,"}",null,d):"quasi"==a?B(S,d):C()}function O(a){return a.match(/[;\}\)\],]/)?B():B(L)}function P(a){return a.match(/[;\}\)\],]/)?B():B(M)}function Q(a,b){return","==a?C(L):R(a,b,!1)}function R(a,b,c){var d=0==c?Q:R,e=0==c?L:M;return"=>"==a?C(F,c?V:U,G):"operator"==a?/\+\+|--/.test(b)?C(d):"?"==b?C(L,J(":"),e):C(e):"quasi"==a?B(S,d):";"!=a?"("==a?ab(M,")","call",d):"."==a?C(X,d):"["==a?C(H("]"),O,J("]"),I,d):void 0:void 0}function S(a,b){return"quasi"!=a?B():"${"!=b.slice(b.length-2)?C(S):C(L,T)}function T(a){return"}"==a?(A.marked="string-2",A.state.tokenize=t,C(S)):void 0}function U(a){return v(A.stream,A.state),B("{"==a?K:L)}function V(a){return v(A.stream,A.state),B("{"==a?K:M)}function W(a){return":"==a?C(I,K):B(Q,J(";"),I)}function X(a){return"variable"==a?(A.marked="property",C()):void 0}function Y(a,b){return"variable"==a||"keyword"==A.style?(A.marked="property","get"==b||"set"==b?C(Z):C($)):"number"==a||"string"==a?(A.marked=f?"property":A.style+" property",C($)):"jsonld-keyword"==a?C($):"["==a?C(L,J("]"),$):void 0}function Z(a){return"variable"!=a?B($):(A.marked="property",C(pb))}function $(a){return":"==a?C(M):"("==a?B(pb):void 0}function _(a,b){function c(d){if(","==d){var e=A.state.lexical;return"call"==e.info&&(e.pos=(e.pos||0)+1),C(a,c)}return d==b?C():C(J(b))}return function(d){return d==b?C():B(a,c)}}function ab(a,b,c){for(var d=3;d<arguments.length;d++)A.cc.push(arguments[d]);return C(H(b,c),_(a,b),I)}function bb(a){return"}"==a?C():B(K,bb)}function cb(a){return h&&":"==a?C(db):void 0}function db(a){return"variable"==a?(A.marked="variable-3",C()):void 0}function eb(){return B(fb,cb,hb,ib)}function fb(a,b){return"variable"==a?(D(b),C()):"["==a?ab(fb,"]"):"{"==a?ab(gb,"}"):void 0}function gb(a,b){return"variable"!=a||A.stream.match(/^\s*:/,!1)?("variable"==a&&(A.marked="property"),C(J(":"),fb,hb)):(D(b),C(hb))}function hb(a,b){return"="==b?C(M):void 0}function ib(a){return","==a?C(eb):void 0}function jb(a,b){return"keyword b"==a&&"else"==b?C(H("form","else"),K,I):void 0}function kb(a){return"("==a?C(H(")"),lb,J(")"),I):void 0}function lb(a){return"var"==a?C(eb,J(";"),nb):";"==a?C(nb):"variable"==a?C(mb):B(L,J(";"),nb)}function mb(a,b){return"in"==b||"of"==b?(A.marked="keyword",C(L)):C(Q,nb)}function nb(a,b){return";"==a?C(ob):"in"==b||"of"==b?(A.marked="keyword",C(L)):B(L,J(";"),ob)}function ob(a){")"!=a&&C(L)}function pb(a,b){return"*"==b?(A.marked="keyword",C(pb)):"variable"==a?(D(b),C(pb)):"("==a?C(F,H(")"),_(qb,")"),I,K,G):void 0}function qb(a){return"spread"==a?C(qb):B(fb,cb)}function rb(a,b){return"variable"==a?(D(b),C(sb)):void 0}function sb(a,b){return"extends"==b?C(L,sb):"{"==a?C(H("}"),tb,I):void 0}function tb(a,b){return"variable"==a||"keyword"==A.style?(A.marked="property","get"==b||"set"==b?C(ub,pb,tb):C(pb,tb)):"*"==b?(A.marked="keyword",C(tb)):";"==a?C(tb):"}"==a?C():void 0}function ub(a){return"variable"!=a?B():(A.marked="property",C())}function vb(a,b){return"string"==a?C(K):"variable"==a?(D(b),C(zb)):void 0}function wb(a,b){return"*"==b?(A.marked="keyword",C(zb,J(";"))):"default"==b?(A.marked="keyword",C(L,J(";"))):B(K)}function xb(a){return"string"==a?C():B(yb,zb)}function yb(a,b){return"{"==a?ab(yb,"}"):("variable"==a&&D(b),C())}function zb(a,b){return"from"==b?(A.marked="keyword",C(L)):void 0}function Ab(a){return"]"==a?C():B(M,Bb)}function Bb(a){return"for"==a?B(Cb,J("]")):","==a?C(_(M,"]")):B(_(M,"]"))}function Cb(a){return"for"==a?C(kb,Cb):"if"==a?C(L,Cb):void 0}var n,o,d=b.indentUnit,e=c.statementIndent,f=c.jsonld,g=c.json||f,h=c.typescript,i=c.wordCharacters||/[\w$]/,j=function(){function a(a){return{type:a,style:"keyword"}}var b=a("keyword a"),c=a("keyword b"),d=a("keyword c"),e=a("operator"),f={type:"atom",style:"atom"},g={"if":a("if"),"while":b,"with":b,"else":c,"do":c,"try":c,"finally":c,"return":d,"break":d,"continue":d,"new":d,"delete":d,"throw":d,"debugger":d,"var":a("var"),"const":a("var"),let:a("var"),"function":a("function"),"catch":a("catch"),"for":a("for"),"switch":a("switch"),"case":a("case"),"default":a("default"),"in":e,"typeof":e,"instanceof":e,"true":f,"false":f,"null":f,undefined:f,NaN:f,Infinity:f,"this":a("this"),module:a("module"),"class":a("class"),"super":a("atom"),yield:d,"export":a("export"),"import":a("import"),"extends":d};if(h){var i={type:"variable",style:"variable-3"},j={"interface":a("interface"),"extends":a("extends"),constructor:a("constructor"),"public":a("public"),"private":a("private"),"protected":a("protected"),"static":a("static"),string:i,number:i,bool:i,any:i};for(var k in j)g[k]=j[k]}return g}(),k=/[+\-*&%=<>!?|~^]/,l=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,u="([{}])",w={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0,"jsonld-keyword":!0},A={state:null,column:null,marked:null,cc:null},E={name:"this",next:{name:"arguments"}};return I.lex=!0,{startState:function(a){var b={tokenize:q,lastType:"sof",cc:[],lexical:new x((a||0)-d,0,"block",!1),localVars:c.localVars,context:c.localVars&&{vars:c.localVars},indented:0};return c.globalVars&&"object"==typeof c.globalVars&&(b.globalVars=c.globalVars),b},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation(),v(a,b)),b.tokenize!=s&&a.eatSpace())return null;var c=b.tokenize(a,b);return"comment"==n?c:(b.lastType="operator"!=n||"++"!=o&&"--"!=o?n:"incdec",z(b,c,n,o,a))},indent:function(b,f){if(b.tokenize==s)return a.Pass;if(b.tokenize!=q)return 0;var g=f&&f.charAt(0),h=b.lexical;if(!/^\s*else\b/.test(f))for(var i=b.cc.length-1;i>=0;--i){var j=b.cc[i];if(j==I)h=h.prev;else if(j!=jb)break}"stat"==h.type&&"}"==g&&(h=h.prev),e&&")"==h.type&&"stat"==h.prev.type&&(h=h.prev);var k=h.type,l=g==k;return"vardef"==k?h.indented+("operator"==b.lastType||","==b.lastType?h.info+1:0):"form"==k&&"{"==g?h.indented:"form"==k?h.indented+d:"stat"==k?h.indented+("operator"==b.lastType||","==b.lastType?e||d:0):"switch"!=h.info||l||0==c.doubleIndentSwitch?h.align?h.column+(l?0:1):h.indented+(l?0:d):h.indented+(/^(?:case|default)\b/.test(f)?d:2*d)},electricChars:":{}",blockCommentStart:g?null:"/*",blockCommentEnd:g?null:"*/",lineComment:g?null:"//",fold:"brace",helperType:g?"json":"javascript",jsonldMode:f,jsonMode:g}}),a.registerHelper("wordChars","javascript",/[\w$]/),a.defineMIME("text/javascript","javascript"),a.defineMIME("text/ecmascript","javascript"),a.defineMIME("application/javascript","javascript"),a.defineMIME("application/x-javascript","javascript"),a.defineMIME("application/ecmascript","javascript"),a.defineMIME("application/json",{name:"javascript",json:!0}),a.defineMIME("application/x-json",{name:"javascript",json:!0}),a.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),a.defineMIME("text/typescript",{name:"javascript",typescript:!0}),a.defineMIME("application/typescript",{name:"javascript",typescript:!0})}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror",require("../xml/xml"))):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../xml/xml"],a):a(CodeMirror)}(function(a){"use strict";a.defineMode("markdown",function(b,c){function E(a,b,c){return b.f=b.inline=c,c(a,b)}function F(a,b,c){return b.f=b.block=c,c(a,b)}function G(a){return a.linkTitle=!1,a.em=!1,a.strong=!1,a.quote=0,d||a.f!=I||(a.f=M,a.block=H),a.trailingSpace=0,a.trailingSpaceNewLine=!1,a.thisLineHasContent=!1,null}function H(a,b){var d=a.sol(),e=b.list!==!1;b.list!==!1&&b.indentationDiff>=0?(b.indentationDiff<4&&(b.indentation-=b.indentationDiff),b.list=null):b.list!==!1&&b.indentation>0?(b.list=null,b.listDepth=Math.floor(b.indentation/4)):b.list!==!1&&(b.list=!1,b.listDepth=0);var f=null;if(b.indentationDiff>=4)return b.indentation-=4,a.skipToEnd(),j;if(a.eatSpace())return null;if(f=a.match(B))return b.header=f[0].length<=6?f[0].length:6,c.highlightFormatting&&(b.formatting="header"),b.f=b.inline,K(b);if(b.prevLineHasContent&&(f=a.match(C)))return b.header="="==f[0].charAt(0)?1:2,c.highlightFormatting&&(b.formatting="header"),b.f=b.inline,K(b);if(a.eat(">"))return b.indentation++,b.quote=d?1:b.quote+1,c.highlightFormatting&&(b.formatting="quote"),a.eatSpace(),K(b);if("["===a.peek())return E(a,b,Q);if(a.match(x,!0))return o;if((!b.prevLineHasContent||e)&&(a.match(y,!1)||a.match(z,!1))){var h=null;return a.match(y,!0)?h="ul":(a.match(z,!0),h="ol"),b.indentation+=4,b.list=!0,b.listDepth++,c.taskLists&&a.match(A,!1)&&(b.taskList=!0),b.f=b.inline,c.highlightFormatting&&(b.formatting=["list","list-"+h]),K(b)}return c.fencedCodeBlocks&&a.match(/^```([\w+#]*)/,!0)?(b.localMode=g(RegExp.$1),b.localMode&&(b.localState=b.localMode.startState()),F(a,b,J),c.highlightFormatting&&(b.formatting="code-block"),b.code=!0,K(b)):E(a,b,b.inline)}function I(a,b){var c=e.token(a,b.htmlState);return(d&&null===b.htmlState.tagStart&&!b.htmlState.context||b.md_inside&&a.current().indexOf(">")>-1)&&(b.f=M,b.block=H,b.htmlState=null),c}function J(a,b){if(a.sol()&&a.match(/^```/,!0)){b.localMode=b.localState=null,b.f=M,b.block=H,c.highlightFormatting&&(b.formatting="code-block"),b.code=!0;var d=K(b);return b.code=!1,d}return b.localMode?b.localMode.token(a,b.localState):(a.skipToEnd(),j)}function K(a){var b=[];if(a.formatting){b.push(q),"string"==typeof a.formatting&&(a.formatting=[a.formatting]);for(var d=0;d<a.formatting.length;d++)b.push(q+"-"+a.formatting[d]),"header"===a.formatting[d]&&b.push(q+"-"+a.formatting[d]+"-"+a.header),"quote"===a.formatting[d]&&(!c.maxBlockquoteDepth||c.maxBlockquoteDepth>=a.quote?b.push(q+"-"+a.formatting[d]+"-"+a.quote):b.push("error"))}if(a.taskOpen)return b.push("meta"),b.length?b.join(" "):null;if(a.taskClosed)return b.push("property"),b.length?b.join(" "):null;if(a.linkHref)return b.push(u),b.length?b.join(" "):null;if(a.strong&&b.push(w),a.em&&b.push(v),a.linkText&&b.push(t),a.code&&b.push(j),a.header&&(b.push(i),b.push(i+"-"+a.header)),a.quote&&(b.push(k),!c.maxBlockquoteDepth||c.maxBlockquoteDepth>=a.quote?b.push(k+"-"+a.quote):b.push(k+"-"+c.maxBlockquoteDepth)),a.list!==!1){var e=(a.listDepth-1)%3;e?1===e?b.push(m):b.push(n):b.push(l)}return a.trailingSpaceNewLine?b.push("trailing-space-new-line"):a.trailingSpace&&b.push("trailing-space-"+(a.trailingSpace%2?"a":"b")),b.length?b.join(" "):null}function L(a,b){return a.match(D,!0)?K(b):void 0}function M(b,d){var f=d.text(b,d);if("undefined"!=typeof f)return f;if(d.list)return d.list=null,K(d);if(d.taskList){var g="x"!==b.match(A,!0)[1];return g?d.taskOpen=!0:d.taskClosed=!0,c.highlightFormatting&&(d.formatting="task"),d.taskList=!1,K(d)}if(d.taskOpen=!1,d.taskClosed=!1,d.header&&b.match(/^#+$/,!0))return c.highlightFormatting&&(d.formatting="header"),K(d);var i=b.sol(),j=b.next();if("\\"===j&&(b.next(),c.highlightFormatting)){var k=K(d);return k?k+" formatting-escape":"formatting-escape"}if(d.linkTitle){d.linkTitle=!1;var l=j;"("===j&&(l=")"),l=(l+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");var m="^\\s*(?:[^"+l+"\\\\]+|\\\\\\\\|\\\\.)"+l;if(b.match(new RegExp(m),!0))return u}if("`"===j){var n=d.formatting;c.highlightFormatting&&(d.formatting="code");var o=K(d),q=b.pos;b.eatWhile("`");var t=1+b.pos-q;return d.code?t===h?(d.code=!1,o):(d.formatting=n,K(d)):(h=t,d.code=!0,K(d))}if(d.code)return K(d);if("!"===j&&b.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return b.match(/\[[^\]]*\]/),d.inline=d.f=O,p;if("["===j&&b.match(/.*\](\(| ?\[)/,!1))return d.linkText=!0,c.highlightFormatting&&(d.formatting="link"),K(d);if("]"===j&&d.linkText){c.highlightFormatting&&(d.formatting="link");var k=K(d);return d.linkText=!1,d.inline=d.f=O,k}if("<"===j&&b.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1)){d.f=d.inline=N,c.highlightFormatting&&(d.formatting="link");var k=K(d);return k?k+=" ":k="",k+r}if("<"===j&&b.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1)){d.f=d.inline=N,c.highlightFormatting&&(d.formatting="link");var k=K(d);return k?k+=" ":k="",k+s}if("<"===j&&b.match(/^\w/,!1)){if(-1!=b.string.indexOf(">")){var v=b.string.substring(1,b.string.indexOf(">"));/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(v)&&(d.md_inside=!0)}return b.backUp(1),d.htmlState=a.startState(e),F(b,d,I)}if("<"===j&&b.match(/^\/\w*?>/))return d.md_inside=!1,"tag";var w=!1;if(!c.underscoresBreakWords&&"_"===j&&"_"!==b.peek()&&b.match(/(\w)/,!1)){var x=b.pos-2;if(x>=0){var y=b.string.charAt(x);"_"!==y&&y.match(/(\w)/,!1)&&(w=!0)}}if("*"===j||"_"===j&&!w)if(i&&" "===b.peek());else{if(d.strong===j&&b.eat(j)){c.highlightFormatting&&(d.formatting="strong");var o=K(d);return d.strong=!1,o}if(!d.strong&&b.eat(j))return d.strong=j,c.highlightFormatting&&(d.formatting="strong"),K(d);if(d.em===j){c.highlightFormatting&&(d.formatting="em");var o=K(d);return d.em=!1,o}if(!d.em)return d.em=j,c.highlightFormatting&&(d.formatting="em"),K(d)}else if(" "===j&&(b.eat("*")||b.eat("_"))){if(" "===b.peek())return K(d);b.backUp(1)}return" "===j&&(b.match(/ +$/,!1)?d.trailingSpace++:d.trailingSpace&&(d.trailingSpaceNewLine=!0)),K(d)}function N(a,b){var d=a.next();if(">"===d){b.f=b.inline=M,c.highlightFormatting&&(b.formatting="link");var e=K(b);return e?e+=" ":e="",e+r}return a.match(/^[^>]+/,!0),r}function O(a,b){if(a.eatSpace())return null;var d=a.next();return"("===d||"["===d?(b.f=b.inline=P("("===d?")":"]"),c.highlightFormatting&&(b.formatting="link-string"),b.linkHref=!0,K(b)):"error"}function P(a){return function(b,d){var e=b.next();if(e===a){d.f=d.inline=M,c.highlightFormatting&&(d.formatting="link-string");var f=K(d);return d.linkHref=!1,f}return b.match(U(a),!0)&&b.backUp(1),d.linkHref=!0,K(d)}}function Q(a,b){return a.match(/^[^\]]*\]:/,!1)?(b.f=R,a.next(),c.highlightFormatting&&(b.formatting="link"),b.linkText=!0,K(b)):E(a,b,M)}function R(a,b){if(a.match(/^\]:/,!0)){b.f=b.inline=S,c.highlightFormatting&&(b.formatting="link");var d=K(b);return b.linkText=!1,d}return a.match(/^[^\]]+/,!0),t}function S(a,b){return a.eatSpace()?null:(a.match(/^[^\s]+/,!0),void 0===a.peek()?b.linkTitle=!0:a.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),b.f=b.inline=M,u)}function U(a){return T[a]||(a=(a+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1"),T[a]=new RegExp("^(?:[^\\\\]|\\\\.)*?("+a+")")),T[a]}var d=a.modes.hasOwnProperty("xml"),e=a.getMode(b,d?{name:"xml",htmlMode:!0}:"text/plain"),f={html:"htmlmixed",js:"javascript",json:"application/json",c:"text/x-csrc","c++":"text/x-c++src",java:"text/x-java",csharp:"text/x-csharp","c#":"text/x-csharp",scala:"text/x-scala"},g=function(){var c,g,d={},e={},h=[];for(var i in a.modes)a.modes.propertyIsEnumerable(i)&&h.push(i);for(c=0;c<h.length;c++)d[h[c]]=h[c];var j=[];for(var i in a.mimeModes)a.mimeModes.propertyIsEnumerable(i)&&j.push({mime:i,mode:a.mimeModes[i]});for(c=0;c<j.length;c++)g=j[c].mime,e[g]=j[c].mime;for(var k in f)(f[k]in d||f[k]in e)&&(d[k]=f[k]);return function(c){return d[c]?a.getMode(b,d[c]):null}}();void 0===c.highlightFormatting&&(c.highlightFormatting=!1),void 0===c.maxBlockquoteDepth&&(c.maxBlockquoteDepth=0),void 0===c.underscoresBreakWords&&(c.underscoresBreakWords=!0),void 0===c.fencedCodeBlocks&&(c.fencedCodeBlocks=!1),void 0===c.taskLists&&(c.taskLists=!1);var h=0,i="header",j="comment",k="quote",l="variable-2",m="variable-3",n="keyword",o="hr",p="tag",q="formatting",r="link",s="link",t="link",u="string",v="em",w="strong",x=/^([*\-=_])(?:\s*\1){2,}\s*$/,y=/^[*\-+]\s+/,z=/^[0-9]+\.\s+/,A=/^\[(x| )\](?=\s)/,B=/^#+/,C=/^(?:\={1,}|-{1,})$/,D=/^[^#!\[\]*_\\<>` "'(]+/,T=[],V={startState:function(){return{f:H,prevLineHasContent:!1,thisLineHasContent:!1,block:H,htmlState:null,indentation:0,inline:M,text:L,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,em:!1,strong:!1,header:0,taskList:!1,list:!1,listDepth:0,quote:0,trailingSpace:0,trailingSpaceNewLine:!1}},copyState:function(b){return{f:b.f,prevLineHasContent:b.prevLineHasContent,thisLineHasContent:b.thisLineHasContent,block:b.block,htmlState:b.htmlState&&a.copyState(e,b.htmlState),indentation:b.indentation,localMode:b.localMode,localState:b.localMode?a.copyState(b.localMode,b.localState):null,inline:b.inline,text:b.text,formatting:!1,linkTitle:b.linkTitle,em:b.em,strong:b.strong,header:b.header,taskList:b.taskList,list:b.list,listDepth:b.listDepth,quote:b.quote,trailingSpace:b.trailingSpace,trailingSpaceNewLine:b.trailingSpaceNewLine,md_inside:b.md_inside}},token:function(a,b){if(b.formatting=!1,a.sol()){var c=a.match(/^\s*$/,!0)||b.header;if(b.header=0,c)return b.prevLineHasContent=!1,G(b);b.prevLineHasContent=b.thisLineHasContent,b.thisLineHasContent=!0,b.taskList=!1,b.code=!1,b.trailingSpace=0,b.trailingSpaceNewLine=!1,b.f=b.block;var d=a.match(/^\s*/,!0)[0].replace(/\t/g," ").length,e=4*Math.floor((d-b.indentation)/4);e>4&&(e=4);var f=b.indentation+e;if(b.indentationDiff=f-b.indentation,b.indentation=f,d>0)return null}var g=b.f(a,b);return a.start==a.pos?this.token(a,b):g},innerMode:function(a){return a.block==I?{state:a.htmlState,mode:e}:a.localState?{state:a.localState,mode:a.localMode}:{state:a,mode:V}},blankLine:G,getType:K,fold:"markdown"};return V},"xml"),a.defineMIME("text/x-markdown","markdown")}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";a.defineMode("xml",function(b,c){function k(a,b){function c(c){return b.tokenize=c,c(a,b)}var d=a.next();if("<"==d)return a.eat("!")?a.eat("[")?a.match("CDATA[")?c(n("atom","]]>")):null:a.match("--")?c(n("comment","-->")):a.match("DOCTYPE",!0,!0)?(a.eatWhile(/[\w\._\-]/),c(o(1))):null:a.eat("?")?(a.eatWhile(/[\w\._\-]/),b.tokenize=n("meta","?>"),"meta"):(i=a.eat("/")?"closeTag":"openTag",b.tokenize=l,"tag bracket");if("&"==d){var e;return e=a.eat("#")?a.eat("x")?a.eatWhile(/[a-fA-F\d]/)&&a.eat(";"):a.eatWhile(/[\d]/)&&a.eat(";"):a.eatWhile(/[\w\.\-:]/)&&a.eat(";"),e?"atom":"error"}return a.eatWhile(/[^&<]/),null}function l(a,b){var c=a.next();if(">"==c||"/"==c&&a.eat(">"))return b.tokenize=k,i=">"==c?"endTag":"selfcloseTag","tag bracket";if("="==c)return i="equals",null;if("<"==c){b.tokenize=k,b.state=s,b.tagName=b.tagStart=null;var d=b.tokenize(a,b);return d?d+" tag error":"tag error"}return/[\'\"]/.test(c)?(b.tokenize=m(c),b.stringStartCol=a.column(),b.tokenize(a,b)):(a.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function m(a){var b=function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=l;break}return"string"};return b.isInAttribute=!0,b}function n(a,b){return function(c,d){for(;!c.eol();){if(c.match(b)){d.tokenize=k;break}c.next()}return a}}function o(a){return function(b,c){for(var d;null!=(d=b.next());){if("<"==d)return c.tokenize=o(a+1),c.tokenize(b,c);if(">"==d){if(1==a){c.tokenize=k;break}return c.tokenize=o(a-1),c.tokenize(b,c)}}return"meta"}}function p(a,b,c){this.prev=a.context,this.tagName=b,this.indent=a.indented,this.startOfLine=c,(g.doNotIndent.hasOwnProperty(b)||a.context&&a.context.noIndent)&&(this.noIndent=!0)}function q(a){a.context&&(a.context=a.context.prev)}function r(a,b){for(var c;;){if(!a.context)return;if(c=a.context.tagName,!g.contextGrabbers.hasOwnProperty(c)||!g.contextGrabbers[c].hasOwnProperty(b))return;q(a)}}function s(a,b,c){return"openTag"==a?(c.tagStart=b.column(),t):"closeTag"==a?u:s}function t(a,b,c){return"word"==a?(c.tagName=b.current(),j="tag",x):(j="error",t)}function u(a,b,c){if("word"==a){var d=b.current();return c.context&&c.context.tagName!=d&&g.implicitlyClosed.hasOwnProperty(c.context.tagName)&&q(c),c.context&&c.context.tagName==d?(j="tag",v):(j="tag error",w)}return j="error",w}function v(a,b,c){return"endTag"!=a?(j="error",v):(q(c),s)}function w(a,b,c){return j="error",v(a,b,c)}function x(a,b,c){if("word"==a)return j="attribute",y;if("endTag"==a||"selfcloseTag"==a){var d=c.tagName,e=c.tagStart;return c.tagName=c.tagStart=null,"selfcloseTag"==a||g.autoSelfClosers.hasOwnProperty(d)?r(c,d):(r(c,d),c.context=new p(c,d,e==c.indented)),s}return j="error",x}function y(a,b,c){return"equals"==a?z:(g.allowMissing||(j="error"),x(a,b,c))}function z(a,b,c){return"string"==a?A:"word"==a&&g.allowUnquoted?(j="string",x):(j="error",x(a,b,c))}function A(a,b,c){return"string"==a?A:x(a,b,c)}var d=b.indentUnit,e=c.multilineTagIndentFactor||1,f=c.multilineTagIndentPastTag;null==f&&(f=!0);var i,j,g=c.htmlMode?{autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0}:{autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,caseFold:!1},h=c.alignCDATA; +return{startState:function(){return{tokenize:k,state:s,indented:0,tagName:null,tagStart:null,context:null}},token:function(a,b){if(!b.tagName&&a.sol()&&(b.indented=a.indentation()),a.eatSpace())return null;i=null;var c=b.tokenize(a,b);return(c||i)&&"comment"!=c&&(j=null,b.state=b.state(i||c,a,b),j&&(c="error"==j?c+" error":j)),c},indent:function(b,c,i){var j=b.context;if(b.tokenize.isInAttribute)return b.tagStart==b.indented?b.stringStartCol+1:b.indented+d;if(j&&j.noIndent)return a.Pass;if(b.tokenize!=l&&b.tokenize!=k)return i?i.match(/^(\s*)/)[0].length:0;if(b.tagName)return f?b.tagStart+b.tagName.length+2:b.tagStart+d*e;if(h&&/<!\[CDATA\[/.test(c))return 0;var m=c&&/^<(\/)?([\w_:\.-]*)/.exec(c);if(m&&m[1])for(;j;){if(j.tagName==m[2]){j=j.prev;break}if(!g.implicitlyClosed.hasOwnProperty(j.tagName))break;j=j.prev}else if(m)for(;j;){var n=g.contextGrabbers[j.tagName];if(!n||!n.hasOwnProperty(m[2]))break;j=j.prev}for(;j&&!j.startOfLine;)j=j.prev;return j?j.indent+d:0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"<!--",blockCommentEnd:"-->",configuration:c.htmlMode?"html":"xml",helperType:c.htmlMode?"html":"xml"}}),a.defineMIME("text/xml","xml"),a.defineMIME("application/xml","xml"),a.mimeModes.hasOwnProperty("text/html")||a.defineMIME("text/html",{name:"xml",htmlMode:!0})}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";a.overlayMode=function(b,c,d){return{startState:function(){return{base:a.startState(b),overlay:a.startState(c),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,lineSeen:null}},copyState:function(d){return{base:a.copyState(b,d.base),overlay:a.copyState(c,d.overlay),basePos:d.basePos,baseCur:null,overlayPos:d.overlayPos,overlayCur:null}},token:function(a,e){return(a.sol()||a.string!=e.lineSeen||Math.min(e.basePos,e.overlayPos)<a.start)&&(e.lineSeen=a.string,e.basePos=e.overlayPos=a.start),a.start==e.basePos&&(e.baseCur=b.token(a,e.base),e.basePos=a.pos),a.start==e.overlayPos&&(a.pos=a.start,e.overlayCur=c.token(a,e.overlay),e.overlayPos=a.pos),a.pos=Math.min(e.basePos,e.overlayPos),null==e.overlayCur?e.baseCur:null!=e.baseCur&&e.overlay.combineTokens||d&&null==e.overlay.combineTokens?e.baseCur+" "+e.overlayCur:e.overlayCur},indent:b.indent&&function(a,c){return b.indent(a.base,c)},electricChars:b.electricChars,innerMode:function(a){return{state:a.base,mode:b}},blankLine:function(a){b.blankLine&&b.blankLine(a.base),c.blankLine&&c.blankLine(a.overlay)}}}}); \ No newline at end of file diff --git a/plugins/ckeditor4/markdown/js/marked.js b/plugins/ckeditor4/markdown/js/marked.js new file mode 100755 index 0000000..142eccf --- /dev/null +++ b/plugins/ckeditor4/markdown/js/marked.js @@ -0,0 +1,1272 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) + * https://github.com/chjj/marked + */ + +;(function() { + +/** + * Block-Level Grammar + */ + +var block = { + newline: /^\n+/, + code: /^( {4}[^\n]+\n*)+/, + fences: noop, + hr: /^( *[-*_]){3,} *(?:\n+|$)/, + heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, + nptable: noop, + lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, + blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/, + list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, + html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/, + def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, + table: noop, + paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, + text: /^[^\n]+/ +}; + +block.bullet = /(?:[*+-]|\d+\.)/; +block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; +block.item = replace(block.item, 'gm') + (/bull/g, block.bullet) + (); + +block.list = replace(block.list) + (/bull/g, block.bullet) + ('hr', '\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))') + ('def', '\\n+(?=' + block.def.source + ')') + (); + +block.blockquote = replace(block.blockquote) + ('def', block.def) + (); + +block._tag = '(?!(?:' + + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' + + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' + + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b'; + +block.html = replace(block.html) + ('comment', /<!--[\s\S]*?-->/) + ('closed', /<(tag)[\s\S]+?<\/\1>/) + ('closing', /<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/) + (/tag/g, block._tag) + (); + +block.paragraph = replace(block.paragraph) + ('hr', block.hr) + ('heading', block.heading) + ('lheading', block.lheading) + ('blockquote', block.blockquote) + ('tag', '<' + block._tag) + ('def', block.def) + (); + +/** + * Normal Block Grammar + */ + +block.normal = merge({}, block); + +/** + * GFM Block Grammar + */ + +block.gfm = merge({}, block.normal, { + fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/, + paragraph: /^/ +}); + +block.gfm.paragraph = replace(block.paragraph) + ('(?!', '(?!' + + block.gfm.fences.source.replace('\\1', '\\2') + '|' + + block.list.source.replace('\\1', '\\3') + '|') + (); + +/** + * GFM + Tables Block Grammar + */ + +block.tables = merge({}, block.gfm, { + nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, + table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ +}); + +/** + * Block Lexer + */ + +function Lexer(options) { + this.tokens = []; + this.tokens.links = {}; + this.options = options || marked.defaults; + this.rules = block.normal; + + if (this.options.gfm) { + if (this.options.tables) { + this.rules = block.tables; + } else { + this.rules = block.gfm; + } + } +} + +/** + * Expose Block Rules + */ + +Lexer.rules = block; + +/** + * Static Lex Method + */ + +Lexer.lex = function(src, options) { + var lexer = new Lexer(options); + return lexer.lex(src); +}; + +/** + * Preprocessing + */ + +Lexer.prototype.lex = function(src) { + src = src + .replace(/\r\n|\r/g, '\n') + .replace(/\t/g, ' ') + .replace(/\u00a0/g, ' ') + .replace(/\u2424/g, '\n'); + + return this.token(src, true); +}; + +/** + * Lexing + */ + +Lexer.prototype.token = function(src, top, bq) { + var src = src.replace(/^ +$/gm, '') + , next + , loose + , cap + , bull + , b + , item + , space + , i + , l; + + while (src) { + // newline + if (cap = this.rules.newline.exec(src)) { + src = src.substring(cap[0].length); + if (cap[0].length > 1) { + this.tokens.push({ + type: 'space' + }); + } + } + + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + cap = cap[0].replace(/^ {4}/gm, ''); + this.tokens.push({ + type: 'code', + text: !this.options.pedantic + ? cap.replace(/\n+$/, '') + : cap + }); + continue; + } + + // fences (gfm) + if (cap = this.rules.fences.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'code', + lang: cap[2], + text: cap[3] + }); + continue; + } + + // heading + if (cap = this.rules.heading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[1].length, + text: cap[2] + }); + continue; + } + + // table no leading pipe (gfm) + if (top && (cap = this.rules.nptable.exec(src))) { + src = src.substring(cap[0].length); + + item = { + type: 'table', + header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3].replace(/\n$/, '').split('\n') + }; + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = item.cells[i].split(/ *\| */); + } + + this.tokens.push(item); + + continue; + } + + // lheading + if (cap = this.rules.lheading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[2] === '=' ? 1 : 2, + text: cap[1] + }); + continue; + } + + // hr + if (cap = this.rules.hr.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'hr' + }); + continue; + } + + // blockquote + if (cap = this.rules.blockquote.exec(src)) { + src = src.substring(cap[0].length); + + this.tokens.push({ + type: 'blockquote_start' + }); + + cap = cap[0].replace(/^ *> ?/gm, ''); + + // Pass `top` to keep the current + // "toplevel" state. This is exactly + // how markdown.pl works. + this.token(cap, top, true); + + this.tokens.push({ + type: 'blockquote_end' + }); + + continue; + } + + // list + if (cap = this.rules.list.exec(src)) { + src = src.substring(cap[0].length); + bull = cap[2]; + + this.tokens.push({ + type: 'list_start', + ordered: bull.length > 1 + }); + + // Get each top-level item. + cap = cap[0].match(this.rules.item); + + next = false; + l = cap.length; + i = 0; + + for (; i < l; i++) { + item = cap[i]; + + // Remove the list item's bullet + // so it is seen as the next token. + space = item.length; + item = item.replace(/^ *([*+-]|\d+\.) +/, ''); + + // Outdent whatever the + // list item contains. Hacky. + if (~item.indexOf('\n ')) { + space -= item.length; + item = !this.options.pedantic + ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') + : item.replace(/^ {1,4}/gm, ''); + } + + // Determine whether the next list item belongs here. + // Backpedal if it does not belong in this list. + if (this.options.smartLists && i !== l - 1) { + b = block.bullet.exec(cap[i + 1])[0]; + if (bull !== b && !(bull.length > 1 && b.length > 1)) { + src = cap.slice(i + 1).join('\n') + src; + i = l - 1; + } + } + + // Determine whether item is loose or not. + // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ + // for discount behavior. + loose = next || /\n\n(?!\s*$)/.test(item); + if (i !== l - 1) { + next = item.charAt(item.length - 1) === '\n'; + if (!loose) loose = next; + } + + this.tokens.push({ + type: loose + ? 'loose_item_start' + : 'list_item_start' + }); + + // Recurse. + this.token(item, false, bq); + + this.tokens.push({ + type: 'list_item_end' + }); + } + + this.tokens.push({ + type: 'list_end' + }); + + continue; + } + + // html + if (cap = this.rules.html.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: this.options.sanitize + ? 'paragraph' + : 'html', + pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style', + text: cap[0] + }); + continue; + } + + // def + if ((!bq && top) && (cap = this.rules.def.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.links[cap[1].toLowerCase()] = { + href: cap[2], + title: cap[3] + }; + continue; + } + + // table (gfm) + if (top && (cap = this.rules.table.exec(src))) { + src = src.substring(cap[0].length); + + item = { + type: 'table', + header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') + }; + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = item.cells[i] + .replace(/^ *\| *| *\| *$/g, '') + .split(/ *\| */); + } + + this.tokens.push(item); + + continue; + } + + // top-level paragraph + if (top && (cap = this.rules.paragraph.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'paragraph', + text: cap[1].charAt(cap[1].length - 1) === '\n' + ? cap[1].slice(0, -1) + : cap[1] + }); + continue; + } + + // text + if (cap = this.rules.text.exec(src)) { + // Top-level should never reach here. + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'text', + text: cap[0] + }); + continue; + } + + if (src) { + throw new + Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } + + return this.tokens; +}; + +/** + * Inline-Level Grammar + */ + +var inline = { + escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, + autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, + url: noop, + tag: /^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, + link: /^!?\[(inside)\]\(href\)/, + reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, + nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, + strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, + em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, + code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/, + br: /^ {2,}\n(?!\s*$)/, + del: noop, + text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/ +}; + +inline._inside = /(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/; +inline._href = /\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/; + +inline.link = replace(inline.link) + ('inside', inline._inside) + ('href', inline._href) + (); + +inline.reflink = replace(inline.reflink) + ('inside', inline._inside) + (); + +/** + * Normal Inline Grammar + */ + +inline.normal = merge({}, inline); + +/** + * Pedantic Inline Grammar + */ + +inline.pedantic = merge({}, inline.normal, { + strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ +}); + +/** + * GFM Inline Grammar + */ + +inline.gfm = merge({}, inline.normal, { + escape: replace(inline.escape)('])', '~|])')(), + url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/, + del: /^~~(?=\S)([\s\S]*?\S)~~/, + text: replace(inline.text) + (']|', '~]|') + ('|', '|https?://|') + () +}); + +/** + * GFM + Line Breaks Inline Grammar + */ + +inline.breaks = merge({}, inline.gfm, { + br: replace(inline.br)('{2,}', '*')(), + text: replace(inline.gfm.text)('{2,}', '*')() +}); + +/** + * Inline Lexer & Compiler + */ + +function InlineLexer(links, options) { + this.options = options || marked.defaults; + this.links = links; + this.rules = inline.normal; + this.renderer = this.options.renderer || new Renderer; + this.renderer.options = this.options; + + if (!this.links) { + throw new + Error('Tokens array requires a `links` property.'); + } + + if (this.options.gfm) { + if (this.options.breaks) { + this.rules = inline.breaks; + } else { + this.rules = inline.gfm; + } + } else if (this.options.pedantic) { + this.rules = inline.pedantic; + } +} + +/** + * Expose Inline Rules + */ + +InlineLexer.rules = inline; + +/** + * Static Lexing/Compiling Method + */ + +InlineLexer.output = function(src, links, options) { + var inline = new InlineLexer(links, options); + return inline.output(src); +}; + +/** + * Lexing/Compiling + */ + +InlineLexer.prototype.output = function(src) { + var out = '' + , link + , text + , href + , cap; + + while (src) { + // escape + if (cap = this.rules.escape.exec(src)) { + src = src.substring(cap[0].length); + out += cap[1]; + continue; + } + + // autolink + if (cap = this.rules.autolink.exec(src)) { + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = cap[1].charAt(6) === ':' + ? this.mangle(cap[1].substring(7)) + : this.mangle(cap[1]); + href = this.mangle('mailto:') + text; + } else { + text = escape(cap[1]); + href = text; + } + out += this.renderer.link(href, null, text); + continue; + } + + // url (gfm) + if (!this.inLink && (cap = this.rules.url.exec(src))) { + src = src.substring(cap[0].length); + text = escape(cap[1]); + href = text; + out += this.renderer.link(href, null, text); + continue; + } + + // tag + if (cap = this.rules.tag.exec(src)) { + if (!this.inLink && /^<a /i.test(cap[0])) { + this.inLink = true; + } else if (this.inLink && /^<\/a>/i.test(cap[0])) { + this.inLink = false; + } + src = src.substring(cap[0].length); + out += this.options.sanitize + ? escape(cap[0]) + : cap[0]; + continue; + } + + // link + if (cap = this.rules.link.exec(src)) { + src = src.substring(cap[0].length); + this.inLink = true; + out += this.outputLink(cap, { + href: cap[2], + title: cap[3] + }); + this.inLink = false; + continue; + } + + // reflink, nolink + if ((cap = this.rules.reflink.exec(src)) + || (cap = this.rules.nolink.exec(src))) { + src = src.substring(cap[0].length); + link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = this.links[link.toLowerCase()]; + if (!link || !link.href) { + out += cap[0].charAt(0); + src = cap[0].substring(1) + src; + continue; + } + this.inLink = true; + out += this.outputLink(cap, link); + this.inLink = false; + continue; + } + + // strong + if (cap = this.rules.strong.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.strong(this.output(cap[2] || cap[1])); + continue; + } + + // em + if (cap = this.rules.em.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.em(this.output(cap[2] || cap[1])); + continue; + } + + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.codespan(escape(cap[2], true)); + continue; + } + + // br + if (cap = this.rules.br.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.br(); + continue; + } + + // del (gfm) + if (cap = this.rules.del.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.del(this.output(cap[1])); + continue; + } + + // text + if (cap = this.rules.text.exec(src)) { + src = src.substring(cap[0].length); + out += escape(this.smartypants(cap[0])); + continue; + } + + if (src) { + throw new + Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } + + return out; +}; + +/** + * Compile Link + */ + +InlineLexer.prototype.outputLink = function(cap, link) { + var href = escape(link.href) + , title = link.title ? escape(link.title) : null; + + return cap[0].charAt(0) !== '!' + ? this.renderer.link(href, title, this.output(cap[1])) + : this.renderer.image(href, title, escape(cap[1])); +}; + +/** + * Smartypants Transformations + */ + +InlineLexer.prototype.smartypants = function(text) { + if (!this.options.smartypants) return text; + return text + // em-dashes + .replace(/--/g, '\u2014') + // opening singles + .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') + // closing singles & apostrophes + .replace(/'/g, '\u2019') + // opening doubles + .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') + // closing doubles + .replace(/"/g, '\u201d') + // ellipses + .replace(/\.{3}/g, '\u2026'); +}; + +/** + * Mangle Links + */ + +InlineLexer.prototype.mangle = function(text) { + var out = '' + , l = text.length + , i = 0 + , ch; + + for (; i < l; i++) { + ch = text.charCodeAt(i); + if (Math.random() > 0.5) { + ch = 'x' + ch.toString(16); + } + out += '&#' + ch + ';'; + } + + return out; +}; + +/** + * Renderer + */ + +function Renderer(options) { + this.options = options || {}; +} + +Renderer.prototype.code = function(code, lang, escaped) { + if (this.options.highlight) { + var out = this.options.highlight(code, lang); + if (out != null && out !== code) { + escaped = true; + code = out; + } + } + + if (!lang) { + return '<pre><code>' + + (escaped ? code : escape(code, true)) + + '\n</code></pre>'; + } + + return '<pre><code class="' + + this.options.langPrefix + + escape(lang, true) + + '">' + + (escaped ? code : escape(code, true)) + + '\n</code></pre>\n'; +}; + +Renderer.prototype.blockquote = function(quote) { + return '<blockquote>\n' + quote + '</blockquote>\n'; +}; + +Renderer.prototype.html = function(html) { + return html; +}; + +Renderer.prototype.heading = function(text, level, raw) { + return '<h' + + level + + ' id="' + + this.options.headerPrefix + + raw.toLowerCase().replace(/[^\w]+/g, '-') + + '">' + + text + + '</h' + + level + + '>\n'; +}; + +Renderer.prototype.hr = function() { + return this.options.xhtml ? '<hr/>\n' : '<hr>\n'; +}; + +Renderer.prototype.list = function(body, ordered) { + var type = ordered ? 'ol' : 'ul'; + return '<' + type + '>\n' + body + '</' + type + '>\n'; +}; + +Renderer.prototype.listitem = function(text) { + return '<li>' + text + '</li>\n'; +}; + +Renderer.prototype.paragraph = function(text) { + return '<p>' + text + '</p>\n'; +}; + +Renderer.prototype.table = function(header, body) { + return '<table>\n' + + '<thead>\n' + + header + + '</thead>\n' + + '<tbody>\n' + + body + + '</tbody>\n' + + '</table>\n'; +}; + +Renderer.prototype.tablerow = function(content) { + return '<tr>\n' + content + '</tr>\n'; +}; + +Renderer.prototype.tablecell = function(content, flags) { + var type = flags.header ? 'th' : 'td'; + var tag = flags.align + ? '<' + type + ' style="text-align:' + flags.align + '">' + : '<' + type + '>'; + return tag + content + '</' + type + '>\n'; +}; + +// span level renderer +Renderer.prototype.strong = function(text) { + return '<strong>' + text + '</strong>'; +}; + +Renderer.prototype.em = function(text) { + return '<em>' + text + '</em>'; +}; + +Renderer.prototype.codespan = function(text) { + return '<code>' + text + '</code>'; +}; + +Renderer.prototype.br = function() { + return this.options.xhtml ? '<br/>' : '<br>'; +}; + +Renderer.prototype.del = function(text) { + return '<del>' + text + '</del>'; +}; + +Renderer.prototype.link = function(href, title, text) { + if (this.options.sanitize) { + try { + var prot = decodeURIComponent(unescape(href)) + .replace(/[^\w:]/g, '') + .toLowerCase(); + } catch (e) { + return ''; + } + if (prot.indexOf('javascript:') === 0) { + return ''; + } + } + var out = '<a href="' + href + '"'; + if (title) { + out += ' title="' + title + '"'; + } + out += '>' + text + '</a>'; + return out; +}; + +Renderer.prototype.image = function(href, title, text) { + var out = '<img src="' + href + '" alt="' + text + '"'; + if (title) { + out += ' title="' + title + '"'; + } + out += this.options.xhtml ? '/>' : '>'; + return out; +}; + +/** + * Parsing & Compiling + */ + +function Parser(options) { + this.tokens = []; + this.token = null; + this.options = options || marked.defaults; + this.options.renderer = this.options.renderer || new Renderer; + this.renderer = this.options.renderer; + this.renderer.options = this.options; +} + +/** + * Static Parse Method + */ + +Parser.parse = function(src, options, renderer) { + var parser = new Parser(options, renderer); + return parser.parse(src); +}; + +/** + * Parse Loop + */ + +Parser.prototype.parse = function(src) { + this.inline = new InlineLexer(src.links, this.options, this.renderer); + this.tokens = src.reverse(); + + var out = ''; + while (this.next()) { + out += this.tok(); + } + + return out; +}; + +/** + * Next Token + */ + +Parser.prototype.next = function() { + return this.token = this.tokens.pop(); +}; + +/** + * Preview Next Token + */ + +Parser.prototype.peek = function() { + return this.tokens[this.tokens.length - 1] || 0; +}; + +/** + * Parse Text Tokens + */ + +Parser.prototype.parseText = function() { + var body = this.token.text; + + while (this.peek().type === 'text') { + body += '\n' + this.next().text; + } + + return this.inline.output(body); +}; + +/** + * Parse Current Token + */ + +Parser.prototype.tok = function() { + switch (this.token.type) { + case 'space': { + return ''; + } + case 'hr': { + return this.renderer.hr(); + } + case 'heading': { + return this.renderer.heading( + this.inline.output(this.token.text), + this.token.depth, + this.token.text); + } + case 'code': { + return this.renderer.code(this.token.text, + this.token.lang, + this.token.escaped); + } + case 'table': { + var header = '' + , body = '' + , i + , row + , cell + , flags + , j; + + // header + cell = ''; + for (i = 0; i < this.token.header.length; i++) { + flags = { header: true, align: this.token.align[i] }; + cell += this.renderer.tablecell( + this.inline.output(this.token.header[i]), + { header: true, align: this.token.align[i] } + ); + } + header += this.renderer.tablerow(cell); + + for (i = 0; i < this.token.cells.length; i++) { + row = this.token.cells[i]; + + cell = ''; + for (j = 0; j < row.length; j++) { + cell += this.renderer.tablecell( + this.inline.output(row[j]), + { header: false, align: this.token.align[j] } + ); + } + + body += this.renderer.tablerow(cell); + } + return this.renderer.table(header, body); + } + case 'blockquote_start': { + var body = ''; + + while (this.next().type !== 'blockquote_end') { + body += this.tok(); + } + + return this.renderer.blockquote(body); + } + case 'list_start': { + var body = '' + , ordered = this.token.ordered; + + while (this.next().type !== 'list_end') { + body += this.tok(); + } + + return this.renderer.list(body, ordered); + } + case 'list_item_start': { + var body = ''; + + while (this.next().type !== 'list_item_end') { + body += this.token.type === 'text' + ? this.parseText() + : this.tok(); + } + + return this.renderer.listitem(body); + } + case 'loose_item_start': { + var body = ''; + + while (this.next().type !== 'list_item_end') { + body += this.tok(); + } + + return this.renderer.listitem(body); + } + case 'html': { + var html = !this.token.pre && !this.options.pedantic + ? this.inline.output(this.token.text) + : this.token.text; + return this.renderer.html(html); + } + case 'paragraph': { + return this.renderer.paragraph(this.inline.output(this.token.text)); + } + case 'text': { + return this.renderer.paragraph(this.parseText()); + } + } +}; + +/** + * Helpers + */ + +function escape(html, encode) { + return html + .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); +} + +function unescape(html) { + return html.replace(/&([#\w]+);/g, function(_, n) { + n = n.toLowerCase(); + if (n === 'colon') return ':'; + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' + ? String.fromCharCode(parseInt(n.substring(2), 16)) + : String.fromCharCode(+n.substring(1)); + } + return ''; + }); +} + +function replace(regex, opt) { + regex = regex.source; + opt = opt || ''; + return function self(name, val) { + if (!name) return new RegExp(regex, opt); + val = val.source || val; + val = val.replace(/(^|[^\[])\^/g, '$1'); + regex = regex.replace(name, val); + return self; + }; +} + +function noop() {} +noop.exec = noop; + +function merge(obj) { + var i = 1 + , target + , key; + + for (; i < arguments.length; i++) { + target = arguments[i]; + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } + + return obj; +} + + +/** + * Marked + */ + +function marked(src, opt, callback) { + if (callback || typeof opt === 'function') { + if (!callback) { + callback = opt; + opt = null; + } + + opt = merge({}, marked.defaults, opt || {}); + + var highlight = opt.highlight + , tokens + , pending + , i = 0; + + try { + tokens = Lexer.lex(src, opt) + } catch (e) { + return callback(e); + } + + pending = tokens.length; + + var done = function(err) { + if (err) { + opt.highlight = highlight; + return callback(err); + } + + var out; + + try { + out = Parser.parse(tokens, opt); + } catch (e) { + err = e; + } + + opt.highlight = highlight; + + return err + ? callback(err) + : callback(null, out); + }; + + if (!highlight || highlight.length < 3) { + return done(); + } + + delete opt.highlight; + + if (!pending) return done(); + + for (; i < tokens.length; i++) { + (function(token) { + if (token.type !== 'code') { + return --pending || done(); + } + return highlight(token.text, token.lang, function(err, code) { + if (err) return done(err); + if (code == null || code === token.text) { + return --pending || done(); + } + token.text = code; + token.escaped = true; + --pending || done(); + }); + })(tokens[i]); + } + + return; + } + try { + if (opt) opt = merge({}, marked.defaults, opt); + return Parser.parse(Lexer.lex(src, opt), opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/chjj/marked.'; + if ((opt || marked.defaults).silent) { + return '<p>An error occured:</p><pre>' + + escape(e.message + '', true) + + '</pre>'; + } + throw e; + } +} + +/** + * Options + */ + +marked.options = +marked.setOptions = function(opt) { + merge(marked.defaults, opt); + return marked; +}; + +marked.defaults = { + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + smartLists: false, + silent: false, + highlight: null, + langPrefix: 'lang-', + smartypants: false, + headerPrefix: '', + renderer: new Renderer, + xhtml: false +}; + +/** + * Expose + */ + +marked.Parser = Parser; +marked.parser = Parser.parse; + +marked.Renderer = Renderer; + +marked.Lexer = Lexer; +marked.lexer = Lexer.lex; + +marked.InlineLexer = InlineLexer; +marked.inlineLexer = InlineLexer.output; + +marked.parse = marked; + +if (typeof module !== 'undefined' && typeof exports === 'object') { + module.exports = marked; +} else if (typeof define === 'function' && define.amd) { + define(function() { return marked; }); +} else { + this.marked = marked; +} + +}).call(function() { + return this || (typeof window !== 'undefined' ? window : global); +}()); diff --git a/plugins/ckeditor4/markdown/js/to-markdown.js b/plugins/ckeditor4/markdown/js/to-markdown.js new file mode 100755 index 0000000..667eae1 --- /dev/null +++ b/plugins/ckeditor4/markdown/js/to-markdown.js @@ -0,0 +1,530 @@ +/*! https://mths.be/he v0.5.0 by @mathias | MIT license */ +;(function(root) { + + // Detect free variables `exports`. + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module`. + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root`. + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + // All astral symbols. + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + // All ASCII symbols (not just printable ASCII) except those listed in the + // first column of the overrides table. + // http://whatwg.org/html/tokenization.html#table-charref-overrides + var regexAsciiWhitelist = /[\x01-\x7F]/g; + // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or + // code points listed in the first column of the overrides table on + // http://whatwg.org/html/tokenization.html#table-charref-overrides. + var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g; + + var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g; + var encodeMap = {'\xC1':'Aacute','\xE1':'aacute','\u0102':'Abreve','\u0103':'abreve','\u223E':'ac','\u223F':'acd','\u223E\u0333':'acE','\xC2':'Acirc','\xE2':'acirc','\xB4':'acute','\u0410':'Acy','\u0430':'acy','\xC6':'AElig','\xE6':'aelig','\u2061':'af','\uD835\uDD04':'Afr','\uD835\uDD1E':'afr','\xC0':'Agrave','\xE0':'agrave','\u2135':'aleph','\u0391':'Alpha','\u03B1':'alpha','\u0100':'Amacr','\u0101':'amacr','\u2A3F':'amalg','&':'amp','\u2A55':'andand','\u2A53':'And','\u2227':'and','\u2A5C':'andd','\u2A58':'andslope','\u2A5A':'andv','\u2220':'ang','\u29A4':'ange','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u2221':'angmsd','\u221F':'angrt','\u22BE':'angrtvb','\u299D':'angrtvbd','\u2222':'angsph','\xC5':'angst','\u237C':'angzarr','\u0104':'Aogon','\u0105':'aogon','\uD835\uDD38':'Aopf','\uD835\uDD52':'aopf','\u2A6F':'apacir','\u2248':'ap','\u2A70':'apE','\u224A':'ape','\u224B':'apid','\'':'apos','\xE5':'aring','\uD835\uDC9C':'Ascr','\uD835\uDCB6':'ascr','\u2254':'colone','*':'ast','\u224D':'CupCap','\xC3':'Atilde','\xE3':'atilde','\xC4':'Auml','\xE4':'auml','\u2233':'awconint','\u2A11':'awint','\u224C':'bcong','\u03F6':'bepsi','\u2035':'bprime','\u223D':'bsim','\u22CD':'bsime','\u2216':'setmn','\u2AE7':'Barv','\u22BD':'barvee','\u2305':'barwed','\u2306':'Barwed','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u0411':'Bcy','\u0431':'bcy','\u201E':'bdquo','\u2235':'becaus','\u29B0':'bemptyv','\u212C':'Bscr','\u0392':'Beta','\u03B2':'beta','\u2136':'beth','\u226C':'twixt','\uD835\uDD05':'Bfr','\uD835\uDD1F':'bfr','\u22C2':'xcap','\u25EF':'xcirc','\u22C3':'xcup','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A06':'xsqcup','\u2605':'starf','\u25BD':'xdtri','\u25B3':'xutri','\u2A04':'xuplus','\u22C1':'Vee','\u22C0':'Wedge','\u290D':'rbarr','\u29EB':'lozf','\u25AA':'squf','\u25B4':'utrif','\u25BE':'dtrif','\u25C2':'ltrif','\u25B8':'rtrif','\u2423':'blank','\u2592':'blk12','\u2591':'blk14','\u2593':'blk34','\u2588':'block','=\u20E5':'bne','\u2261\u20E5':'bnequiv','\u2AED':'bNot','\u2310':'bnot','\uD835\uDD39':'Bopf','\uD835\uDD53':'bopf','\u22A5':'bot','\u22C8':'bowtie','\u29C9':'boxbox','\u2510':'boxdl','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u250C':'boxdr','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2500':'boxh','\u2550':'boxH','\u252C':'boxhd','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2534':'boxhu','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u229F':'minusb','\u229E':'plusb','\u22A0':'timesb','\u2518':'boxul','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u2514':'boxur','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u2502':'boxv','\u2551':'boxV','\u253C':'boxvh','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2524':'boxvl','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u251C':'boxvr','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u02D8':'breve','\xA6':'brvbar','\uD835\uDCB7':'bscr','\u204F':'bsemi','\u29C5':'bsolb','\\':'bsol','\u27C8':'bsolhsub','\u2022':'bull','\u224E':'bump','\u2AAE':'bumpE','\u224F':'bumpe','\u0106':'Cacute','\u0107':'cacute','\u2A44':'capand','\u2A49':'capbrcup','\u2A4B':'capcap','\u2229':'cap','\u22D2':'Cap','\u2A47':'capcup','\u2A40':'capdot','\u2145':'DD','\u2229\uFE00':'caps','\u2041':'caret','\u02C7':'caron','\u212D':'Cfr','\u2A4D':'ccaps','\u010C':'Ccaron','\u010D':'ccaron','\xC7':'Ccedil','\xE7':'ccedil','\u0108':'Ccirc','\u0109':'ccirc','\u2230':'Cconint','\u2A4C':'ccups','\u2A50':'ccupssm','\u010A':'Cdot','\u010B':'cdot','\xB8':'cedil','\u29B2':'cemptyv','\xA2':'cent','\xB7':'middot','\uD835\uDD20':'cfr','\u0427':'CHcy','\u0447':'chcy','\u2713':'check','\u03A7':'Chi','\u03C7':'chi','\u02C6':'circ','\u2257':'cire','\u21BA':'olarr','\u21BB':'orarr','\u229B':'oast','\u229A':'ocir','\u229D':'odash','\u2299':'odot','\xAE':'reg','\u24C8':'oS','\u2296':'ominus','\u2295':'oplus','\u2297':'otimes','\u25CB':'cir','\u29C3':'cirE','\u2A10':'cirfnint','\u2AEF':'cirmid','\u29C2':'cirscir','\u2232':'cwconint','\u201D':'rdquo','\u2019':'rsquo','\u2663':'clubs',':':'colon','\u2237':'Colon','\u2A74':'Colone',',':'comma','@':'commat','\u2201':'comp','\u2218':'compfn','\u2102':'Copf','\u2245':'cong','\u2A6D':'congdot','\u2261':'equiv','\u222E':'oint','\u222F':'Conint','\uD835\uDD54':'copf','\u2210':'coprod','\xA9':'copy','\u2117':'copysr','\u21B5':'crarr','\u2717':'cross','\u2A2F':'Cross','\uD835\uDC9E':'Cscr','\uD835\uDCB8':'cscr','\u2ACF':'csub','\u2AD1':'csube','\u2AD0':'csup','\u2AD2':'csupe','\u22EF':'ctdot','\u2938':'cudarrl','\u2935':'cudarrr','\u22DE':'cuepr','\u22DF':'cuesc','\u21B6':'cularr','\u293D':'cularrp','\u2A48':'cupbrcap','\u2A46':'cupcap','\u222A':'cup','\u22D3':'Cup','\u2A4A':'cupcup','\u228D':'cupdot','\u2A45':'cupor','\u222A\uFE00':'cups','\u21B7':'curarr','\u293C':'curarrm','\u22CE':'cuvee','\u22CF':'cuwed','\xA4':'curren','\u2231':'cwint','\u232D':'cylcty','\u2020':'dagger','\u2021':'Dagger','\u2138':'daleth','\u2193':'darr','\u21A1':'Darr','\u21D3':'dArr','\u2010':'dash','\u2AE4':'Dashv','\u22A3':'dashv','\u290F':'rBarr','\u02DD':'dblac','\u010E':'Dcaron','\u010F':'dcaron','\u0414':'Dcy','\u0434':'dcy','\u21CA':'ddarr','\u2146':'dd','\u2911':'DDotrahd','\u2A77':'eDDot','\xB0':'deg','\u2207':'Del','\u0394':'Delta','\u03B4':'delta','\u29B1':'demptyv','\u297F':'dfisht','\uD835\uDD07':'Dfr','\uD835\uDD21':'dfr','\u2965':'dHar','\u21C3':'dharl','\u21C2':'dharr','\u02D9':'dot','`':'grave','\u02DC':'tilde','\u22C4':'diam','\u2666':'diams','\xA8':'die','\u03DD':'gammad','\u22F2':'disin','\xF7':'div','\u22C7':'divonx','\u0402':'DJcy','\u0452':'djcy','\u231E':'dlcorn','\u230D':'dlcrop','$':'dollar','\uD835\uDD3B':'Dopf','\uD835\uDD55':'dopf','\u20DC':'DotDot','\u2250':'doteq','\u2251':'eDot','\u2238':'minusd','\u2214':'plusdo','\u22A1':'sdotb','\u21D0':'lArr','\u21D4':'iff','\u27F8':'xlArr','\u27FA':'xhArr','\u27F9':'xrArr','\u21D2':'rArr','\u22A8':'vDash','\u21D1':'uArr','\u21D5':'vArr','\u2225':'par','\u2913':'DownArrowBar','\u21F5':'duarr','\u0311':'DownBreve','\u2950':'DownLeftRightVector','\u295E':'DownLeftTeeVector','\u2956':'DownLeftVectorBar','\u21BD':'lhard','\u295F':'DownRightTeeVector','\u2957':'DownRightVectorBar','\u21C1':'rhard','\u21A7':'mapstodown','\u22A4':'top','\u2910':'RBarr','\u231F':'drcorn','\u230C':'drcrop','\uD835\uDC9F':'Dscr','\uD835\uDCB9':'dscr','\u0405':'DScy','\u0455':'dscy','\u29F6':'dsol','\u0110':'Dstrok','\u0111':'dstrok','\u22F1':'dtdot','\u25BF':'dtri','\u296F':'duhar','\u29A6':'dwangle','\u040F':'DZcy','\u045F':'dzcy','\u27FF':'dzigrarr','\xC9':'Eacute','\xE9':'eacute','\u2A6E':'easter','\u011A':'Ecaron','\u011B':'ecaron','\xCA':'Ecirc','\xEA':'ecirc','\u2256':'ecir','\u2255':'ecolon','\u042D':'Ecy','\u044D':'ecy','\u0116':'Edot','\u0117':'edot','\u2147':'ee','\u2252':'efDot','\uD835\uDD08':'Efr','\uD835\uDD22':'efr','\u2A9A':'eg','\xC8':'Egrave','\xE8':'egrave','\u2A96':'egs','\u2A98':'egsdot','\u2A99':'el','\u2208':'in','\u23E7':'elinters','\u2113':'ell','\u2A95':'els','\u2A97':'elsdot','\u0112':'Emacr','\u0113':'emacr','\u2205':'empty','\u25FB':'EmptySmallSquare','\u25AB':'EmptyVerySmallSquare','\u2004':'emsp13','\u2005':'emsp14','\u2003':'emsp','\u014A':'ENG','\u014B':'eng','\u2002':'ensp','\u0118':'Eogon','\u0119':'eogon','\uD835\uDD3C':'Eopf','\uD835\uDD56':'eopf','\u22D5':'epar','\u29E3':'eparsl','\u2A71':'eplus','\u03B5':'epsi','\u0395':'Epsilon','\u03F5':'epsiv','\u2242':'esim','\u2A75':'Equal','=':'equals','\u225F':'equest','\u21CC':'rlhar','\u2A78':'equivDD','\u29E5':'eqvparsl','\u2971':'erarr','\u2253':'erDot','\u212F':'escr','\u2130':'Escr','\u2A73':'Esim','\u0397':'Eta','\u03B7':'eta','\xD0':'ETH','\xF0':'eth','\xCB':'Euml','\xEB':'euml','\u20AC':'euro','!':'excl','\u2203':'exist','\u0424':'Fcy','\u0444':'fcy','\u2640':'female','\uFB03':'ffilig','\uFB00':'fflig','\uFB04':'ffllig','\uD835\uDD09':'Ffr','\uD835\uDD23':'ffr','\uFB01':'filig','\u25FC':'FilledSmallSquare','fj':'fjlig','\u266D':'flat','\uFB02':'fllig','\u25B1':'fltns','\u0192':'fnof','\uD835\uDD3D':'Fopf','\uD835\uDD57':'fopf','\u2200':'forall','\u22D4':'fork','\u2AD9':'forkv','\u2131':'Fscr','\u2A0D':'fpartint','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\u2154':'frac23','\u2156':'frac25','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\u2044':'frasl','\u2322':'frown','\uD835\uDCBB':'fscr','\u01F5':'gacute','\u0393':'Gamma','\u03B3':'gamma','\u03DC':'Gammad','\u2A86':'gap','\u011E':'Gbreve','\u011F':'gbreve','\u0122':'Gcedil','\u011C':'Gcirc','\u011D':'gcirc','\u0413':'Gcy','\u0433':'gcy','\u0120':'Gdot','\u0121':'gdot','\u2265':'ge','\u2267':'gE','\u2A8C':'gEl','\u22DB':'gel','\u2A7E':'ges','\u2AA9':'gescc','\u2A80':'gesdot','\u2A82':'gesdoto','\u2A84':'gesdotol','\u22DB\uFE00':'gesl','\u2A94':'gesles','\uD835\uDD0A':'Gfr','\uD835\uDD24':'gfr','\u226B':'gg','\u22D9':'Gg','\u2137':'gimel','\u0403':'GJcy','\u0453':'gjcy','\u2AA5':'gla','\u2277':'gl','\u2A92':'glE','\u2AA4':'glj','\u2A8A':'gnap','\u2A88':'gne','\u2269':'gnE','\u22E7':'gnsim','\uD835\uDD3E':'Gopf','\uD835\uDD58':'gopf','\u2AA2':'GreaterGreater','\u2273':'gsim','\uD835\uDCA2':'Gscr','\u210A':'gscr','\u2A8E':'gsime','\u2A90':'gsiml','\u2AA7':'gtcc','\u2A7A':'gtcir','>':'gt','\u22D7':'gtdot','\u2995':'gtlPar','\u2A7C':'gtquest','\u2978':'gtrarr','\u2269\uFE00':'gvnE','\u200A':'hairsp','\u210B':'Hscr','\u042A':'HARDcy','\u044A':'hardcy','\u2948':'harrcir','\u2194':'harr','\u21AD':'harrw','^':'Hat','\u210F':'hbar','\u0124':'Hcirc','\u0125':'hcirc','\u2665':'hearts','\u2026':'mldr','\u22B9':'hercon','\uD835\uDD25':'hfr','\u210C':'Hfr','\u2925':'searhk','\u2926':'swarhk','\u21FF':'hoarr','\u223B':'homtht','\u21A9':'larrhk','\u21AA':'rarrhk','\uD835\uDD59':'hopf','\u210D':'Hopf','\u2015':'horbar','\uD835\uDCBD':'hscr','\u0126':'Hstrok','\u0127':'hstrok','\u2043':'hybull','\xCD':'Iacute','\xED':'iacute','\u2063':'ic','\xCE':'Icirc','\xEE':'icirc','\u0418':'Icy','\u0438':'icy','\u0130':'Idot','\u0415':'IEcy','\u0435':'iecy','\xA1':'iexcl','\uD835\uDD26':'ifr','\u2111':'Im','\xCC':'Igrave','\xEC':'igrave','\u2148':'ii','\u2A0C':'qint','\u222D':'tint','\u29DC':'iinfin','\u2129':'iiota','\u0132':'IJlig','\u0133':'ijlig','\u012A':'Imacr','\u012B':'imacr','\u2110':'Iscr','\u0131':'imath','\u22B7':'imof','\u01B5':'imped','\u2105':'incare','\u221E':'infin','\u29DD':'infintie','\u22BA':'intcal','\u222B':'int','\u222C':'Int','\u2124':'Zopf','\u2A17':'intlarhk','\u2A3C':'iprod','\u2062':'it','\u0401':'IOcy','\u0451':'iocy','\u012E':'Iogon','\u012F':'iogon','\uD835\uDD40':'Iopf','\uD835\uDD5A':'iopf','\u0399':'Iota','\u03B9':'iota','\xBF':'iquest','\uD835\uDCBE':'iscr','\u22F5':'isindot','\u22F9':'isinE','\u22F4':'isins','\u22F3':'isinsv','\u0128':'Itilde','\u0129':'itilde','\u0406':'Iukcy','\u0456':'iukcy','\xCF':'Iuml','\xEF':'iuml','\u0134':'Jcirc','\u0135':'jcirc','\u0419':'Jcy','\u0439':'jcy','\uD835\uDD0D':'Jfr','\uD835\uDD27':'jfr','\u0237':'jmath','\uD835\uDD41':'Jopf','\uD835\uDD5B':'jopf','\uD835\uDCA5':'Jscr','\uD835\uDCBF':'jscr','\u0408':'Jsercy','\u0458':'jsercy','\u0404':'Jukcy','\u0454':'jukcy','\u039A':'Kappa','\u03BA':'kappa','\u03F0':'kappav','\u0136':'Kcedil','\u0137':'kcedil','\u041A':'Kcy','\u043A':'kcy','\uD835\uDD0E':'Kfr','\uD835\uDD28':'kfr','\u0138':'kgreen','\u0425':'KHcy','\u0445':'khcy','\u040C':'KJcy','\u045C':'kjcy','\uD835\uDD42':'Kopf','\uD835\uDD5C':'kopf','\uD835\uDCA6':'Kscr','\uD835\uDCC0':'kscr','\u21DA':'lAarr','\u0139':'Lacute','\u013A':'lacute','\u29B4':'laemptyv','\u2112':'Lscr','\u039B':'Lambda','\u03BB':'lambda','\u27E8':'lang','\u27EA':'Lang','\u2991':'langd','\u2A85':'lap','\xAB':'laquo','\u21E4':'larrb','\u291F':'larrbfs','\u2190':'larr','\u219E':'Larr','\u291D':'larrfs','\u21AB':'larrlp','\u2939':'larrpl','\u2973':'larrsim','\u21A2':'larrtl','\u2919':'latail','\u291B':'lAtail','\u2AAB':'lat','\u2AAD':'late','\u2AAD\uFE00':'lates','\u290C':'lbarr','\u290E':'lBarr','\u2772':'lbbrk','{':'lcub','[':'lsqb','\u298B':'lbrke','\u298F':'lbrksld','\u298D':'lbrkslu','\u013D':'Lcaron','\u013E':'lcaron','\u013B':'Lcedil','\u013C':'lcedil','\u2308':'lceil','\u041B':'Lcy','\u043B':'lcy','\u2936':'ldca','\u201C':'ldquo','\u2967':'ldrdhar','\u294B':'ldrushar','\u21B2':'ldsh','\u2264':'le','\u2266':'lE','\u21C6':'lrarr','\u27E6':'lobrk','\u2961':'LeftDownTeeVector','\u2959':'LeftDownVectorBar','\u230A':'lfloor','\u21BC':'lharu','\u21C7':'llarr','\u21CB':'lrhar','\u294E':'LeftRightVector','\u21A4':'mapstoleft','\u295A':'LeftTeeVector','\u22CB':'lthree','\u29CF':'LeftTriangleBar','\u22B2':'vltri','\u22B4':'ltrie','\u2951':'LeftUpDownVector','\u2960':'LeftUpTeeVector','\u2958':'LeftUpVectorBar','\u21BF':'uharl','\u2952':'LeftVectorBar','\u2A8B':'lEg','\u22DA':'leg','\u2A7D':'les','\u2AA8':'lescc','\u2A7F':'lesdot','\u2A81':'lesdoto','\u2A83':'lesdotor','\u22DA\uFE00':'lesg','\u2A93':'lesges','\u22D6':'ltdot','\u2276':'lg','\u2AA1':'LessLess','\u2272':'lsim','\u297C':'lfisht','\uD835\uDD0F':'Lfr','\uD835\uDD29':'lfr','\u2A91':'lgE','\u2962':'lHar','\u296A':'lharul','\u2584':'lhblk','\u0409':'LJcy','\u0459':'ljcy','\u226A':'ll','\u22D8':'Ll','\u296B':'llhard','\u25FA':'lltri','\u013F':'Lmidot','\u0140':'lmidot','\u23B0':'lmoust','\u2A89':'lnap','\u2A87':'lne','\u2268':'lnE','\u22E6':'lnsim','\u27EC':'loang','\u21FD':'loarr','\u27F5':'xlarr','\u27F7':'xharr','\u27FC':'xmap','\u27F6':'xrarr','\u21AC':'rarrlp','\u2985':'lopar','\uD835\uDD43':'Lopf','\uD835\uDD5D':'lopf','\u2A2D':'loplus','\u2A34':'lotimes','\u2217':'lowast','_':'lowbar','\u2199':'swarr','\u2198':'searr','\u25CA':'loz','(':'lpar','\u2993':'lparlt','\u296D':'lrhard','\u200E':'lrm','\u22BF':'lrtri','\u2039':'lsaquo','\uD835\uDCC1':'lscr','\u21B0':'lsh','\u2A8D':'lsime','\u2A8F':'lsimg','\u2018':'lsquo','\u201A':'sbquo','\u0141':'Lstrok','\u0142':'lstrok','\u2AA6':'ltcc','\u2A79':'ltcir','<':'lt','\u22C9':'ltimes','\u2976':'ltlarr','\u2A7B':'ltquest','\u25C3':'ltri','\u2996':'ltrPar','\u294A':'lurdshar','\u2966':'luruhar','\u2268\uFE00':'lvnE','\xAF':'macr','\u2642':'male','\u2720':'malt','\u2905':'Map','\u21A6':'map','\u21A5':'mapstoup','\u25AE':'marker','\u2A29':'mcomma','\u041C':'Mcy','\u043C':'mcy','\u2014':'mdash','\u223A':'mDDot','\u205F':'MediumSpace','\u2133':'Mscr','\uD835\uDD10':'Mfr','\uD835\uDD2A':'mfr','\u2127':'mho','\xB5':'micro','\u2AF0':'midcir','\u2223':'mid','\u2212':'minus','\u2A2A':'minusdu','\u2213':'mp','\u2ADB':'mlcp','\u22A7':'models','\uD835\uDD44':'Mopf','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\u039C':'Mu','\u03BC':'mu','\u22B8':'mumap','\u0143':'Nacute','\u0144':'nacute','\u2220\u20D2':'nang','\u2249':'nap','\u2A70\u0338':'napE','\u224B\u0338':'napid','\u0149':'napos','\u266E':'natur','\u2115':'Nopf','\xA0':'nbsp','\u224E\u0338':'nbump','\u224F\u0338':'nbumpe','\u2A43':'ncap','\u0147':'Ncaron','\u0148':'ncaron','\u0145':'Ncedil','\u0146':'ncedil','\u2247':'ncong','\u2A6D\u0338':'ncongdot','\u2A42':'ncup','\u041D':'Ncy','\u043D':'ncy','\u2013':'ndash','\u2924':'nearhk','\u2197':'nearr','\u21D7':'neArr','\u2260':'ne','\u2250\u0338':'nedot','\u200B':'ZeroWidthSpace','\u2262':'nequiv','\u2928':'toea','\u2242\u0338':'nesim','\n':'NewLine','\u2204':'nexist','\uD835\uDD11':'Nfr','\uD835\uDD2B':'nfr','\u2267\u0338':'ngE','\u2271':'nge','\u2A7E\u0338':'nges','\u22D9\u0338':'nGg','\u2275':'ngsim','\u226B\u20D2':'nGt','\u226F':'ngt','\u226B\u0338':'nGtv','\u21AE':'nharr','\u21CE':'nhArr','\u2AF2':'nhpar','\u220B':'ni','\u22FC':'nis','\u22FA':'nisd','\u040A':'NJcy','\u045A':'njcy','\u219A':'nlarr','\u21CD':'nlArr','\u2025':'nldr','\u2266\u0338':'nlE','\u2270':'nle','\u2A7D\u0338':'nles','\u226E':'nlt','\u22D8\u0338':'nLl','\u2274':'nlsim','\u226A\u20D2':'nLt','\u22EA':'nltri','\u22EC':'nltrie','\u226A\u0338':'nLtv','\u2224':'nmid','\u2060':'NoBreak','\uD835\uDD5F':'nopf','\u2AEC':'Not','\xAC':'not','\u226D':'NotCupCap','\u2226':'npar','\u2209':'notin','\u2279':'ntgl','\u22F5\u0338':'notindot','\u22F9\u0338':'notinE','\u22F7':'notinvb','\u22F6':'notinvc','\u29CF\u0338':'NotLeftTriangleBar','\u2278':'ntlg','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA1\u0338':'NotNestedLessLess','\u220C':'notni','\u22FE':'notnivb','\u22FD':'notnivc','\u2280':'npr','\u2AAF\u0338':'npre','\u22E0':'nprcue','\u29D0\u0338':'NotRightTriangleBar','\u22EB':'nrtri','\u22ED':'nrtrie','\u228F\u0338':'NotSquareSubset','\u22E2':'nsqsube','\u2290\u0338':'NotSquareSuperset','\u22E3':'nsqsupe','\u2282\u20D2':'vnsub','\u2288':'nsube','\u2281':'nsc','\u2AB0\u0338':'nsce','\u22E1':'nsccue','\u227F\u0338':'NotSucceedsTilde','\u2283\u20D2':'vnsup','\u2289':'nsupe','\u2241':'nsim','\u2244':'nsime','\u2AFD\u20E5':'nparsl','\u2202\u0338':'npart','\u2A14':'npolint','\u2933\u0338':'nrarrc','\u219B':'nrarr','\u21CF':'nrArr','\u219D\u0338':'nrarrw','\uD835\uDCA9':'Nscr','\uD835\uDCC3':'nscr','\u2284':'nsub','\u2AC5\u0338':'nsubE','\u2285':'nsup','\u2AC6\u0338':'nsupE','\xD1':'Ntilde','\xF1':'ntilde','\u039D':'Nu','\u03BD':'nu','#':'num','\u2116':'numero','\u2007':'numsp','\u224D\u20D2':'nvap','\u22AC':'nvdash','\u22AD':'nvDash','\u22AE':'nVdash','\u22AF':'nVDash','\u2265\u20D2':'nvge','>\u20D2':'nvgt','\u2904':'nvHarr','\u29DE':'nvinfin','\u2902':'nvlArr','\u2264\u20D2':'nvle','<\u20D2':'nvlt','\u22B4\u20D2':'nvltrie','\u2903':'nvrArr','\u22B5\u20D2':'nvrtrie','\u223C\u20D2':'nvsim','\u2923':'nwarhk','\u2196':'nwarr','\u21D6':'nwArr','\u2927':'nwnear','\xD3':'Oacute','\xF3':'oacute','\xD4':'Ocirc','\xF4':'ocirc','\u041E':'Ocy','\u043E':'ocy','\u0150':'Odblac','\u0151':'odblac','\u2A38':'odiv','\u29BC':'odsold','\u0152':'OElig','\u0153':'oelig','\u29BF':'ofcir','\uD835\uDD12':'Ofr','\uD835\uDD2C':'ofr','\u02DB':'ogon','\xD2':'Ograve','\xF2':'ograve','\u29C1':'ogt','\u29B5':'ohbar','\u03A9':'ohm','\u29BE':'olcir','\u29BB':'olcross','\u203E':'oline','\u29C0':'olt','\u014C':'Omacr','\u014D':'omacr','\u03C9':'omega','\u039F':'Omicron','\u03BF':'omicron','\u29B6':'omid','\uD835\uDD46':'Oopf','\uD835\uDD60':'oopf','\u29B7':'opar','\u29B9':'operp','\u2A54':'Or','\u2228':'or','\u2A5D':'ord','\u2134':'oscr','\xAA':'ordf','\xBA':'ordm','\u22B6':'origof','\u2A56':'oror','\u2A57':'orslope','\u2A5B':'orv','\uD835\uDCAA':'Oscr','\xD8':'Oslash','\xF8':'oslash','\u2298':'osol','\xD5':'Otilde','\xF5':'otilde','\u2A36':'otimesas','\u2A37':'Otimes','\xD6':'Ouml','\xF6':'ouml','\u233D':'ovbar','\u23DE':'OverBrace','\u23B4':'tbrk','\u23DC':'OverParenthesis','\xB6':'para','\u2AF3':'parsim','\u2AFD':'parsl','\u2202':'part','\u041F':'Pcy','\u043F':'pcy','%':'percnt','.':'period','\u2030':'permil','\u2031':'pertenk','\uD835\uDD13':'Pfr','\uD835\uDD2D':'pfr','\u03A6':'Phi','\u03C6':'phi','\u03D5':'phiv','\u260E':'phone','\u03A0':'Pi','\u03C0':'pi','\u03D6':'piv','\u210E':'planckh','\u2A23':'plusacir','\u2A22':'pluscir','+':'plus','\u2A25':'plusdu','\u2A72':'pluse','\xB1':'pm','\u2A26':'plussim','\u2A27':'plustwo','\u2A15':'pointint','\uD835\uDD61':'popf','\u2119':'Popf','\xA3':'pound','\u2AB7':'prap','\u2ABB':'Pr','\u227A':'pr','\u227C':'prcue','\u2AAF':'pre','\u227E':'prsim','\u2AB9':'prnap','\u2AB5':'prnE','\u22E8':'prnsim','\u2AB3':'prE','\u2032':'prime','\u2033':'Prime','\u220F':'prod','\u232E':'profalar','\u2312':'profline','\u2313':'profsurf','\u221D':'prop','\u22B0':'prurel','\uD835\uDCAB':'Pscr','\uD835\uDCC5':'pscr','\u03A8':'Psi','\u03C8':'psi','\u2008':'puncsp','\uD835\uDD14':'Qfr','\uD835\uDD2E':'qfr','\uD835\uDD62':'qopf','\u211A':'Qopf','\u2057':'qprime','\uD835\uDCAC':'Qscr','\uD835\uDCC6':'qscr','\u2A16':'quatint','?':'quest','"':'quot','\u21DB':'rAarr','\u223D\u0331':'race','\u0154':'Racute','\u0155':'racute','\u221A':'Sqrt','\u29B3':'raemptyv','\u27E9':'rang','\u27EB':'Rang','\u2992':'rangd','\u29A5':'range','\xBB':'raquo','\u2975':'rarrap','\u21E5':'rarrb','\u2920':'rarrbfs','\u2933':'rarrc','\u2192':'rarr','\u21A0':'Rarr','\u291E':'rarrfs','\u2945':'rarrpl','\u2974':'rarrsim','\u2916':'Rarrtl','\u21A3':'rarrtl','\u219D':'rarrw','\u291A':'ratail','\u291C':'rAtail','\u2236':'ratio','\u2773':'rbbrk','}':'rcub',']':'rsqb','\u298C':'rbrke','\u298E':'rbrksld','\u2990':'rbrkslu','\u0158':'Rcaron','\u0159':'rcaron','\u0156':'Rcedil','\u0157':'rcedil','\u2309':'rceil','\u0420':'Rcy','\u0440':'rcy','\u2937':'rdca','\u2969':'rdldhar','\u21B3':'rdsh','\u211C':'Re','\u211B':'Rscr','\u211D':'Ropf','\u25AD':'rect','\u297D':'rfisht','\u230B':'rfloor','\uD835\uDD2F':'rfr','\u2964':'rHar','\u21C0':'rharu','\u296C':'rharul','\u03A1':'Rho','\u03C1':'rho','\u03F1':'rhov','\u21C4':'rlarr','\u27E7':'robrk','\u295D':'RightDownTeeVector','\u2955':'RightDownVectorBar','\u21C9':'rrarr','\u22A2':'vdash','\u295B':'RightTeeVector','\u22CC':'rthree','\u29D0':'RightTriangleBar','\u22B3':'vrtri','\u22B5':'rtrie','\u294F':'RightUpDownVector','\u295C':'RightUpTeeVector','\u2954':'RightUpVectorBar','\u21BE':'uharr','\u2953':'RightVectorBar','\u02DA':'ring','\u200F':'rlm','\u23B1':'rmoust','\u2AEE':'rnmid','\u27ED':'roang','\u21FE':'roarr','\u2986':'ropar','\uD835\uDD63':'ropf','\u2A2E':'roplus','\u2A35':'rotimes','\u2970':'RoundImplies',')':'rpar','\u2994':'rpargt','\u2A12':'rppolint','\u203A':'rsaquo','\uD835\uDCC7':'rscr','\u21B1':'rsh','\u22CA':'rtimes','\u25B9':'rtri','\u29CE':'rtriltri','\u29F4':'RuleDelayed','\u2968':'ruluhar','\u211E':'rx','\u015A':'Sacute','\u015B':'sacute','\u2AB8':'scap','\u0160':'Scaron','\u0161':'scaron','\u2ABC':'Sc','\u227B':'sc','\u227D':'sccue','\u2AB0':'sce','\u2AB4':'scE','\u015E':'Scedil','\u015F':'scedil','\u015C':'Scirc','\u015D':'scirc','\u2ABA':'scnap','\u2AB6':'scnE','\u22E9':'scnsim','\u2A13':'scpolint','\u227F':'scsim','\u0421':'Scy','\u0441':'scy','\u22C5':'sdot','\u2A66':'sdote','\u21D8':'seArr','\xA7':'sect',';':'semi','\u2929':'tosa','\u2736':'sext','\uD835\uDD16':'Sfr','\uD835\uDD30':'sfr','\u266F':'sharp','\u0429':'SHCHcy','\u0449':'shchcy','\u0428':'SHcy','\u0448':'shcy','\u2191':'uarr','\xAD':'shy','\u03A3':'Sigma','\u03C3':'sigma','\u03C2':'sigmaf','\u223C':'sim','\u2A6A':'simdot','\u2243':'sime','\u2A9E':'simg','\u2AA0':'simgE','\u2A9D':'siml','\u2A9F':'simlE','\u2246':'simne','\u2A24':'simplus','\u2972':'simrarr','\u2A33':'smashp','\u29E4':'smeparsl','\u2323':'smile','\u2AAA':'smt','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u042C':'SOFTcy','\u044C':'softcy','\u233F':'solbar','\u29C4':'solb','/':'sol','\uD835\uDD4A':'Sopf','\uD835\uDD64':'sopf','\u2660':'spades','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u228F':'sqsub','\u2291':'sqsube','\u2290':'sqsup','\u2292':'sqsupe','\u25A1':'squ','\uD835\uDCAE':'Sscr','\uD835\uDCC8':'sscr','\u22C6':'Star','\u2606':'star','\u2282':'sub','\u22D0':'Sub','\u2ABD':'subdot','\u2AC5':'subE','\u2286':'sube','\u2AC3':'subedot','\u2AC1':'submult','\u2ACB':'subnE','\u228A':'subne','\u2ABF':'subplus','\u2979':'subrarr','\u2AC7':'subsim','\u2AD5':'subsub','\u2AD3':'subsup','\u2211':'sum','\u266A':'sung','\xB9':'sup1','\xB2':'sup2','\xB3':'sup3','\u2283':'sup','\u22D1':'Sup','\u2ABE':'supdot','\u2AD8':'supdsub','\u2AC6':'supE','\u2287':'supe','\u2AC4':'supedot','\u27C9':'suphsol','\u2AD7':'suphsub','\u297B':'suplarr','\u2AC2':'supmult','\u2ACC':'supnE','\u228B':'supne','\u2AC0':'supplus','\u2AC8':'supsim','\u2AD4':'supsub','\u2AD6':'supsup','\u21D9':'swArr','\u292A':'swnwar','\xDF':'szlig','\t':'Tab','\u2316':'target','\u03A4':'Tau','\u03C4':'tau','\u0164':'Tcaron','\u0165':'tcaron','\u0162':'Tcedil','\u0163':'tcedil','\u0422':'Tcy','\u0442':'tcy','\u20DB':'tdot','\u2315':'telrec','\uD835\uDD17':'Tfr','\uD835\uDD31':'tfr','\u2234':'there4','\u0398':'Theta','\u03B8':'theta','\u03D1':'thetav','\u205F\u200A':'ThickSpace','\u2009':'thinsp','\xDE':'THORN','\xFE':'thorn','\u2A31':'timesbar','\xD7':'times','\u2A30':'timesd','\u2336':'topbot','\u2AF1':'topcir','\uD835\uDD4B':'Topf','\uD835\uDD65':'topf','\u2ADA':'topfork','\u2034':'tprime','\u2122':'trade','\u25B5':'utri','\u225C':'trie','\u25EC':'tridot','\u2A3A':'triminus','\u2A39':'triplus','\u29CD':'trisb','\u2A3B':'tritime','\u23E2':'trpezium','\uD835\uDCAF':'Tscr','\uD835\uDCC9':'tscr','\u0426':'TScy','\u0446':'tscy','\u040B':'TSHcy','\u045B':'tshcy','\u0166':'Tstrok','\u0167':'tstrok','\xDA':'Uacute','\xFA':'uacute','\u219F':'Uarr','\u2949':'Uarrocir','\u040E':'Ubrcy','\u045E':'ubrcy','\u016C':'Ubreve','\u016D':'ubreve','\xDB':'Ucirc','\xFB':'ucirc','\u0423':'Ucy','\u0443':'ucy','\u21C5':'udarr','\u0170':'Udblac','\u0171':'udblac','\u296E':'udhar','\u297E':'ufisht','\uD835\uDD18':'Ufr','\uD835\uDD32':'ufr','\xD9':'Ugrave','\xF9':'ugrave','\u2963':'uHar','\u2580':'uhblk','\u231C':'ulcorn','\u230F':'ulcrop','\u25F8':'ultri','\u016A':'Umacr','\u016B':'umacr','\u23DF':'UnderBrace','\u23DD':'UnderParenthesis','\u228E':'uplus','\u0172':'Uogon','\u0173':'uogon','\uD835\uDD4C':'Uopf','\uD835\uDD66':'uopf','\u2912':'UpArrowBar','\u2195':'varr','\u03C5':'upsi','\u03D2':'Upsi','\u03A5':'Upsilon','\u21C8':'uuarr','\u231D':'urcorn','\u230E':'urcrop','\u016E':'Uring','\u016F':'uring','\u25F9':'urtri','\uD835\uDCB0':'Uscr','\uD835\uDCCA':'uscr','\u22F0':'utdot','\u0168':'Utilde','\u0169':'utilde','\xDC':'Uuml','\xFC':'uuml','\u29A7':'uwangle','\u299C':'vangrt','\u228A\uFE00':'vsubne','\u2ACB\uFE00':'vsubnE','\u228B\uFE00':'vsupne','\u2ACC\uFE00':'vsupnE','\u2AE8':'vBar','\u2AEB':'Vbar','\u2AE9':'vBarv','\u0412':'Vcy','\u0432':'vcy','\u22A9':'Vdash','\u22AB':'VDash','\u2AE6':'Vdashl','\u22BB':'veebar','\u225A':'veeeq','\u22EE':'vellip','|':'vert','\u2016':'Vert','\u2758':'VerticalSeparator','\u2240':'wr','\uD835\uDD19':'Vfr','\uD835\uDD33':'vfr','\uD835\uDD4D':'Vopf','\uD835\uDD67':'vopf','\uD835\uDCB1':'Vscr','\uD835\uDCCB':'vscr','\u22AA':'Vvdash','\u299A':'vzigzag','\u0174':'Wcirc','\u0175':'wcirc','\u2A5F':'wedbar','\u2259':'wedgeq','\u2118':'wp','\uD835\uDD1A':'Wfr','\uD835\uDD34':'wfr','\uD835\uDD4E':'Wopf','\uD835\uDD68':'wopf','\uD835\uDCB2':'Wscr','\uD835\uDCCC':'wscr','\uD835\uDD1B':'Xfr','\uD835\uDD35':'xfr','\u039E':'Xi','\u03BE':'xi','\u22FB':'xnis','\uD835\uDD4F':'Xopf','\uD835\uDD69':'xopf','\uD835\uDCB3':'Xscr','\uD835\uDCCD':'xscr','\xDD':'Yacute','\xFD':'yacute','\u042F':'YAcy','\u044F':'yacy','\u0176':'Ycirc','\u0177':'ycirc','\u042B':'Ycy','\u044B':'ycy','\xA5':'yen','\uD835\uDD1C':'Yfr','\uD835\uDD36':'yfr','\u0407':'YIcy','\u0457':'yicy','\uD835\uDD50':'Yopf','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDCCE':'yscr','\u042E':'YUcy','\u044E':'yucy','\xFF':'yuml','\u0178':'Yuml','\u0179':'Zacute','\u017A':'zacute','\u017D':'Zcaron','\u017E':'zcaron','\u0417':'Zcy','\u0437':'zcy','\u017B':'Zdot','\u017C':'zdot','\u2128':'Zfr','\u0396':'Zeta','\u03B6':'zeta','\uD835\uDD37':'zfr','\u0416':'ZHcy','\u0436':'zhcy','\u21DD':'zigrarr','\uD835\uDD6B':'zopf','\uD835\uDCB5':'Zscr','\uD835\uDCCF':'zscr','\u200D':'zwj','\u200C':'zwnj'}; + + var regexEscape = /["&'<>`]/g; + var escapeMap = { + '"': '"', + '&': '&', + '\'': ''', + '<': '<', + // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the + // following is not strictly necessary unless it’s part of a tag or an + // unquoted attribute value. We’re only escaping it to support those + // situations, and for XML support. + '>': '>', + // In Internet Explorer ≤ 8, the backtick character can be used + // to break out of (un)quoted attribute values or HTML comments. + // See http://html5sec.org/#102, http://html5sec.org/#108, and + // http://html5sec.org/#133. + '`': '`' + }; + + var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/; + var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|iacute|Uacute|plusmn|otilde|Otilde|Agrave|agrave|yacute|Yacute|oslash|Oslash|Atilde|atilde|brvbar|Ccedil|ccedil|ograve|curren|divide|Eacute|eacute|Ograve|oacute|Egrave|egrave|ugrave|frac12|frac14|frac34|Ugrave|Oacute|Iacute|ntilde|Ntilde|uacute|middot|Igrave|igrave|iquest|aacute|laquo|THORN|micro|iexcl|icirc|Icirc|Acirc|ucirc|ecirc|Ocirc|ocirc|Ecirc|Ucirc|aring|Aring|aelig|AElig|acute|pound|raquo|acirc|times|thorn|szlig|cedil|COPY|Auml|ordf|ordm|uuml|macr|Uuml|auml|Ouml|ouml|para|nbsp|Euml|quot|QUOT|euml|yuml|cent|sect|copy|sup1|sup2|sup3|Iuml|iuml|shy|eth|reg|not|yen|amp|AMP|REG|uml|ETH|deg|gt|GT|LT|lt)([=a-zA-Z0-9])?/g; + var decodeMap = {'Aacute':'\xC1','aacute':'\xE1','Abreve':'\u0102','abreve':'\u0103','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','Acy':'\u0410','acy':'\u0430','AElig':'\xC6','aelig':'\xE6','af':'\u2061','Afr':'\uD835\uDD04','afr':'\uD835\uDD1E','Agrave':'\xC0','agrave':'\xE0','alefsym':'\u2135','aleph':'\u2135','Alpha':'\u0391','alpha':'\u03B1','Amacr':'\u0100','amacr':'\u0101','amalg':'\u2A3F','amp':'&','AMP':'&','andand':'\u2A55','And':'\u2A53','and':'\u2227','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angmsd':'\u2221','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','Aogon':'\u0104','aogon':'\u0105','Aopf':'\uD835\uDD38','aopf':'\uD835\uDD52','apacir':'\u2A6F','ap':'\u2248','apE':'\u2A70','ape':'\u224A','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','Aring':'\xC5','aring':'\xE5','Ascr':'\uD835\uDC9C','ascr':'\uD835\uDCB6','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','Bcy':'\u0411','bcy':'\u0431','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','Beta':'\u0392','beta':'\u03B2','beth':'\u2136','between':'\u226C','Bfr':'\uD835\uDD05','bfr':'\uD835\uDD1F','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bNot':'\u2AED','bnot':'\u2310','Bopf':'\uD835\uDD39','bopf':'\uD835\uDD53','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxHd':'\u2564','boxhD':'\u2565','boxHD':'\u2566','boxhu':'\u2534','boxHu':'\u2567','boxhU':'\u2568','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsolb':'\u29C5','bsol':'\\','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpE':'\u2AAE','bumpe':'\u224F','Bumpeq':'\u224E','bumpeq':'\u224F','Cacute':'\u0106','cacute':'\u0107','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','cap':'\u2229','Cap':'\u22D2','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','Ccaron':'\u010C','ccaron':'\u010D','Ccedil':'\xC7','ccedil':'\xE7','Ccirc':'\u0108','ccirc':'\u0109','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','Cdot':'\u010A','cdot':'\u010B','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','CHcy':'\u0427','chcy':'\u0447','check':'\u2713','checkmark':'\u2713','Chi':'\u03A7','chi':'\u03C7','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cir':'\u25CB','cirE':'\u29C3','cire':'\u2257','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','Colone':'\u2A74','colone':'\u2254','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','Cscr':'\uD835\uDC9E','cscr':'\uD835\uDCB8','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cup':'\u222A','Cup':'\u22D3','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','Darr':'\u21A1','dArr':'\u21D3','dash':'\u2010','Dashv':'\u2AE4','dashv':'\u22A3','dbkarow':'\u290F','dblac':'\u02DD','Dcaron':'\u010E','dcaron':'\u010F','Dcy':'\u0414','dcy':'\u0434','ddagger':'\u2021','ddarr':'\u21CA','DD':'\u2145','dd':'\u2146','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','Delta':'\u0394','delta':'\u03B4','demptyv':'\u29B1','dfisht':'\u297F','Dfr':'\uD835\uDD07','dfr':'\uD835\uDD21','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','DJcy':'\u0402','djcy':'\u0452','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','Dopf':'\uD835\uDD3B','dopf':'\uD835\uDD55','Dot':'\xA8','dot':'\u02D9','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','DownArrowBar':'\u2913','downarrow':'\u2193','DownArrow':'\u2193','Downarrow':'\u21D3','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVectorBar':'\u2956','DownLeftVector':'\u21BD','DownRightTeeVector':'\u295F','DownRightVectorBar':'\u2957','DownRightVector':'\u21C1','DownTeeArrow':'\u21A7','DownTee':'\u22A4','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','Dscr':'\uD835\uDC9F','dscr':'\uD835\uDCB9','DScy':'\u0405','dscy':'\u0455','dsol':'\u29F6','Dstrok':'\u0110','dstrok':'\u0111','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','DZcy':'\u040F','dzcy':'\u045F','dzigrarr':'\u27FF','Eacute':'\xC9','eacute':'\xE9','easter':'\u2A6E','Ecaron':'\u011A','ecaron':'\u011B','Ecirc':'\xCA','ecirc':'\xEA','ecir':'\u2256','ecolon':'\u2255','Ecy':'\u042D','ecy':'\u044D','eDDot':'\u2A77','Edot':'\u0116','edot':'\u0117','eDot':'\u2251','ee':'\u2147','efDot':'\u2252','Efr':'\uD835\uDD08','efr':'\uD835\uDD22','eg':'\u2A9A','Egrave':'\xC8','egrave':'\xE8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','Emacr':'\u0112','emacr':'\u0113','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp13':'\u2004','emsp14':'\u2005','emsp':'\u2003','ENG':'\u014A','eng':'\u014B','ensp':'\u2002','Eogon':'\u0118','eogon':'\u0119','Eopf':'\uD835\uDD3C','eopf':'\uD835\uDD56','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','Epsilon':'\u0395','epsilon':'\u03B5','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','Esim':'\u2A73','esim':'\u2242','Eta':'\u0397','eta':'\u03B7','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','Fcy':'\u0424','fcy':'\u0444','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','Ffr':'\uD835\uDD09','ffr':'\uD835\uDD23','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','Fopf':'\uD835\uDD3D','fopf':'\uD835\uDD57','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','Gamma':'\u0393','gamma':'\u03B3','Gammad':'\u03DC','gammad':'\u03DD','gap':'\u2A86','Gbreve':'\u011E','gbreve':'\u011F','Gcedil':'\u0122','Gcirc':'\u011C','gcirc':'\u011D','Gcy':'\u0413','gcy':'\u0433','Gdot':'\u0120','gdot':'\u0121','ge':'\u2265','gE':'\u2267','gEl':'\u2A8C','gel':'\u22DB','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','gescc':'\u2AA9','ges':'\u2A7E','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','Gfr':'\uD835\uDD0A','gfr':'\uD835\uDD24','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','GJcy':'\u0403','gjcy':'\u0453','gla':'\u2AA5','gl':'\u2277','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','Gopf':'\uD835\uDD3E','gopf':'\uD835\uDD58','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','Gscr':'\uD835\uDCA2','gscr':'\u210A','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gtcc':'\u2AA7','gtcir':'\u2A7A','gt':'>','GT':'>','Gt':'\u226B','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','HARDcy':'\u042A','hardcy':'\u044A','harrcir':'\u2948','harr':'\u2194','hArr':'\u21D4','harrw':'\u21AD','Hat':'^','hbar':'\u210F','Hcirc':'\u0124','hcirc':'\u0125','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','Hstrok':'\u0126','hstrok':'\u0127','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','Iacute':'\xCD','iacute':'\xED','ic':'\u2063','Icirc':'\xCE','icirc':'\xEE','Icy':'\u0418','icy':'\u0438','Idot':'\u0130','IEcy':'\u0415','iecy':'\u0435','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','Igrave':'\xCC','igrave':'\xEC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','IJlig':'\u0132','ijlig':'\u0133','Imacr':'\u012A','imacr':'\u012B','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','Im':'\u2111','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','incare':'\u2105','in':'\u2208','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','intcal':'\u22BA','int':'\u222B','Int':'\u222C','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','IOcy':'\u0401','iocy':'\u0451','Iogon':'\u012E','iogon':'\u012F','Iopf':'\uD835\uDD40','iopf':'\uD835\uDD5A','Iota':'\u0399','iota':'\u03B9','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','Itilde':'\u0128','itilde':'\u0129','Iukcy':'\u0406','iukcy':'\u0456','Iuml':'\xCF','iuml':'\xEF','Jcirc':'\u0134','jcirc':'\u0135','Jcy':'\u0419','jcy':'\u0439','Jfr':'\uD835\uDD0D','jfr':'\uD835\uDD27','jmath':'\u0237','Jopf':'\uD835\uDD41','jopf':'\uD835\uDD5B','Jscr':'\uD835\uDCA5','jscr':'\uD835\uDCBF','Jsercy':'\u0408','jsercy':'\u0458','Jukcy':'\u0404','jukcy':'\u0454','Kappa':'\u039A','kappa':'\u03BA','kappav':'\u03F0','Kcedil':'\u0136','kcedil':'\u0137','Kcy':'\u041A','kcy':'\u043A','Kfr':'\uD835\uDD0E','kfr':'\uD835\uDD28','kgreen':'\u0138','KHcy':'\u0425','khcy':'\u0445','KJcy':'\u040C','kjcy':'\u045C','Kopf':'\uD835\uDD42','kopf':'\uD835\uDD5C','Kscr':'\uD835\uDCA6','kscr':'\uD835\uDCC0','lAarr':'\u21DA','Lacute':'\u0139','lacute':'\u013A','laemptyv':'\u29B4','lagran':'\u2112','Lambda':'\u039B','lambda':'\u03BB','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larrb':'\u21E4','larrbfs':'\u291F','larr':'\u2190','Larr':'\u219E','lArr':'\u21D0','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','latail':'\u2919','lAtail':'\u291B','lat':'\u2AAB','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','Lcaron':'\u013D','lcaron':'\u013E','Lcedil':'\u013B','lcedil':'\u013C','lceil':'\u2308','lcub':'{','Lcy':'\u041B','lcy':'\u043B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','LeftArrowBar':'\u21E4','leftarrow':'\u2190','LeftArrow':'\u2190','Leftarrow':'\u21D0','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVectorBar':'\u2959','LeftDownVector':'\u21C3','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','LeftRightArrow':'\u2194','Leftrightarrow':'\u21D4','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTeeArrow':'\u21A4','LeftTee':'\u22A3','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangleBar':'\u29CF','LeftTriangle':'\u22B2','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVectorBar':'\u2958','LeftUpVector':'\u21BF','LeftVectorBar':'\u2952','LeftVector':'\u21BC','lEg':'\u2A8B','leg':'\u22DA','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','lescc':'\u2AA8','les':'\u2A7D','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','Lfr':'\uD835\uDD0F','lfr':'\uD835\uDD29','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','LJcy':'\u0409','ljcy':'\u0459','llarr':'\u21C7','ll':'\u226A','Ll':'\u22D8','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','Lmidot':'\u013F','lmidot':'\u0140','lmoustache':'\u23B0','lmoust':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','LongLeftArrow':'\u27F5','Longleftarrow':'\u27F8','longleftrightarrow':'\u27F7','LongLeftRightArrow':'\u27F7','Longleftrightarrow':'\u27FA','longmapsto':'\u27FC','longrightarrow':'\u27F6','LongRightArrow':'\u27F6','Longrightarrow':'\u27F9','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','Lopf':'\uD835\uDD43','lopf':'\uD835\uDD5D','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','Lstrok':'\u0141','lstrok':'\u0142','ltcc':'\u2AA6','ltcir':'\u2A79','lt':'<','LT':'<','Lt':'\u226A','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','Map':'\u2905','map':'\u21A6','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','Mcy':'\u041C','mcy':'\u043C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','Mfr':'\uD835\uDD10','mfr':'\uD835\uDD2A','mho':'\u2127','micro':'\xB5','midast':'*','midcir':'\u2AF0','mid':'\u2223','middot':'\xB7','minusb':'\u229F','minus':'\u2212','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','Mopf':'\uD835\uDD44','mopf':'\uD835\uDD5E','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','Mu':'\u039C','mu':'\u03BC','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','Nacute':'\u0143','nacute':'\u0144','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natural':'\u266E','naturals':'\u2115','natur':'\u266E','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','Ncaron':'\u0147','ncaron':'\u0148','Ncedil':'\u0145','ncedil':'\u0146','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','Ncy':'\u041D','ncy':'\u043D','ndash':'\u2013','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','ne':'\u2260','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','Nfr':'\uD835\uDD11','nfr':'\uD835\uDD2B','ngE':'\u2267\u0338','nge':'\u2271','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','nGt':'\u226B\u20D2','ngt':'\u226F','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','NJcy':'\u040A','njcy':'\u045A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nlE':'\u2266\u0338','nle':'\u2270','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nLt':'\u226A\u20D2','nlt':'\u226E','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','Not':'\u2AEC','not':'\xAC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangle':'\u22EA','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangle':'\u22EB','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','nparallel':'\u2226','npar':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','nprec':'\u2280','npreceq':'\u2AAF\u0338','npre':'\u2AAF\u0338','nrarrc':'\u2933\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','Nscr':'\uD835\uDCA9','nscr':'\uD835\uDCC3','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsubE':'\u2AC5\u0338','nsube':'\u2288','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupE':'\u2AC6\u0338','nsupe':'\u2289','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','Ntilde':'\xD1','ntilde':'\xF1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','Nu':'\u039D','nu':'\u03BD','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','Oacute':'\xD3','oacute':'\xF3','oast':'\u229B','Ocirc':'\xD4','ocirc':'\xF4','ocir':'\u229A','Ocy':'\u041E','ocy':'\u043E','odash':'\u229D','Odblac':'\u0150','odblac':'\u0151','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','OElig':'\u0152','oelig':'\u0153','ofcir':'\u29BF','Ofr':'\uD835\uDD12','ofr':'\uD835\uDD2C','ogon':'\u02DB','Ograve':'\xD2','ograve':'\xF2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','Omacr':'\u014C','omacr':'\u014D','Omega':'\u03A9','omega':'\u03C9','Omicron':'\u039F','omicron':'\u03BF','omid':'\u29B6','ominus':'\u2296','Oopf':'\uD835\uDD46','oopf':'\uD835\uDD60','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','orarr':'\u21BB','Or':'\u2A54','or':'\u2228','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','Oscr':'\uD835\uDCAA','oscr':'\u2134','Oslash':'\xD8','oslash':'\xF8','osol':'\u2298','Otilde':'\xD5','otilde':'\xF5','otimesas':'\u2A36','Otimes':'\u2A37','otimes':'\u2297','Ouml':'\xD6','ouml':'\xF6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','para':'\xB6','parallel':'\u2225','par':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','Pcy':'\u041F','pcy':'\u043F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','Pfr':'\uD835\uDD13','pfr':'\uD835\uDD2D','Phi':'\u03A6','phi':'\u03C6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','Pi':'\u03A0','pi':'\u03C0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plus':'+','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','prap':'\u2AB7','Pr':'\u2ABB','pr':'\u227A','prcue':'\u227C','precapprox':'\u2AB7','prec':'\u227A','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','pre':'\u2AAF','prE':'\u2AB3','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportional':'\u221D','Proportion':'\u2237','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','Pscr':'\uD835\uDCAB','pscr':'\uD835\uDCC5','Psi':'\u03A8','psi':'\u03C8','puncsp':'\u2008','Qfr':'\uD835\uDD14','qfr':'\uD835\uDD2E','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','Qscr':'\uD835\uDCAC','qscr':'\uD835\uDCC6','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','Racute':'\u0154','racute':'\u0155','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarr':'\u2192','Rarr':'\u21A0','rArr':'\u21D2','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','Rarrtl':'\u2916','rarrtl':'\u21A3','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','Rcaron':'\u0158','rcaron':'\u0159','Rcedil':'\u0156','rcedil':'\u0157','rceil':'\u2309','rcub':'}','Rcy':'\u0420','rcy':'\u0440','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','Re':'\u211C','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','Rho':'\u03A1','rho':'\u03C1','rhov':'\u03F1','RightAngleBracket':'\u27E9','RightArrowBar':'\u21E5','rightarrow':'\u2192','RightArrow':'\u2192','Rightarrow':'\u21D2','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVectorBar':'\u2955','RightDownVector':'\u21C2','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTeeArrow':'\u21A6','RightTee':'\u22A2','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangleBar':'\u29D0','RightTriangle':'\u22B3','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVectorBar':'\u2954','RightUpVector':'\u21BE','RightVectorBar':'\u2953','RightVector':'\u21C0','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoustache':'\u23B1','rmoust':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','Sacute':'\u015A','sacute':'\u015B','sbquo':'\u201A','scap':'\u2AB8','Scaron':'\u0160','scaron':'\u0161','Sc':'\u2ABC','sc':'\u227B','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','Scedil':'\u015E','scedil':'\u015F','Scirc':'\u015C','scirc':'\u015D','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','Scy':'\u0421','scy':'\u0441','sdotb':'\u22A1','sdot':'\u22C5','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','Sfr':'\uD835\uDD16','sfr':'\uD835\uDD30','sfrown':'\u2322','sharp':'\u266F','SHCHcy':'\u0429','shchcy':'\u0449','SHcy':'\u0428','shcy':'\u0448','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','Sigma':'\u03A3','sigma':'\u03C3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','SOFTcy':'\u042C','softcy':'\u044C','solbar':'\u233F','solb':'\u29C4','sol':'/','Sopf':'\uD835\uDD4A','sopf':'\uD835\uDD64','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squ':'\u25A1','squf':'\u25AA','srarr':'\u2192','Sscr':'\uD835\uDCAE','sscr':'\uD835\uDCC8','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','Star':'\u22C6','star':'\u2606','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','subE':'\u2AC5','sube':'\u2286','subedot':'\u2AC3','submult':'\u2AC1','subnE':'\u2ACB','subne':'\u228A','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succapprox':'\u2AB8','succ':'\u227B','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','sup':'\u2283','Sup':'\u22D1','supdot':'\u2ABE','supdsub':'\u2AD8','supE':'\u2AC6','supe':'\u2287','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supnE':'\u2ACC','supne':'\u228B','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','Tau':'\u03A4','tau':'\u03C4','tbrk':'\u23B4','Tcaron':'\u0164','tcaron':'\u0165','Tcedil':'\u0162','tcedil':'\u0163','Tcy':'\u0422','tcy':'\u0442','tdot':'\u20DB','telrec':'\u2315','Tfr':'\uD835\uDD17','tfr':'\uD835\uDD31','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','Theta':'\u0398','theta':'\u03B8','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','ThinSpace':'\u2009','thinsp':'\u2009','thkap':'\u2248','thksim':'\u223C','THORN':'\xDE','thorn':'\xFE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','timesbar':'\u2A31','timesb':'\u22A0','times':'\xD7','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','topbot':'\u2336','topcir':'\u2AF1','top':'\u22A4','Topf':'\uD835\uDD4B','topf':'\uD835\uDD65','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','Tscr':'\uD835\uDCAF','tscr':'\uD835\uDCC9','TScy':'\u0426','tscy':'\u0446','TSHcy':'\u040B','tshcy':'\u045B','Tstrok':'\u0166','tstrok':'\u0167','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','Uacute':'\xDA','uacute':'\xFA','uarr':'\u2191','Uarr':'\u219F','uArr':'\u21D1','Uarrocir':'\u2949','Ubrcy':'\u040E','ubrcy':'\u045E','Ubreve':'\u016C','ubreve':'\u016D','Ucirc':'\xDB','ucirc':'\xFB','Ucy':'\u0423','ucy':'\u0443','udarr':'\u21C5','Udblac':'\u0170','udblac':'\u0171','udhar':'\u296E','ufisht':'\u297E','Ufr':'\uD835\uDD18','ufr':'\uD835\uDD32','Ugrave':'\xD9','ugrave':'\xF9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','Umacr':'\u016A','umacr':'\u016B','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','Uogon':'\u0172','uogon':'\u0173','Uopf':'\uD835\uDD4C','uopf':'\uD835\uDD66','UpArrowBar':'\u2912','uparrow':'\u2191','UpArrow':'\u2191','Uparrow':'\u21D1','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','UpDownArrow':'\u2195','Updownarrow':'\u21D5','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','Upsilon':'\u03A5','upsilon':'\u03C5','UpTeeArrow':'\u21A5','UpTee':'\u22A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','Uring':'\u016E','uring':'\u016F','urtri':'\u25F9','Uscr':'\uD835\uDCB0','uscr':'\uD835\uDCCA','utdot':'\u22F0','Utilde':'\u0168','utilde':'\u0169','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','Uuml':'\xDC','uuml':'\xFC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','Vcy':'\u0412','vcy':'\u0432','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','veebar':'\u22BB','vee':'\u2228','Vee':'\u22C1','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','Vfr':'\uD835\uDD19','vfr':'\uD835\uDD33','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','Vopf':'\uD835\uDD4D','vopf':'\uD835\uDD67','vprop':'\u221D','vrtri':'\u22B3','Vscr':'\uD835\uDCB1','vscr':'\uD835\uDCCB','vsubnE':'\u2ACB\uFE00','vsubne':'\u228A\uFE00','vsupnE':'\u2ACC\uFE00','vsupne':'\u228B\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','Wcirc':'\u0174','wcirc':'\u0175','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','Wfr':'\uD835\uDD1A','wfr':'\uD835\uDD34','Wopf':'\uD835\uDD4E','wopf':'\uD835\uDD68','wp':'\u2118','wr':'\u2240','wreath':'\u2240','Wscr':'\uD835\uDCB2','wscr':'\uD835\uDCCC','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','Xfr':'\uD835\uDD1B','xfr':'\uD835\uDD35','xharr':'\u27F7','xhArr':'\u27FA','Xi':'\u039E','xi':'\u03BE','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','Xopf':'\uD835\uDD4F','xopf':'\uD835\uDD69','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','Xscr':'\uD835\uDCB3','xscr':'\uD835\uDCCD','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','Yacute':'\xDD','yacute':'\xFD','YAcy':'\u042F','yacy':'\u044F','Ycirc':'\u0176','ycirc':'\u0177','Ycy':'\u042B','ycy':'\u044B','yen':'\xA5','Yfr':'\uD835\uDD1C','yfr':'\uD835\uDD36','YIcy':'\u0407','yicy':'\u0457','Yopf':'\uD835\uDD50','yopf':'\uD835\uDD6A','Yscr':'\uD835\uDCB4','yscr':'\uD835\uDCCE','YUcy':'\u042E','yucy':'\u044E','yuml':'\xFF','Yuml':'\u0178','Zacute':'\u0179','zacute':'\u017A','Zcaron':'\u017D','zcaron':'\u017E','Zcy':'\u0417','zcy':'\u0437','Zdot':'\u017B','zdot':'\u017C','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','Zeta':'\u0396','zeta':'\u03B6','zfr':'\uD835\uDD37','Zfr':'\u2128','ZHcy':'\u0416','zhcy':'\u0436','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','Zscr':'\uD835\uDCB5','zscr':'\uD835\uDCCF','zwj':'\u200D','zwnj':'\u200C'}; + var decodeMapLegacy = {'Aacute':'\xC1','aacute':'\xE1','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','AElig':'\xC6','aelig':'\xE6','Agrave':'\xC0','agrave':'\xE0','amp':'&','AMP':'&','Aring':'\xC5','aring':'\xE5','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','brvbar':'\xA6','Ccedil':'\xC7','ccedil':'\xE7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','Eacute':'\xC9','eacute':'\xE9','Ecirc':'\xCA','ecirc':'\xEA','Egrave':'\xC8','egrave':'\xE8','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','Iacute':'\xCD','iacute':'\xED','Icirc':'\xCE','icirc':'\xEE','iexcl':'\xA1','Igrave':'\xCC','igrave':'\xEC','iquest':'\xBF','Iuml':'\xCF','iuml':'\xEF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','Ntilde':'\xD1','ntilde':'\xF1','Oacute':'\xD3','oacute':'\xF3','Ocirc':'\xD4','ocirc':'\xF4','Ograve':'\xD2','ograve':'\xF2','ordf':'\xAA','ordm':'\xBA','Oslash':'\xD8','oslash':'\xF8','Otilde':'\xD5','otilde':'\xF5','Ouml':'\xD6','ouml':'\xF6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','THORN':'\xDE','thorn':'\xFE','times':'\xD7','Uacute':'\xDA','uacute':'\xFA','Ucirc':'\xDB','ucirc':'\xFB','Ugrave':'\xD9','ugrave':'\xF9','uml':'\xA8','Uuml':'\xDC','uuml':'\xFC','Yacute':'\xDD','yacute':'\xFD','yen':'\xA5','yuml':'\xFF'}; + var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'}; + var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]; + + /*--------------------------------------------------------------------------*/ + + var stringFromCharCode = String.fromCharCode; + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var has = function(object, propertyName) { + return hasOwnProperty.call(object, propertyName); + }; + + var contains = function(array, value) { + var index = -1; + var length = array.length; + while (++index < length) { + if (array[index] == value) { + return true; + } + } + return false; + }; + + var merge = function(options, defaults) { + if (!options) { + return defaults; + } + var result = {}; + var key; + for (key in defaults) { + // A `hasOwnProperty` check is not needed here, since only recognized + // option names are used anyway. Any others are ignored. + result[key] = has(options, key) ? options[key] : defaults[key]; + } + return result; + }; + + // Modified version of `ucs2encode`; see https://mths.be/punycode. + var codePointToSymbol = function(codePoint, strict) { + var output = ''; + if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) { + // See issue #4: + // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is + // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD + // REPLACEMENT CHARACTER.†+ if (strict) { + parseError('character reference outside the permissible Unicode range'); + } + return '\uFFFD'; + } + if (has(decodeMapNumeric, codePoint)) { + if (strict) { + parseError('disallowed character reference'); + } + return decodeMapNumeric[codePoint]; + } + if (strict && contains(invalidReferenceCodePoints, codePoint)) { + parseError('disallowed character reference'); + } + if (codePoint > 0xFFFF) { + codePoint -= 0x10000; + output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + output += stringFromCharCode(codePoint); + return output; + }; + + var hexEscape = function(symbol) { + return '&#x' + symbol.charCodeAt(0).toString(16).toUpperCase() + ';'; + }; + + var parseError = function(message) { + throw Error('Parse error: ' + message); + }; + + /*--------------------------------------------------------------------------*/ + + var encode = function(string, options) { + options = merge(options, encode.options); + var strict = options.strict; + if (strict && regexInvalidRawCodePoint.test(string)) { + parseError('forbidden code point'); + } + var encodeEverything = options.encodeEverything; + var useNamedReferences = options.useNamedReferences; + var allowUnsafeSymbols = options.allowUnsafeSymbols; + if (encodeEverything) { + // Encode ASCII symbols. + string = string.replace(regexAsciiWhitelist, function(symbol) { + // Use named references if requested & possible. + if (useNamedReferences && has(encodeMap, symbol)) { + return '&' + encodeMap[symbol] + ';'; + } + return hexEscape(symbol); + }); + // Shorten a few escapes that represent two symbols, of which at least one + // is within the ASCII range. + if (useNamedReferences) { + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒') + .replace(/fj/g, 'fj'); + } + // Encode non-ASCII symbols. + if (useNamedReferences) { + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } + // Note: any remaining non-ASCII symbols are handled outside of the `if`. + } else if (useNamedReferences) { + // Apply named character references. + // Encode `<>"'&` using named character references. + if (!allowUnsafeSymbols) { + string = string.replace(regexEscape, function(string) { + return '&' + encodeMap[string] + ';'; // no need to check `has()` here + }); + } + // Shorten escapes that represent two symbols, of which at least one is + // `<>"'&`. + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒'); + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } else if (!allowUnsafeSymbols) { + // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled + // using named character references. + string = string.replace(regexEscape, hexEscape); + } + return string + // Encode astral symbols. + .replace(regexAstralSymbols, function($0) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var high = $0.charCodeAt(0); + var low = $0.charCodeAt(1); + var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; + return '&#x' + codePoint.toString(16).toUpperCase() + ';'; + }) + // Encode any remaining BMP symbols that are not printable ASCII symbols + // using a hexadecimal escape. + .replace(regexBmpWhitelist, hexEscape); + }; + // Expose default options (so they can be overridden globally). + encode.options = { + 'allowUnsafeSymbols': false, + 'encodeEverything': false, + 'strict': false, + 'useNamedReferences': false + }; + + var decode = function(html, options) { + options = merge(options, decode.options); + var strict = options.strict; + if (strict && regexInvalidEntity.test(html)) { + parseError('malformed character reference'); + } + return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) { + var codePoint; + var semicolon; + var hexDigits; + var reference; + var next; + if ($1) { + // Decode decimal escapes, e.g. `𝌆`. + codePoint = $1; + semicolon = $2; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + return codePointToSymbol(codePoint, strict); + } + if ($3) { + // Decode hexadecimal escapes, e.g. `𝌆`. + hexDigits = $3; + semicolon = $4; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(hexDigits, 16); + return codePointToSymbol(codePoint, strict); + } + if ($5) { + // Decode named character references with trailing `;`, e.g. `©`. + reference = $5; + if (has(decodeMap, reference)) { + return decodeMap[reference]; + } else { + // Ambiguous ampersand. https://mths.be/notes/ambiguous-ampersands + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + return $0; + } + } + // If we’re still here, it’s a legacy reference for sure. No need for an + // extra `if` check. + // Decode named character references without trailing `;`, e.g. `&` + // This is only a parse error if it gets converted to `&`, or if it is + // followed by `=` in an attribute context. + reference = $6; + next = $7; + if (next && options.isAttributeValue) { + if (strict && next == '=') { + parseError('`&` did not start a character reference'); + } + return $0; + } else { + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + // Note: there is no need to check `has(decodeMapLegacy, reference)`. + return decodeMapLegacy[reference] + (next || ''); + } + }); + }; + // Expose default options (so they can be overridden globally). + decode.options = { + 'isAttributeValue': false, + 'strict': false + }; + + var escape = function(string) { + return string.replace(regexEscape, function($0) { + // Note: there is no need to check `has(escapeMap, $0)` here. + return escapeMap[$0]; + }); + }; + + /*--------------------------------------------------------------------------*/ + + var he = { + 'version': '0.5.0', + 'encode': encode, + 'decode': decode, + 'escape': escape, + 'unescape': decode + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return he; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = he; + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in he) { + has(he, key) && (freeExports[key] = he[key]); + } + } + } else { // in Rhino or a web browser + root.he = he; + } + +}(this)); + +/* + * to-markdown - an HTML to Markdown converter + * + * Copyright 2011, Dom Christie + * Licenced under the MIT licence + * + */ + +if (typeof he !== 'object' && typeof require === 'function') { + var he = require('he'); +} + +var toMarkdown = function(string) { + + var ELEMENTS = [ + { + patterns: 'p', + replacement: function(str, attrs, innerHTML) { + return innerHTML ? '\n\n' + innerHTML + '\n' : ''; + } + }, + { + patterns: 'br', + type: 'void', + replacement: '\n' + }, + { + patterns: 'h([1-6])', + replacement: function(str, hLevel, attrs, innerHTML) { + var hPrefix = ''; + for(var i = 0; i < hLevel; i++) { + hPrefix += '#'; + } + return '\n\n' + hPrefix + ' ' + innerHTML + '\n'; + } + }, + { + patterns: 'hr', + type: 'void', + replacement: '\n\n* * *\n' + }, + { + patterns: 'a', + replacement: function(str, attrs, innerHTML) { + var href = attrs.match(attrRegExp('href')), + title = attrs.match(attrRegExp('title')); + return href ? '[' + innerHTML + ']' + '(' + href[1] + (title && title[1] ? ' "' + title[1] + '"' : '') + ')' : str; + } + }, + { + patterns: ['b', 'strong'], + replacement: function(str, attrs, innerHTML) { + return innerHTML ? '**' + innerHTML + '**' : ''; + } + }, + { + patterns: ['i', 'em'], + replacement: function(str, attrs, innerHTML) { + return innerHTML ? '*' + innerHTML + '*' : ''; + } + }, + { + patterns: 'pre', + replacement: function(str, attrs, innerHTML) { + var lang = innerHTML.match(attrRegExp('class')), + codeText = innerHTML.replace(/<code[^>]*>([\s\S]*?)<\/code>/,'$1'), + linebreaks; + lang = lang ? lang[1].replace(/\w+-/,'') : ''; // ignore the prefix like 'lang-' or 'language-' + linebreaks = codeText.charAt(0) === '\n' ? '' : '\n'; // if the first character is a line break, avoid adding it again + return codeText ? '```' + lang + linebreaks + he.decode(codeText) + '```' : ''; + } + }, + { + patterns: 'code', + replacement: function(str, attrs, innerHTML) { + return innerHTML ? '`' + he.decode(innerHTML) + '`' : ''; + } + }, + { + patterns: 'img', + type: 'void', + replacement: function(str, attrs, innerHTML) { + var src = attrs.match(attrRegExp('src')), + alt = attrs.match(attrRegExp('alt')), + title = attrs.match(attrRegExp('title')); + return '![' + (alt && alt[1] ? alt[1] : '') + ']' + '(' + src[1] + (title && title[1] ? ' "' + title[1] + '"' : '') + ')'; + } + } + ]; + + for(var i = 0, len = ELEMENTS.length; i < len; i++) { + if(typeof ELEMENTS[i].patterns === 'string') { + string = replaceEls(string, { tag: ELEMENTS[i].patterns, replacement: ELEMENTS[i].replacement, type: ELEMENTS[i].type }); + } + else { + for(var j = 0, pLen = ELEMENTS[i].patterns.length; j < pLen; j++) { + string = replaceEls(string, { tag: ELEMENTS[i].patterns[j], replacement: ELEMENTS[i].replacement, type: ELEMENTS[i].type }); + } + } + } + + function replaceEls(html, elProperties) { + var pattern = elProperties.type === 'void' ? '<' + elProperties.tag + '\\b([^>]*)\\/?>' : '<' + elProperties.tag + '\\b([^>]*)>([\\s\\S]*?)<\\/' + elProperties.tag + '>', + regex = new RegExp(pattern, 'gi'), + markdown = ''; + if(typeof elProperties.replacement === 'string') { + markdown = html.replace(regex, elProperties.replacement); + } + else { + markdown = html.replace(regex, function(str, p1, p2, p3) { + return elProperties.replacement.call(this, str, p1, p2, p3); + }); + } + return markdown; + } + + function attrRegExp(attr) { + return new RegExp(attr + '\\s*=\\s*["\']?([^"\']*)["\']?', 'i'); + } + + // Pre code blocks + + string = string.replace(/<pre\b[^>]*>```([\s\S]*?)```<\/pre>/gi, function(str, innerHTML) { + var text = he.decode(innerHTML); + text = text.replace(/^\t+/g, ' '); // convert tabs to spaces (you know it makes sense) + text = text.replace(/\n/g, '\n '); + return '\n\n ' + text + '\n'; + }); + + // Lists + + // Escape numbers that could trigger an ol + // If there are more than three spaces before the code, it would be in a pre tag + // Make sure we are escaping the period not matching any character + string = string.replace(/^(\s{0,3}\d+)\. /g, '$1\\. '); + + // Converts lists that have no child lists (of same type) first, then works its way up + var noChildrenRegex = /<(ul|ol)\b[^>]*>(?:(?!<ul|<ol)[\s\S])*?<\/\1>/gi; + while(string.match(noChildrenRegex)) { + string = string.replace(noChildrenRegex, function(str) { + return replaceLists(str); + }); + } + + function replaceLists(html) { + + html = html.replace(/<(ul|ol)\b[^>]*>([\s\S]*?)<\/\1>/gi, function(str, listType, innerHTML) { + var lis = innerHTML.split('</li>'); + lis.splice(lis.length - 1, 1); + + for(i = 0, len = lis.length; i < len; i++) { + if(lis[i]) { + var prefix = (listType === 'ol') ? (i + 1) + ". " : "* "; + lis[i] = lis[i].replace(/\s*<li[^>]*>([\s\S]*)/i, function(str, innerHTML) { + + innerHTML = innerHTML.replace(/^\s+/, ''); + innerHTML = innerHTML.replace(/\n\n/g, '\n\n '); + // indent nested lists + innerHTML = innerHTML.replace(/\n([ ]*)+(\*|\d+\.) /g, '\n$1 $2 '); + return prefix + innerHTML; + }); + } + } + return lis.join('\n'); + }); + return '\n\n' + html.replace(/[ \t]+\n|\s+$/g, ''); + } + + // Blockquotes + var deepest = /<blockquote\b[^>]*>((?:(?!<blockquote)[\s\S])*?)<\/blockquote>/gi; + while(string.match(deepest)) { + string = string.replace(deepest, function(str) { + return replaceBlockquotes(str); + }); + } + + function replaceBlockquotes(html) { + html = html.replace(/<blockquote\b[^>]*>([\s\S]*?)<\/blockquote>/gi, function(str, inner) { + inner = inner.replace(/^\s+|\s+$/g, ''); + inner = cleanUp(inner); + inner = inner.replace(/^/gm, '> '); + inner = inner.replace(/^(>([ \t]{2,}>)+)/gm, '> >'); + return inner; + }); + return html; + } + + function cleanUp(string) { + string = string.replace(/^[\t\r\n]+|[\t\r\n]+$/g, ''); // trim leading/trailing whitespace + string = string.replace(/\n\s+\n/g, '\n\n'); + string = string.replace(/\n{3,}/g, '\n\n'); // limit consecutive linebreaks to 2 + return string; + } + + return cleanUp(string); +}; + +if (typeof exports === 'object') { + exports.toMarkdown = toMarkdown; +} diff --git a/plugins/ckeditor4/markdown/plugin.js b/plugins/ckeditor4/markdown/plugin.js new file mode 100755 index 0000000..9056972 --- /dev/null +++ b/plugins/ckeditor4/markdown/plugin.js @@ -0,0 +1,194 @@ +/* + * The "markdown" plugin. It's indented to enhance the + * "sourcearea" editing mode, convert to markdown mode and highlight syntax. + * Licensed under the MIT license + * CodeMirror Plugin: http://codemirror.net/ (MIT License) + * Markdown Parser: + * HTML to Markdown Parser: + */ +'use strict'; +(function() { + CKEDITOR.plugins.add('markdown', { + // lang: 'en,zh', // %REMOVE_LINE_CORE% + icons: 'markdown', + hidpi: true, // %REMOVE_LINE_CORE% + init: function(editor) { + // Source mode in inline editors is only available through the "sourcedialog" plugin. + if (editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE) + return; + + var markdown = CKEDITOR.plugins.markdown, + rootPath = this.path, + defaultConfig = { + mode: 'gfm', + lineNumbers: true, + theme: 'default' + }; + editor.config.markdown = CKEDITOR.tools.extend(defaultConfig, editor.config.markdown || {}, true); + + editor.addMode('markdown', function(callback) { + var contentsSpace = editor.ui.space('contents'), + textarea = contentsSpace.getDocument().createElement('textarea'), + config = editor.config.markdown; + + textarea.setStyles( + CKEDITOR.tools.extend({ + // IE7 has overflow the <textarea> from wrapping table cell. + width: CKEDITOR.env.ie7Compat ? '99%' : '100%', + height: '100%', + resize: 'none', + outline: 'none', + 'text-align': 'left' + }, + CKEDITOR.tools.cssVendorPrefix('tab-size', editor.config.sourceAreaTabSize || 4))); + + // Make sure that source code is always displayed LTR, + // regardless of editor language (#10105). + textarea.setAttribute('dir', 'ltr'); + + textarea.addClass('cke_source cke_reset cke_enable_context_menu'); + + editor.ui.space('contents').append(textarea); + + var editable = editor.editable(new sourceEditable(editor, textarea)), + htmlData = editor.getData(1); + + // Convert to Markdown and Fill the textarea. + if (typeof(toMarkdown) == 'undefined') { + CKEDITOR.scriptLoader.load(rootPath + 'js/to-markdown.js', function() { + editable.setData(toMarkdown(htmlData)); + }); + } else { + editable.setData(toMarkdown(htmlData)); + } + + if (typeof (CodeMirror) == 'undefined' || typeof (CodeMirror.modes.gfm) == 'undefined') { + CKEDITOR.document.appendStyleSheet(rootPath + 'css/codemirror.min.css'); + + if (config.theme.length && config.theme != 'default') { + CKEDITOR.document.appendStyleSheet(rootPath + 'theme/' + config.theme + '.css'); + } + + CKEDITOR.scriptLoader.load(rootPath + 'js/codemirror-gfm-min.js', function() { + loadCodeMirror(editor, editable); + }); + } else { + loadCodeMirror(editor, editable); + } + if (typeof(marked) == 'undefined') { + CKEDITOR.scriptLoader.load(rootPath + 'js/marked.js'); + } + // Having to make <textarea> fixed sized to conquer the following bugs: + // 1. The textarea height/width='100%' doesn't constraint to the 'td' in IE6/7. + // 2. Unexpected vertical-scrolling behavior happens whenever focus is moving out of editor + // if text content within it has overflowed. (#4762) + if (CKEDITOR.env.ie) { + editable.attachListener(editor, 'resize', onResize, editable); + editable.attachListener(CKEDITOR.document.getWindow(), 'resize', onResize, editable); + CKEDITOR.tools.setTimeout(onResize, 0, editable); + } + + editor.fire('ariaWidget', this); + editor.commands.maximize.modes.markdown = 1; + callback(); + }); + + function loadCodeMirror(editor, editable){ + window["codemirror_" + editor.id] = CodeMirror.fromTextArea(editable.$, editor.config.markdown); + window["codemirror_" + editor.id].setSize(null, '100%'); + } + + editor.addCommand('markdown', markdown.commands.markdown); + + if (editor.ui.addButton) { + editor.ui.addButton('Markdown', { + label: 'Markdown', + command: 'markdown' + // toolbar: 'mode,10' + }); + } + CKEDITOR.document.appendStyleText('.cke_button__markdown_label {display: inline;}'); // display button Label + editor.on('mode', function() { + editor.getCommand('markdown').setState(editor.mode == 'markdown' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF); + }); + + var needsFocusHack = CKEDITOR.env.ie && CKEDITOR.env.version == 9; + + function onResize() { + // We have to do something with focus on IE9, because if sourcearea had focus + // before being resized, the caret ends somewhere in the editor UI (#11839). + var wasActive = needsFocusHack && this.equals(CKEDITOR.document.getActive()); + + // Holder rectange size is stretched by textarea, + // so hide it just for a moment. + this.hide(); + this.setStyle('height', this.getParent().$.clientHeight + 'px'); + this.setStyle('width', this.getParent().$.clientWidth + 'px'); + // When we have proper holder size, show textarea again. + this.show(); + + if (wasActive) + this.focus(); + } + } + }); + + var sourceEditable = CKEDITOR.tools.createClass({ + base: CKEDITOR.editable, + proto: { + setData: function(data) { + this.setValue(data); + this.status = 'ready'; + this.editor.fire('dataReady'); + }, + + getData: function() { + return this.getValue(); + }, + + // Insertions are not supported in source editable. + insertHtml: function() {}, + insertElement: function() {}, + insertText: function() {}, + + // Read-only support for textarea. + setReadOnly: function(isReadOnly) { + this[(isReadOnly ? 'set' : 'remove') + 'Attribute']('readOnly', 'readonly'); + }, + + detach: function() { + var editor = this.editor; + + window["codemirror_" + editor.id].toTextArea(); // Remove codemirror and restore Data to origin textarea + window["codemirror_" + editor.id] = null; // Free Memory on destroy + + var markdownSource = editor.getData(); + editor.setData(marked(markdownSource, {langPrefix: 'language-'})); + + sourceEditable.baseProto.detach.call(this); + + this.clearCustomData(); + this.remove(); + } + } + }); +})(); +CKEDITOR.plugins.markdown = { + commands: { + markdown: { + modes: { + wysiwyg: 1, + markdown: 1 + }, + editorFocus: false, + readOnly: 1, + exec: function(editor) { + if (editor.mode == 'wysiwyg') + editor.fire('saveSnapshot'); + editor.getCommand('markdown').setState(CKEDITOR.TRISTATE_DISABLED); + editor.setMode(editor.mode == 'markdown' ? 'wysiwyg' : 'markdown'); + }, + canUndo: false + } + } +}; diff --git a/plugins/ckeditor4/markdown/theme/3024-day.css b/plugins/ckeditor4/markdown/theme/3024-day.css new file mode 100755 index 0000000..ebf46fb --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/3024-day.css @@ -0,0 +1,38 @@ +/* + + Name: 3024 day + Author: Jan T. Sott (http://github.com/idleberg) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-3024-day.CodeMirror {background: #f7f7f7; color: #3a3432;} +.cm-s-3024-day div.CodeMirror-selected {background: #d6d5d4 !important;} + +.cm-s-3024-day .CodeMirror-gutters {background: #f7f7f7; border-right: 0px;} +.cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; } +.cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; } +.cm-s-3024-day .CodeMirror-linenumber {color: #807d7c;} + +.cm-s-3024-day .CodeMirror-cursor {border-left: 1px solid #5c5855 !important;} + +.cm-s-3024-day span.cm-comment {color: #cdab53;} +.cm-s-3024-day span.cm-atom {color: #a16a94;} +.cm-s-3024-day span.cm-number {color: #a16a94;} + +.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute {color: #01a252;} +.cm-s-3024-day span.cm-keyword {color: #db2d20;} +.cm-s-3024-day span.cm-string {color: #fded02;} + +.cm-s-3024-day span.cm-variable {color: #01a252;} +.cm-s-3024-day span.cm-variable-2 {color: #01a0e4;} +.cm-s-3024-day span.cm-def {color: #e8bbd0;} +.cm-s-3024-day span.cm-bracket {color: #3a3432;} +.cm-s-3024-day span.cm-tag {color: #db2d20;} +.cm-s-3024-day span.cm-link {color: #a16a94;} +.cm-s-3024-day span.cm-error {background: #db2d20; color: #5c5855;} + +.cm-s-3024-day .CodeMirror-activeline-background {background: #e8f2ff !important;} +.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/plugins/ckeditor4/markdown/theme/3024-night.css b/plugins/ckeditor4/markdown/theme/3024-night.css new file mode 100755 index 0000000..631757f --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/3024-night.css @@ -0,0 +1,37 @@ +/* + + Name: 3024 night + Author: Jan T. Sott (http://github.com/idleberg) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-3024-night.CodeMirror {background: #090300; color: #d6d5d4;} +.cm-s-3024-night div.CodeMirror-selected {background: #3a3432 !important;} +.cm-s-3024-night .CodeMirror-gutters {background: #090300; border-right: 0px;} +.cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; } +.cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; } +.cm-s-3024-night .CodeMirror-linenumber {color: #5c5855;} + +.cm-s-3024-night .CodeMirror-cursor {border-left: 1px solid #807d7c !important;} + +.cm-s-3024-night span.cm-comment {color: #cdab53;} +.cm-s-3024-night span.cm-atom {color: #a16a94;} +.cm-s-3024-night span.cm-number {color: #a16a94;} + +.cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute {color: #01a252;} +.cm-s-3024-night span.cm-keyword {color: #db2d20;} +.cm-s-3024-night span.cm-string {color: #fded02;} + +.cm-s-3024-night span.cm-variable {color: #01a252;} +.cm-s-3024-night span.cm-variable-2 {color: #01a0e4;} +.cm-s-3024-night span.cm-def {color: #e8bbd0;} +.cm-s-3024-night span.cm-bracket {color: #d6d5d4;} +.cm-s-3024-night span.cm-tag {color: #db2d20;} +.cm-s-3024-night span.cm-link {color: #a16a94;} +.cm-s-3024-night span.cm-error {background: #db2d20; color: #807d7c;} + +.cm-s-3024-night .CodeMirror-activeline-background {background: #2F2F2F !important;} +.cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/plugins/ckeditor4/markdown/theme/ambiance-mobile.css b/plugins/ckeditor4/markdown/theme/ambiance-mobile.css new file mode 100755 index 0000000..88d332e --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/ambiance-mobile.css @@ -0,0 +1,5 @@ +.cm-s-ambiance.CodeMirror { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} diff --git a/plugins/ckeditor4/markdown/theme/ambiance.css b/plugins/ckeditor4/markdown/theme/ambiance.css new file mode 100755 index 0000000..c844566 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/ambiance.css @@ -0,0 +1,77 @@ +/* ambiance theme for codemirror */ + +/* 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-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 .cm-error { color: #AF2018; } + +.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); +} +.cm-s-ambiance.CodeMirror-focused .CodeMirror-selected { + background: rgba(255, 255, 255, 0.10); +} + +/* Editor styling */ + +.cm-s-ambiance.CodeMirror { + line-height: 1.40em; + color: #E6E1DC; + background-color: #202020; + -webkit-box-shadow: inset 0 0 10px black; + -moz-box-shadow: inset 0 0 10px black; + box-shadow: inset 0 0 10px black; +} + +.cm-s-ambiance .CodeMirror-gutters { + background: #3D3D3D; + border-right: 1px solid #4D4D4D; + box-shadow: 0 10px 20px black; +} + +.cm-s-ambiance .CodeMirror-linenumber { + text-shadow: 0px 1px 1px #4d4d4d; + color: #111; + padding: 0 5px; +} + +.cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; } +.cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; } + +.cm-s-ambiance .CodeMirror-lines .CodeMirror-cursor { + border-left: 1px solid #7991E8; +} + +.cm-s-ambiance .CodeMirror-activeline-background { + background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031); +} + +.cm-s-ambiance.CodeMirror, +.cm-s-ambiance .CodeMirror-gutters { + background-image: url("data:image/png;base64,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"); +} diff --git a/plugins/ckeditor4/markdown/theme/base16-dark.css b/plugins/ckeditor4/markdown/theme/base16-dark.css new file mode 100755 index 0000000..199997a --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/base16-dark.css @@ -0,0 +1,36 @@ +/* + + Name: Base16 Default Dark + Author: Chris Kempson (http://chriskempson.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-base16-dark.CodeMirror {background: #151515; color: #e0e0e0;} +.cm-s-base16-dark div.CodeMirror-selected {background: #202020 !important;} +.cm-s-base16-dark .CodeMirror-gutters {background: #151515; border-right: 0px;} +.cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; } +.cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; } +.cm-s-base16-dark .CodeMirror-linenumber {color: #505050;} +.cm-s-base16-dark .CodeMirror-cursor {border-left: 1px solid #b0b0b0 !important;} + +.cm-s-base16-dark span.cm-comment {color: #8f5536;} +.cm-s-base16-dark span.cm-atom {color: #aa759f;} +.cm-s-base16-dark span.cm-number {color: #aa759f;} + +.cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute {color: #90a959;} +.cm-s-base16-dark span.cm-keyword {color: #ac4142;} +.cm-s-base16-dark span.cm-string {color: #f4bf75;} + +.cm-s-base16-dark span.cm-variable {color: #90a959;} +.cm-s-base16-dark span.cm-variable-2 {color: #6a9fb5;} +.cm-s-base16-dark span.cm-def {color: #d28445;} +.cm-s-base16-dark span.cm-bracket {color: #e0e0e0;} +.cm-s-base16-dark span.cm-tag {color: #ac4142;} +.cm-s-base16-dark span.cm-link {color: #aa759f;} +.cm-s-base16-dark span.cm-error {background: #ac4142; color: #b0b0b0;} + +.cm-s-base16-dark .CodeMirror-activeline-background {background: #2F2F2F !important;} +.cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/plugins/ckeditor4/markdown/theme/base16-light.css b/plugins/ckeditor4/markdown/theme/base16-light.css new file mode 100755 index 0000000..12ff2eb --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/base16-light.css @@ -0,0 +1,36 @@ +/* + + Name: Base16 Default Light + Author: Chris Kempson (http://chriskempson.com) + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-base16-light.CodeMirror {background: #f5f5f5; color: #202020;} +.cm-s-base16-light div.CodeMirror-selected {background: #e0e0e0 !important;} +.cm-s-base16-light .CodeMirror-gutters {background: #f5f5f5; border-right: 0px;} +.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; } +.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; } +.cm-s-base16-light .CodeMirror-linenumber {color: #b0b0b0;} +.cm-s-base16-light .CodeMirror-cursor {border-left: 1px solid #505050 !important;} + +.cm-s-base16-light span.cm-comment {color: #8f5536;} +.cm-s-base16-light span.cm-atom {color: #aa759f;} +.cm-s-base16-light span.cm-number {color: #aa759f;} + +.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute {color: #90a959;} +.cm-s-base16-light span.cm-keyword {color: #ac4142;} +.cm-s-base16-light span.cm-string {color: #f4bf75;} + +.cm-s-base16-light span.cm-variable {color: #90a959;} +.cm-s-base16-light span.cm-variable-2 {color: #6a9fb5;} +.cm-s-base16-light span.cm-def {color: #d28445;} +.cm-s-base16-light span.cm-bracket {color: #202020;} +.cm-s-base16-light span.cm-tag {color: #ac4142;} +.cm-s-base16-light span.cm-link {color: #aa759f;} +.cm-s-base16-light span.cm-error {background: #ac4142; color: #505050;} + +.cm-s-base16-light .CodeMirror-activeline-background {background: #DDDCDC !important;} +.cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/plugins/ckeditor4/markdown/theme/blackboard.css b/plugins/ckeditor4/markdown/theme/blackboard.css new file mode 100755 index 0000000..d7a2dc9 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/blackboard.css @@ -0,0 +1,30 @@ +/* Port of TextMate's Blackboard theme */ + +.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } +.cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; } +.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } +.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; } +.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; } +.cm-s-blackboard .CodeMirror-linenumber { 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-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; } +.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } + +.cm-s-blackboard .CodeMirror-activeline-background {background: #3C3636 !important;} +.cm-s-blackboard .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important} \ No newline at end of file diff --git a/plugins/ckeditor4/markdown/theme/cobalt.css b/plugins/ckeditor4/markdown/theme/cobalt.css new file mode 100755 index 0000000..4744053 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/cobalt.css @@ -0,0 +1,23 @@ +.cm-s-cobalt.CodeMirror { background: #002240; color: white; } +.cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; } +.cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; } +.cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-cobalt .CodeMirror-linenumber { 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-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; } +.cm-s-cobalt span.cm-error { color: #9d1e15; } + +.cm-s-cobalt .CodeMirror-activeline-background {background: #002D57 !important;} +.cm-s-cobalt .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important} diff --git a/plugins/ckeditor4/markdown/theme/eclipse.css b/plugins/ckeditor4/markdown/theme/eclipse.css new file mode 100755 index 0000000..317218e --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/eclipse.css @@ -0,0 +1,23 @@ +.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-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 span.cm-error {color: #f00;} + +.cm-s-eclipse .CodeMirror-activeline-background {background: #e8f2ff !important;} +.cm-s-eclipse .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} diff --git a/plugins/ckeditor4/markdown/theme/elegant.css b/plugins/ckeditor4/markdown/theme/elegant.css new file mode 100755 index 0000000..dd7df7b --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/elegant.css @@ -0,0 +1,13 @@ +.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-link {color: #762;} +.cm-s-elegant span.cm-error {background-color: #fdd;} + +.cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;} +.cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} diff --git a/plugins/ckeditor4/markdown/theme/erlang-dark.css b/plugins/ckeditor4/markdown/theme/erlang-dark.css new file mode 100755 index 0000000..ff47d7f --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/erlang-dark.css @@ -0,0 +1,32 @@ +.cm-s-erlang-dark.CodeMirror { background: #002240; color: white; } +.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; } +.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-erlang-dark .CodeMirror-guttermarker { color: white; } +.cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; } +.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; } + +.cm-s-erlang-dark span.cm-atom { color: #f133f1; } +.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: #eaa; } +.cm-s-erlang-dark span.cm-comment { color: #77f; } +.cm-s-erlang-dark span.cm-def { color: #e7a; } +.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: #d55; } +.cm-s-erlang-dark span.cm-property { color: #ccc; } +.cm-s-erlang-dark span.cm-qualifier { color: #ccc; } +.cm-s-erlang-dark span.cm-quote { color: #ccc; } +.cm-s-erlang-dark span.cm-special { color: #ffbbbb; } +.cm-s-erlang-dark span.cm-string { color: #3ad900; } +.cm-s-erlang-dark span.cm-string-2 { color: #ccc; } +.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: #e0e; } +.cm-s-erlang-dark span.cm-variable-3 { color: #ccc; } +.cm-s-erlang-dark span.cm-error { color: #9d1e15; } + +.cm-s-erlang-dark .CodeMirror-activeline-background {background: #013461 !important;} +.cm-s-erlang-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} diff --git a/plugins/ckeditor4/markdown/theme/lesser-dark.css b/plugins/ckeditor4/markdown/theme/lesser-dark.css new file mode 100755 index 0000000..a782474 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/lesser-dark.css @@ -0,0 +1,45 @@ +/* +http://lesscss.org/ dark theme +Ported to CodeMirror by Peter Kroon +*/ +.cm-s-lesser-dark { + line-height: 1.3em; +} +.cm-s-lesser-dark.CodeMirror { 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 pre { padding: 0 8px; }/*editable code holder*/ + +.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/ + +.cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; } +.cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; } +.cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-lesser-dark .CodeMirror-linenumber { 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-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;} +.cm-s-lesser-dark span.cm-error { color: #9d1e15; } + +.cm-s-lesser-dark .CodeMirror-activeline-background {background: #3C3A3A !important;} +.cm-s-lesser-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} diff --git a/plugins/ckeditor4/markdown/theme/mbo.css b/plugins/ckeditor4/markdown/theme/mbo.css new file mode 100755 index 0000000..0ad6360 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/mbo.css @@ -0,0 +1,35 @@ +/****************************************************************/ +/* Based on mbonaci's Brackets mbo theme */ +/* https://github.com/mbonaci/global/blob/master/Mbo.tmTheme */ +/* Create your own: http://tmtheme-editor.herokuapp.com */ +/****************************************************************/ + +.cm-s-mbo.CodeMirror {background: #2c2c2c; color: #ffffec;} +.cm-s-mbo div.CodeMirror-selected {background: #716C62 !important;} +.cm-s-mbo .CodeMirror-gutters {background: #4e4e4e; border-right: 0px;} +.cm-s-mbo .CodeMirror-guttermarker { color: white; } +.cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; } +.cm-s-mbo .CodeMirror-linenumber {color: #dadada;} +.cm-s-mbo .CodeMirror-cursor {border-left: 1px solid #ffffec !important;} + +.cm-s-mbo span.cm-comment {color: #95958a;} +.cm-s-mbo span.cm-atom {color: #00a8c6;} +.cm-s-mbo span.cm-number {color: #00a8c6;} + +.cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute {color: #9ddfe9;} +.cm-s-mbo span.cm-keyword {color: #ffb928;} +.cm-s-mbo span.cm-string {color: #ffcf6c;} +.cm-s-mbo span.cm-string.cm-property {color: #ffffec;} + +.cm-s-mbo span.cm-variable {color: #ffffec;} +.cm-s-mbo span.cm-variable-2 {color: #00a8c6;} +.cm-s-mbo span.cm-def {color: #ffffec;} +.cm-s-mbo span.cm-bracket {color: #fffffc; font-weight: bold;} +.cm-s-mbo span.cm-tag {color: #9ddfe9;} +.cm-s-mbo span.cm-link {color: #f54b07;} +.cm-s-mbo span.cm-error {border-bottom: #636363; color: #ffffec;} +.cm-s-mbo span.cm-qualifier {color: #ffffec;} + +.cm-s-mbo .CodeMirror-activeline-background {background: #494b41 !important;} +.cm-s-mbo .CodeMirror-matchingbracket {color: #222 !important;} +.cm-s-mbo .CodeMirror-matchingtag {background: rgba(255, 255, 255, .37);} diff --git a/plugins/ckeditor4/markdown/theme/mdn-like.css b/plugins/ckeditor4/markdown/theme/mdn-like.css new file mode 100755 index 0000000..1e20b9e --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/mdn-like.css @@ -0,0 +1,44 @@ +/* + MDN-LIKE Theme - Mozilla + Ported to CodeMirror by Peter Kroon <plakroon@gmail.com> + Report bugs/issues here: https://github.com/marijnh/CodeMirror/issues + GitHub: @peterkroon + + The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation + +*/ +.cm-s-mdn-like.CodeMirror { color: #999; background-color: #fff; } +.cm-s-mdn-like .CodeMirror-selected { background: #cfc !important; } + +.cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; } +.cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; margin-left: 3px; } +div.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; } + +.cm-s-mdn-like .cm-keyword { color: #6262FF; } +.cm-s-mdn-like .cm-atom { color: #F90; } +.cm-s-mdn-like .cm-number { color: #ca7841; } +.cm-s-mdn-like .cm-def { color: #8DA6CE; } +.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; } +.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def { color: #07a; } + +.cm-s-mdn-like .cm-variable { color: #07a; } +.cm-s-mdn-like .cm-property { color: #905; } +.cm-s-mdn-like .cm-qualifier { color: #690; } + +.cm-s-mdn-like .cm-operator { color: #cda869; } +.cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; } +.cm-s-mdn-like .cm-string { color:#07a; font-style:italic; } +.cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/ +.cm-s-mdn-like .cm-meta { color: #000; } /*?*/ +.cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/ +.cm-s-mdn-like .cm-tag { color: #997643; } +.cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/ +.cm-s-mdn-like .cm-header { color: #FF6400; } +.cm-s-mdn-like .cm-hr { color: #AEAEAE; } +.cm-s-mdn-like .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } +.cm-s-mdn-like .cm-error { border-bottom: 1px solid red; } + +div.cm-s-mdn-like .CodeMirror-activeline-background {background: #efefff;} +div.cm-s-mdn-like span.CodeMirror-matchingbracket {outline:1px solid grey; color: inherit;} + +.cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,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); } diff --git a/plugins/ckeditor4/markdown/theme/midnight.css b/plugins/ckeditor4/markdown/theme/midnight.css new file mode 100755 index 0000000..4567d29 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/midnight.css @@ -0,0 +1,45 @@ +/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ + +/*<!--match-->*/ +.cm-s-midnight span.CodeMirror-matchhighlight { background: #494949; } +.cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; } + +/*<!--activeline-->*/ +.cm-s-midnight .CodeMirror-activeline-background {background: #253540 !important;} + +.cm-s-midnight.CodeMirror { + background: #0F192A; + color: #D1EDFF; +} + +.cm-s-midnight.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;} + +.cm-s-midnight div.CodeMirror-selected {background: #314D67 !important;} +.cm-s-midnight .CodeMirror-gutters {background: #0F192A; border-right: 1px solid;} +.cm-s-midnight .CodeMirror-guttermarker { color: white; } +.cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-midnight .CodeMirror-linenumber {color: #D0D0D0;} +.cm-s-midnight .CodeMirror-cursor { + border-left: 1px solid #F8F8F0 !important; +} + +.cm-s-midnight span.cm-comment {color: #428BDD;} +.cm-s-midnight span.cm-atom {color: #AE81FF;} +.cm-s-midnight span.cm-number {color: #D1EDFF;} + +.cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute {color: #A6E22E;} +.cm-s-midnight span.cm-keyword {color: #E83737;} +.cm-s-midnight span.cm-string {color: #1DC116;} + +.cm-s-midnight span.cm-variable {color: #FFAA3E;} +.cm-s-midnight span.cm-variable-2 {color: #FFAA3E;} +.cm-s-midnight span.cm-def {color: #4DD;} +.cm-s-midnight span.cm-bracket {color: #D1EDFF;} +.cm-s-midnight span.cm-tag {color: #449;} +.cm-s-midnight span.cm-link {color: #AE81FF;} +.cm-s-midnight span.cm-error {background: #F92672; color: #F8F8F0;} + +.cm-s-midnight .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/plugins/ckeditor4/markdown/theme/monokai.css b/plugins/ckeditor4/markdown/theme/monokai.css new file mode 100755 index 0000000..548d2df --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/monokai.css @@ -0,0 +1,31 @@ +/* Based on Sublime Text's Monokai theme */ + +.cm-s-monokai.CodeMirror {background: #272822; color: #f8f8f2;} +.cm-s-monokai div.CodeMirror-selected {background: #49483E !important;} +.cm-s-monokai .CodeMirror-gutters {background: #272822; border-right: 0px;} +.cm-s-monokai .CodeMirror-guttermarker { color: white; } +.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-monokai .CodeMirror-linenumber {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-bracket {color: #f8f8f2;} +.cm-s-monokai span.cm-tag {color: #f92672;} +.cm-s-monokai span.cm-link {color: #ae81ff;} +.cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;} + +.cm-s-monokai .CodeMirror-activeline-background {background: #373831 !important;} +.cm-s-monokai .CodeMirror-matchingbracket { + text-decoration: underline; + color: white !important; +} diff --git a/plugins/ckeditor4/markdown/theme/neat.css b/plugins/ckeditor4/markdown/theme/neat.css new file mode 100755 index 0000000..115083b --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/neat.css @@ -0,0 +1,12 @@ +.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; } + +.cm-s-neat .CodeMirror-activeline-background {background: #e8f2ff !important;} +.cm-s-neat .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} diff --git a/plugins/ckeditor4/markdown/theme/neo.css b/plugins/ckeditor4/markdown/theme/neo.css new file mode 100755 index 0000000..cecaaf2 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/neo.css @@ -0,0 +1,43 @@ +/* neo theme for codemirror */ + +/* Color scheme */ + +.cm-s-neo.CodeMirror { + background-color:#ffffff; + color:#2e383c; + line-height:1.4375; +} +.cm-s-neo .cm-comment {color:#75787b} +.cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3} +.cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a} +.cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328} +.cm-s-neo .cm-string {color:#b35e14} +.cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65} + + +/* Editor styling */ + +.cm-s-neo pre { + padding:0; +} + +.cm-s-neo .CodeMirror-gutters { + border:none; + border-right:10px solid transparent; + background-color:transparent; +} + +.cm-s-neo .CodeMirror-linenumber { + padding:0; + color:#e0e2e5; +} + +.cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } +.cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } + +.cm-s-neo div.CodeMirror-cursor { + width: auto; + border: 0; + background: rgba(155,157,162,0.37); + z-index: 1; +} diff --git a/plugins/ckeditor4/markdown/theme/night.css b/plugins/ckeditor4/markdown/theme/night.css new file mode 100755 index 0000000..a0bf8cf --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/night.css @@ -0,0 +1,26 @@ +/* Loosely based on the Midnight Textmate theme */ + +.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; } +.cm-s-night div.CodeMirror-selected { background: #447 !important; } +.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-night .CodeMirror-guttermarker { color: white; } +.cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; } +.cm-s-night .CodeMirror-linenumber { 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-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; } +.cm-s-night span.cm-error { color: #9d1e15; } + +.cm-s-night .CodeMirror-activeline-background {background: #1C005A !important;} +.cm-s-night .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} diff --git a/plugins/ckeditor4/markdown/theme/paraiso-dark.css b/plugins/ckeditor4/markdown/theme/paraiso-dark.css new file mode 100755 index 0000000..53dcdf7 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/paraiso-dark.css @@ -0,0 +1,36 @@ +/* + + Name: ParaÃso (Dark) + Author: Jan T. Sott + + Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) + +*/ + +.cm-s-paraiso-dark.CodeMirror {background: #2f1e2e; color: #b9b6b0;} +.cm-s-paraiso-dark div.CodeMirror-selected {background: #41323f !important;} +.cm-s-paraiso-dark .CodeMirror-gutters {background: #2f1e2e; border-right: 0px;} +.cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; } +.cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; } +.cm-s-paraiso-dark .CodeMirror-linenumber {color: #776e71;} +.cm-s-paraiso-dark .CodeMirror-cursor {border-left: 1px solid #8d8687 !important;} + +.cm-s-paraiso-dark span.cm-comment {color: #e96ba8;} +.cm-s-paraiso-dark span.cm-atom {color: #815ba4;} +.cm-s-paraiso-dark span.cm-number {color: #815ba4;} + +.cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute {color: #48b685;} +.cm-s-paraiso-dark span.cm-keyword {color: #ef6155;} +.cm-s-paraiso-dark span.cm-string {color: #fec418;} + +.cm-s-paraiso-dark span.cm-variable {color: #48b685;} +.cm-s-paraiso-dark span.cm-variable-2 {color: #06b6ef;} +.cm-s-paraiso-dark span.cm-def {color: #f99b15;} +.cm-s-paraiso-dark span.cm-bracket {color: #b9b6b0;} +.cm-s-paraiso-dark span.cm-tag {color: #ef6155;} +.cm-s-paraiso-dark span.cm-link {color: #815ba4;} +.cm-s-paraiso-dark span.cm-error {background: #ef6155; color: #8d8687;} + +.cm-s-paraiso-dark .CodeMirror-activeline-background {background: #4D344A !important;} +.cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/plugins/ckeditor4/markdown/theme/paraiso-light.css b/plugins/ckeditor4/markdown/theme/paraiso-light.css new file mode 100755 index 0000000..07ca325 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/paraiso-light.css @@ -0,0 +1,36 @@ +/* + + Name: ParaÃso (Light) + Author: Jan T. Sott + + Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) + Inspired by the art of Rubens LP (http://www.rubenslp.com.br) + +*/ + +.cm-s-paraiso-light.CodeMirror {background: #e7e9db; color: #41323f;} +.cm-s-paraiso-light div.CodeMirror-selected {background: #b9b6b0 !important;} +.cm-s-paraiso-light .CodeMirror-gutters {background: #e7e9db; border-right: 0px;} +.cm-s-paraiso-light .CodeMirror-guttermarker { color: black; } +.cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; } +.cm-s-paraiso-light .CodeMirror-linenumber {color: #8d8687;} +.cm-s-paraiso-light .CodeMirror-cursor {border-left: 1px solid #776e71 !important;} + +.cm-s-paraiso-light span.cm-comment {color: #e96ba8;} +.cm-s-paraiso-light span.cm-atom {color: #815ba4;} +.cm-s-paraiso-light span.cm-number {color: #815ba4;} + +.cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute {color: #48b685;} +.cm-s-paraiso-light span.cm-keyword {color: #ef6155;} +.cm-s-paraiso-light span.cm-string {color: #fec418;} + +.cm-s-paraiso-light span.cm-variable {color: #48b685;} +.cm-s-paraiso-light span.cm-variable-2 {color: #06b6ef;} +.cm-s-paraiso-light span.cm-def {color: #f99b15;} +.cm-s-paraiso-light span.cm-bracket {color: #41323f;} +.cm-s-paraiso-light span.cm-tag {color: #ef6155;} +.cm-s-paraiso-light span.cm-link {color: #815ba4;} +.cm-s-paraiso-light span.cm-error {background: #ef6155; color: #776e71;} + +.cm-s-paraiso-light .CodeMirror-activeline-background {background: #CFD1C4 !important;} +.cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/plugins/ckeditor4/markdown/theme/pastel-on-dark.css b/plugins/ckeditor4/markdown/theme/pastel-on-dark.css new file mode 100755 index 0000000..7992ac7 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/pastel-on-dark.css @@ -0,0 +1,50 @@ +/** + * Pastel On Dark theme ported from ACE editor + * @license MIT + * @copyright AtomicPages LLC 2014 + * @author Dennis Thompson, AtomicPages LLC + * @version 1.1 + * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme + */ + +.cm-s-pastel-on-dark.CodeMirror { + background: #2c2827; + color: #8F938F; + line-height: 1.5; + font-size: 14px; +} +.cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2) !important; } +.cm-s-pastel-on-dark .CodeMirror-gutters { + background: #34302f; + border-right: 0px; + padding: 0 3px; +} +.cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; } +.cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; } +.cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; } +.cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; } +.cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; } +.cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; } +.cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; } +.cm-s-pastel-on-dark span.cm-property { color: #8F938F; } +.cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; } +.cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; } +.cm-s-pastel-on-dark span.cm-string { color: #66A968; } +.cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; } +.cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; } +.cm-s-pastel-on-dark span.cm-variable-3 { color: #DE8E30; } +.cm-s-pastel-on-dark span.cm-def { color: #757aD8; } +.cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; } +.cm-s-pastel-on-dark span.cm-tag { color: #C1C144; } +.cm-s-pastel-on-dark span.cm-link { color: #ae81ff; } +.cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; } +.cm-s-pastel-on-dark span.cm-error { + background: #757aD8; + color: #f8f8f0; +} +.cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031) !important; } +.cm-s-pastel-on-dark .CodeMirror-matchingbracket { + border: 1px solid rgba(255,255,255,0.25); + color: #8F938F !important; + margin: -1px -1px 0 -1px; +} diff --git a/plugins/ckeditor4/markdown/theme/rubyblue.css b/plugins/ckeditor4/markdown/theme/rubyblue.css new file mode 100755 index 0000000..5349838 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/rubyblue.css @@ -0,0 +1,23 @@ +.cm-s-rubyblue.CodeMirror { background: #112435; color: white; } +.cm-s-rubyblue div.CodeMirror-selected { background: #38566F !important; } +.cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } +.cm-s-rubyblue .CodeMirror-guttermarker { color: white; } +.cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; } +.cm-s-rubyblue .CodeMirror-linenumber { 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-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; } +.cm-s-rubyblue span.cm-error { color: #AF2018; } + +.cm-s-rubyblue .CodeMirror-activeline-background {background: #173047 !important;} diff --git a/plugins/ckeditor4/markdown/theme/solarized.css b/plugins/ckeditor4/markdown/theme/solarized.css new file mode 100755 index 0000000..36d5f79 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/solarized.css @@ -0,0 +1,170 @@ +/* +Solarized theme for code-mirror +http://ethanschoonover.com/solarized +*/ + +/* +Solarized color pallet +http://ethanschoonover.com/solarized/img/solarized-palette.png +*/ + +.solarized.base03 { color: #002b36; } +.solarized.base02 { color: #073642; } +.solarized.base01 { color: #586e75; } +.solarized.base00 { color: #657b83; } +.solarized.base0 { color: #839496; } +.solarized.base1 { color: #93a1a1; } +.solarized.base2 { color: #eee8d5; } +.solarized.base3 { color: #fdf6e3; } +.solarized.solar-yellow { color: #b58900; } +.solarized.solar-orange { color: #cb4b16; } +.solarized.solar-red { color: #dc322f; } +.solarized.solar-magenta { color: #d33682; } +.solarized.solar-violet { color: #6c71c4; } +.solarized.solar-blue { color: #268bd2; } +.solarized.solar-cyan { color: #2aa198; } +.solarized.solar-green { color: #859900; } + +/* Color scheme for code-mirror */ + +.cm-s-solarized { + line-height: 1.45em; + color-profile: sRGB; + rendering-intent: auto; +} +.cm-s-solarized.cm-s-dark { + color: #839496; + background-color: #002b36; + text-shadow: #002b36 0 1px; +} +.cm-s-solarized.cm-s-light { + background-color: #fdf6e3; + color: #657b83; + text-shadow: #eee8d5 0 1px; +} + +.cm-s-solarized .CodeMirror-widget { + text-shadow: none; +} + + +.cm-s-solarized .cm-keyword { color: #cb4b16 } +.cm-s-solarized .cm-atom { color: #d33682; } +.cm-s-solarized .cm-number { color: #d33682; } +.cm-s-solarized .cm-def { color: #2aa198; } + +.cm-s-solarized .cm-variable { color: #268bd2; } +.cm-s-solarized .cm-variable-2 { color: #b58900; } +.cm-s-solarized .cm-variable-3 { color: #6c71c4; } + +.cm-s-solarized .cm-property { color: #2aa198; } +.cm-s-solarized .cm-operator {color: #6c71c4;} + +.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; } + +.cm-s-solarized .cm-string { color: #859900; } +.cm-s-solarized .cm-string-2 { color: #b58900; } + +.cm-s-solarized .cm-meta { color: #859900; } +.cm-s-solarized .cm-qualifier { color: #b58900; } +.cm-s-solarized .cm-builtin { color: #d33682; } +.cm-s-solarized .cm-bracket { color: #cb4b16; } +.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; } +.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; } +.cm-s-solarized .cm-tag { color: #93a1a1 } +.cm-s-solarized .cm-attribute { color: #2aa198; } +.cm-s-solarized .cm-header { color: #586e75; } +.cm-s-solarized .cm-quote { color: #93a1a1; } +.cm-s-solarized .cm-hr { + color: transparent; + border-top: 1px solid #586e75; + display: block; +} +.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; } +.cm-s-solarized .cm-special { color: #6c71c4; } +.cm-s-solarized .cm-em { + color: #999; + text-decoration: underline; + text-decoration-style: dotted; +} +.cm-s-solarized .cm-strong { color: #eee; } +.cm-s-solarized .cm-tab:before { + content: "➤"; /*visualize tab character*/ + color: #586e75; + position:absolute; +} +.cm-s-solarized .cm-error, +.cm-s-solarized .cm-invalidchar { + color: #586e75; + border-bottom: 1px dotted #dc322f; +} + +.cm-s-solarized.cm-s-dark .CodeMirror-selected { + background: #073642; +} + +.cm-s-solarized.cm-s-light .CodeMirror-selected { + background: #eee8d5; +} + +/* Editor styling */ + + + +/* Little shadow on the view-port of the buffer view */ +.cm-s-solarized.CodeMirror { + -moz-box-shadow: inset 7px 0 12px -6px #000; + -webkit-box-shadow: inset 7px 0 12px -6px #000; + box-shadow: inset 7px 0 12px -6px #000; +} + +/* Gutter border and some shadow from it */ +.cm-s-solarized .CodeMirror-gutters { + border-right: 1px solid; +} + +/* Gutter colors and line number styling based of color scheme (dark / light) */ + +/* Dark */ +.cm-s-solarized.cm-s-dark .CodeMirror-gutters { + background-color: #002b36; + border-color: #00232c; +} + +.cm-s-solarized.cm-s-dark .CodeMirror-linenumber { + text-shadow: #021014 0 -1px; +} + +/* Light */ +.cm-s-solarized.cm-s-light .CodeMirror-gutters { + background-color: #fdf6e3; + border-color: #eee8d5; +} + +/* Common */ +.cm-s-solarized .CodeMirror-linenumber { + color: #586e75; + padding: 0 5px; +} +.cm-s-solarized .CodeMirror-guttermarker-subtle { color: #586e75; } +.cm-s-solarized.cm-s-dark .CodeMirror-guttermarker { color: #ddd; } +.cm-s-solarized.cm-s-light .CodeMirror-guttermarker { color: #cb4b16; } + +.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text { + color: #586e75; +} + +.cm-s-solarized .CodeMirror-lines .CodeMirror-cursor { + border-left: 1px solid #819090; +} + +/* +Active line. Negative margin compensates left padding of the text in the +view-port +*/ +.cm-s-solarized.cm-s-dark .CodeMirror-activeline-background { + background: rgba(255, 255, 255, 0.10); +} +.cm-s-solarized.cm-s-light .CodeMirror-activeline-background { + background: rgba(0, 0, 0, 0.10); +} diff --git a/plugins/ckeditor4/markdown/theme/the-matrix.css b/plugins/ckeditor4/markdown/theme/the-matrix.css new file mode 100755 index 0000000..01474ca --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/the-matrix.css @@ -0,0 +1,28 @@ +.cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; } +.cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D !important; } +.cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; } +.cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; } +.cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; } +.cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; } +.cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00 !important; } + +.cm-s-the-matrix span.cm-keyword {color: #008803; font-weight: bold;} +.cm-s-the-matrix span.cm-atom {color: #3FF;} +.cm-s-the-matrix span.cm-number {color: #FFB94F;} +.cm-s-the-matrix span.cm-def {color: #99C;} +.cm-s-the-matrix span.cm-variable {color: #F6C;} +.cm-s-the-matrix span.cm-variable-2 {color: #C6F;} +.cm-s-the-matrix span.cm-variable-3 {color: #96F;} +.cm-s-the-matrix span.cm-property {color: #62FFA0;} +.cm-s-the-matrix span.cm-operator {color: #999} +.cm-s-the-matrix span.cm-comment {color: #CCCCCC;} +.cm-s-the-matrix span.cm-string {color: #39C;} +.cm-s-the-matrix span.cm-meta {color: #C9F;} +.cm-s-the-matrix span.cm-qualifier {color: #FFF700;} +.cm-s-the-matrix span.cm-builtin {color: #30a;} +.cm-s-the-matrix span.cm-bracket {color: #cc7;} +.cm-s-the-matrix span.cm-tag {color: #FFBD40;} +.cm-s-the-matrix span.cm-attribute {color: #FFF700;} +.cm-s-the-matrix span.cm-error {color: #FF0000;} + +.cm-s-the-matrix .CodeMirror-activeline-background {background: #040;} diff --git a/plugins/ckeditor4/markdown/theme/tomorrow-night-eighties.css b/plugins/ckeditor4/markdown/theme/tomorrow-night-eighties.css new file mode 100755 index 0000000..8414135 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/tomorrow-night-eighties.css @@ -0,0 +1,36 @@ +/* + + Name: Tomorrow Night - Eighties + Author: Chris Kempson + + CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) + Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) + +*/ + +.cm-s-tomorrow-night-eighties.CodeMirror {background: #000000; color: #CCCCCC;} +.cm-s-tomorrow-night-eighties div.CodeMirror-selected {background: #2D2D2D !important;} +.cm-s-tomorrow-night-eighties .CodeMirror-gutters {background: #000000; border-right: 0px;} +.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; } +.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; } +.cm-s-tomorrow-night-eighties .CodeMirror-linenumber {color: #515151;} +.cm-s-tomorrow-night-eighties .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;} + +.cm-s-tomorrow-night-eighties span.cm-comment {color: #d27b53;} +.cm-s-tomorrow-night-eighties span.cm-atom {color: #a16a94;} +.cm-s-tomorrow-night-eighties span.cm-number {color: #a16a94;} + +.cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute {color: #99cc99;} +.cm-s-tomorrow-night-eighties span.cm-keyword {color: #f2777a;} +.cm-s-tomorrow-night-eighties span.cm-string {color: #ffcc66;} + +.cm-s-tomorrow-night-eighties span.cm-variable {color: #99cc99;} +.cm-s-tomorrow-night-eighties span.cm-variable-2 {color: #6699cc;} +.cm-s-tomorrow-night-eighties span.cm-def {color: #f99157;} +.cm-s-tomorrow-night-eighties span.cm-bracket {color: #CCCCCC;} +.cm-s-tomorrow-night-eighties span.cm-tag {color: #f2777a;} +.cm-s-tomorrow-night-eighties span.cm-link {color: #a16a94;} +.cm-s-tomorrow-night-eighties span.cm-error {background: #f2777a; color: #6A6A6A;} + +.cm-s-tomorrow-night-eighties .CodeMirror-activeline-background {background: #343600 !important;} +.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} diff --git a/plugins/ckeditor4/markdown/theme/twilight.css b/plugins/ckeditor4/markdown/theme/twilight.css new file mode 100755 index 0000000..9ca5057 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/twilight.css @@ -0,0 +1,30 @@ +.cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/ +.cm-s-twilight .CodeMirror-selected { background: #323232 !important; } /**/ + +.cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; } +.cm-s-twilight .CodeMirror-guttermarker { color: white; } +.cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; } +.cm-s-twilight .CodeMirror-linenumber { color: #aaa; } +.cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white !important; } + +.cm-s-twilight .cm-keyword { color: #f9ee98; } /**/ +.cm-s-twilight .cm-atom { color: #FC0; } +.cm-s-twilight .cm-number { color: #ca7841; } /**/ +.cm-s-twilight .cm-def { color: #8DA6CE; } +.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/ +.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/ +.cm-s-twilight .cm-operator { color: #cda869; } /**/ +.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/ +.cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/ +.cm-s-twilight .cm-string-2 { color:#bd6b18 } /*?*/ +.cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/ +.cm-s-twilight .cm-builtin { color: #cda869; } /*?*/ +.cm-s-twilight .cm-tag { color: #997643; } /**/ +.cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/ +.cm-s-twilight .cm-header { color: #FF6400; } +.cm-s-twilight .cm-hr { color: #AEAEAE; } +.cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/ +.cm-s-twilight .cm-error { border-bottom: 1px solid red; } + +.cm-s-twilight .CodeMirror-activeline-background {background: #27282E !important;} +.cm-s-twilight .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} diff --git a/plugins/ckeditor4/markdown/theme/vibrant-ink.css b/plugins/ckeditor4/markdown/theme/vibrant-ink.css new file mode 100755 index 0000000..5177282 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/vibrant-ink.css @@ -0,0 +1,32 @@ +/* Taken from the popular Visual Studio Vibrant Ink Schema */ + +.cm-s-vibrant-ink.CodeMirror { background: black; color: white; } +.cm-s-vibrant-ink .CodeMirror-selected { background: #35493c !important; } + +.cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } +.cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; } +.cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; } +.cm-s-vibrant-ink .CodeMirror-linenumber { 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-vibrant span.cm-tag { color: #FFC66D } +.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant 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-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; } +.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; } + +.cm-s-vibrant-ink .CodeMirror-activeline-background {background: #27282E !important;} +.cm-s-vibrant-ink .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} diff --git a/plugins/ckeditor4/markdown/theme/xq-dark.css b/plugins/ckeditor4/markdown/theme/xq-dark.css new file mode 100755 index 0000000..116eccf --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/xq-dark.css @@ -0,0 +1,51 @@ +/* +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.CodeMirror { background: #0a001f; color: #f8f8f8; } +.cm-s-xq-dark .CodeMirror-selected { background: #27007A !important; } +.cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } +.cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; } +.cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; } +.cm-s-xq-dark .CodeMirror-linenumber { 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-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;} +.cm-s-xq-dark span.cm-error {color: #f00;} + +.cm-s-xq-dark .CodeMirror-activeline-background {background: #27282E !important;} +.cm-s-xq-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} \ No newline at end of file diff --git a/plugins/ckeditor4/markdown/theme/xq-light.css b/plugins/ckeditor4/markdown/theme/xq-light.css new file mode 100755 index 0000000..20b5c79 --- /dev/null +++ b/plugins/ckeditor4/markdown/theme/xq-light.css @@ -0,0 +1,43 @@ +/* +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-light span.cm-keyword {line-height: 1em; font-weight: bold; color: #5A5CAD; } +.cm-s-xq-light span.cm-atom {color: #6C8CD5;} +.cm-s-xq-light span.cm-number {color: #164;} +.cm-s-xq-light span.cm-def {text-decoration:underline;} +.cm-s-xq-light span.cm-variable {color: black; } +.cm-s-xq-light span.cm-variable-2 {color:black;} +.cm-s-xq-light span.cm-variable-3 {color: black; } +.cm-s-xq-light span.cm-property {} +.cm-s-xq-light span.cm-operator {} +.cm-s-xq-light span.cm-comment {color: #0080FF; font-style: italic;} +.cm-s-xq-light span.cm-string {color: red;} +.cm-s-xq-light span.cm-meta {color: yellow;} +.cm-s-xq-light span.cm-qualifier {color: grey} +.cm-s-xq-light span.cm-builtin {color: #7EA656;} +.cm-s-xq-light span.cm-bracket {color: #cc7;} +.cm-s-xq-light span.cm-tag {color: #3F7F7F;} +.cm-s-xq-light span.cm-attribute {color: #7F007F;} +.cm-s-xq-light span.cm-error {color: #f00;} + +.cm-s-xq-light .CodeMirror-activeline-background {background: #e8f2ff !important;} +.cm-s-xq-light .CodeMirror-matchingbracket {outline:1px solid grey;color:black !important;background:yellow;} \ No newline at end of file diff --git a/plugins/ckeditor4/page2images/icons/page2images.png b/plugins/ckeditor4/page2images/icons/page2images.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e4ab77853c11c0ec372676993205a7a98e4387 GIT binary patch literal 7326 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 Eg2j0DO#lD@ literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/page2images/plugin.js b/plugins/ckeditor4/page2images/plugin.js new file mode 100644 index 0000000..177117f --- /dev/null +++ b/plugins/ckeditor4/page2images/plugin.js @@ -0,0 +1,94 @@ +var page2imagesIframeEditor=null; +CKEDITOR.plugins.add( 'page2images', +{ + icons: 'page2images', + init : function( editor ) + { + var pluginName = 'page2images'; + var title = ""; + var validate = ""; + var serverUrl="http://www.page2images.com"; + className="cke_button_page2images"; + var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; + var eventer = window[eventMethod]; + var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; + eventer(messageEvent, function (e) { + if (e.origin == serverUrl&&e.data.indexOf("'")<0&&e.data.indexOf("tmp/")>-1) { + editor.insertHtml("<img style='max-width:100%' src=\""+e.data+"\" />"); + // $("#page2image_plugin").remove(); + // $("#page2image_lightboxOverlay").remove(); + var oP = document.getElementById("page2image_plugin"); + oP.parentNode.removeChild(oP); + var oPL = document.getElementById("page2image_lightboxOverlay"); + oPL.parentNode.removeChild(oPL); + } + }, false); + editor.ui.addButton( 'page2images', + { + label : title, + command : pluginName, + click:function(){ + document.documentElement.scrollTop=0; + + var str = "<div class='page2images_loading' style='display:none;font-weight:bold;position:absolute;left:30px;top:5px;'>Loading...</div><div id='page2images_close' style='cursor:pointer;font-weight:bold;position:absolute;right:20px;top:5px;'><img src='http://www.page2images.com/resources/img/tools/icon_failed.png' /></div>"; + str += "<iframe id='page2image_iframe' height='100%' width='100%' name='page2image_iframe' border=0 src='"+serverUrl+"/URL-Live-Website-Screenshot-Generator?noDisplayHeaderFooterHTML=1' style='background:#fff;border:0px;' /></div>"; + //if($("#page2image_iframe").length == 0){ + // $('body').append(str); + //} + var oP = document.getElementById("page2image_plugin"); + if(!oP) + { + + + var newDiv = document.createElement("div"); + newDiv.id="page2image_plugin"; + newDiv.style.background = "#fff"; + newDiv.style.position = "absolute"; + newDiv.style.top = "0"; + newDiv.style.width = "1032px"; + var clintW=document.body.clientWidth; + if(clintW>1032) + { + newDiv.style.marginLeft = (clintW-1032)/2+"px"; + } + newDiv.style.height = "96%"; + newDiv.style.marginTop = "2%"; + newDiv.style.zIndex = "9000"; + newDiv.innerHTML = str; + document.body.insertBefore(newDiv, document.body.childNodes[0]); + var newOp=document.createElement("div"); + newOp.id="page2image_lightboxOverlay"; + newOp.className = "lightboxOverlay"; + newOp.style.background = "#000"; + newOp.style.opacity = "0.8"; + newOp.style.position = "absolute"; + newOp.style.zIndex = "1999"; + newOp.style.top = "0"; + newOp.style.left = "0"; + newOp.style.width="100%"; + newOp.style.height=document.body.scrollHeight+"px"; + document.body.insertBefore(newOp, document.body.childNodes[0]); + } + var page2images_close=document.getElementById("page2images_close"); + page2images_close.onclick = function(){ + var oP = document.getElementById("page2image_plugin"); + oP.parentNode.removeChild(oP); + var oPL = document.getElementById("page2image_lightboxOverlay"); + oPL.parentNode.removeChild(oPL); + }; + + + + }, + className:className + }); + } +} ); +/** + * Padding text to set off the image in preview area. + * @name CKEDITOR.config.image_previewText + * @type String + * @default "Lorem ipsum dolor..." placehoder text. + * @example + * config.image_previewText = CKEDITOR.tools.repeat( '___ ', 100 ); + */ diff --git a/plugins/ckeditor4/pastebase64/plugin.js b/plugins/ckeditor4/pastebase64/plugin.js new file mode 100755 index 0000000..f278a17 --- /dev/null +++ b/plugins/ckeditor4/pastebase64/plugin.js @@ -0,0 +1,70 @@ +(function () { + 'use strict'; + + CKEDITOR.plugins.add('pastebase64', { + init: init + }); + + function init(editor) { + if (editor.addFeature) { + editor.addFeature({ + allowedContent: 'img[alt,id,!src]{width,height};' + }); + } + + editor.on("contentDom", function () { + var editableElement = editor.editable ? editor.editable() : editor.document; + editableElement.on("paste", onPaste, null, {editor: editor}); + }); + + + } + + function onPaste(event) { + var editor = event.listenerData && event.listenerData.editor; + var $event = event.data.$; + var clipboardData = $event.clipboardData; + var found = false; + var imageType = /^image/; + + if (!clipboardData) { + return; + } + + return Array.prototype.forEach.call(clipboardData.types, function (type, i) { + if (found) { + return; + } + + if (type.match(imageType) || clipboardData.items[i].type.match(imageType)) { + readImageAsBase64(clipboardData.items[i], editor); + return found = true; + } + }); + } + + function readImageAsBase64(item, editor) { + if (!item || typeof item.getAsFile !== 'function') { + return; + } + + var file = item.getAsFile(); + var reader = new FileReader(); + + reader.onload = function (evt) { + var element = editor.document.createElement('img', { + attributes: { + src: evt.target.result + } + }); + + // We use a timeout callback to prevent a bug where insertElement inserts at first caret + // position + setTimeout(function () { + editor.insertElement(element); + }, 10); + }; + + reader.readAsDataURL(file); + } +})(); diff --git a/plugins/ckeditor4/pbckcode/CHANGELOG.md b/plugins/ckeditor4/pbckcode/CHANGELOG.md new file mode 100644 index 0000000..9df82a1 --- /dev/null +++ b/plugins/ckeditor4/pbckcode/CHANGELOG.md @@ -0,0 +1,44 @@ +# Changelog + +## v1.2.5 (4.0.x - 4.6.x) +I updated the code style guide to 2spaces instead of 4. + + * [FEATURE] : Updated ACE editor to 1.2.6 + * [DOC] : Added the examples directly in the master branch + +## v1.2.4 (4.0.x - 4.5.x) + + * [FIX] : Fixed C/C++ mode + * [FIX] : Avoid mixed content with cdn script + * [FIX] : Fixed tab size value + * [FEATURE] : Added HiDPI icon + * [FEATURE] : Added Turkish + * [FEATURE] : Added Russian + +## v1.2.3 (4.0.x - 4.4.x) + + * [FIX] : Fixed auto focus on the editor when opening the dialog. + * [FIX] : Fixed space character encoding + * [FEATURE] : Added property to choose the ACE Editor sources + +## v1.2.2 (4.0.x - 4.4.x) + + * [FIX] : Fixed ckeditor style overriden by pbckcode plugin + +## v1.2.1 (4.0.x - 4.3.x) + + * [FIX] : problem with minification for CKEditor Builder + * [FIX] : multiples script loads when you instanciate several CKEditor on the same page + +From the v1.2.1, ACE Editor is now loaded from the [jsDelivr CDN](http://www.jsdelivr.com/). The loading will be faster and the plugin size will be smaller. + +## v1.2.0 (4.0.x - 4.3.x) + + * [FIX] : fix problem of external files loading + * [IMPROVEMENT] : load external files only once + * [FEATURE] : tab size settings + * [FIX] : added CKEditor ACF to parse already saved code + +## v1.1.0 (4.0.x - 4.1.x) + + * [FEATURE] : added several syntax highlighters (Prism.js, Highlight.js, SyntaxHighlighter.js) diff --git a/plugins/ckeditor4/pbckcode/LICENSE b/plugins/ckeditor4/pbckcode/LICENSE new file mode 100644 index 0000000..ad410e1 --- /dev/null +++ b/plugins/ckeditor4/pbckcode/LICENSE @@ -0,0 +1,201 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/plugins/ckeditor4/pbckcode/README.md b/plugins/ckeditor4/pbckcode/README.md new file mode 100755 index 0000000..9959af0 --- /dev/null +++ b/plugins/ckeditor4/pbckcode/README.md @@ -0,0 +1,179 @@ +# pbckcode + +A CKEditor plugin to easily add code into your articles. +The plugin will create a dialog where you will be able to format your code as your will. When you press the **OK** button, the plugin will create a *pre* tag with your code inside. + +# Demos + +* [Basic configuration](http://prbaron.github.com/pbckcode/basic.html) +* [Use options](http://prbaron.github.com/pbckcode/options.html) +* [Load ACE from custom directory](http://prbaron.github.com/pbckcode/custom-ace.html) +* [Full CKEditor](http://prbaron.github.com/pbckcode/full.html) + +# Installation +1. Download the plugin from the Github repository : [https://github.com/prbaron/pbckcode/tags](https://github.com/prbaron/pbckcode/tags) +1. Place the **src** folder into the plugins folder of CKEditor (*{Path to CKEDitor}/plugins/*) +1. Rename the folder to **pbckcode** (it will be easier to call it into CKEditor) +1. Open the config.js file and add the following lines : + +```js +CKEDITOR.editorConfig = function(config) { + // CKEDITOR TOOLBAR CUSTOMIZATION + // I only set the needed buttons, so feel frey to add those you want in the array + config.toolbarGroups = [ + {name: 'pbckcode'}, + // your other buttons here + // get information about available buttons here: bhttp://docs.ckeditor.com/?mobile=/guide/dev_toolbar + ]; + + // CKEDITOR PLUGINS LOADING + config.extraPlugins = 'pbckcode'; // add other plugins here (comma separated) + + // ADVANCED CONTENT FILTER (ACF) + // ACF protects your CKEditor instance of adding unofficial tags + // however it strips out the pre tag of pbckcode plugin + // add this rule to enable it, useful when you want to re edit a post + // only needed on v1.1.x + config.allowedContent = 'pre[*]{*}(*)'; // add other rules here + + // PBCKCODE CUSTOMIZATION + config.pbckcode = { + // An optional class to your pre tag. + cls: '', + + // The syntax highlighter you will use in the output view + highlighter: 'PRETTIFY', + + // An array of the available modes for you plugin. + // The key corresponds to the string shown in the select tag. + // The value correspond to the loaded file for ACE Editor. + modes: [['HTML', 'html'], ['CSS', 'css'], ['PHP', 'php'], ['JS', 'javascript']], + + // The theme of the ACE Editor of the plugin. + theme: 'textmate', + + // Tab indentation (in spaces) + tab_size: '4' + }; +}; +``` +And you are good to go! You will have the same configuration than the demo. + +# Options + +## highlighter + +Choose your synta highlighter output. Remove the option if you want to output a basic <pre> tag, otherwise, choose one of them. + +```js +'HIGHLIGHT' // http://highlightjs.org/ +'PRETTIFY' // https://code.google.com/p/google-code-prettify/ +'PRISM' // http://prismjs.com/ +'SYNTAX_HIGHLIGHTER' // http://alexgorbatchev.com/SyntaxHighlighter/ +``` + +## modes +```js +// Available modes +['C/C++' , 'c_cpp'] +['C9Search' , 'c9search'] +['Clojure' , 'clojure'] +['CoffeeScript' , 'coffee'] +['ColdFusion' , 'coldfusion'] +['C#' , 'csharp'] +['CSS' , 'css'] +['Diff' , 'diff'] +['Glsl' , 'glsl'] +['Go' , 'golang'] +['Groovy' , 'groovy'] +['haXe' , 'haxe'] +['HTML' , 'html'] +['Jade' , 'jade'] +['Java' , 'java'] +['JavaScript' , 'javascript'] +['JSON' , 'json'] +['JSP' , 'jsp'] +['JSX' , 'jsx'] +['LaTeX' , 'latex'] +['LESS' , 'less'] +['Liquid' , 'liquid'] +['Lua' , 'lua'] +['LuaPage' , 'luapage'] +['Markdown' , 'markdown'] +['OCaml' , 'ocaml'] +['Perl' , 'perl'] +['pgSQL' , 'pgsql'] +['PHP' , 'php'] +['Powershell' , 'powershel1'] +['Python' , 'python'] +['R' , 'ruby'] +['OpenSCAD' , 'scad'] +['Scala' , 'scala'] +['SCSS/Sass' , 'scss'] +['SH' , 'sh'] +['SQL' , 'sql'] +['SVG' , 'svg'] +['Tcl' , 'tcl'] +['Text' , 'text'] +['Textile' , 'textile'] +['XML' , 'xml'] +['XQuery' , 'xq'] +['YAML' , 'yaml'] +``` + +## theme + +```js +// Bright themes +'chrome' +'clouds' +'crimson_editor' +'dawn' +'dreamweaver' +'eclipse' +'github' +'solarized_light' +'textmate' // default theme +'tomorrow' +'xcode' +'kuroir' +'katzenmilch' +``` + +```js +// Dark themes +'ambiance' +'chaos' +'clouds_midnight' +'cobalt' +'idle_fingers' +'kr_theme' +'merbivore' +'merbivore_soft' +'mono_industrial' +'monokai' +'pastel_on_dark' +'solarized_dark' +'terminal' +'tomorrow_night' +'tomorrow_night_blue' +'tomorrow_night_bright' +'tomorrow_night_eighties' +'twilight' +'vibrant_ink' +``` + +# Special Thanks + + * CKEditor : [http://ckeditor.com/](http://ckeditor.com/) + * ACE : [http://ace.ajax.org/](http://ace.ajax.org/) + * Lea Verou : [http://prismjs.com/](http://prismjs.com/) + * Google : [https://code.google.com/p/google-code-prettify/](https://code.google.com/p/google-code-prettify/) + * Ivan Sagalaev : [http://highlightjs.org/](http://highlightjs.org/) + * Alex Gorbatchev : [http://alexgorbatchev.com/SyntaxHighlighter/](http://alexgorbatchev.com/SyntaxHighlighter/) + +# Credits +#### Pierre Baron +* Website : [http://www.pierrebaron.fr](http://www.pierrebaron.fr) +* Twitter : [@prbaron](https://twitter.com/prbaron) +* Contact : <prbaron22@gmail.com> diff --git a/plugins/ckeditor4/pbckcode/dialogs/PBSyntaxHighlighter.js b/plugins/ckeditor4/pbckcode/dialogs/PBSyntaxHighlighter.js new file mode 100755 index 0000000..c7cf269 --- /dev/null +++ b/plugins/ckeditor4/pbckcode/dialogs/PBSyntaxHighlighter.js @@ -0,0 +1,102 @@ +var PBSyntaxHighlighter = (function() { + "use strict"; + + var sh; + + /** + * Constructor + * @param {String} sh The SyntaxHighlighter + */ + function PBSyntaxHighlighter(sh) { + switch (sh) { + case "HIGHLIGHT" : + this.sh = HIGHLIGHT; + break; + case "PRETTIFY" : + this.sh = PRETTIFY; + break; + case "PRISM" : + this.sh = PRISM; + break; + case "SYNTAX_HIGHLIGHTER" : + this.sh = SYNTAX_HIGHLIGHTER; + break; + default : + this.sh = { + _type: "DEFAULT", + _cls: "", + _tag: 'pre' + }; + break; + } + } + + /** + * Sets the SyntaxHighlighter type + * @param {String} type The name of the SyntaxHighlighter + */ + PBSyntaxHighlighter.prototype.setType = function(type) { + this.sh._type = type; + }; + + /** + * Gets the SyntaxHighlighter type + * @return {String} The type of the SyntaxHighlighter + */ + PBSyntaxHighlighter.prototype.getType = function() { + return this.sh._type; + }; + + /** + * Sets the full class of the SH object + * @param {String} cls the class to add to the Object + */ + PBSyntaxHighlighter.prototype.setCls = function(cls) { + this.sh.cls = this.sh._cls + cls; + }; + + /** + * Gets the full class of the SH Object + * @return {String} the full class of the SH Object + */ + PBSyntaxHighlighter.prototype.getCls = function() { + return this.sh.cls; + }; + + /** + * Get the tag to insert into the pre tag + * @return {String} the tag to insert, pre otherwise + */ + PBSyntaxHighlighter.prototype.getTag = function() { + return this.sh._tag; + }; + + return PBSyntaxHighlighter; +})(); + +/**********************************/ +/* SYNTAX HIGHLIGHTERS DEFINITION */ +/**********************************/ +var HIGHLIGHT = { + _type: "HIGHLIGHT", + _cls: "", // only show language (done in pbckcode.js) + _tag: 'code' +}; + +var PRETTIFY = { + _type: "PRETTIFY", + _cls: "prettyprint linenums lang-", + _tag: 'pre' +}; + +var PRISM = { + _type: "PRISM", + _cls: "language-", + _tag: 'code' +}; + +var SYNTAX_HIGHLIGHTER = { + _type: "SYNTAX_HIGHLIGHTER", + _cls: "brush: ", + _tag: 'pre' +}; diff --git a/plugins/ckeditor4/pbckcode/dialogs/pbckcode.js b/plugins/ckeditor4/pbckcode/dialogs/pbckcode.js new file mode 100755 index 0000000..018fc84 --- /dev/null +++ b/plugins/ckeditor4/pbckcode/dialogs/pbckcode.js @@ -0,0 +1,205 @@ +CKEDITOR.dialog.add('pbckcodeDialog', function(editor) { + var tab_sizes = ['1', '2', '4', '8']; + + // CKEditor variables + var dialog; + var shighlighter = new PBSyntaxHighlighter(editor.settings.highlighter); + + // ACE variables + var aceEditor, aceSession, whitespace; + + // EDITOR panel + var editorPanel = { + id: 'editor', + label: editor.lang.pbckcode.editor, + elements: [ + { + type: 'hbox', + children: [ + { + type: 'select', + id: 'code-select', + className: 'cke_pbckcode_form', + label: editor.lang.pbckcode.mode, + items: editor.settings.modes, + 'default': editor.settings.modes[0][1], + setup: function(element) { + if (element) { + element = element.getAscendant('pre', true); + this.setValue(element.getAttribute('data-pbcklang')); + } + }, + commit: function(element) { + if (element) { + element = element.getAscendant('pre', true); + element.setAttribute('data-pbcklang', this.getValue()); + } + }, + onChange: function() { + aceSession.setMode('ace/mode/' + this.getValue()); + } + }, + { + type: 'select', + id: 'code-tabsize-select', + className: 'cke_pbckcode_form', + label: editor.lang.pbckcode.tabSize, + items: tab_sizes, + 'default': editor.settings.tab_size, + setup: function(element) { + if (element) { + element = element.getAscendant('pre', true); + this.setValue(element.getAttribute('data-pbcktabsize')); + } + }, + commit: function(element) { + if (element) { + element = element.getAscendant('pre', true); + element.setAttribute('data-pbcktabsize', this.getValue()); + } + }, + onChange: function(element) { + if (element) { + whitespace.convertIndentation(aceSession, ' ', this.getValue()); + aceSession.setTabSize(this.getValue()); + } + } + } + ] + }, + { + type: 'html', + html: '<div></div>', + id: 'code-textarea', + className: 'cke_pbckcode_ace', + style: 'position: absolute; top: 80px; left: 10px; right: 10px; bottom: 50px;', + setup: function(element) { + // get the value of the editor + var code = element.getHtml(); + + // replace some regexp + code = code.replace(new RegExp('<br/>', 'g'), '\n') + .replace(new RegExp('<br>', 'g'), '\n') + .replace(new RegExp('<', 'g'), '<') + .replace(new RegExp('>', 'g'), '>') + .replace(new RegExp('&', 'g'), '&') + .replace(new RegExp(' ', 'g'), ' '); + + aceEditor.setValue(code); + }, + commit: function(element) { + element.setText(aceEditor.getValue()); + } + } + ] + }; + + // dialog code + return { + // Basic properties of the dialog window: title, minimum size. + title: editor.lang.pbckcode.title, + minWidth: 600, + minHeight: 400, + // Dialog window contents definition. + contents: [ + editorPanel + ], + onLoad: function() { + dialog = this; + // we load the ACE plugin to our div + aceEditor = ace.edit(dialog.getContentElement('editor', 'code-textarea') + .getElement().getId()); + // save the aceEditor into the editor object for the resize event + editor.aceEditor = aceEditor; + + // set default settings + aceEditor.setTheme('ace/theme/' + editor.settings.theme); + aceEditor.setHighlightActiveLine(true); + aceEditor.setShowInvisibles(true); + + aceSession = aceEditor.getSession(); + aceSession.setMode('ace/mode/' + editor.settings.modes[0][1]); + aceSession.setTabSize(editor.settings.tab_size); + aceSession.setUseSoftTabs(true); + + // load ace extensions + whitespace = ace.require('ace/ext/whitespace'); + }, + onShow: function() { + // get the selection + var selection = editor.getSelection(); + // get the entire element + var element = selection.getStartElement(); + + // looking for the pre parent tag + if (element) { + element = element.getAscendant('pre', true); + } + // if there is no pre tag, it is an addition. Therefore, it is an edition + if (!element || element.getName() !== 'pre') { + element = new CKEDITOR.dom.element('pre'); + + if (shighlighter.getTag() !== 'pre') { + element.append(new CKEDITOR.dom.element('code')); + } + this.insertMode = true; + } + else { + if (shighlighter.getTag() !== 'pre') { + element = element.getChild(0); + } + this.insertMode = false; + } + // get the element to fill the inputs + this.element = element; + + // focus on the editor + aceEditor.focus(); + + // we empty the editor + aceEditor.setValue(''); + + // we fill the inputs + if (!this.insertMode) { + this.setupContent(this.element); + } + }, + // This method is invoked once a user clicks the OK button, confirming the dialog. + onOk: function() { + var pre, element; + pre = element = this.element; + + if (this.insertMode) { + if (shighlighter.getTag() !== 'pre') { + element = this.element.getChild(0); + } + } + else { + pre = element.getAscendant('pre', true); + } + + this.commitContent(element); + + // set the full class to the code tag + shighlighter.setCls(pre.getAttribute('data-pbcklang') + ' ' + editor.settings.cls); + + element.setAttribute('class', shighlighter.getCls()); + + // we add a new code tag into ckeditor editor + if (this.insertMode) { + editor.insertElement(pre); + } + } + }; +}); + +/* + * Resize the ACE Editor + */ +CKEDITOR.dialog.on('resize', function(evt) { + var AceEditor = evt.editor.aceEditor; + if (AceEditor !== undefined) { + AceEditor.resize(); + } +}); + diff --git a/plugins/ckeditor4/pbckcode/dialogs/style.css b/plugins/ckeditor4/pbckcode/dialogs/style.css new file mode 100755 index 0000000..8b233e6 --- /dev/null +++ b/plugins/ckeditor4/pbckcode/dialogs/style.css @@ -0,0 +1,38 @@ +/*label styling */ +.cke_pbckcode_form .cke_dialog_ui_labeled_content { + display: inline-block; + vertical-align: middle; + margin-left: 6px; +} + +/*select styling */ +.cke_pbckcode_form .cke_dialog_ui_input_select select { + background-color: white; + border: 1px solid #ccc; + border-radius: 4px; + color: #555; + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 12px; + height: auto; + margin-bottom: 0; + padding: 0; + vertical-align: middle; + width: 110px; +} + +/* ace reset needed due to ckeditor style */ +.cke_pbckcode_ace.ace_editor * { + font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Droid Sans Mono', 'Consolas', monospace; + font-size: 12px; +} + +.cke_pbckcode_ace .ace_invisible { + opacity: 0; + visibility: hidden; +} + +/*good font color on dark theme*/ +.cke_pbckcode_ace.ace_dark * { + color: inherit; +} diff --git a/plugins/ckeditor4/pbckcode/icons/.DS_Store b/plugins/ckeditor4/pbckcode/icons/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c73941b5416fa3956c1fec44d8408844861fea64 GIT binary patch literal 6148 zcmeHK%}*0S6rX`2EvPIXRT?~O>_r0y2sG%yuoQ?AL#UKM8^F5T9oh-YPP4nE0%_8- zH~#=HexLN<(W_Da1rNqQL9cr9%}1qJO*|PR`;wX8+c)pM$^0fWvkxJJ(^Y!{Aq^oE zg~l<`1Klr#kMq_h9m>)Ph(!)+)%=R(FsscsG=vO<4E%cx@Uz>6%7`KxRZ#2s{bp4h z>IdWFA8<!!r0Z07G}a?T>mS(4mRT(um_gM~o8E@_qBgOVo-u=RQ(tAw`JtQE8YQ)Y zHZ;fFz@#qmT0%G1scW-ZnpIuf-^|K<>(ma)1udTO$R31dOqZ-tpIX$R!G26gK}#GS zPEM!B^vSEK`j~z=F)?*zOixWu*6Z4fXmsRqYIZ4Kso#6}=<$=M&z`?|E4Kl|oh4*Y zVH4hg(!vQX?x{NsziM*wNz;y4={<esY#*>P*gw=CkH^oQj}IpjBL!{HGK)JUkFRHr zIm}BtRkBg?sGY5tMe3Gv0l6Dw=>aKd13$U05c~F#X?4E>K0`+ak?y)jh%53fZ*Th~ z$Q86czvwZ?$uOS=l)3qq(fp<ld$t&m-9>ks!Hk^F<qCK6*NEo>w#Dc2rstV%iKO?p z9MdAsvYTc>z;?MO&sJov+L#;#ov$T1^F{KQG!_~{OB$D?MMFucz<Z+MRoC1lu~^c` zC}R|jqFJ<r*3b?*K=;uD^b);B@6ku}8GXgwIDs$XQ9OmO;Te1bFXEdxgKyy#8Qsy` z%nQvaB;pOgmd)JDdalFV5?GrN#{*8#mm(nAdxF*+E;VEzWZ=&j;P-<LjiaHkAyHf% z(1{WNFal;Fpz~US$LI<Tg$;=?0)k~IpbW*T#K1Bf?7H$Z6gDKvaD-Lyfz`}dRVY}@ z4*7NAj<6vy>_Y}Z297hp|NTKU{{AogzWx_ZVHYwGGVp&gfFtwS`82Fey{&Dl<ZrDG u?G7|9+^-=~gg~dBW1;Y;co>=x7}L1|Xeew*1Pe&`BOqu9yO4pu%D{KCxZx)N literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/pbckcode/icons/hidpi/pbckcode.png b/plugins/ckeditor4/pbckcode/icons/hidpi/pbckcode.png new file mode 100644 index 0000000000000000000000000000000000000000..3f85c846d80bcb81afe0969cb758c1085f4f41a6 GIT binary patch literal 2269 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 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/pbckcode/icons/pbckcode.png b/plugins/ckeditor4/pbckcode/icons/pbckcode.png new file mode 100644 index 0000000000000000000000000000000000000000..ef10ae1fc144a9994e03d584a35ba613ef3f5462 GIT binary patch literal 1632 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z81_l<D%#etZ2wxwo<osN{#FYG`RK1Ga0-$OJ2Ac{iATu|$BvGLvHz%*y zs=`(YtilS&1_|pcDS(xfWZNo5_y#CA=NF|anChA687SFtDJUq|6s4qD1-ZCEwF7y! zN*N_31y=g{<>lpi<;HsXMd|v6mX?<K21fcuM!G;1y2X`wC5aWfdBw^QLty5(q!uR^ zWfqiV=I1GZ%uP(nFD<cEQUX~72M~9bWTqi($}5I?3+O?8kc_^eo`F6#ZK)NRIJALe zaB53QhWo0Zv?vGcr<7#<)ST4Z)Vz{npgu#a)&av7t`WtN6^R89%fNvM@tY0E<yJwd z#rZj<pdbj%%Pg@ovH^PtT^JD}5M9psxdlb3#l=8vcBW7*$YSW~BM{cunZxWr7DU(J zUz7>-X(Gs7c7{+3kj2o|M`E)8SrADBDCn&MGAmMZB3v?o0Sfkop_z?7Rta>C&iOg{ zMZpD$$*CZRfwdqBp{oX46N$?jBnc#qDalsFrAb+-$t6g!1&lLr+ILD!*GCez(Z{OV z2AC48eDhN>(<)sOOH%EO3=B<m4GeV+jY14ftqcsUEKO|m(bOQh03_pFl$uzQUlfv` zpJNC1MJ|Y|V611X2lO|(3aDlqeNa9^%2$v~3l;_DT01VFPFM+G$JJKyBp6trT=jHu z46zWr8swcV;wZ50mFKmbIllgB?5v&EwljCWJ?Z*Ep&~GX{~xQX>qLP7{wgk(nnsDH zXUo*}<^Hh8HG8x)Fdpn~w<!}86uXvpu=!otbW?8L#H+jcc&^5Nt&QI+^<e-1Ci~I} z+NFE-o}S!in18xr-m>kBG_o?2&5nPxcsC<F%aOs3ZP7w*m+V89iJaRc)EgcgD=UA0 zv+mqKE(7n&s*O8NIfyO$&G%p`>xG&!jtVKkb0;M&FWf&Pt#2fhVK#f}tuJ2|Gc>EJ z{Cd|QR&F)dbnVxIFVdfP$(=mErrM38uxy*!VP*H{*Q)o<<Nah~Z}P`5;_(^oIX{I3 z;_khCxA%+Wo~M;LS0CTxk2$L;vM86`{`sSoDasv7W1h_u_g0u#yW#Fzo9{~sZ(skF zEaNKrz-!0SWWODW0sfPGU%zn_vpm@Nc;lR(pRUgM{`kqKbIkjWJky)J`rJ+R$yZla z%c*y@?FwGe(`6z(CHpgD{>}2;J)&M0Yn*jA*Kcv$&-zMw@44O2I-R8hx1_EWlUosH ze#l^rjNhboCRfiQmx{^hTOPI6SF^h+Tl;(XpA^(TyzPW9*NlSq6(?SBtbbcp9$)b( uUU&bI?wEI?{3kZQ$+~w!@5k@`sr8IX=a(tlII$iF75kp9elF{r5}E*GDLf?r literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/pbckcode/lang/en.js b/plugins/ckeditor4/pbckcode/lang/en.js new file mode 100755 index 0000000..bb85d8d --- /dev/null +++ b/plugins/ckeditor4/pbckcode/lang/en.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang("pbckcode", "en", + { + title: 'PBCKCODE', + addCode: 'Add code', + editCode: 'Edit code', + editor: 'Editor', + settings: 'Settings', + mode: 'Mode', + tabSize: 'Tab size', + theme: 'Theme', + softTab: 'Enable soft tabs', + emmet: 'Enable Emmet' + }); diff --git a/plugins/ckeditor4/pbckcode/lang/fr.js b/plugins/ckeditor4/pbckcode/lang/fr.js new file mode 100755 index 0000000..029cbf2 --- /dev/null +++ b/plugins/ckeditor4/pbckcode/lang/fr.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang("pbckcode", "fr", + { + title: 'PBCKCODE', + addCode: 'Ajouter du code', + editCode: 'Modifier ce code', + editor: 'Editeur', + settings: 'Réglages', + mode: 'Langage', + tabSize: 'Indentation', + theme: 'Theme', + softTab: 'Enable soft tabs', + emmet: 'Activer Emmet' + }); diff --git a/plugins/ckeditor4/pbckcode/lang/ru.js b/plugins/ckeditor4/pbckcode/lang/ru.js new file mode 100644 index 0000000..edb1cc0 --- /dev/null +++ b/plugins/ckeditor4/pbckcode/lang/ru.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang("pbckcode", "ru", + { + title: 'PBCKCODE', + addCode: 'Добавить код', + editCode: 'Редактировать код', + editor: 'Редактор', + settings: 'ÐаÑтройки', + mode: 'Режим', + tabSize: 'Ширина табулÑции', + theme: 'Тема', + softTab: 'Включить мÑгкую табулÑцию', + emmet: 'Включить Emmet' + }); diff --git a/plugins/ckeditor4/pbckcode/lang/tr.js b/plugins/ckeditor4/pbckcode/lang/tr.js new file mode 100644 index 0000000..698bb68 --- /dev/null +++ b/plugins/ckeditor4/pbckcode/lang/tr.js @@ -0,0 +1,13 @@ +CKEDITOR.plugins.setLang("pbckcode", "tr", + { + title: 'PBCKCODE', + addCode: 'Kod ekle', + editCode: 'Kodu düzenle', + editor: 'Editör', + settings: 'Ayarlar', + mode: 'Mod', + tabSize: 'Sekme boyutu', + theme: 'Tema', + softTab: 'YumuÅŸak sekmeleri aktif et', + emmet: 'Emmet\'i aktif et' + }); diff --git a/plugins/ckeditor4/pbckcode/plugin.js b/plugins/ckeditor4/pbckcode/plugin.js new file mode 100755 index 0000000..871e41a --- /dev/null +++ b/plugins/ckeditor4/pbckcode/plugin.js @@ -0,0 +1,109 @@ +// needed js files +var js = { + ace: 'ace.js', + aceExtWhitespace: 'ext-whitespace.js', + pbSyntaxHighlighter: CKEDITOR.plugins.getPath('pbckcode') + 'dialogs/PBSyntaxHighlighter.js' +}; + +var commandName = 'pbckcode'; + +/** + * Plugin definition + */ +CKEDITOR.plugins.add('pbckcode', { + icons: 'pbckcode', + hidpi: true, + lang: ['fr', 'en', 'ru'], + init: function(editor) { + // if there is no user settings + // create an empty object + if (editor.config.pbckcode === undefined) { + editor.config.pbckcode = {}; + } + + // default settings object + var DEFAULT_SETTINGS = { + cls: '', + modes: [ + ['HTML', 'html'], + ['CSS', 'css'], + ['PHP', 'php'], + ['JS', 'javascript'] + ], + theme: 'textmate', + tab_size: 4, + js: '//cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/' + }; + + // merge user settings with default settings + editor.settings = CKEDITOR.tools.extend(DEFAULT_SETTINGS, editor.config.pbckcode, true); + editor.settings.js = normalizeJsUrl(editor.settings.js); + + // load CSS for the dialog + editor.on('instanceReady', function() { + CKEDITOR.document.appendStyleSheet(this.path + 'dialogs/style.css'); + }.bind(this)); + + // add the button in the toolbar + editor.ui.addButton('pbckcode', { + label: editor.lang.pbckcode.addCode, + command: commandName, + toolbar: 'pbckcode' + }); + + // link the button to the command + editor.addCommand(commandName, new CKEDITOR.dialogCommand('pbckcodeDialog', { + allowedContent: 'pre[*]{*}(*)' + }) + ); + + // disable the button while the required js files are not loaded + editor.getCommand(commandName).disable(); + + // add the plugin dialog element to the plugin + CKEDITOR.dialog.add('pbckcodeDialog', this.path + 'dialogs/pbckcode.js'); + + // add the context menu + if (editor.contextMenu) { + editor.addMenuGroup('pbckcodeGroup'); + editor.addMenuItem('pbckcodeItem', { + label: editor.lang.pbckcode.editCode, + icon: this.path + 'icons/pbckcode.png', + command: commandName, + group: 'pbckcodeGroup' + }); + + editor.contextMenu.addListener(function(element) { + if (element.getAscendant('pre', true)) { + return {pbckcodeItem: CKEDITOR.TRISTATE_OFF}; + } + }); + } + + var scripts = [ + getScriptUrl(editor.settings.js, js.ace), + js.pbSyntaxHighlighter + ]; + + // Load the required js files + // enable the button when loaded + CKEDITOR.scriptLoader.load(scripts, function() { + editor.getCommand(commandName).enable(); + + // need ace to be loaded + CKEDITOR.scriptLoader.load([ + getScriptUrl(editor.settings.js, js.aceExtWhitespace) + ]); + }); + } +}); + +function normalizeJsUrl(js) { + return js.concat('/') + .replace(new RegExp('([^:]\/)\/+', 'g'), '$1'); +} + +function getScriptUrl(prefix, scriptName) { + return prefix + scriptName; +} + diff --git a/plugins/ckeditor4/pre/dialogs/pre.js b/plugins/ckeditor4/pre/dialogs/pre.js new file mode 100644 index 0000000..df82277 --- /dev/null +++ b/plugins/ckeditor4/pre/dialogs/pre.js @@ -0,0 +1,142 @@ +/** + * Copyright (c) 2016, SmartCore Studio. + * Licensed under the terms of the MIT License. +*/ + +CKEDITOR.dialog.add('pre', function( editor ) { + return { + title: editor.lang.pre.dialogTitle, + minWidth: 300, + minHeight: 100, + contents: [ + { + id: 'info', + label: editor.lang.pre.tab, + elements: [ + { + id: 'title', + type: 'text', + label: editor.lang.pre.title, + setup: function( widget ) { + this.setValue( widget.data.title ); + }, + commit: function( widget ) { + widget.setData( 'title', this.getValue() ); + } + }, + { + type: 'hbox', + widths: ['50%', '50%'], + children: [ + { + type: 'vbox', + children: [ + { + id: 'color', + type: 'select', + label: editor.lang.pre.color, + items: [ + [ editor.lang.pre.colorDefault, '' ], + [ editor.lang.pre.colorGray, 'Gray' ], + [ editor.lang.pre.colorBlack, 'Black' ] + ], + setup: function( widget ) { + this.setValue( widget.data.color ); + }, + commit: function( widget ) { + widget.setData( 'color', this.getValue() ); + } + }, + { + id: 'maxheight', + type: 'select', + label: editor.lang.pre.maxheight, + items: [ + [ editor.lang.pre.maxheightDefault, '' ], + [ '100px', '100px' ], + [ '200px', '200px' ], + [ '300px', '300px' ] + ], + setup: function( widget ) { + this.setValue( widget.data.maxheight ); + }, + commit: function( widget ) { + widget.setData( 'maxheight', this.getValue() ); + } + }, + { + id: 'cssclass', + type: 'text', + label: editor.lang.pre.cssclass, + setup: function( widget ) { + this.setValue( widget.data.cssclass ); + }, + commit: function( widget ) { + widget.setData( 'cssclass', this.getValue() ); + } + }] + }, + { + type: 'vbox', + styles: ['vertical-align:top'], + children: [ + { + id: 'hidesummary', + type: 'checkbox', + label: editor.lang.pre.hidesummary, + setup: function( widget ) { + this.setValue( widget.data.hidesummary ); + }, + commit: function( widget ) { + widget.setData( 'hidesummary', this.getValue()?'true':'' ); + } + }, + { + id: 'collapse', + type: 'checkbox', + label: editor.lang.pre.collapse, + setup: function( widget ) { + this.setValue( widget.data.collapse ); + }, + commit: function( widget ) { + widget.setData( 'collapse', this.getValue()?'true':'' ); + } + }, + { + id: 'monospace', + type: 'checkbox', + label: editor.lang.pre.monospace, + setup: function( widget ) { + this.setValue( widget.data.monospace ); + }, + commit: function( widget ) { + widget.setData( 'monospace', this.getValue()?'true':'' ); + } + }, + { + id: 'wrap', + type: 'checkbox', + label: editor.lang.pre.wrap, + setup: function( widget ) { + this.setValue( widget.data.wrap ); + }, + commit: function( widget ) { + widget.setData( 'wrap', this.getValue()?'true':'' ); + } + }, + { + id: 'bordered', + type: 'checkbox', + label: editor.lang.pre.bordered, + setup: function( widget ) { + this.setValue( widget.data.bordered ); + }, + commit: function( widget ) { + widget.setData( 'bordered', this.getValue()?'true':'' ); + } + }] + }] + }] + }] + } +}) diff --git a/plugins/ckeditor4/pre/icons/pre.png b/plugins/ckeditor4/pre/icons/pre.png new file mode 100644 index 0000000000000000000000000000000000000000..ff40adf2212fb0510b9330d67e7f76e657709890 GIT binary patch literal 1020 zcmaJ=&ui0A9M9MU8Eo^g%f!PYyHsX=w&|9v*=Uo_6_!%k!U|qYlh-zG$&1O`n$E*S zybRQ<-n|SDJBbM5Pdq654?K$qg7Yrey>xBo!5Wgh@Atj$=kxvf4ob!AQ<Ik`DT<mZ ztm|d6UW&hq<K&-UW-4Tv!}%JnpayQ60i?1vszXq4%_b~E)9&2<3^Nopo^Yx)Tr)Nl z3%RTr+pv-A6EsC-RwLiEwjc&|*mOLVK6&+)29B-Lo07pBz6M*)`d$Dld&R1?w`IvT zy}AN2kwOSuh)oc=+g_+dD&6B%h#YToH0YV&EtNhCs%Dgch5`sAHqBT<QUr@KD@d}q zl)45)UPyC%iW6i;NGjw_@u2_E#9LrDl(N3o_eC_7Zei>z9M^8Q*>;jeL6cx*nd3!H z6d7W{gdGo?5#xpP0|p(2R^a&9K^}-1%{tn_Dor9iOTqPrv|iXR6Db%MnLa15e4Nt2 z&@ldQ>bgVg5SQV3y#FK)s~sP5Wf-EJz#@%n%*U>LMGK&bQBXx_dr-wv3t<$tkPkF1 zuA0P3AhGFqHfo1gdnm(D3SNj!&w>SAr3nw~IJP2Yd5M?PvX+x1LCB|bYrL#$g0AON zi}}=&G{EY}+Hs+W2Uz<Yn;nUb2g3D<XB`I4F0|JI<bqz}iZeQv#gTk{tUWrGrIA>U z1jEJc{j1%BEiyx~I2>N0496dOWaa}h+%H=TyX0cbls2k)UDvza?&0BKr_&+Ao#naj z<mdt}7b`^VQomnJ$Cq%Wpl7Smm-`QIOjG>C#Ot5?-<~}`$k+euPJNo3{hG@h|2Vn3 vk!f0Q#uAS|B=;Ln-@m)HaP;xmn|(x$Q@`*S^W?#mWx_-i@<sh9ck|vUO*uop literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/pre/lang/en.js b/plugins/ckeditor4/pre/lang/en.js new file mode 100644 index 0000000..4b9efc2 --- /dev/null +++ b/plugins/ckeditor4/pre/lang/en.js @@ -0,0 +1,19 @@ +CKEDITOR.plugins.setLang( 'pre', 'en', { + title : 'Title', + content : 'Enter text or code snippet...', + dialogTitle: 'Collapsible snippet settings', + button: 'Insert collapsible snippet', + color : 'Background', + colorDefault : 'Default', + colorGray : 'Gray', + colorBlack : 'Black', + maxheight : 'Max height', + maxheightDefault : 'Unconstrained', + hidesummary: 'Hide title', + collapse: 'Collapsed', + monospace: 'Monospace font', + wrap: 'Autowrap long lines', + bordered: 'Bordered', + cssclass: 'CSS classes' +}); + diff --git a/plugins/ckeditor4/pre/lang/ru.js b/plugins/ckeditor4/pre/lang/ru.js new file mode 100644 index 0000000..8a2b4c3 --- /dev/null +++ b/plugins/ckeditor4/pre/lang/ru.js @@ -0,0 +1,18 @@ +CKEDITOR.plugins.setLang( 'pre', 'ru', { + title : 'Заголовок', + content : 'Введите текÑÑ‚ или фрагмент кода...', + dialogTitle: 'Пареметры фрагмента кода', + button: 'Ð’Ñтавить фрагмент кода', + color : 'Цвет фона', + colorDefault : 'По умолчанию', + colorGray : 'Серый', + colorBlack : 'Черный', + maxheight : 'МакÑ. выÑота', + maxheightDefault : 'Ðе ограничена', + hidesummary: 'Скрыть заголовок', + collapse: 'Свернуть', + monospace: 'Моноширинный шрифт', + wrap: 'ÐÐ²Ñ‚Ð¾Ð¿ÐµÑ€ÐµÐ½Ð¾Ñ Ñтрок', + bordered: 'Обводка', + cssclass: 'CSS-клаÑÑÑ‹' +}); \ No newline at end of file diff --git a/plugins/ckeditor4/pre/plugin.js b/plugins/ckeditor4/pre/plugin.js new file mode 100644 index 0000000..18ec00e --- /dev/null +++ b/plugins/ckeditor4/pre/plugin.js @@ -0,0 +1,202 @@ +/** + * Copyright (c) 2016, SmartCore Studio. + * Licensed under the terms of the MIT License. +*/ + +CKEDITOR.plugins.add( 'pre', { + requires: 'widget,dialog', + lang : 'en,ru', + icons: 'pre', + init: function( editor ) { + var preDefaultTitle = editor.config.preDefaultTitle; + var preDefaultClass = editor.config.preDefaultClass || ''; + var preDefaults; + if (editor.config.preDefaultMonospace!=false) preDefaults+= ' data-monospace="true"'; + if (editor.config.preDefaultHidesummary==true) preDefaults+= ' data-hidesummary="true"'; + if (editor.config.preDefaultCollapse==true) preDefaults+= ' data-collapse="true"'; + if (editor.config.preDefaultWrap==true) preDefaults+= ' data-wrap="true"'; + if (editor.config.preDefaultBordered==true) preDefaults+= 'data-bordered="true"'; + CKEDITOR.dialog.add( 'pre', this.path + 'dialogs/pre.js' ); + editor.ui.addButton('pre', { + label: editor.lang.pre.button, + command: 'pre', + toolbar: 'insert' + }); + editor.widgets.add( 'pre', { + allowedContent: + 'details(*)[open,data-*]{*};' + + 'summary(!pre-title){*}; pre(*){*}', + requiredContent: 'details', + editables: { + content: { + selector: 'div.pre-content', + allowedContent: 'br strong em a[href,target](*){*}' + } + }, + template: + '<details class="pre" '+preDefaults+' data-cssclass="'+ preDefaultClass + '" open>' + + '<summary class="pre-title" style="font-weight: bold">' + preDefaultTitle + '</summary>' + + '<div class="pre-content" style="padding: 4px 12px; margin-top: 2px; font-family: monospace; white-space: pre; overflow: auto;">' + editor.lang.pre.content + '</div>' + + '</details>', + dialog: 'pre', + upcast: function( element ) { + return element.name == 'details' && element.hasClass( 'pre' ); + }, + init: function() { + var title = this.element.findOne('.pre-title').getText(); + if ( title ) + this.setData( 'title', title ); + + var cssclass = this.element.getAttribute("data-cssclass"); + if ( cssclass ) + this.setData( 'cssclass', cssclass ); + + var color = this.element.getAttribute("data-color"); + if ( color ) + this.setData( 'color', color ); + else + this.setData( 'color', '' ); + + var maxheight = this.element.getAttribute("data-maxheight"); + if ( maxheight ) + this.setData( 'maxheight', maxheight ); + else + this.setData( 'maxheight', '' ); + + var hidesummary = this.element.getAttribute("data-hidesummary"); + if ( hidesummary ) + this.setData( 'hidesummary', hidesummary ); + + var collapse = this.element.getAttribute("data-collapse"); + if ( collapse ) + this.setData( 'collapse', collapse ); + + var monospace = this.element.getAttribute("data-monospace"); + if ( monospace ) + this.setData( 'monospace', monospace ); + + var bordered = this.element.getAttribute("data-bordered"); + if ( bordered ) + this.setData( 'bordered', bordered ); + + var wrap = this.element.getAttribute("data-wrap"); + if ( wrap ) + this.setData( 'wrap', wrap ); + }, + + data: function() { + if (typeof this.data.color !== 'undefined') + { + this.element.setAttribute("data-color", this.data.color); + if ( this.data.color == '' ) + { + this.element.findOne('.pre-content').removeStyle( 'color' ); + this.element.findOne('.pre-content').removeStyle( 'background-color' ); + } + else + { + if (this.data.color=='Gray') + { + this.element.findOne('.pre-content').setStyle( 'background-color', '#eee' ); + this.element.findOne('.pre-content').setStyle( 'color', '#000' ); + } + if (this.data.color=='Black') + { + this.element.findOne('.pre-content').setStyle( 'background-color', '#000' ); + this.element.findOne('.pre-content').setStyle( 'color', '#FFF' ); + } + } + } + + if (typeof this.data.maxheight !== 'undefined') + { + this.element.setAttribute("data-maxheight", this.data.maxheight); + if ( this.data.maxheight == '' ) + { + this.element.findOne('.pre-content').removeStyle( 'max-height' ); + } + else + { + this.element.findOne('.pre-content').setStyle( 'max-height', this.data.maxheight ); + } + } + + if (typeof this.data.monospace !== 'undefined') + { + this.element.setAttribute("data-monospace", this.data.monospace); + if ( this.data.monospace == '' ) + { + this.element.findOne('.pre-content').removeStyle( 'font-family' ); + } + else + { + this.element.findOne('.pre-content').setStyle( 'font-family', 'monospace' ); + } + } + + if (typeof this.data.wrap !== 'undefined') + { + this.element.setAttribute("data-wrap", this.data.wrap); + if ( this.data.wrap == '' ) + { + this.element.findOne('.pre-content').setStyle( 'white-space', 'pre' ); + } + else + { + this.element.findOne('.pre-content').removeStyle( 'white-space' ); + } + } + + if (typeof this.data.bordered !== 'undefined') + { + this.element.setAttribute("data-bordered", this.data.bordered); + if ( this.data.bordered == '' ) + { + this.element.removeStyle( 'border'); + this.element.findOne('summary').removeStyle( 'padding' ); + } + else + { + this.element.setStyle( 'border', '1px solid #ddd' ); + this.element.findOne('summary').setStyle( 'padding', '2px 12px'); + } + } + + if (typeof this.data.hidesummary !== 'undefined') + { + this.element.setAttribute("data-hidesummary", this.data.hidesummary); + if ( this.data.hidesummary == '' ) + { + this.element.findOne('summary').removeStyle( 'display' ); + } + else + { + this.element.findOne('summary').setStyle( 'display', 'none' ); + } + } + + if (typeof this.data.title !== 'undefined') + { + this.element.findOne('.pre-title').setText(this.data.title); + } + + if (typeof this.data.cssclass !== '') + { + if ( this.data.cssclass ) + this.element.setAttributes({'class': 'pre '+this.data.cssclass}); + else + this.element.setAttributes({'class': 'pre'}); + } + + if (typeof this.data.collapse !== 'undefined') + { + this.element.setAttribute("data-collapse", this.data.collapse); + if ( this.data.collapse ) + this.element.removeAttribute( 'open' ); + else + this.element.setAttribute( 'open' ); + } + } + }); + } +}); diff --git a/plugins/ckeditor4/prism/LICENSE.txt b/plugins/ckeditor4/prism/LICENSE.txt new file mode 100644 index 0000000..4362b49 --- /dev/null +++ b/plugins/ckeditor4/prism/LICENSE.txt @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/plugins/ckeditor4/prism/README.md b/plugins/ckeditor4/prism/README.md new file mode 100644 index 0000000..cf27d9c --- /dev/null +++ b/plugins/ckeditor4/prism/README.md @@ -0,0 +1,38 @@ +ckeditor-prism +================ +<strong>OVERVIEW</strong>:<br> +<a href="http://ckeditor.com/addon/prism">Prism Highlighter</a> is a plugin for <a href="http://ckeditor.com">CKEditor</a> for inserting beautiful formatted text, markdown, or code snippets in your blog or website. Prism is the chosen renderer/highlighter/colorizer since it's pretty, lightweight, and extendable. I also use this plugin in my [personal website](http://www.ranelpadon.com/content/practical-regex-part-12-common-operators). + +This plugin utilizes the following libraries: <br> +<ul> + <li><a href="http://ckeditor.com/addon/codesnippet">CKEditor Code Snippet Plugin</a></li> + <li><a href="http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.codesnippet.highlighter">CKEditor Code Snippet API</a></li> + <li><a href="http://prismjs.com/">Prism Syntax Highlighter with Dark Theme</a></li> + <li><a href="http://prismjs.com/plugins/line-numbers/">Prism Line Numbers Add-on</a></li> +</ul> + +By default, Prism has no line numbering mechanism, so the **Line Number** add-on has been added. Also, in order for the line numbers to work smoothly in CKEditor and when rendering the actual page, I did some minor patching in **prism.js** and **prism.css**. + +<strong>LIVE DEMO PAGE</strong>:<br> +Demo page could be found <a href="http://www.ranelpadon.com/sites/all/libraries/ckeditor/plugins/prism/demo/index.html">here</a>. + +<strong>INSTALLATION</strong>:<br> +Kindly refer to <a href="https://github.com/ranelpadon/ckeditor-prism/blob/master/Installation%20Guide.txt">Installation Guide</a>. + +<strong>HOW TO USE</strong>:<br> +Kindly refer to <a href="https://github.com/ranelpadon/ckeditor-prism/blob/master/Creating%20and%20Editing%20Code%20Snippets.txt">How to Create and Edit Prism Snippets</a>. + +<strong>LICENSE and CREDITS</strong>:<br> +License: <a href="https://www.gnu.org/licenses/lgpl-2.1.txt">LGPLv2.1</a> or later should apply. Note that LGPLv2.1+ is also compatible with <a href="https://www.drupal.org/node/1475972#gplv2-compatible-licenses">GPLv2</a>.<br> +Copyright 2015 by [Engr. Ranel O. Padon](http://www.ranelpadon.com)<br> + +Thanks to CKEditor, Prism, and other great open-source softwares and their unsung developers.<br> + +======================================================= + + + + + + + diff --git a/plugins/ckeditor4/prism/lib/prism/prism_patched.min.css b/plugins/ckeditor4/prism/lib/prism/prism_patched.min.css new file mode 100644 index 0000000..a8a001f --- /dev/null +++ b/plugins/ckeditor4/prism/lib/prism/prism_patched.min.css @@ -0,0 +1 @@ +code[class*="language-"],pre{color:white;text-shadow:0 -.1em .2em black;font-family:Monaco,Consolas,'Andale Mono','Ubuntu Mono',monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}@media print{code[class*="language-"],pre{text-shadow:none}}pre,:not(pre)>code[class*="language-"]{background:hsl(30,20%,25%)}pre{padding:1em;margin:.5em 0;overflow:auto;border:.3em solid hsl(30,20%,40%);border-radius:.5em;box-shadow:1px 1px .5em black inset}:not(pre)>code[class*="language-"]{padding:.15em .2em .05em;border-radius:.3em;border:.13em solid hsl(30,20%,40%);box-shadow:1px 1px .3em -.1em black inset;white-space:normal}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:hsl(30,20%,50%)}.token.punctuation{opacity:.7}.namespace{opacity:.7}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol{color:hsl(350,40%,70%)}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:hsl(75,70%,60%)}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string,.token.variable{color:hsl(40,90%,60%)}.token.atrule,.token.attr-value,.token.keyword{color:hsl(350,40%,70%)}.token.regex,.token.important{color:#e90}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}.token.entity{cursor:help}.token.deleted{color:red}pre{position:relative;padding-left:3.8em;counter-reset:linenumber}pre>code{position:relative}pre>code .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right} diff --git a/plugins/ckeditor4/prism/lib/prism/prism_patched.min.js b/plugins/ckeditor4/prism/lib/prism/prism_patched.min.js new file mode 100644 index 0000000..c81aa61 --- /dev/null +++ b/plugins/ckeditor4/prism/lib/prism/prism_patched.min.js @@ -0,0 +1,4 @@ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=_self.Prism={util:{encode:function(e){return e instanceof i?new i(e.type,t.util.encode(e.content),e.alias):"Array"===t.util.type(e)?e.map(t.util.encode):e.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var i=t.util.type(e);switch(i){case"Object":var n={};for(var a in e)e.hasOwnProperty(a)&&(n[a]=t.util.clone(e[a]));return n;case"Array":return e.map&&e.map(function(e){return t.util.clone(e)})}return e}},languages:{extend:function(e,i){var n=t.util.clone(t.languages[e]);for(var a in i)n[a]=i[a];return n},insertBefore:function(e,i,n,a){a=a||t.languages;var r=a[e];if(2==arguments.length){n=arguments[1];for(var s in n)n.hasOwnProperty(s)&&(r[s]=n[s]);return r}var o={};for(var l in r)if(r.hasOwnProperty(l)){if(l==i)for(var s in n)n.hasOwnProperty(s)&&(o[s]=n[s]);o[l]=r[l]}return t.languages.DFS(t.languages,function(t,i){i===a[e]&&t!=e&&(this[t]=o)}),a[e]=o},DFS:function(e,i,n){for(var a in e)e.hasOwnProperty(a)&&(i.call(e,a,e[a],n||a),"Object"===t.util.type(e[a])?t.languages.DFS(e[a],i):"Array"===t.util.type(e[a])&&t.languages.DFS(e[a],i,a))}},plugins:{},highlightAll:function(e,i){for(var n,a=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'),r=0;n=a[r++];)t.highlightElement(n,e===!0,i)},highlightElement:function(i,n,a){for(var r,s,o=i;o&&!e.test(o.className);)o=o.parentNode;o&&(r=(o.className.match(e)||[,""])[1],s=t.languages[r]),i.className=i.className.replace(e,"").replace(/\s+/g," ")+" language-"+r,o=i.parentNode,/pre/i.test(o.nodeName)&&(o.className=o.className.replace(e,"").replace(/\s+/g," ")+" language-"+r);var l=i.textContent,c={element:i,language:r,grammar:s,code:l};if(!l||!s)return void t.hooks.run("complete",c);if(t.hooks.run("before-highlight",c),n&&_self.Worker){var d=new Worker(t.filename);d.onmessage=function(e){c.highlightedCode=e.data,t.hooks.run("before-insert",c),c.element.innerHTML=c.highlightedCode,a&&a.call(c.element),t.hooks.run("after-highlight",c),t.hooks.run("complete",c)},d.postMessage(JSON.stringify({language:c.language,code:c.code,immediateClose:!0}))}else c.highlightedCode=t.highlight(c.code,c.grammar,c.language),t.hooks.run("before-insert",c),c.element.innerHTML=c.highlightedCode,a&&a.call(i),t.hooks.run("after-highlight",c),t.hooks.run("complete",c)},highlight:function(e,n,a){var r=t.tokenize(e,n);return i.stringify(t.util.encode(r),a)},tokenize:function(e,i,n){var a=t.Token,r=[e],s=i.rest;if(s){for(var o in s)i[o]=s[o];delete i.rest}e:for(var o in i)if(i.hasOwnProperty(o)&&i[o]){var l=i[o];l="Array"===t.util.type(l)?l:[l];for(var c=0;c<l.length;++c){var d=l[c],p=d.inside,u=!!d.lookbehind,m=0,E=d.alias;d=d.pattern||d;for(var g=0;g<r.length;g++){var f=r[g];if(r.length>e.length)break e;if(!(f instanceof a)){d.lastIndex=0;var b=d.exec(f);if(b){u&&(m=b[1].length);var h=b.index-1+m,b=b[0].slice(m),S=b.length,T=h+S,A=f.slice(0,h+1),N=f.slice(T+1),I=[g,1];A&&I.push(A);var L=new a(o,p?t.tokenize(b,p):b,E);I.push(L),N&&I.push(N),Array.prototype.splice.apply(r,I)}}}}}return r},hooks:{all:{},add:function(e,i){var n=t.hooks.all;n[e]=n[e]||[],n[e].push(i)},run:function(e,i){var n=t.hooks.all[e];if(n&&n.length)for(var a,r=0;a=n[r++];)a(i)}}},i=t.Token=function(e,t,i){this.type=e,this.content=t,this.alias=i};if(i.stringify=function(e,n,a){if("string"==typeof e)return e;if("Array"===t.util.type(e))return e.map(function(t){return i.stringify(t,n,e)}).join("");var r={type:e.type,content:i.stringify(e.content,n,a),tag:"span",classes:["token",e.type],attributes:{},language:n,parent:a};if("comment"==r.type&&(r.attributes.spellcheck="true"),e.alias){var s="Array"===t.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(r.classes,s)}t.hooks.run("wrap",r);var o="";for(var l in r.attributes)o+=(o?" ":"")+l+'="'+(r.attributes[l]||"")+'"';return"<"+r.tag+' class="'+r.classes.join(" ")+'" '+o+">"+r.content+"</"+r.tag+">"},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var i=JSON.parse(e.data),n=i.language,a=i.code,r=i.immediateClose;_self.postMessage(t.highlight(a,t.languages[n],n)),r&&_self.close()},!1),_self.Prism):_self.Prism;var n=document.getElementsByTagName("script");return n=n[n.length-1],n&&(t.filename=n.src,document.addEventListener&&!n.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism),Prism.languages.markup={comment:/<!--[\w\W]*?-->/,prolog:/<\?[\w\W]+?\?>/,doctype:/<!DOCTYPE[\w\W]+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<style[\w\W]*?>)[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)),Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}}),Prism.languages.insertBefore("javascript","class-name",{"template-string":{pattern:/`(?:\\`|\\?[^`])*`/,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<script[\w\W]*?>)[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript,Prism.languages.abap={comment:/^\*.*/m,string:/(`|')(\\?.)*?\1/m,"string-template":{pattern:/(\||\})(\\?.)*?(?=\||\{)/,lookbehind:!0,alias:"string"},"eol-comment":{pattern:/(^|\s)".*/m,lookbehind:!0,alias:"comment"},keyword:{pattern:/(\s|\.|^)(?:SCIENTIFIC_WITH_LEADING_ZERO|SCALE_PRESERVING_SCIENTIFIC|RMC_COMMUNICATION_FAILURE|END-ENHANCEMENT-SECTION|MULTIPLY-CORRESPONDING|SUBTRACT-CORRESPONDING|VERIFICATION-MESSAGE|DIVIDE-CORRESPONDING|ENHANCEMENT-SECTION|CURRENCY_CONVERSION|RMC_SYSTEM_FAILURE|START-OF-SELECTION|MOVE-CORRESPONDING|RMC_INVALID_STATUS|CUSTOMER-FUNCTION|END-OF-DEFINITION|ENHANCEMENT-POINT|SYSTEM-EXCEPTIONS|ADD-CORRESPONDING|SCALE_PRESERVING|SELECTION-SCREEN|CURSOR-SELECTION|END-OF-SELECTION|LOAD-OF-PROGRAM|SCROLL-BOUNDARY|SELECTION-TABLE|EXCEPTION-TABLE|IMPLEMENTATIONS|PARAMETER-TABLE|RIGHT-JUSTIFIED|UNIT_CONVERSION|AUTHORITY-CHECK|LIST-PROCESSING|SIGN_AS_POSTFIX|COL_BACKGROUND|IMPLEMENTATION|INTERFACE-POOL|TRANSFORMATION|IDENTIFICATION|ENDENHANCEMENT|LINE-SELECTION|INITIALIZATION|LEFT-JUSTIFIED|SELECT-OPTIONS|SELECTION-SETS|COMMUNICATION|CORRESPONDING|DECIMAL_SHIFT|PRINT-CONTROL|VALUE-REQUEST|CHAIN-REQUEST|FUNCTION-POOL|FIELD-SYMBOLS|FUNCTIONALITY|INVERTED-DATE|SELECTION-SET|CLASS-METHODS|OUTPUT-LENGTH|CLASS-CODING|COL_NEGATIVE|ERRORMESSAGE|FIELD-GROUPS|HELP-REQUEST|NO-EXTENSION|NO-TOPOFPAGE|REDEFINITION|DISPLAY-MODE|ENDINTERFACE|EXIT-COMMAND|FIELD-SYMBOL|NO-SCROLLING|SHORTDUMP-ID|ACCESSPOLICY|CLASS-EVENTS|COL_POSITIVE|DECLARATIONS|ENHANCEMENTS|FILTER-TABLE|SWITCHSTATES|SYNTAX-CHECK|TRANSPORTING|ASYNCHRONOUS|SYNTAX-TRACE|TOKENIZATION|USER-COMMAND|WITH-HEADING|ABAP-SOURCE|BREAK-POINT|CHAIN-INPUT|COMPRESSION|FIXED-POINT|NEW-SECTION|NON-UNICODE|OCCURRENCES|RESPONSIBLE|SYSTEM-CALL|TRACE-TABLE|ABBREVIATED|CHAR-TO-HEX|END-OF-FILE|ENDFUNCTION|ENVIRONMENT|ASSOCIATION|COL_HEADING|EDITOR-CALL|END-OF-PAGE|ENGINEERING|IMPLEMENTED|INTENSIFIED|RADIOBUTTON|SYSTEM-EXIT|TOP-OF-PAGE|TRANSACTION|APPLICATION|CONCATENATE|DESTINATION|ENHANCEMENT|IMMEDIATELY|NO-GROUPING|PRECOMPILED|REPLACEMENT|TITLE-LINES|ACTIVATION|BYTE-ORDER|CLASS-POOL|CONNECTION|CONVERSION|DEFINITION|DEPARTMENT|EXPIRATION|INHERITING|MESSAGE-ID|NO-HEADING|PERFORMING|QUEUE-ONLY|RIGHTSPACE|SCIENTIFIC|STATUSINFO|STRUCTURES|SYNCPOINTS|WITH-TITLE|ATTRIBUTES|BOUNDARIES|CLASS-DATA|COL_NORMAL|DD\/MM\/YYYY|DESCENDING|INTERFACES|LINE-COUNT|MM\/DD\/YYYY|NON-UNIQUE|PRESERVING|SELECTIONS|STATEMENTS|SUBROUTINE|TRUNCATION|TYPE-POOLS|ARITHMETIC|BACKGROUND|ENDPROVIDE|EXCEPTIONS|IDENTIFIER|INDEX-LINE|OBLIGATORY|PARAMETERS|PERCENTAGE|PUSHBUTTON|RESOLUTION|COMPONENTS|DEALLOCATE|DISCONNECT|DUPLICATES|FIRST-LINE|HEAD-LINES|NO-DISPLAY|OCCURRENCE|RESPECTING|RETURNCODE|SUBMATCHES|TRACE-FILE|ASCENDING|BYPASSING|ENDMODULE|EXCEPTION|EXCLUDING|EXPORTING|INCREMENT|MATCHCODE|PARAMETER|PARTIALLY|PREFERRED|REFERENCE|REPLACING|RETURNING|SELECTION|SEPARATED|SPECIFIED|STATEMENT|TIMESTAMP|TYPE-POOL|ACCEPTING|APPENDAGE|ASSIGNING|COL_GROUP|COMPARING|CONSTANTS|DANGEROUS|IMPORTING|INSTANCES|LEFTSPACE|LOG-POINT|QUICKINFO|READ-ONLY|SCROLLING|SQLSCRIPT|STEP-LOOP|TOP-LINES|TRANSLATE|APPENDING|AUTHORITY|CHARACTER|COMPONENT|CONDITION|DIRECTORY|DUPLICATE|MESSAGING|RECEIVING|SUBSCREEN|ACCORDING|COL_TOTAL|END-LINES|ENDMETHOD|ENDSELECT|EXPANDING|EXTENSION|INCLUDING|INFOTYPES|INTERFACE|INTERVALS|LINE-SIZE|PF-STATUS|PROCEDURE|PROTECTED|REQUESTED|RESUMABLE|RIGHTPLUS|SAP-SPOOL|SECONDARY|STRUCTURE|SUBSTRING|TABLEVIEW|NUMOFCHAR|ADJACENT|ANALYSIS|ASSIGNED|BACKWARD|CHANNELS|CHECKBOX|CONTINUE|CRITICAL|DATAINFO|DD\/MM\/YY|DURATION|ENCODING|ENDCLASS|FUNCTION|LEFTPLUS|LINEFEED|MM\/DD\/YY|OVERFLOW|RECEIVED|SKIPPING|SORTABLE|STANDARD|SUBTRACT|SUPPRESS|TABSTRIP|TITLEBAR|TRUNCATE|UNASSIGN|WHENEVER|ANALYZER|COALESCE|COMMENTS|CONDENSE|DECIMALS|DEFERRED|ENDWHILE|EXPLICIT|KEYWORDS|MESSAGES|POSITION|PRIORITY|RECEIVER|RENAMING|TIMEZONE|TRAILING|ALLOCATE|CENTERED|CIRCULAR|CONTROLS|CURRENCY|DELETING|DESCRIBE|DISTANCE|ENDCATCH|EXPONENT|EXTENDED|GENERATE|IGNORING|INCLUDES|INTERNAL|MAJOR-ID|MODIFIER|NEW-LINE|OPTIONAL|PROPERTY|ROLLBACK|STARTING|SUPPLIED|ABSTRACT|CHANGING|CONTEXTS|CREATING|CUSTOMER|DATABASE|DAYLIGHT|DEFINING|DISTINCT|DIVISION|ENABLING|ENDCHAIN|ESCAPING|HARMLESS|IMPLICIT|INACTIVE|LANGUAGE|MINOR-ID|MULTIPLY|NEW-PAGE|NO-TITLE|POS_HIGH|SEPARATE|TEXTPOOL|TRANSFER|SELECTOR|DBMAXLEN|ITERATOR|SELECTOR|ARCHIVE|BIT-XOR|BYTE-CO|COLLECT|COMMENT|CURRENT|DEFAULT|DISPLAY|ENDFORM|EXTRACT|LEADING|LISTBOX|LOCATOR|MEMBERS|METHODS|NESTING|POS_LOW|PROCESS|PROVIDE|RAISING|RESERVE|SECONDS|SUMMARY|VISIBLE|BETWEEN|BIT-AND|BYTE-CS|CLEANUP|COMPUTE|CONTROL|CONVERT|DATASET|ENDCASE|FORWARD|HEADERS|HOTSPOT|INCLUDE|INVERSE|KEEPING|NO-ZERO|OBJECTS|OVERLAY|PADDING|PATTERN|PROGRAM|REFRESH|SECTION|SUMMING|TESTING|VERSION|WINDOWS|WITHOUT|BIT-NOT|BYTE-CA|BYTE-NA|CASTING|CONTEXT|COUNTRY|DYNAMIC|ENABLED|ENDLOOP|EXECUTE|FRIENDS|HANDLER|HEADING|INITIAL|\*-INPUT|LOGFILE|MAXIMUM|MINIMUM|NO-GAPS|NO-SIGN|PRAGMAS|PRIMARY|PRIVATE|REDUCED|REPLACE|REQUEST|RESULTS|UNICODE|WARNING|ALIASES|BYTE-CN|BYTE-NS|CALLING|COL_KEY|COLUMNS|CONNECT|ENDEXEC|ENTRIES|EXCLUDE|FILTERS|FURTHER|HELP-ID|LOGICAL|MAPPING|MESSAGE|NAMETAB|OPTIONS|PACKAGE|PERFORM|RECEIVE|STATICS|VARYING|BINDING|CHARLEN|GREATER|XSTRLEN|ACCEPT|APPEND|DETAIL|ELSEIF|ENDING|ENDTRY|FORMAT|FRAMES|GIVING|HASHED|HEADER|IMPORT|INSERT|MARGIN|MODULE|NATIVE|OBJECT|OFFSET|REMOTE|RESUME|SAVING|SIMPLE|SUBMIT|TABBED|TOKENS|UNIQUE|UNPACK|UPDATE|WINDOW|YELLOW|ACTUAL|ASPECT|CENTER|CURSOR|DELETE|DIALOG|DIVIDE|DURING|ERRORS|EVENTS|EXTEND|FILTER|HANDLE|HAVING|IGNORE|LITTLE|MEMORY|NO-GAP|OCCURS|OPTION|PERSON|PLACES|PUBLIC|REDUCE|REPORT|RESULT|SINGLE|SORTED|SWITCH|SYNTAX|TARGET|VALUES|WRITER|ASSERT|BLOCKS|BOUNDS|BUFFER|CHANGE|COLUMN|COMMIT|CONCAT|COPIES|CREATE|DDMMYY|DEFINE|ENDIAN|ESCAPE|EXPAND|KERNEL|LAYOUT|LEGACY|LEVELS|MMDDYY|NUMBER|OUTPUT|RANGES|READER|RETURN|SCREEN|SEARCH|SELECT|SHARED|SOURCE|STABLE|STATIC|SUBKEY|SUFFIX|TABLES|UNWIND|YYMMDD|ASSIGN|BACKUP|BEFORE|BINARY|BIT-OR|BLANKS|CLIENT|CODING|COMMON|DEMAND|DYNPRO|EXCEPT|EXISTS|EXPORT|FIELDS|GLOBAL|GROUPS|LENGTH|LOCALE|MEDIUM|METHOD|MODIFY|NESTED|OTHERS|REJECT|SCROLL|SUPPLY|SYMBOL|ENDFOR|STRLEN|ALIGN|BEGIN|BOUND|ENDAT|ENTRY|EVENT|FINAL|FLUSH|GRANT|INNER|SHORT|USING|WRITE|AFTER|BLACK|BLOCK|CLOCK|COLOR|COUNT|DUMMY|EMPTY|ENDDO|ENDON|GREEN|INDEX|INOUT|LEAVE|LEVEL|LINES|MODIF|ORDER|OUTER|RANGE|RESET|RETRY|RIGHT|SMART|SPLIT|STYLE|TABLE|THROW|UNDER|UNTIL|UPPER|UTF-8|WHERE|ALIAS|BLANK|CLEAR|CLOSE|EXACT|FETCH|FIRST|FOUND|GROUP|LLANG|LOCAL|OTHER|REGEX|SPOOL|TITLE|TYPES|VALID|WHILE|ALPHA|BOXED|CATCH|CHAIN|CHECK|CLASS|COVER|ENDIF|EQUIV|FIELD|FLOOR|FRAME|INPUT|LOWER|MATCH|NODES|PAGES|PRINT|RAISE|ROUND|SHIFT|SPACE|SPOTS|STAMP|STATE|TASKS|TIMES|TRMAC|ULINE|UNION|VALUE|WIDTH|EQUAL|LOG10|TRUNC|BLOB|CASE|CEIL|CLOB|COND|EXIT|FILE|GAPS|HOLD|INCL|INTO|KEEP|KEYS|LAST|LINE|LONG|LPAD|MAIL|MODE|OPEN|PINK|READ|ROWS|TEST|THEN|ZERO|AREA|BACK|BADI|BYTE|CAST|EDIT|EXEC|FAIL|FIND|FKEQ|FONT|FREE|GKEQ|HIDE|INIT|ITNO|LATE|LOOP|MAIN|MARK|MOVE|NEXT|NULL|RISK|ROLE|UNIT|WAIT|ZONE|BASE|CALL|CODE|DATA|DATE|FKGE|GKGE|HIGH|KIND|LEFT|LIST|MASK|MESH|NAME|NODE|PACK|PAGE|POOL|SEND|SIGN|SIZE|SOME|STOP|TASK|TEXT|TIME|USER|VARY|WITH|WORD|BLUE|CONV|COPY|DEEP|ELSE|FORM|FROM|HINT|ICON|JOIN|LIKE|LOAD|ONLY|PART|SCAN|SKIP|SORT|TYPE|UNIX|VIEW|WHEN|WORK|ACOS|ASIN|ATAN|COSH|EACH|FRAC|LESS|RTTI|SINH|SQRT|TANH|AVG|BIT|DIV|ISO|LET|OUT|PAD|SQL|ALL|CI_|CPI|END|LOB|LPI|MAX|MIN|NEW|OLE|RUN|SET|\?TO|YES|ABS|ADD|AND|BIG|FOR|HDB|JOB|LOW|NOT|SAP|TRY|VIA|XML|ANY|GET|IDS|KEY|MOD|OFF|PUT|RAW|RED|REF|SUM|TAB|XSD|CNT|COS|EXP|LOG|SIN|TAN|XOR|AT|CO|CP|DO|GT|ID|IF|NS|OR|BT|CA|CS|GE|NA|NB|EQ|IN|LT|NE|NO|OF|ON|PF|TO|AS|BY|CN|IS|LE|NP|UP|E|I|M|O|Z|C|X)\b/i,lookbehind:!0},number:/\b\d+\b/,operator:{pattern:/(\s)(?:\*\*?|<[=>]?|>=?|\?=|[-+\/=])(?=\s)/,lookbehind:!0},"string-operator":{pattern:/(\s)&&?(?=\s)/,lookbehind:!0,alias:"keyword"},"token-operator":[{pattern:/(\w)(?:->?|=>|[~|{}])(?=\w)/,lookbehind:!0,alias:"punctuation"},{pattern:/[|{}]/,alias:"punctuation"}],punctuation:/[,.:()]/},Prism.languages.actionscript=Prism.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),Prism.languages.actionscript["class-name"].alias="function",Prism.languages.markup&&Prism.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\\1|\\?(?!\1)[\w\W])*\2)*\s*\/?>/,lookbehind:!0,inside:{rest:Prism.languages.markup}}}),Prism.languages.apacheconf={comment:/#.*/,"directive-inline":{pattern:/^(\s*)\b(AcceptFilter|AcceptPathInfo|AccessFileName|Action|AddAlt|AddAltByEncoding|AddAltByType|AddCharset|AddDefaultCharset|AddDescription|AddEncoding|AddHandler|AddIcon|AddIconByEncoding|AddIconByType|AddInputFilter|AddLanguage|AddModuleInfo|AddOutputFilter|AddOutputFilterByType|AddType|Alias|AliasMatch|Allow|AllowCONNECT|AllowEncodedSlashes|AllowMethods|AllowOverride|AllowOverrideList|Anonymous|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail|AsyncRequestWorkerFactor|AuthBasicAuthoritative|AuthBasicFake|AuthBasicProvider|AuthBasicUseDigestAlgorithm|AuthDBDUserPWQuery|AuthDBDUserRealmQuery|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile|AuthDigestAlgorithm|AuthDigestDomain|AuthDigestNonceLifetime|AuthDigestProvider|AuthDigestQop|AuthDigestShmemSize|AuthFormAuthoritative|AuthFormBody|AuthFormDisableNoStore|AuthFormFakeBasicAuth|AuthFormLocation|AuthFormLoginRequiredLocation|AuthFormLoginSuccessLocation|AuthFormLogoutLocation|AuthFormMethod|AuthFormMimetype|AuthFormPassword|AuthFormProvider|AuthFormSitePassphrase|AuthFormSize|AuthFormUsername|AuthGroupFile|AuthLDAPAuthorizePrefix|AuthLDAPBindAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareAsUser|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPInitialBindAsUser|AuthLDAPInitialBindPattern|AuthLDAPMaxSubGroupDepth|AuthLDAPRemoteUserAttribute|AuthLDAPRemoteUserIsDN|AuthLDAPSearchAsUser|AuthLDAPSubGroupAttribute|AuthLDAPSubGroupClass|AuthLDAPUrl|AuthMerging|AuthName|AuthnCacheContext|AuthnCacheEnable|AuthnCacheProvideFor|AuthnCacheSOCache|AuthnCacheTimeout|AuthnzFcgiCheckAuthnProvider|AuthnzFcgiDefineProvider|AuthType|AuthUserFile|AuthzDBDLoginToReferer|AuthzDBDQuery|AuthzDBDRedirectQuery|AuthzDBMType|AuthzSendForbiddenOnFailure|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|CacheDefaultExpire|CacheDetailHeader|CacheDirLength|CacheDirLevels|CacheDisable|CacheEnable|CacheFile|CacheHeader|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheIgnoreQueryString|CacheIgnoreURLSessionIdentifiers|CacheKeyBaseURL|CacheLastModifiedFactor|CacheLock|CacheLockMaxAge|CacheLockPath|CacheMaxExpire|CacheMaxFileSize|CacheMinExpire|CacheMinFileSize|CacheNegotiatedDocs|CacheQuickHandler|CacheReadSize|CacheReadTime|CacheRoot|CacheSocache|CacheSocacheMaxSize|CacheSocacheMaxTime|CacheSocacheMinTime|CacheSocacheReadSize|CacheSocacheReadTime|CacheStaleOnError|CacheStoreExpired|CacheStoreNoStore|CacheStorePrivate|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateInflateLimitRequestBody|DeflateInflateRatioBurst|DeflateInflateRatioLimit|DeflateMemLevel|DeflateWindowSize|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|HeartbeatAddress|HeartbeatListen|HeartbeatMaxServers|HeartbeatStorage|HeartbeatStorage|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|IndexHeadInsert|IndexIgnore|IndexIgnoreReset|IndexOptions|IndexOrderDefault|IndexStyleSheet|InputSed|ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionPoolTTL|LDAPConnectionTimeout|LDAPLibraryDebug|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPReferralHopLimit|LDAPReferrals|LDAPRetries|LDAPRetryDelay|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTimeout|LDAPTrustedClientCert|LDAPTrustedGlobalCert|LDAPTrustedMode|LDAPVerifyServerCert|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|LuaHookAccessChecker|LuaHookAuthChecker|LuaHookCheckUserID|LuaHookFixups|LuaHookInsertFilter|LuaHookLog|LuaHookMapToStorage|LuaHookTranslateName|LuaHookTypeChecker|LuaInherit|LuaInputFilter|LuaMapHandler|LuaOutputFilter|LuaPackageCPath|LuaPackagePath|LuaQuickHandler|LuaRoot|LuaScope|MaxConnectionsPerChild|MaxKeepAliveRequests|MaxMemFree|MaxRangeOverlaps|MaxRangeReversals|MaxRanges|MaxRequestWorkers|MaxSpareServers|MaxSpareThreads|MaxThreads|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|ProxyAddHeaders|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyExpressDBMFile|ProxyExpressDBMType|ProxyExpressEnable|ProxyFtpDirCharset|ProxyFtpEscapeWildcards|ProxyFtpListOnWildcard|ProxyHTMLBufSize|ProxyHTMLCharsetOut|ProxyHTMLDocType|ProxyHTMLEnable|ProxyHTMLEvents|ProxyHTMLExtended|ProxyHTMLFixups|ProxyHTMLInterp|ProxyHTMLLinks|ProxyHTMLMeta|ProxyHTMLStripComments|ProxyHTMLURLMap|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassInherit|ProxyPassInterpolateEnv|ProxyPassMatch|ProxyPassReverse|ProxyPassReverseCookieDomain|ProxyPassReverseCookiePath|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxySCGIInternalRedirect|ProxySCGISendfile|ProxySet|ProxySourceAddress|ProxyStatus|ProxyTimeout|ProxyVia|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIPHeader|RemoteIPInternalProxy|RemoteIPInternalProxyList|RemoteIPProxiesHeader|RemoteIPTrustedProxy|RemoteIPTrustedProxyList|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|RewriteBase|RewriteCond|RewriteEngine|RewriteMap|RewriteOptions|RewriteRule|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script|ScriptAlias|ScriptAliasMatch|ScriptInterpreterSource|ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock|SecureListen|SeeRequestTail|SendBufferSize|ServerAdmin|ServerAlias|ServerLimit|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|Session|SessionCookieName|SessionCookieName2|SessionCookieRemove|SessionCryptoCipher|SessionCryptoDriver|SessionCryptoPassphrase|SessionCryptoPassphraseFile|SessionDBDCookieName|SessionDBDCookieName2|SessionDBDCookieRemove|SessionDBDDeleteLabel|SessionDBDInsertLabel|SessionDBDPerUser|SessionDBDSelectLabel|SessionDBDUpdateLabel|SessionEnv|SessionExclude|SessionHeader|SessionInclude|SessionMaxAge|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSLCACertificateFile|SSLCACertificatePath|SSLCADNRequestFile|SSLCADNRequestPath|SSLCARevocationCheck|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLCompression|SSLCryptoDevice|SSLEngine|SSLFIPS|SSLHonorCipherOrder|SSLInsecureRenegotiation|SSLOCSPDefaultResponder|SSLOCSPEnable|SSLOCSPOverrideResponder|SSLOCSPResponderTimeout|SSLOCSPResponseMaxAge|SSLOCSPResponseTimeSkew|SSLOCSPUseRequestNonce|SSLOpenSSLConfCmd|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationCheck|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCheckPeerCN|SSLProxyCheckPeerExpire|SSLProxyCheckPeerName|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateChainFile|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRenegBufferSize|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLSessionTicketKeyFile|SSLSRPUnknownUserSeed|SSLSRPVerifierFile|SSLStaplingCache|SSLStaplingErrorCacheTimeout|SSLStaplingFakeTryLater|SSLStaplingForceURL|SSLStaplingResponderTimeout|SSLStaplingResponseMaxAge|SSLStaplingResponseTimeSkew|SSLStaplingReturnResponderErrors|SSLStaplingStandardCacheTimeout|SSLStrictSNIVHostCheck|SSLUserName|SSLUseStapling|SSLVerifyClient|SSLVerifyDepth|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/im,lookbehind:!0,alias:"property"},"directive-block":{pattern:/<\/?\b(AuthnProviderAlias|AuthzProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|RequireAll|RequireAny|RequireNone|VirtualHost)\b *.*>/i,inside:{"directive-block":{pattern:/^<\/?\w+/,inside:{punctuation:/^<\/?/},alias:"tag"},"directive-block-parameter":{pattern:/.*[^>]/,inside:{punctuation:/:/,string:{pattern:/("|').*\1/,inside:{variable:/(\$|%)\{?(\w\.?(\+|\-|:)?)+\}?/}}},alias:"attr-value"},punctuation:/>/},alias:"tag"},"directive-flags":{pattern:/\[(\w,?)+\]/,alias:"keyword"},string:{pattern:/("|').*\1/,inside:{variable:/(\$|%)\{?(\w\.?(\+|\-|:)?)+\}?/}},variable:/(\$|%)\{?(\w\.?(\+|\-|:)?)+\}?/,regex:/\^?.*\$|\^.*\$?/},Prism.languages.applescript={comment:[/\(\*(?:\(\*[\w\W]*?\*\)|[\w\W])*?\*\)/,/--.+/,/#.+/],string:/"(?:\\?.)*?"/,number:/\b-?\d*\.?\d+([Ee]-?\d+)?\b/,operator:[/[&=≠≤≥*+\-\/÷^]|[<>]=?/,/\b(?:(?:start|begin|end)s? with|(?:(?:does not|doesn't) contain|contains?)|(?:is|isn't|is not) (?:in|contained by)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:(?:does not|doesn't) come|comes) (?:before|after)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equals|equal to|isn't|is not)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|or|div|mod|as|not))\b/],keyword:/\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b/,"class":{pattern:/\b(?:alias|application|boolean|class|constant|date|file|integer|list|number|POSIX file|real|record|reference|RGB color|script|text|centimetres|centimeters|feet|inches|kilometres|kilometers|metres|meters|miles|yards|square feet|square kilometres|square kilometers|square metres|square meters|square miles|square yards|cubic centimetres|cubic centimeters|cubic feet|cubic inches|cubic metres|cubic meters|cubic yards|gallons|litres|liters|quarts|grams|kilograms|ounces|pounds|degrees Celsius|degrees Fahrenheit|degrees Kelvin)\b/,alias:"builtin"},punctuation:/[{}():,¬«»《》]/},Prism.languages.aspnet=Prism.languages.extend("markup",{"page-directive tag":{pattern:/<%\s*@.*%>/i,inside:{"page-directive tag":/<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,rest:Prism.languages.markup.tag.inside}},"directive tag":{pattern:/<%.*%>/i,inside:{"directive tag":/<%\s*?[$=%#:]{0,2}|%>/i,rest:Prism.languages.csharp}}}),Prism.languages.aspnet.tag.pattern=/<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,Prism.languages.insertBefore("inside","punctuation",{"directive tag":Prism.languages.aspnet["directive tag"]},Prism.languages.aspnet.tag.inside["attr-value"]),Prism.languages.insertBefore("aspnet","comment",{"asp comment":/<%--[\w\W]*?--%>/}),Prism.languages.insertBefore("aspnet",Prism.languages.javascript?"script":"tag",{"asp script":{pattern:/(<script(?=.*runat=['"]?server['"]?)[\w\W]*?>)[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.csharp||{}}}),function(e){var t={variable:[{pattern:/\$?\(\([\w\W]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\w\W]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[a-z0-9_#\?\*!@]+|\{[^}]+\})/i]};e.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:"important"},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)(?:"|')?(\w+?)(?:"|')?\s*\r?\n(?:[\s\S])*?\r?\n\2/g,lookbehind:!0,inside:t},{pattern:/("|')(?:\\?[\s\S])*?\1/g,inside:t}],variable:t.variable,"function":{pattern:/(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/, +lookbehind:!0},keyword:{pattern:/(^|\s|;|\||&)(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\s|;|\||&)/,lookbehind:!0},"boolean":{pattern:/(^|\s|;|\||&)(?:true|false)(?=$|\s|;|\||&)/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<<?|>>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var i=t.variable[1].inside;i["function"]=e.languages.bash["function"],i.keyword=e.languages.bash.keyword,i["boolean"]=e.languages.bash["boolean"],i.operator=e.languages.bash.operator,i.punctuation=e.languages.bash.punctuation}(Prism),Prism.languages.basic={string:/"(?:""|[!#$%&'()*,\/:;<=>?^_ +\-.A-Z\d])*"/i,comment:{pattern:/(?:!|REM\b).+/i,inside:{keyword:/^REM/i}},number:/(?:\b|\B[.-])(?:\d+\.?\d*)(?:E[+-]?\d+)?/i,keyword:/\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SHARED|SINGLE|SELECT CASE|SHELL|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\$|\b)/i,"function":/\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\$|\b)/i,operator:/<[=>]?|>=?|[+\-*\/^=&]|\b(?:AND|EQV|IMP|NOT|OR|XOR)\b/i,punctuation:/[,;:()]/},Prism.languages.c=Prism.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(define|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|stdin|stdout|stderr)\b/}),delete Prism.languages.c["class-name"],delete Prism.languages.c["boolean"],Prism.languages.csharp=Prism.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+f?)\b/i}),Prism.languages.insertBefore("csharp","keyword",{preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}}),Prism.languages.cpp=Prism.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),Prism.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}}),function(e){var t=/#(?!\{).+/,i={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[/'(?:\\?[^\\])*?'/,{pattern:/"(?:\\?[^\\])*?"/,inside:{interpolation:i}}],keyword:/\b(and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:i}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\?[\s\S])*?`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},rest:e.languages.javascript}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,alias:"string"},{pattern:/"""[\s\S]*?"""/,alias:"string",inside:{interpolation:i}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/})}(Prism),function(e){e.languages.ruby=e.languages.extend("clike",{comment:/#(?!\{[^\r\n]*?\}).*/,keyword:/\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var t={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.util.clone(e.languages.ruby)}};e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,inside:{interpolation:t}},{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.insertBefore("ruby","number",{builtin:/\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,inside:{interpolation:t}},{pattern:/("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,inside:{interpolation:t}}]}(Prism),Prism.languages.d=Prism.languages.extend("clike",{string:[/\b[rx]"(\\.|[^\\"])*"[cwd]?/,/\bq"(?:\[[\s\S]*?\]|\([\s\S]*?\)|<[\s\S]*?>|\{[\s\S]*?\})"/,/\bq"([_a-zA-Z][_a-zA-Z\d]*)(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\1"/,/\bq"(.)[\s\S]*?\1"/,/'(?:\\'|\\?[^']+)'/,/(["`])(\\.|(?!\1)[^\\])*\1[cwd]?/],number:[/\b0x\.?[a-f\d_]+(?:(?!\.\.)\.[a-f\d_]*)?(?:p[+-]?[a-f\d_]+)?[ulfi]*/i,{pattern:/((?:\.\.)?)(?:\b0b\.?|\b|\.)\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:e[+-]?\d[\d_]*)?[ulfi]*/i,lookbehind:!0}],keyword:/\$|\b(?:abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|public|pure|real|ref|return|scope|shared|short|static|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|__(?:(?:FILE|MODULE|LINE|FUNCTION|PRETTY_FUNCTION|DATE|EOF|TIME|TIMESTAMP|VENDOR|VERSION)__|gshared|traits|vector|parameters)|string|wstring|dstring|size_t|ptrdiff_t)\b/,operator:/\|[|=]?|&[&=]?|\+[+=]?|-[-=]?|\.?\.\.|=[>=]?|!(?:i[ns]\b|<>?=?|>=?|=)?|\bi[ns]\b|(?:<[<>]?|>>?>?|\^\^|[*\/%^~])=?/}),Prism.languages.d.comment=[/^\s*#!.+/,{pattern:/(^|[^\\])\/\+(?:\/\+[\w\W]*?\+\/|[\w\W])*?\+\//,lookbehind:!0}].concat(Prism.languages.d.comment),Prism.languages.insertBefore("d","comment",{"token-string":{pattern:/\bq\{(?:|\{[^}]*\}|[^}])*\}/,alias:"string"}}),Prism.languages.insertBefore("d","keyword",{property:/\B@\w*/}),Prism.languages.insertBefore("d","function",{register:{pattern:/\b(?:[ABCD][LHX]|E[ABCD]X|E?(?:BP|SP|DI|SI)|[ECSDGF]S|CR[0234]|DR[012367]|TR[3-7]|X?MM[0-7]|R[ABCD]X|[BS]PL|R[BS]P|[DS]IL|R[DS]I|R(?:[89]|1[0-5])[BWD]?|XMM(?:[89]|1[0-5])|YMM(?:1[0-5]|\d))\b|\bST(?:\([0-7]\)|\b)/,alias:"variable"}}),Prism.languages.dart=Prism.languages.extend("clike",{string:[/r?("""|''')[\s\S]*?\1/,/r?("|')(\\?.)*?\1/],keyword:[/\b(?:async|sync|yield)\*/,/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|default|deferred|do|dynamic|else|enum|export|external|extends|factory|final|finally|for|get|if|implements|import|in|library|new|null|operator|part|rethrow|return|set|static|super|switch|this|throw|try|typedef|var|void|while|with|yield)\b/],operator:/\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/}),Prism.languages.insertBefore("dart","function",{metadata:{pattern:/@\w+/,alias:"symbol"}}),Prism.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d+.*$/m],deleted:/^[-<].+$/m,inserted:/^[+>].+$/m,diff:{pattern:/^!(?!!).+$/m,alias:"important"}},Prism.languages.docker={keyword:{pattern:/(^\s*)(?:ONBUILD|FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|COPY|VOLUME|USER|WORKDIR|CMD|LABEL|ENTRYPOINT)(?=\s)/im,lookbehind:!0},string:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*?\1/,comment:/#.*/,punctuation:/---|\.\.\.|[:[\]{}\-,|>?]/},Prism.languages.erlang={comment:/%.+/,string:/"(?:\\?.)*?"/,"quoted-function":{pattern:/'(?:\\.|[^'\\])+'(?=\()/,alias:"function"},"quoted-atom":{pattern:/'(?:\\.|[^'\\])+'/,alias:"atom"},"boolean":/\b(?:true|false)\b/,keyword:/\b(?:fun|when|case|of|end|if|receive|after|try|catch)\b/,number:[/\$\\?./,/\d+#[a-z0-9]+/i,/(?:\b|-)\d*\.?\d+([Ee][+-]?\d+)?\b/],"function":/\b[a-z][\w@]*(?=\()/,variable:{pattern:/(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,lookbehind:!0},operator:[/[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:bnot|div|rem|band|bor|bxor|bsl|bsr|not|and|or|xor|orelse|andalso)\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\b[a-z][\w@]*/,punctuation:/[()[\]{}:;,.#|]|<<|>>/},Prism.languages.fsharp=Prism.languages.extend("clike",{comment:[{pattern:/(^|[^\\])\(\*[\w\W]*?\*\)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],keyword:/\b(?:let|return|use|yield)(?:!\B|\b)|\b(abstract|and|as|assert|base|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|global|if|in|inherit|inline|interface|internal|lazy|match|member|module|mutable|namespace|new|not|null|of|open|or|override|private|public|rec|select|static|struct|then|to|true|try|type|upcast|val|void|when|while|with|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall|trait|virtual|volatile)\b/,string:/(?:"""[\s\S]*?"""|@"(?:""|[^"])*"|("|')(?:\\\1|\\?(?!\1)[\s\S])*\1)B?/,number:[/\b-?0x[\da-fA-F]+(un|lf|LF)?\b/,/\b-?0b[01]+(y|uy)?\b/,/\b-?(\d*\.?\d+|\d+\.)([fFmM]|[eE][+-]?\d+)?\b/,/\b-?\d+(y|uy|s|us|l|u|ul|L|UL|I)?\b/]}),Prism.languages.insertBefore("fsharp","keyword",{preprocessor:{pattern:/^[^\r\n\S]*#.*/m,alias:"property",inside:{directive:{pattern:/(\s*#)\b(else|endif|if|light|line|nowarn)\b/,lookbehind:!0,alias:"keyword"}}}}),Prism.languages.fortran={"quoted-number":{pattern:/[BOZ](['"])[A-F0-9]+\1/i,alias:"number"},string:{pattern:/(?:\w+_)?(['"])(?:\1\1|&(?:\r\n?|\n)(?:\s*!.+(?:\r\n?|\n))?|(?!\1).)*(?:\1|&)/,inside:{comment:{pattern:/(&(?:\r\n?|\n)\s*)!.*/,lookbehind:!0}}},comment:/!.*/,"boolean":/\.(?:TRUE|FALSE)\.(?:_\w+)?/i,number:/(?:\b|[+-])(?:\d+(?:\.\d*)?|\.\d+)(?:[ED][+-]?\d+)?(?:_\w+)?/i,keyword:[/\b(?:INTEGER|REAL|DOUBLE ?PRECISION|COMPLEX|CHARACTER|LOGICAL)\b/i,/\b(?:END ?)?(?:BLOCK ?DATA|DO|FILE|FORALL|FUNCTION|IF|INTERFACE|MODULE(?! PROCEDURE)|PROGRAM|SELECT|SUBROUTINE|TYPE|WHERE)\b/i,/\b(?:ALLOCATABLE|ALLOCATE|BACKSPACE|CALL|CASE|CLOSE|COMMON|CONTAINS|CONTINUE|CYCLE|DATA|DEALLOCATE|DIMENSION|DO|END|EQUIVALENCE|EXIT|EXTERNAL|FORMAT|GO ?TO|IMPLICIT(?: NONE)?|INQUIRE|INTENT|INTRINSIC|MODULE PROCEDURE|NAMELIST|NULLIFY|OPEN|OPTIONAL|PARAMETER|POINTER|PRINT|PRIVATE|PUBLIC|READ|RETURN|REWIND|SAVE|SELECT|STOP|TARGET|WHILE|WRITE)\b/i,/\b(?:ASSIGNMENT|DEFAULT|ELEMENTAL|ELSE|ELSEWHERE|ELSEIF|ENTRY|IN|INCLUDE|INOUT|KIND|NULL|ONLY|OPERATOR|OUT|PURE|RECURSIVE|RESULT|SEQUENCE|STAT|THEN|USE)\b/i],operator:[/\*\*|\/\/|=>|[=\/]=|[<>]=?|::|[+\-*=%]|\.(?:EQ|NE|LT|LE|GT|GE|NOT|AND|OR|EQV|NEQV)\.|\.[A-Z]+\./i,{pattern:/(^|(?!\().)\/(?!\))/,lookbehind:!0}],punctuation:/\(\/|\/\)|[(),;:&]/},Prism.languages.git={comment:/^#.*/m,deleted:/^[-–].*/m,inserted:/^\+.*/m,string:/("|')(\\?.)*?\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s(--|-)\w+/m}},coord:/^@@.*@@$/m,commit_sha1:/^commit \w{40}$/m},Prism.languages.go=Prism.languages.extend("clike",{keyword:/\b(break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(bool|byte|complex(64|128)|error|float(32|64)|rune|string|u?int(8|16|32|64|)|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(ln)?|real|recover)\b/,"boolean":/\b(_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/\b(-?(0x[a-f\d]+|(\d+\.?\d*|\.\d+)(e[-+]?\d+)?)i?)\b/i,string:/("|'|`)(\\?.|\r|\n)*?\1/}),delete Prism.languages.go["class-name"],Prism.languages.groovy=Prism.languages.extend("clike",{keyword:/\b(as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,string:/("""|''')[\W\w]*?\1|("|'|\/)(?:\\?.)*?\2|(\$\/)(\$\/\$|[\W\w])*?\/\$/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?[\d]+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.{1,2}(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),Prism.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment"}}),Prism.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(setup|given|when|then|and|cleanup|expect|where):/}),Prism.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0}}),Prism.hooks.add("wrap",function(e){if("groovy"===e.language&&"string"===e.type){var t=e.content[0];if("'"!=t){var i=/([^\\])(\$(\{.*?\}|[\w\.]+))/;"$"===t&&(i=/([^\$])(\$(\{.*?\}|[\w\.]+))/),e.content=Prism.highlight(e.content,{expression:{pattern:i,lookbehind:!0,inside:Prism.languages.groovy}}),e.classes.push("/"===t?"regex":"gstring")}}}),Prism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(--[^-!#$%*+=?&@|~.:<>^\\\/].*|{-[\w\W]*?-})/m,lookbehind:!0},"char":/'([^\\']|\\([abfnrtv\\"'&]|\^[A-Z@[\]\^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,string:/"([^\\"]|\\([abfnrtv\\"'&]|\^[A-Z@[\]\^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+)|\\\s+\\)*"/,keyword:/\b(case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,import_statement:{pattern:/(\r?\n|\r|^)\s*import\s+(qualified\s+)?([A-Z][_a-zA-Z0-9']*)(\.[A-Z][_a-zA-Z0-9']*)*(\s+as\s+([A-Z][_a-zA-Z0-9']*)(\.[A-Z][_a-zA-Z0-9']*)*)?(\s+hiding\b)?/m,inside:{keyword:/\b(import|qualified|as|hiding)\b/}},builtin:/\b(abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(\d+(\.\d+)?(e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:/\s\.\s|[-!#$%*+=?&@|~.:<>^\\\/]*\.[-!#$%*+=?&@|~.:<>^\\\/]+|[-!#$%*+=?&@|~.:<>^\\\/]+\.[-!#$%*+=?&@|~.:<>^\\\/]*|[-!#$%*+=?&@|~:<>^\\\/]+|`([A-Z][_a-zA-Z0-9']*\.)*[_a-z][_a-zA-Z0-9']*`/,hvariable:/\b([A-Z][_a-zA-Z0-9']*\.)*[_a-z][_a-zA-Z0-9']*\b/,constant:/\b([A-Z][_a-zA-Z0-9']*\.)*[A-Z][_a-zA-Z0-9']*\b/,punctuation:/[{}[\];(),.:]/},Prism.languages.http={"request-line":{pattern:/^(POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b\shttps?:\/\/\S+\sHTTP\/[0-9.]+/m,inside:{property:/^(POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b/,"attr-name":/:\w+/}},"response-status":{pattern:/^HTTP\/1.[01] [0-9]+.*/m,inside:{property:{pattern:/(^HTTP\/1.[01] )[0-9]+.*/i,lookbehind:!0}}},"header-name":{pattern:/^[\w-]+:(?=.)/m,alias:"keyword"}};var httpLanguages={"application/json":Prism.languages.javascript,"application/xml":Prism.languages.markup,"text/xml":Prism.languages.markup,"text/html":Prism.languages.markup};for(var contentType in httpLanguages)if(httpLanguages[contentType]){var options={};options[contentType]={pattern:new RegExp("(content-type:\\s*"+contentType+"[\\w\\W]*?)(?:\\r?\\n|\\r){2}[\\w\\W]*","i"),lookbehind:!0,inside:{rest:httpLanguages[contentType]}},Prism.languages.insertBefore("http","header-name",options)}Prism.languages.ini={comment:/^[ \t]*;.*$/m,important:/\[.*?\]/,constant:/^[ \t]*[^\s=]+?(?=[ \t]*=)/m,"attr-value":{pattern:/=.*/,inside:{punctuation:/^[=]/}}},Prism.languages.java=Prism.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[\s\S]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,number:/\b0x[a-f\d]+\.?[a-f\d]*(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|\.?\d*(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,"function":/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/},Prism.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|.)*/,lookbehind:!0},string:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^[^:=\r\n]+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},Prism.languages.markdown=Prism.languages.extend("markup",{}),Prism.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},code:[{pattern:/^(?: {4}|\t).+/m,alias:"keyword"},{pattern:/``.+?``|`[^`\n]+`/,alias:"keyword"}],title:[{pattern:/\w+.*(?:\r?\n|\r)(?:==+|--+)/,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])([\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:/(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^\*\*|^__|\*\*$|__$/}},italic:{pattern:/(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^[*_]|[*_]$/}},url:{pattern:/!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/,inside:{variable:{pattern:/(!?\[)[^\]]+(?=\]$)/,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),Prism.languages.markdown.bold.inside.url=Prism.util.clone(Prism.languages.markdown.url),Prism.languages.markdown.italic.inside.url=Prism.util.clone(Prism.languages.markdown.url),Prism.languages.markdown.bold.inside.italic=Prism.util.clone(Prism.languages.markdown.italic),Prism.languages.markdown.italic.inside.bold=Prism.util.clone(Prism.languages.markdown.bold),Prism.languages.matlab={string:/\B'(?:''|[^'\n])*'/,comment:[/%\{[\s\S]*?\}%/,/%.+/],number:/\b-?(?:\d*\.?\d+(?:[eE][+-]?\d+)?(?:[ij])?|[ij])\b/,keyword:/\b(?:break|case|catch|continue|else|elseif|end|for|function|if|inf|NaN|otherwise|parfor|pause|pi|return|switch|try|while)\b/,"function":/(?!\d)\w+(?=\s*\()/,operator:/\.?[*^\/\\']|[+\-:@]|[<>=~]=?|&&?|\|\|?/,punctuation:/\.{3}|[.,;\[\](){}!]/},Prism.languages.nginx=Prism.languages.extend("clike",{comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},keyword:/\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|server|events|location|include|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i}),Prism.languages.insertBefore("nginx","keyword",{variable:/\$[a-z_]+/i}),Prism.languages.objectivec=Prism.languages.extend("c",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|in|self|super)\b|(@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,string:/("|')(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|@"(\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),Prism.languages.pascal={comment:[/\(\*[\s\S]+?\*\)/,/\{[\s\S]+?\}/,/\/\/.*/],string:/(?:'(?:''|[^'\r\n])*'|#[&$%]?[a-f\d]+)+|\^[a-z]/i,keyword:[{pattern:/(^|[^&])\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\b/i, +lookbehind:!0},{pattern:/(^|[^&])\b(?:dispose|exit|false|new|true)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\b/i,lookbehind:!0}],number:[/[+-]?(?:[&%]\d+|\$[a-f\d]+)/i,/([+-]|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?/i],operator:[/\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=]/i,{pattern:/(^|[^&])\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\b/,lookbehind:!0}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/},Prism.languages.perl={comment:[{pattern:/(^\s*)=\w+[\s\S]*?=cut.*/m,lookbehind:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0}],string:[/\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,/\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:[^\\]|\\[\s\S])*?\1/,/\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,/\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,/\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,/\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,/("|`)(?:[^\\]|\\[\s\S])*?\1/,/'(?:[^'\\\r\n]|\\.)*'/],regex:[/\b(?:m|qr)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[msixpodualngc]*/,/\b(?:m|qr)\s+([a-zA-Z0-9])(?:[^\\]|\\.)*?\1[msixpodualngc]*/,/\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,/\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,/\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,/\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,{pattern:/(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\2(?:[^\\]|\\[\s\S])*?\2[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:[^\\]|\\[\s\S])*?\2(?:[^\\]|\\[\s\S])*?\2[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,lookbehind:!0},/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?((::)*'?(?!\d)[\w$]+)+(::)*/i,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*>|\b_\b/,alias:"symbol"},vstring:{pattern:/v\d+(\.\d+)*|\d+(\.\d+){2,}/,alias:"string"},"function":{pattern:/sub [a-z0-9_]+/i,inside:{keyword:/sub/}},keyword:/\b(any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b-?(0x[\dA-Fa-f](_?[\dA-Fa-f])*|0b[01](_?[01])*|(\d(_?\d)*)?\.?\d(_?\d)*([Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,punctuation:/[{}[\];(),:]/},Prism.languages.php=Prism.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0}}),Prism.languages.insertBefore("php","class-name",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),Prism.languages.insertBefore("php","keyword",{delimiter:/\?>|<\?(?:php)?/i,variable:/\$\w+\b/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),Prism.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}}),Prism.languages.markup&&(Prism.hooks.add("before-highlight",function(e){"php"===e.language&&(e.tokenStack=[],e.backupCode=e.code,e.code=e.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/gi,function(t){return e.tokenStack.push(t),"{{{PHP"+e.tokenStack.length+"}}}"}))}),Prism.hooks.add("before-insert",function(e){"php"===e.language&&(e.code=e.backupCode,delete e.backupCode)}),Prism.hooks.add("after-highlight",function(e){if("php"===e.language){for(var t,i=0;t=e.tokenStack[i];i++)e.highlightedCode=e.highlightedCode.replace("{{{PHP"+(i+1)+"}}}",Prism.highlight(t,e.grammar,"php").replace(/\$/g,"$$$$"));e.element.innerHTML=e.highlightedCode}}),Prism.hooks.add("wrap",function(e){"php"===e.language&&"markup"===e.type&&(e.content=e.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'<span class="token php">$1</span>'))}),Prism.languages.insertBefore("php","comment",{markup:{pattern:/<[^?]\/?(.*?)>/,inside:Prism.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/})),Prism.languages.insertBefore("php","variable",{"this":/\$this\b/,global:/\$(?:_(?:SERVER|GET|POST|FILES|REQUEST|SESSION|ENV|COOKIE)|GLOBALS|HTTP_RAW_POST_DATA|argc|argv|php_errormsg|http_response_header)/,scope:{pattern:/\b[\w\\]+::/,inside:{keyword:/(static|self|parent)/,punctuation:/(::|\\)/}}}),Prism.languages.prolog={comment:[/%.+/,/\/\*[\s\S]*?\*\//],string:/(["'])(?:\1\1|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,builtin:/\b(?:fx|fy|xf[xy]?|yfx?)\b/,variable:/\b[A-Z_]\w*/,"function":/\b[a-z]\w*(?:(?=\()|\/\d+)/,number:/\b\d+\.?\d*/,operator:/[:\\=><\-?*@\/;+^|!$.]+|\b(?:is|mod|not|xor)\b/,punctuation:/[(){}\[\],]/},function(e){e.languages.puppet={heredoc:[{pattern:/(@\("([^"\r\n\/):]+)"(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r))*?[ \t]*\|?[ \t]*-?[ \t]*\2/,lookbehind:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/(@\(([^"\r\n\/):]+)(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r))*?[ \t]*\|?[ \t]*-?[ \t]*\2/,lookbehind:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/@\("?(?:[^"\r\n\/):]+)"?(?:\/[nrts$uL]*)?\)/,alias:"string",inside:{punctuation:{pattern:/(\().+?(?=\))/,lookbehind:!0}}}],"multiline-comment":{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0,alias:"comment"},regex:{pattern:/((?:\bnode\s+|[^\s\w\\]\s*))\/(?:[^\/\\]|\\[\s\S])+\/(?:[imx]+\b|\B)/,lookbehind:!0,inside:{"extended-regex":{pattern:/^\/(?:[^\/\\]|\\[\s\S])+\/[im]*x[im]*$/,inside:{comment:/#.*/}}}},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:{pattern:/(["'])(?:\$\{(?:[^'"}]|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}|(?!\1)[^\\]|\\[\s\S])*\1/,inside:{"double-quoted":{pattern:/^"[\s\S]*"$/,inside:{}}}},variable:{pattern:/\$(?:::)?\w+(?:::\w+)*/,inside:{punctuation:/::/}},"attr-name":/(?:\w+|\*)(?=\s*=>)/,"function":[{pattern:/(\.)(?!\d)\w+/,lookbehind:!0},/\b(?:contain|debug|err|fail|include|info|notice|realize|require|tag|warning)\b|\b(?!\d)\w+(?=\()/],number:/\b(?:0x[a-f\d]+|\d+(?:\.\d+)?(?:e-?\d+)?)\b/i,"boolean":/\b(?:true|false)\b/,keyword:/\b(?:application|attr|case|class|consumes|default|define|else|elsif|function|if|import|inherits|node|private|produces|type|undef|unless)\b/,datatype:{pattern:/\b(?:Any|Array|Boolean|Callable|Catalogentry|Class|Collection|Data|Default|Enum|Float|Hash|Integer|NotUndef|Numeric|Optional|Pattern|Regexp|Resource|Runtime|Scalar|String|Struct|Tuple|Type|Undef|Variant)\b/,alias:"symbol"},operator:/=[=~>]?|![=~]?|<(?:<\|?|[=~|-])?|>[>=]?|->?|~>|\|>?>?|[*\/%+?]|\b(?:and|in|or)\b/,punctuation:/[\[\]{}().,;]|:+/};var t=[{pattern:/(^|[^\\])\$\{(?:[^'"{}]|\{[^}]*\}|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}/,lookbehind:!0,inside:{"short-variable":{pattern:/(^\$\{)(?!\w+\()(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}},delimiter:{pattern:/^\$/,alias:"variable"},rest:e.util.clone(e.languages.puppet)}},{pattern:/(^|[^\\])\$(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}}];e.languages.puppet.heredoc[0].inside.interpolation=t,e.languages.puppet.string.inside["double-quoted"].inside.interpolation=t}(Prism),Prism.languages.python={"triple-quoted-string":{pattern:/"""[\s\S]+?"""|'''[\s\S]+?'''/,alias:"string"},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:/("|')(?:\\?.)*?\1/,"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,"boolean":/\b(?:True|False)\b/,number:/\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/},Prism.languages.r={comment:/#.*/,string:/(['"])(?:\\?.)*?\1/,"percent-operator":{pattern:/%[^%\s]*%/,alias:"operator"},"boolean":/\b(?:TRUE|FALSE)\b/,ellipsis:/\.\.(?:\.|\d+)/,number:[/\b(?:NaN|Inf)\b/,/\b(?:0x[\dA-Fa-f]+(?:\.\d*)?|\d*\.?\d+)(?:[EePp][+-]?\d+)?[iL]?\b/],keyword:/\b(?:if|else|repeat|while|function|for|in|next|break|NULL|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\b/,operator:/->?>?|<(?:=|<?-)?|[>=!]=?|::?|&&?|\|\|?|[+*\/^$@~]/,punctuation:/[(){}\[\],;]/},Prism.languages.rust={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:[/b?r(#*)"(?:\\?.)*?"\1/,/b?("|')(?:\\?.)*?\1/],keyword:/\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|match|mod|move|mut|offsetof|once|override|priv|pub|pure|ref|return|sizeof|static|self|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\b/,attribute:{pattern:/#!?\[.+?\]/,alias:"attr-name"},"function":[/[a-z0-9_]+(?=\s*\()/i,/[a-z0-9_]+!(?=\s*\(|\[)/i],"macro-rules":{pattern:/[a-z0-9_]+!/i,alias:"function"},number:/\b-?(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\d(_?\d)*)?\.?\d(_?\d)*([Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64)?|f32|f64))?\b/,"closure-params":{pattern:/\|[^|]*\|(?=\s*[{-])/,inside:{punctuation:/[\|:,]/,operator:/[&*]/}},punctuation:/[{}[\];(),:]|\.+|->/,operator:/[-+*\/%!^=]=?|@|&[&=]?|\|[|=]?|<<?=?|>>?=?/},Prism.languages.sas={datalines:{pattern:/^\s*(?:(?:data)?lines|cards);[\s\S]+?(?:\r?\n|\r);/im,alias:"string",inside:{keyword:{pattern:/^(\s*)(?:(?:data)?lines|cards)/i,lookbehind:!0},punctuation:/;/}},comment:[{pattern:/(^\s*|;\s*)\*.*;/m,lookbehind:!0},/\/\*[\s\S]+?\*\//],datetime:{pattern:/'[^']+'(?:dt?|t)\b/i,alias:"number"},string:/(["'])(?:\1\1|(?!\1)[\s\S])*\1/,keyword:/\b(?:data|else|format|if|input|proc|run|then)\b/i,number:/(?:\B-|\b)(?:[\da-f]+x|\d+(?:\.\d+)?(?:e[+-]?\d+)?)/i,operator:/\*\*?|\|\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\/=&]|[~¬^]=?|\b(?:eq|ne|gt|lt|ge|le|in|not)\b/i,punctuation:/[$%@.(){}\[\];,\\]/},Prism.languages.scala=Prism.languages.extend("java",{keyword:/<-|=>|\b(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|null|object|override|package|private|protected|return|sealed|self|super|this|throw|trait|try|type|val|var|while|with|yield)\b/,string:/"""[\W\w]*?"""|"(?:[^"\\\r\n]|\\.)*"|'(?:[^\\\r\n']|\\.[^\\']*)'/,builtin:/\b(?:String|Int|Long|Short|Byte|Boolean|Double|Float|Char|Any|AnyRef|AnyVal|Unit|Nothing)\b/,number:/\b(?:0x[\da-f]*\.?[\da-f]+|\d*\.?\d+e?\d*[dfl]?)\b/i,symbol:/'[^\d\s\\]\w*/}),delete Prism.languages.scala["class-name"],delete Prism.languages.scala["function"],Prism.languages.scheme={comment:/;.*/,string:/"(?:[^"\\\r\n]|\\.)*?"|'[^('\s]*/,keyword:{pattern:/(\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)/,lookbehind:!0},builtin:{pattern:/(\()(?:(?:cons|car|cdr|list|call-with-current-continuation|call\/cc|append|abs|apply|eval)\b|null\?|pair\?|boolean\?|eof-object\?|char\?|procedure\?|number\?|port\?|string\?|vector\?|symbol\?|bytevector\?)/,lookbehind:!0},number:{pattern:/(\s|\))[-+]?[0-9]*\.?[0-9]+(?:\s*[-+]\s*[0-9]*\.?[0-9]+i)?\b/,lookbehind:!0},"boolean":/#[tf]/,operator:{pattern:/(\()(?:[-+*%\/]|[<>]=?|=>?)/,lookbehind:!0},"function":{pattern:/(\()[^\s()]*(?=\s)/,lookbehind:!0},punctuation:/[()]/},Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},string:{pattern:/(^|[^@\\])("|')(?:\\?[\s\S])*?\2/,lookbehind:!0},variable:/@[\w.$]+|@("|'|`)(?:\\?[\s\S])+?\1/,"function":/\b(?:COUNT|SUM|AVG|MIN|MAX|FIRST|LAST|UCASE|LCASE|MID|LEN|ROUND|NOW|FORMAT)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR VARYING|CHARACTER (?:SET|VARYING)|CHARSET|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|DATA(?:BASES?)?|DATETIME|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE(?: PRECISION)?|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE KEY|ELSE|ENABLE|ENCLOSED BY|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPE(?:D BY)?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTO|INVOKER|ISOLATION LEVEL|JOIN|KEYS?|KILL|LANGUAGE SQL|LAST|LEFT|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MODIFIES SQL DATA|MODIFY|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL(?: CHAR VARYING| CHARACTER(?: VARYING)?| VARCHAR)?|NATURAL|NCHAR(?: VARCHAR)?|NEXT|NO(?: SQL|CHECK|CYCLE)?|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READ(?:S SQL DATA|TEXT)?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEATABLE|REPLICATION|REQUIRE|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE MODE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|START(?:ING BY)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED BY|TEXT(?:SIZE)?|THEN|TIMESTAMP|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNPIVOT|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?)\b/i,"boolean":/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b-?(?:0x)?\d*\.?[\da-f]+\b/,operator:/[-+*\/=%^~]|&&?|\|?\||!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},Prism.languages.swift=Prism.languages.extend("clike",{string:{pattern:/("|')(\\(?:\((?:[^()]|\([^)]+\))+\)|\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,inside:{interpolation:{pattern:/\\\((?:[^()]|\([^)]+\))+\)/,inside:{delimiter:{pattern:/^\\\(|\)$/,alias:"variable"}}}}},keyword:/\b(as|associativity|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic(?:Type)?|else|enum|extension|fallthrough|final|for|func|get|guard|if|import|in|infix|init|inout|internal|is|lazy|left|let|mutating|new|none|nonmutating|operator|optional|override|postfix|precedence|prefix|private|Protocol|public|repeat|required|rethrows|return|right|safe|self|Self|set|static|struct|subscript|super|switch|throws?|try|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|__(?:COLUMN__|FILE__|FUNCTION__|LINE__))\b/,number:/\b([\d_]+(\.[\de_]+)?|0x[a-f0-9_]+(\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,constant:/\b(nil|[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,atrule:/@\b(IB(?:Outlet|Designable|Action|Inspectable)|class_protocol|exported|noreturn|NS(?:Copying|Managed)|objc|UIApplicationMain|auto_closure)\b/,builtin:/\b([A-Z]\S+|abs|advance|alignof(?:Value)?|assert|contains|count(?:Elements)?|debugPrint(?:ln)?|distance|drop(?:First|Last)|dump|enumerate|equal|filter|find|first|getVaList|indices|isEmpty|join|last|lexicographicalCompare|map|max(?:Element)?|min(?:Element)?|numericCast|overlaps|partition|print(?:ln)?|reduce|reflect|reverse|sizeof(?:Value)?|sort(?:ed)?|split|startsWith|stride(?:of(?:Value)?)?|suffix|swap|toDebugString|toString|transcode|underestimateCount|unsafeBitCast|with(?:ExtendedLifetime|Unsafe(?:MutablePointers?|Pointers?)|VaList))\b/}),Prism.languages.swift.string.inside.interpolation.inside.rest=Prism.util.clone(Prism.languages.swift),Prism.languages.twig={comment:/\{#[\s\S]*?#\}/,tag:{pattern:/\{\{[\s\S]*?\}\}|\{%[\s\S]*?%\}/,inside:{ld:{pattern:/^(?:\{\{\-?|\{%\-?\s*\w+)/,inside:{punctuation:/^(?:\{\{|\{%)\-?/,keyword:/\w+/}},rd:{pattern:/\-?(?:%\}|\}\})$/,inside:{punctuation:/.*/}},string:{pattern:/("|')(?:\\?.)*?\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,"boolean":/\b(?:true|false|null)\b/,number:/\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+([Ee][-+]?\d+)?)\b/,operator:[{pattern:/(\s)(?:and|b\-and|b\-xor|b\-or|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],property:/\b[a-zA-Z_][a-zA-Z0-9_]*\b/,punctuation:/[()\[\]{}:.,]/}},other:{pattern:/\S(?:[\s\S]*\S)?/,inside:Prism.languages.markup}},Prism.languages.vim={string:/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\r\n]|'')*'/,comment:/".*/,"function":/\w+(?=\()/,keyword:/\b(?:ab|abbreviate|abc|abclear|abo|aboveleft|al|all|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|ar|args|argu|argument|as|ascii|bad|badd|ba|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bN|bNext|bo|botright|bp|bprevious|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|br|brewind|bro|browse|bufdo|b|buffer|buffers|bun|bunload|bw|bwipeout|ca|cabbrev|cabc|cabclear|caddb|caddbuffer|cad|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cgetb|cgetbuffer|cgete|cgetexpr|cg|cgetfile|c|change|changes|chd|chdir|che|checkpath|checkt|checktime|cla|clast|cl|clist|clo|close|cmapc|cmapclear|cnew|cnewer|cn|cnext|cN|cNext|cnf|cnfile|cNfcNfile|cnorea|cnoreabbrev|col|colder|colo|colorscheme|comc|comclear|comp|compiler|conf|confirm|con|continue|cope|copen|co|copy|cpf|cpfile|cp|cprevious|cq|cquit|cr|crewind|cuna|cunabbrev|cu|cunmap|cw|cwindow|debugg|debuggreedy|delc|delcommand|d|delete|delf|delfunction|delm|delmarks|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|di|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|earlier|echoe|echoerr|echom|echomsg|echon|e|edit|el|else|elsei|elseif|em|emenu|endfo|endfor|endf|endfunction|endfun|en|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fina|finally|fin|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|folddoc|folddoclosed|foldd|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|ha|hardcopy|h|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iuna|iunabbrev|iu|iunmap|j|join|ju|jumps|k|keepalt|keepj|keepjumps|kee|keepmarks|laddb|laddbuffer|lad|laddexpr|laddf|laddfile|lan|language|la|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|let|left|lefta|leftabove|lex|lexpr|lf|lfile|lfir|lfirst|lgetb|lgetbuffer|lgete|lgetexpr|lg|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|l|list|ll|lla|llast|lli|llist|lmak|lmake|lm|lmap|lmapc|lmapclear|lnew|lnewer|lne|lnext|lN|lNext|lnf|lnfile|lNf|lNfile|ln|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lpf|lpfile|lp|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|mak|make|ma|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkvie|mkview|mkv|mkvimrc|mod|mode|m|move|mzf|mzfile|mz|mzscheme|nbkey|new|n|next|N|Next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|omapc|omapclear|on|only|o|open|opt|options|ou|ounmap|pc|pclose|ped|pedit|pe|perl|perld|perldo|po|pop|popu|popu|popup|pp|ppop|pre|preserve|prev|previous|p|print|P|Print|profd|profdel|prof|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptN|ptNext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|pyf|pyfile|py|python|qa|qall|q|quit|quita|quitall|r|read|rec|recover|redi|redir|red|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|rub|ruby|rubyd|rubydo|rubyf|rubyfile|ru|runtime|rv|rviminfo|sal|sall|san|sandbox|sa|sargument|sav|saveas|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbN|sbNext|sbp|sbprevious|sbr|sbrewind|sb|sbuffer|scripte|scriptencoding|scrip|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sla|slast|sl|sleep|sm|smagic|sm|smap|smapc|smapclear|sme|smenu|sn|snext|sN|sNext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|sor|sort|so|source|spelld|spelldump|spe|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|sp|split|spr|sprevious|sre|srewind|sta|stag|startg|startgreplace|star|startinsert|startr|startreplace|stj|stjump|st|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tab|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabnew|tabn|tabnext|tabN|tabNext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|ta|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tm|tmenu|tn|tnext|tN|tNext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tu|tunmenu|una|unabbreviate|u|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|verb|verbose|ve|version|vert|vertical|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|vi|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|wa|wall|wh|while|winc|wincmd|windo|winp|winpos|win|winsize|wn|wnext|wN|wNext|wp|wprevious|wq|wqa|wqall|w|write|ws|wsverb|wv|wviminfo|X|xa|xall|x|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|XMLent|XMLns|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\b/,builtin:/\b(?:autocmd|acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|t_AB|t_AF|t_al|t_AL|t_bc|t_cd|t_ce|t_Ce|t_cl|t_cm|t_Co|t_cs|t_Cs|t_CS|t_CV|t_da|t_db|t_dl|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_fs|t_IE|t_IS|t_k1|t_K1|t_k2|t_k3|t_K3|t_k4|t_K4|t_k5|t_K5|t_k6|t_K6|t_k7|t_K7|t_k8|t_K8|t_k9|t_K9|t_KA|t_kb|t_kB|t_KB|t_KC|t_kd|t_kD|t_KD|t_ke|t_KE|t_KF|t_KG|t_kh|t_KH|t_kI|t_KI|t_KJ|t_KK|t_kl|t_KL|t_kN|t_kP|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_RI|t_RV|t_Sb|t_se|t_Sf|t_SI|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_WP|t_WS|t_xs|t_ZH|t_ZR)\b/, +number:/\b(?:0x[\da-f]+|\d+(?:\.\d+)?)\b/i,operator:/\|\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\/%?]|\b(?:is(?:not)?)\b/,punctuation:/[{}[\](),;:]/},Prism.languages.yaml={scalar:{pattern:/([\-:]\s*(![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\3[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*[:\-,[{\r\n?][ \t]*(![^\s]+)?[ \t]*)[^\r\n{[\]},#]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(\d{4}-\d\d?-\d\d?([tT]|[ \t]+)\d\d?:\d{2}:\d{2}(\.\d*)?[ \t]*(Z|[-+]\d\d?(:\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(:\d{2}(\.\d*)?)?)(?=[ \t]*($|,|]|}))/m,lookbehind:!0,alias:"number"},"boolean":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},"null":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')(?=[ \t]*($|,|]|}))/m,lookbehind:!0},number:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)[+\-]?(0x[\da-f]+|0o[0-7]+|(\d+\.?\d*|\.?\d+)(e[\+\-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},function(){"undefined"!=typeof self&&self.Prism&&self.document&&Prism.hooks.add("complete",function(e){if(e.code){var t=e.element.parentNode,i=/\s*\bline-numbers\b\s*/;if(t&&/pre/i.test(t.nodeName)&&!e.element.querySelector(".line-numbers-rows")){i.test(e.element.className)&&(e.element.className=e.element.className.replace(i,"")),i.test(t.className)||(t.className+=" line-numbers");var n,a=e.code.match(/\n(?!$)/g),r=a?a.length+1:1,s=new Array(r+1);s=s.join("<span></span>"),n=document.createElement("span"),n.className="line-numbers-rows",n.innerHTML=s,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(n)}}})}(); diff --git a/plugins/ckeditor4/prism/plugin.js b/plugins/ckeditor4/prism/plugin.js new file mode 100644 index 0000000..dcb2179 --- /dev/null +++ b/plugins/ckeditor4/prism/plugin.js @@ -0,0 +1,130 @@ +/** + * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * @fileOverview Rich code snippets for CKEditor. + */ + +'use strict'; + +(function() { + // Create a new plugin which registers a custom code highlighter + // based on Prism.js in order to replace the one that comes + // with the Code Snippet plugin. + CKEDITOR.plugins.add('prism', { + requires: 'codesnippet', + + init: function(editor) { + var path = this.path; + + // Loading the prism.js style file. + // Idea taken from codesnippet/plugin.js code. + // Method is available only if wysiwygarea exists and + // CKEditor is at least version 4.4. + if (editor.addContentsCss) { + editor.addContentsCss(path + 'lib/prism/prism_patched.min.css'); + } + + // Create a new instance of the highlighter. + var prismHighlighter = new CKEDITOR.plugins.codesnippet.highlighter({ + init: function(ready) { + // Load the Prism.js library asynchronously. + CKEDITOR.scriptLoader.load(path + 'lib/prism/prism_patched.min.js', function() { + // Notify the handler that the library has been loaded. + ready(); + }); + }, + + // Specify the supported languages. + languages: { + abap: 'ABAP', + actionscript: 'ActionScript', + apacheconf: 'Apache Conf', + applescript: 'AppleScript', + aspnet: 'ASP.NET', + bash: 'Bash', + basic: 'BASIC', + c: 'C', + coffeescript: 'CoffeeScript', + cpp: 'C++', + csharp: 'C#', + css: 'CSS', + d: 'D', + dart: 'Dart', + diff: 'Diff', + docker: 'Docker', + erlang: 'Erlang', + fortran: 'Fortran', + fsharp: 'F#', + git: 'Git', + go: 'Go', + groovy: 'Groovy', + haskell: 'Haskell', + markup: 'HTML', + http: 'HTTP', + ini: 'INI', + java: 'Java', + javascript: 'JavaScript', + lua: 'Lua', + makefile: 'Makefile', + markdown: 'Markdown', + matlab: 'MATLAB', + nginx: 'Nginx', + objectivec: 'Objective-C', + pascal: 'Pascal', + perl: 'Perl', + php: 'PHP', + prolog: 'Prolog', + python: 'Python', + puppet: 'Puppet', + r: 'R', + ruby: 'Ruby', + rust: 'Rust', + sas: 'SAS', + scala: 'Scala', + scheme: 'Scheme', + sql: 'SQL', + swift: 'Swift', + twig: 'Twig', + vim: 'vim', + yaml: 'YAML', + }, + + highlighter: function(code, language, callback) { + // _self.Prism is a global namespace/object created by Prism.js. + var _prism = _self.Prism; + + // Let the Prism.js highlight the code. + var highlightedCode = _prism.highlight(code, _prism.languages[language], language); + + // The clever idea below is taken from the 'Line Numbers' plugin + // of Prism. Basically, we want to count the number of newlines (\n) + // in the highlighted code, then create the same number + // of SPAN elements, append them to the highlighted code + // and finally number/label them using prism.css. + var match = highlightedCode.match(/\n(?!$)/g); + var linesNum = match ? match.length + 1 : 1; + + var lines = new Array(linesNum + 1); + lines = lines.join('<span></span>'); + + // Create the SPAN root/wrapper, insert its child SPAN lines, + // then append them to the highlighted code. + var lineNumbersWrapper = '<span class="line-numbers-rows">'; + lineNumbersWrapper += lines; + lineNumbersWrapper += '</span>'; + highlightedCode += lineNumbersWrapper; + + // Return highlighted code. + callback(highlightedCode); + } + }); + + // From now on, prismHighlighter will be used as a Code Snippet + // highlighter, overwriting the default engine. + editor.plugins.codesnippet.setHighlighter(prismHighlighter ); + } + }); +})(); diff --git a/plugins/ckeditor4/selectallcontextmenu/icons/hidpi/selectall.png b/plugins/ckeditor4/selectallcontextmenu/icons/hidpi/selectall.png new file mode 100644 index 0000000000000000000000000000000000000000..c67f64ddebbb427841df12e95e00bddc3ed8affe GIT binary patch literal 1093 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;syMlp%InL9?F(l&f+v#WXZo3H_um7!>>8UN$vOvBqR^f%O(Sz+Lv{_zc zKgs2JGVRHn)&6zOhuRvWN`t?ID3&$4^eIdhIeGW3qmb^YO)figFEGhAFr2*k^vs{< z_Qu|YH8nXun;x|)gm&G#I@N2cQ=R8yhPs!L+=?m<0!)f5UYbjEem|Xa*pj_r%BOjC zlP#Waxc2Dpl|2zR);~9Q;%HJ>a5XEjN3+M`xyPiIj}<%)n{Vp8TrJ^0spVpZi_Gx{ zf4@YPIcU1BzWV6H2Z3asDF4vPd6QK*#l^)d-dkE&%*ea4YZ7ziJm!M3vSTW~8#h0n z#O%beWQs(x!Lbe7x4Z9+V^{DEW@~126qummnYmdYsdnGq^vP2WO$b`Fby?hcaXuY4 zX;;C&b@L5)wtG2>xbn0gZgN+hJ$2tFelJeO=Q2RsmSuj_^S!LppD1zZZ5emSswD{% znF}W+Ob@v5xwUwkn&+Veg9Tx$87HJheykI1sh4KD7Ip0L$GtN8(;q&4`t(}rjy~q^ zS(!6;ettD$@+ZUI6+%p2nuiRQTz~B=>TRjF>qgriefHo^=Fk-B!~ISNqJFQiy07wo zuARa217@ZBJXaMwxZix>zf8pO#>&<AOyZs=*B0K7f5+S{zjD(x%l4ow)5dU?4HKEK zS?1;EzbxH7)$jcB<;%4=nl9;dKAtgqw)7>P!&UvliyVrTna)`*S~~fH)z6=Qt6xPa ziwn$<_nP}%f#saUC!NFErO$yeB**^Xolp7acXQ8e>RBJRC!+Jn`}}(=Ucb(+tN6Jo zXy3WMz6-r>Un2u<-*nU|Sa>yy(Lkz~Yj2*Jw(`?74pBaf=Mw$L=ggl!{n_5H^8%+C zzWUzzSi;_W-lZtUiubw)^w-BLOYzp(SY6UPEw@HOk!4fZVlftl)SHbKeV&)M{P1Kf zIN;)C73g9z^Nwr6>6smuMN)abs{4m+sy)elWKGQ1q)tx76Pwm-xyJ3d%=BD!$l`<R z^Y6cUUtaE*&Hup9?@PYC-Gbi6_EY)2FDm)uMKnJidoXA5&AiX0%bV}qRn6JH{MFyu zZ&M%jpP#>TuFp0*bFTNbs@MK~c{TOlyPL+h&d-m&{PM%w%gcoxyn5_Dou|FW&+p3B z<^D@VXNL*KUu``Xb;ymmsUhD=c9x?<ahbos24m%S+nE3OKW%3T*d3H73Cw<~C9V-A zDTyViR>?)FK#IZ0z|dINz)aW3AjHtn%D~*pz(m`?$jZRr+oNTkC>nC}Q!>*kacgMb zFZUIwK@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr074Mz A6#xJL literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/selectallcontextmenu/icons/selectall.png b/plugins/ckeditor4/selectallcontextmenu/icons/selectall.png new file mode 100644 index 0000000000000000000000000000000000000000..0d1e8160e422f8cc3615c2787a26fe0af53dcf06 GIT binary patch literal 665 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_D|i<0elR#}JFtb0?qedgLI|dVcLGe#Z{!Rx|F_9}Ic5CGrlgn?A4} zX;4U0p3$}F+JBw2Ns`NNFPzDIw6)3V>)qnj85<)ij!9TNS5T^W|8Ot6U}MLJ?Q@C^ zjy?ETkzhAJ_<)4-Bo&X#B84)}*}R&n7SA~jZ!pg4T{<OW7Tfvf!VCfh=O!-GOxqk; ze)?g-ffS>I)@!e48yu^X5)gc3!N$PT?i`~huHxCWYSjc4PKjjM#;sz$mlv#Bbx!BQ zJ)nsU0!{}cn4inIExs7tbT;jCmcr5_FH4+eEi*Xg;MMv0XOBi#T+^0oP8=V-E~w2; zmE5=5pCz~8Z=L*{&)eDet7HiNpZaS%=OvT39Jl_4xqSI5@~=H%Yt%tY_V<6a9oJuP zo+1=Et+wj0YhVS#grG(1vOP2t*Z#F_wdbt++q#Z@t?AQBzjKybPD?PaHJxF|_Wif4 zYhc3eyGc7^wy9mY_WEnr!Gr}Z0zZEI2-tp`_wmPw$ZSClMFAGZSG(Rd1$ilUE$Zti z?%SlJ%y8pvnV?|l)IHy`_TP8E{4!)}s^rtkb$h-GCZB0f<XCIE=X;5b+`=hUGx-D` zvP*L)Cd<?aW&op9wZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxNy85(ID7+Dz@ zDEB1fqiD#@PsvQH#H}Id;*HBd4U!-mg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3 Rkpe1W@O1TaS?83{1ONfb43+=@ literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/af.js b/plugins/ckeditor4/selectallcontextmenu/lang/af.js new file mode 100644 index 0000000..5cf6770 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/af.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'af', { + toolbar: 'Selekteer alles' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ar.js b/plugins/ckeditor4/selectallcontextmenu/lang/ar.js new file mode 100644 index 0000000..42f47b3 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/ar.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'ar', { + toolbar: 'تØديد الكل' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/bg.js b/plugins/ckeditor4/selectallcontextmenu/lang/bg.js new file mode 100644 index 0000000..1d63091 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/bg.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'bg', { + toolbar: 'Избери вÑичко' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/bn.js b/plugins/ckeditor4/selectallcontextmenu/lang/bn.js new file mode 100644 index 0000000..4039808 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/bn.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'bn', { + toolbar: 'সব সিলেকà§à¦Ÿ করি' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/bs.js b/plugins/ckeditor4/selectallcontextmenu/lang/bs.js new file mode 100644 index 0000000..ff9d4b0 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/bs.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'bs', { + toolbar: 'Selektuj sve' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ca.js b/plugins/ckeditor4/selectallcontextmenu/lang/ca.js new file mode 100644 index 0000000..2832c34 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/ca.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'ca', { + toolbar: 'Selecciona-ho tot' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/cs.js b/plugins/ckeditor4/selectallcontextmenu/lang/cs.js new file mode 100644 index 0000000..28ca341 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/cs.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'cs', { + toolbar: 'Vybrat vÅ¡e' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/cy.js b/plugins/ckeditor4/selectallcontextmenu/lang/cy.js new file mode 100644 index 0000000..b2cda96 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/cy.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'cy', { + toolbar: 'Dewis Popeth' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/da.js b/plugins/ckeditor4/selectallcontextmenu/lang/da.js new file mode 100644 index 0000000..d9a0640 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/da.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'da', { + toolbar: 'Vælg alt' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/de-ch.js b/plugins/ckeditor4/selectallcontextmenu/lang/de-ch.js new file mode 100644 index 0000000..af52684 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/de-ch.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'de-ch', { + toolbar: 'Alles auswählen' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/de.js b/plugins/ckeditor4/selectallcontextmenu/lang/de.js new file mode 100644 index 0000000..7652f9f --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/de.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'de', { + toolbar: 'Alles auswählen' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/el.js b/plugins/ckeditor4/selectallcontextmenu/lang/el.js new file mode 100644 index 0000000..8d396c1 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/el.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'el', { + toolbar: 'Επιλογή όλων' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/en-au.js b/plugins/ckeditor4/selectallcontextmenu/lang/en-au.js new file mode 100644 index 0000000..4f359cf --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/en-au.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'en-au', { + toolbar: 'Select All' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/en-ca.js b/plugins/ckeditor4/selectallcontextmenu/lang/en-ca.js new file mode 100644 index 0000000..513d756 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/en-ca.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'en-ca', { + toolbar: 'Select All' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/en-gb.js b/plugins/ckeditor4/selectallcontextmenu/lang/en-gb.js new file mode 100644 index 0000000..3a9f235 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/en-gb.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'en-gb', { + toolbar: 'Select All' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/en.js b/plugins/ckeditor4/selectallcontextmenu/lang/en.js new file mode 100644 index 0000000..646f474 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/en.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'en', { + toolbar: 'Select All' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/eo.js b/plugins/ckeditor4/selectallcontextmenu/lang/eo.js new file mode 100644 index 0000000..ead5243 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/eo.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'eo', { + toolbar: 'Elekti ĉion' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/es.js b/plugins/ckeditor4/selectallcontextmenu/lang/es.js new file mode 100644 index 0000000..2b32ec1 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/es.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'es', { + toolbar: 'Seleccionar Todo' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/et.js b/plugins/ckeditor4/selectallcontextmenu/lang/et.js new file mode 100644 index 0000000..4a9ca84 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/et.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'et', { + toolbar: 'Kõige valimine' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/eu.js b/plugins/ckeditor4/selectallcontextmenu/lang/eu.js new file mode 100644 index 0000000..5a149d4 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/eu.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'eu', { + toolbar: 'Hautatu dena' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/fa.js b/plugins/ckeditor4/selectallcontextmenu/lang/fa.js new file mode 100644 index 0000000..6087960 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/fa.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'fa', { + toolbar: 'گزینش همه' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/fi.js b/plugins/ckeditor4/selectallcontextmenu/lang/fi.js new file mode 100644 index 0000000..a91e3c7 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/fi.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'fi', { + toolbar: 'Valitse kaikki' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/fo.js b/plugins/ckeditor4/selectallcontextmenu/lang/fo.js new file mode 100644 index 0000000..1c06b4e --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/fo.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'fo', { + toolbar: 'Markera alt' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/fr-ca.js b/plugins/ckeditor4/selectallcontextmenu/lang/fr-ca.js new file mode 100644 index 0000000..884f3ff --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/fr-ca.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'fr-ca', { + toolbar: 'Sélectionner tout' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/fr.js b/plugins/ckeditor4/selectallcontextmenu/lang/fr.js new file mode 100644 index 0000000..41f4a7f --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/fr.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'fr', { + toolbar: 'Tout sélectionner' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/gl.js b/plugins/ckeditor4/selectallcontextmenu/lang/gl.js new file mode 100644 index 0000000..63de170 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/gl.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'gl', { + toolbar: 'Seleccionar todo' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/gu.js b/plugins/ckeditor4/selectallcontextmenu/lang/gu.js new file mode 100644 index 0000000..d7d14c1 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/gu.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'gu', { + toolbar: 'બઘà«àª‚ પસંદ કરવà«àª‚' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/he.js b/plugins/ckeditor4/selectallcontextmenu/lang/he.js new file mode 100644 index 0000000..2b9b217 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/he.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'he', { + toolbar: 'בחירת הכל' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/hi.js b/plugins/ckeditor4/selectallcontextmenu/lang/hi.js new file mode 100644 index 0000000..10c72e4 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/hi.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'hi', { + toolbar: 'सब सॅलॅकà¥à¤Ÿ करें' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/hr.js b/plugins/ckeditor4/selectallcontextmenu/lang/hr.js new file mode 100644 index 0000000..80c38da --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/hr.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'hr', { + toolbar: 'Odaberi sve' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/hu.js b/plugins/ckeditor4/selectallcontextmenu/lang/hu.js new file mode 100644 index 0000000..89b109e --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/hu.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'hu', { + toolbar: 'Mindent kijelöl' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/id.js b/plugins/ckeditor4/selectallcontextmenu/lang/id.js new file mode 100644 index 0000000..df8a9b3 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/id.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'id', { + toolbar: 'Pilih Semua' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/is.js b/plugins/ckeditor4/selectallcontextmenu/lang/is.js new file mode 100644 index 0000000..9c58c6d --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/is.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'is', { + toolbar: 'Velja allt' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/it.js b/plugins/ckeditor4/selectallcontextmenu/lang/it.js new file mode 100644 index 0000000..c0b164b --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/it.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'it', { + toolbar: 'Seleziona tutto' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ja.js b/plugins/ckeditor4/selectallcontextmenu/lang/ja.js new file mode 100644 index 0000000..7f54832 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/ja.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'ja', { + toolbar: 'ã™ã¹ã¦é¸æŠž' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ka.js b/plugins/ckeditor4/selectallcontextmenu/lang/ka.js new file mode 100644 index 0000000..1530fbf --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/ka.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'ka', { + toolbar: 'ყველáƒáƒ¤áƒ ის მáƒáƒœáƒ˜áƒ¨áƒœáƒ•áƒ' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/km.js b/plugins/ckeditor4/selectallcontextmenu/lang/km.js new file mode 100644 index 0000000..5c10e58 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/km.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'km', { + toolbar: 'រើស​ទាំង​អស់' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ko.js b/plugins/ckeditor4/selectallcontextmenu/lang/ko.js new file mode 100644 index 0000000..ca3f466 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/ko.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'ko', { + toolbar: 'ëª¨ë‘ ì„ íƒ' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ku.js b/plugins/ckeditor4/selectallcontextmenu/lang/ku.js new file mode 100644 index 0000000..8430686 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/ku.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'ku', { + toolbar: 'دیاریکردنی هەمووی' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/lt.js b/plugins/ckeditor4/selectallcontextmenu/lang/lt.js new file mode 100644 index 0000000..f838eb7 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/lt.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'lt', { + toolbar: 'PažymÄ—ti viskÄ…' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/lv.js b/plugins/ckeditor4/selectallcontextmenu/lang/lv.js new file mode 100644 index 0000000..ff9a49a --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/lv.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'lv', { + toolbar: 'IezÄ«mÄ“t visu' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/mk.js b/plugins/ckeditor4/selectallcontextmenu/lang/mk.js new file mode 100644 index 0000000..3d9ee48 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/mk.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'mk', { + toolbar: 'Select All' // MISSING +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/mn.js b/plugins/ckeditor4/selectallcontextmenu/lang/mn.js new file mode 100644 index 0000000..6837464 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/mn.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'mn', { + toolbar: 'Бүгдийг нь Ñонгох' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ms.js b/plugins/ckeditor4/selectallcontextmenu/lang/ms.js new file mode 100644 index 0000000..450c96a --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/ms.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'ms', { + toolbar: 'Pilih Semua' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/nb.js b/plugins/ckeditor4/selectallcontextmenu/lang/nb.js new file mode 100644 index 0000000..cfaee81 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/nb.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'nb', { + toolbar: 'Merk alt' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/nl.js b/plugins/ckeditor4/selectallcontextmenu/lang/nl.js new file mode 100644 index 0000000..badc585 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/nl.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'nl', { + toolbar: 'Alles selecteren' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/no.js b/plugins/ckeditor4/selectallcontextmenu/lang/no.js new file mode 100644 index 0000000..22875dc --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/no.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'no', { + toolbar: 'Merk alt' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/pl.js b/plugins/ckeditor4/selectallcontextmenu/lang/pl.js new file mode 100644 index 0000000..2c76868 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/pl.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'pl', { + toolbar: 'Zaznacz wszystko' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/pt-br.js b/plugins/ckeditor4/selectallcontextmenu/lang/pt-br.js new file mode 100644 index 0000000..1141b9c --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/pt-br.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'pt-br', { + toolbar: 'Selecionar Tudo' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/pt.js b/plugins/ckeditor4/selectallcontextmenu/lang/pt.js new file mode 100644 index 0000000..2a615d5 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/pt.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'pt', { + toolbar: 'Selecionar tudo' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ro.js b/plugins/ckeditor4/selectallcontextmenu/lang/ro.js new file mode 100644 index 0000000..647a6fb --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/ro.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'ro', { + toolbar: 'Selectează tot' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ru.js b/plugins/ckeditor4/selectallcontextmenu/lang/ru.js new file mode 100644 index 0000000..95fb454 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/ru.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'ru', { + toolbar: 'Выделить вÑе' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/si.js b/plugins/ckeditor4/selectallcontextmenu/lang/si.js new file mode 100644 index 0000000..62a760c --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/si.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'si', { + toolbar: 'සියල්ලම ' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sk.js b/plugins/ckeditor4/selectallcontextmenu/lang/sk.js new file mode 100644 index 0000000..329d3f1 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/sk.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'sk', { + toolbar: 'VybraÅ¥ vÅ¡etko' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sl.js b/plugins/ckeditor4/selectallcontextmenu/lang/sl.js new file mode 100644 index 0000000..5ef1c08 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/sl.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'sl', { + toolbar: 'Izberi vse' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sq.js b/plugins/ckeditor4/selectallcontextmenu/lang/sq.js new file mode 100644 index 0000000..ecfedd7 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/sq.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'sq', { + toolbar: 'Përzgjidh të Gjitha' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sr-latn.js b/plugins/ckeditor4/selectallcontextmenu/lang/sr-latn.js new file mode 100644 index 0000000..cb18bc3 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/sr-latn.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'sr-latn', { + toolbar: 'OznaÄi sve' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sr.js b/plugins/ckeditor4/selectallcontextmenu/lang/sr.js new file mode 100644 index 0000000..7cdf2c2 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/sr.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'sr', { + toolbar: 'Означи Ñве' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sv.js b/plugins/ckeditor4/selectallcontextmenu/lang/sv.js new file mode 100644 index 0000000..ce3b700 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/sv.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'sv', { + toolbar: 'Markera allt' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/th.js b/plugins/ckeditor4/selectallcontextmenu/lang/th.js new file mode 100644 index 0000000..5f70890 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/th.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'th', { + toolbar: 'เลืà¸à¸à¸—ั้งหมด' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/tr.js b/plugins/ckeditor4/selectallcontextmenu/lang/tr.js new file mode 100644 index 0000000..3458438 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/tr.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'tr', { + toolbar: 'Tümünü Seç' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/tt.js b/plugins/ckeditor4/selectallcontextmenu/lang/tt.js new file mode 100644 index 0000000..73d5606 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/tt.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'tt', { + toolbar: 'БарыÑын Ñайлау' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ug.js b/plugins/ckeditor4/selectallcontextmenu/lang/ug.js new file mode 100644 index 0000000..d7151cd --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/ug.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'ug', { + toolbar: 'ھەممىنى تاللا' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/uk.js b/plugins/ckeditor4/selectallcontextmenu/lang/uk.js new file mode 100644 index 0000000..9cd9d2e --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/uk.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'uk', { + toolbar: 'Виділити вÑе' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/vi.js b/plugins/ckeditor4/selectallcontextmenu/lang/vi.js new file mode 100644 index 0000000..7fc1ff3 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/vi.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'vi', { + toolbar: 'Chá»n tất cả' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/zh-cn.js b/plugins/ckeditor4/selectallcontextmenu/lang/zh-cn.js new file mode 100644 index 0000000..e9a1b51 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/zh-cn.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'zh-cn', { + toolbar: '全选' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/zh.js b/plugins/ckeditor4/selectallcontextmenu/lang/zh.js new file mode 100644 index 0000000..a6b7428 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/lang/zh.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'selectall', 'zh', { + toolbar: 'å…¨é¸' +} ); diff --git a/plugins/ckeditor4/selectallcontextmenu/plugin.js b/plugins/ckeditor4/selectallcontextmenu/plugin.js new file mode 100644 index 0000000..7e894e9 --- /dev/null +++ b/plugins/ckeditor4/selectallcontextmenu/plugin.js @@ -0,0 +1,76 @@ +/** + * Developer: Ahmad Faiyaz ( faiyaz26 [at] gmail [dot] com ) + */ + +/** + * @fileOverview The "selectallcontextmenu" plugin provides an editor command that + * allows selecting the entire content of editable area. + * This plugin also enables a context menu button for the feature. + */ + +(function() { + CKEDITOR.plugins.add('selectallcontextmenu', { + // jscs:disable maximumLineLength + lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% + // jscs:enable maximumLineLength + icons: 'selectall', // %REMOVE_LINE_CORE% + hidpi: true, + init: function(editor) { + editor.addCommand('selectallcontextmenu', { + modes: { wysiwyg: 1, source: 1 }, + exec: function(editor) { + var editable = editor.editable(); + + if (editable.is('textarea')) { + var textarea = editable.$; + + if (CKEDITOR.env.ie) + textarea.createTextRange().execCommand('SelectAll'); + else { + textarea.selectionStart = 0; + textarea.selectionEnd = textarea.value.length; + } + + textarea.focus(); + } else { + if (editable.is('body')) + editor.document.$.execCommand('SelectAll', false, null); + else { + var range = editor.createRange(); + range.selectNodeContents(editable); + range.select(); + } + + // Force triggering selectionChange (#7008) + editor.forceNextSelectionCheck(); + editor.selectionChange(); + } + + }, + canUndo: false + }); + + + if (editor.addMenuItems) { + editor.addMenuGroup('selectallcontextmenu', 3); + + editor.addMenuItems({ + selectall: { + label: editor.lang.selectall.toolbar, + group: 'selectallcontextmenu', + order: 21, + command: 'selectallcontextmenu' + } + }); + } + + if (editor.contextMenu) { + editor.contextMenu.addListener(function(element, selection) { + return { + selectall: CKEDITOR.TRISTATE_OFF + }; + }); + } + } + }); +})(); diff --git a/plugins/ckeditor4/smallerselection/plugin.js b/plugins/ckeditor4/smallerselection/plugin.js new file mode 100644 index 0000000..12f7fba --- /dev/null +++ b/plugins/ckeditor4/smallerselection/plugin.js @@ -0,0 +1,80 @@ +/** + * @file Smaller Selection plugin for CKEditor + * Copyright (C) 2012 Alfonso MartÃnez de Lizarrondo + * Available under the GPL/LGPL/MPL + * Fixes http://dev.ckeditor.com/ticket/8690 + * version 0.1.1 24/05/2016 + * Sponsored by: Netmedia.org + */ + +/* globals CKEDITOR */ + +CKEDITOR.plugins.add( 'smallerselection', { + init : function( editor ) { + var trimSelection = function( event ) { + var sel = editor.getSelection(), + range = sel && sel.getRanges()[ 0 ], + custom = false; + + if ( !range || range.collapsed ) + return; + + // If it's selecting different nodes, adjust to cover only one node (if possible?) + if ( range.startContainer && range.endContainer && !range.startContainer.equals( range.endContainer) && + range.startContainer.type == CKEDITOR.NODE_TEXT ) { + var start = range.startContainer, + startOffset = range.startOffset, + end = range.endContainer, + endOffset = range.endOffset, + startText = start.getText(); + + // Move forward the start if it's at the end of a text node + if ( startOffset == startText.length ) { + start = start.getNextSourceNode( false, CKEDITOR.NODE_TEXT ); + startOffset = 0; + } + + // Move back the end if it's at the start of a text node + if ( end.type == CKEDITOR.NODE_TEXT && endOffset == 0 ) { + end = end.getPreviousSourceNode( false, CKEDITOR.NODE_TEXT ); + endOffset = end.getText().length; + } + + // IE might put as end container a node instead of a text node sometimes + if ( end.type == CKEDITOR.NODE_ELEMENT ) { + // get the node + end = end.getChild( endOffset ); + // move back to the end of a text node + end = end.getPreviousSourceNode( true, CKEDITOR.NODE_TEXT ); + endOffset = end.getText().length; + } + + // If we have modified some of the anchors nodes: + if ( !range.startContainer.equals( start ) || !range.endContainer.equals( end ) ) { + range.startContainer = start; + range.endContainer = end; + range.startOffset = startOffset; + range.endOffset = endOffset; + custom = true; + } + } + + // Trim right + if ( range.endContainer.type == CKEDITOR.NODE_TEXT && range.endOffset > 0 && range.endContainer.getText().substr( range.endOffset - 1 , 1 ) == ' ' ) { + range.endOffset -= 1; + custom = true; + } + + if ( custom ) + range.select(); + }; + + editor.on( 'contentDom', function() { + // Try to adjust text selection by double click to not include trailing space + editor.document.on( 'dblclick', trimSelection ); + + editor.document.on( 'mouseup', trimSelection ); + }); + } +} ); + diff --git a/plugins/ckeditor4/symbol/dialogs/lang/en.js b/plugins/ckeditor4/symbol/dialogs/lang/en.js new file mode 100644 index 0000000..ae8759c --- /dev/null +++ b/plugins/ckeditor4/symbol/dialogs/lang/en.js @@ -0,0 +1,181 @@ +CKEDITOR.plugins.setLang("symbol","en",{32:"Space",33:"Exclamation mark",34:"Quotation mark",35:"Number sign",36:"Dollar sign",37:"Percent sign",38:"Ampersand",39:"Apostrophe",40:"Left parenthesis",41:"Right parenthesis",42:"Asterisk",43:"Plus sign",44:"Comma",45:"Hyphen-minus",46:"Full stop",47:"Solidus",48:"Digit 0",49:"Digit 1",50:"Digit 2",51:"Digit 3",52:"Digit 4",53:"Digit 5",54:"Digit 6",55:"Digit 7",56:"Digit 8",57:"Digit 9",58:"Colon",59:"Semicolon",60:"Less-than sign",61:"Equals sign",62:"Greater-than sign", +63:"Question mark",64:"Commercial at",65:"Latin capital letter A",66:"Latin capital letter B",67:"Latin capital letter C",68:"Latin capital letter D",69:"Latin capital letter E",70:"Latin capital letter F",71:"Latin capital letter G",72:"Latin capital letter H",73:"Latin capital letter I",74:"Latin capital letter J",75:"Latin capital letter K",76:"Latin capital letter L",77:"Latin capital letter M",78:"Latin capital letter N",79:"Latin capital letter O",80:"Latin capital letter P",81:"Latin capital letter Q", +82:"Latin capital letter R",83:"Latin capital letter S",84:"Latin capital letter T",85:"Latin capital letter U",86:"Latin capital letter V",87:"Latin capital letter W",88:"Latin capital letter X",89:"Latin capital letter Y",90:"Latin capital letter Z",91:"Left square bracket",92:"Reverse solidus",93:"Right square bracket",94:"Circumflex accent",95:"Low line",96:"Grave accent",97:"Latin small letter a",98:"Latin small letter b",99:"Latin small letter c",100:"Latin small letter d",101:"Latin small letter e", +102:"Latin small letter f",103:"Latin small letter g",104:"Latin small letter h",105:"Latin small letter i",106:"Latin small letter j",107:"Latin small letter k",108:"Latin small letter l",109:"Latin small letter m",110:"Latin small letter n",111:"Latin small letter o",112:"Latin small letter p",113:"Latin small letter q",114:"Latin small letter r",115:"Latin small letter s",116:"Latin small letter t",117:"Latin small letter u",118:"Latin small letter v",119:"Latin small letter w",120:"Latin small letter x", +121:"Latin small letter y",122:"Latin small letter z",123:"Left curly bracket",124:"Vertical line",125:"Right curly bracket",126:"Tilde",160:"No-break space",161:"Inverted exclamation mark",162:"Cent sign",163:"Pound sign",164:"Currency sign",165:"Yen sign",166:"Broken bar",167:"Section sign",168:"Diaeresis",169:"Copyright sign",170:"Feminine ordinal indicator",171:"Left-pointing double angle quotation mark",172:"Not sign",173:"Soft hyphen",174:"Registered sign",175:"Macron",176:"Degree sign",177:"Plus-minus sign", +178:"Superscript two",179:"Superscript three",180:"Acute accent",181:"Micro sign",182:"Pilcrow sign",183:"Middle dot",184:"Cedilla",185:"Superscript one",186:"Masculine ordinal indicator",187:"Right-pointing double angle quotation mark",188:"Vulgar fraction one quarter",189:"Vulgar fraction one half",190:"Vulgar fraction three quarters",191:"Inverted question mark",192:"Latin capital letter A with grave",193:"Latin capital letter A with acute",194:"Latin capital letter A with circumflex",195:"Latin capital letter A with tilde", +196:"Latin capital letter A with diaeresis",197:"Latin capital letter A with ring above",198:"Latin capital letter AE",199:"Latin capital letter C with cedilla",200:"Latin capital letter E with grave",201:"Latin capital letter E with acute",202:"Latin capital letter E with circumflex",203:"Latin capital letter E with diaeresis",204:"Latin capital letterI with grave",205:"Latin capital letter I with acute",206:"Latin capital letter I with circumflex",207:"Latin capital letter I with diaeresis",208:"Latin capital letter ETH", +209:"Latin capital letter N with tilde",210:"Latin capital letter O with grave",211:"Latin capital letter O with acute",212:"Latin capital letter O with circumflex",213:"Latin capital letter O with tilde",214:"Latin capital letter O with diaeresis",215:"Multiplication sign",216:"Latin capital letter O with stroke",217:"Latin capital letter U with grave",218:"Latin capital letter U with acute",219:"Latin capital letter U with circumflex",220:"Latin capital letter U with diaeresis",221:"Latin capital letter Y with acute", +222:"Latin capital letter THORN",223:"Latin small letter SHARP S",224:"Latin small letter A with grave",225:"Latin small letter A with acute",226:"Latin small letter A with circumflex",227:"Latin small letter A with tilde",228:"Latin small letter A with diaeresis",229:"Latin small letter A with ring above",230:"Latin small letter AE",231:"Latin small letter C with cedilla",232:"Latin small letter E with grave",233:"Latin small letter E with acute",234:"Latin small letter E with circumflex",235:"Latin small letter E with diaeresis", +236:"Latin small letter I with grave",237:"Latin small letter I with acute",238:"Latin small letter I with circumflex",239:"Latin small letter I with diaeresis",240:"Latin small letter ETH",241:"Latin small letter N with tilde",242:"Latin small letter O with grave",243:"Latin small letter O with acute",244:"Latin small letter O with circumflex",245:"Latin small letter O with tilde",246:"Latin small letter O with diaeresis",247:"Division sign",248:"Latin small letter O with stroke",249:"Latin small letter U with grave", +250:"Latin small letter U with acute",251:"Latin small letter U with circumflex",252:"Latin small letter U with diaeresis",253:"Latin small letter Y with acute",254:"Latin small letter THORN",255:"Latin small letter Y with diaeresis",256:"Latin capital letter A with macron",257:"Latin small letter A with macron",258:"Latin capital letter A with breve",259:"Latin small letter A with breve",260:"Latin capital letter A with ogonek",261:"Latin small letter A with ogonek",262:"Latin capital letter C with acute", +263:"Latin small letter C with acute",264:"Latin capital letter C with circumflex",265:"Latin small letter C with circumflex",266:"Latin captial letter C with dot above",267:"Latin small letter C with dot above",268:"Latin capital letter C with caron",269:"Latin small letter C with caron",270:"Latin capital letter D with caron",271:"Latin small letter D with caron",272:"Latin capital letter D with stroke",273:"Latin small letter D with stroke",274:"Latin capital letter E with macron",275:"Latin small letter E with macron", +276:"Latin capital letter E with breve",277:"Latin small letter E with breve",278:"Latin capital letter E with dot above",279:"Latin small letter E with dot above",280:"Latin capital letter E with ogonek",281:"Latin small letter E with ogonek",282:"Latin capital letter E with caron",283:"Latin small letter E with caron",284:"Latin capital letter G with circumflex",285:"Latin small letter G with circumflex",286:"Latin capital letter G with breve",287:"Latin small letter G with breve",288:"Latin capital letter G with dot above", +289:"Latin small letter G with dot above",290:"Latin capital letter G with cedilla",291:"Latin small letter G with cedilla",292:"Latin capital letter H with circumflex",293:"Latin small letter H with circumflex",294:"Latin capital letter H with stroke",295:"Latin small letter H with stroke",296:"Latin capital letter I with tilde",297:"Latin small letter I with tilde",298:"Latin capital letter I with macron",299:"Latin small letter I with macron",301:"Latin small letter I with breve",302:"Latin capital letter I with ogonek", +303:"Latin small letter I with ogonek",304:"Latin capital letter I with dot above",305:"Latin small letter dotless I",306:"Latin capital ligature IJ",307:"Latin small ligature IJ",308:"Latin capital letter J with circumflex",309:"Latin small letter J with circumflex",310:"Latin capital letter K with cedilla",311:"Latin small letter K with cedilla",312:"Latin small letter KRA",313:"Latin capital letter L with acute",314:"Latin small letter L with acute",315:"Latin capital letter L with cedilla",316:"Latin small letter L with cedilla", +317:"Latin capital letter L with caron",318:"Latin small letter L with caron",319:"Latin capital letter L with middle dot",320:"Latin small letter L with middle dot",321:"Latin capital letter L with stroke",322:"Latin small letter L with stroke",323:"Latin capital letter N with acute",324:"Latin small letter N with acute",325:"Latin capital letter N with cedilla",326:"Latin small letter N with cedilla",327:"Latin capital letter N with caron",328:"Latin small letter N with caron",329:"Latin small letter N proceded by apostrophe (Depricated)", +330:"Latin capital letter ENG",331:"Latin small letter ENG",332:"Latin capital letter O with macron",333:"Latin small letter O with macron",334:"Latin capital letter O with breve",335:"Latin small letter O with breve",336:"Latin capital letter O with double acute",337:"Latin small letter O with double acute",338:"Latin capital ligature OE",339:"Latin small ligature OE",340:"Latin capital letter R with acute",341:"Latin small letter R with acute",342:"Latin capital letter R with cedilla",343:"Latin small letter R with cedilla", +344:"Latin capital letter R with caron",345:"Latin small letter R with caron",346:"Latin capital letter S with acute",347:"Latin small letter S with acute",348:"Latin capital letter S with circumflex",349:"Latin small letter S with circumflex",350:"Latin capital letter S with cedilla",351:"Latin small letter S with cedilla",352:"Latin capital letter S with caron",353:"Latin small letter S with caron",354:"Latin capital letter T with cedilla",355:"Latin small letter T with cedilla",356:"Latin capital letter T with caron", +357:"Latin small letter T with caron",358:"Latin capital letter T with stroke",359:"Latin small letter T with stroke",360:"Latin capital letter U with tilde",361:"Latin small letter U with tilde",362:"Latin capital letter U with macron",363:"Latin small letter U with macron",364:"Latin capital letter U with breve",365:"Latin small letter U with breve",366:"Latin capital letter U with ring above",367:"Latin small letter U with ring above",368:"Latin capital letter U with double acute",369:"Latin small letter U with double acute", +370:"Latin capital letter U with ogonek",371:"Latin small letter U with ogonek",372:"Latin capital letter W with circumflex",373:"Latin small letter W with circumflex",374:"Latin capital letter Y with circumflex",375:"Latin small letter Y with circumflex",376:"Latin capital letter Y with diaeresis",377:"Latin capital letter Z with acute",378:"Latin small letter Z with acute",379:"Latin capital letter Z with dot above",380:"Latin small letter Z with dot above",381:"Latin capital letter Z with caron", +382:"Latin small letter Z with caron",383:"Latin small letter Long S",384:"Latin small letter B with stroke",385:"Latin capital letter B with hook",386:"Latin capital letter B with topbar",387:"Latin small letter B with topbar",388:"Latin capital letter TONE SIX",389:"Latin small letter TONE SIX",390:"Latin capital letter Open O",391:"Latin capital letter C with hook",392:"Latin small letter C with hook",393:"Latin capital letter AFRICAN D",394:"Latin capital letter D with hook",395:"Latin capital letter D with topbar", +396:"Latin small letter D with topbar",397:"Latin small letter turned DELTA",398:"Latin capital letter reversed E",399:"Latin capital letter SCHWA",400:"Latin capital letter Open E",401:"Latin capital letter F with hook",402:"Latin small letter F with hook",403:"Latin capital letter G with hook",404:"Latin capital letter GAMMA",405:"Latin small letter HV",406:"Latin capital letter IOTA",407:"Latin capital letter I with stroke",409:"Latin small letter K with hook",410:"Latin small letter L with bar", +411:"Latin letter LAMBDA BAR",412:"Latin capital letter turned M",413:"Latin capital letter N with left hook",414:"Latin small letter N with long right LEG",415:"Latin capital letter O with middle tilde",416:"Latin capital letter O with horn",417:"Latin small letter O with horn",418:"Latin capital letter OI",419:"Latin small letter OI",420:"Latin capital letter P with hook",421:"Latin small letter P with hook",422:"Latin letter YR",423:"Latin capital letter TONE TWO",424:"Latin small letter TONE TWO", +425:"Latin capital letter ESH",426:"Latin letter reversed ESH LOOP",427:"Latin small letter T with palatal hook",428:"Latin capital letter T with hook",429:"Latin small letter T with hook",430:"Latin capital letter T with retroflex hook",431:"Latin capital letter U with horn",432:"Latin small letter U with horn",433:"Latin capital letter UPSILON",434:"Latin capital letter V with hook",435:"Latin capital letter Y with hook",436:"Latin small letter Y with hook",437:"Latin capital letter Z with stroke", +438:"Latin small letter Z with stroke",439:"Latin capital letter EZH",440:"Latin capital letter EZH reversed",441:"Latin small letter EZH reversed",442:"Latin small letter EZH with tail",443:"Latin letter TWO with stroke",444:"Latin capital letter Tone Five",445:"Latin small letter Tone Five",446:"Latin letter inversed GLOTTAL STOP with stroke",447:"Latin letter WYNN",448:"Latin letter DENTAL CLICK",449:"Latin letter LATERAL CLICK",450:"Latin letter ALVEOLAR CLICK",451:"Latin letter RETROFLEX CLICK", +452:"Latin capital letter DZ with caron",453:"Latin capital letter D with small letter Z with caron",454:"Latin small letter DZ with caron",455:"Latin capital letter LJ",456:"Latin capital letter L with small letter J",457:"Latin capital letter NJ",458:"Latin capital letter N with small letter J",459:"Latin small letter NJ",460:"Latin capital letter A wth caron",461:"Latin capital letter A with caron",462:"Latin small letter A with caron",463:"Latin capital letter I with caron",464:"Latin small letter I with caron", +465:"Latin capital letter O with caron",466:"Latin small letter O with caron",467:"Latin capital letter U with caron",468:"Latin small letter U with caron",469:"Latin capital letter U with diaeresis and macron",470:"Latin small letter U with diaeresis and macron",471:"Latin capital letter U with diaeresis and acute",472:"Latin small letter U with diaeresis and acute",473:"Latin capital letter U with diaeresis and caron",474:"Latin small letter U with diaeresis and caron",475:"Latin capital letter U with diaeresis and grave", +476:"Latin small letter U with diaeresis and grave",477:"Latin small letter turned E",478:"Latin capital letter A with diaeresis and macron",479:"Latin small letter A with diaeresis and macron",480:"Latin capital letter A with dot above and macron",481:"Latin small letter A with dot above and macron",482:"Latin capital letter AE with macron",483:"Latin small letter AE with macron",484:"Latin capital letter G with stroke",485:"Latin small letter G with stroke",486:"Latin capital letter G with caron", +487:"Latin small letter G with caron",488:"Latin capital letter K with caron",489:"Latin small letter K with caron",490:"Latin capital letter O with ogonek",491:"Latin small letter O with ogonek",492:"Latin capital letter O with ogonek and macron",493:"Latin small letter O with ogonek and macron",494:"Latin capital letter EZH with caron",495:"Latin small letter EZH with caron",496:"Latin small letter J with caron",501:"Latin small letter G with acute",502:"Latin capital letter HWAIR",503:"Latin capital letter WYNN", +505:"Latin small letter N with grave",513:"Latin small letter A with double grave",515:"Latin small letter A with inverted breve",517:"Latin small letter E with double grave",519:"Latin small letter E with inverted breve",521:"Latin small letter I with double grave",523:"Latin small letter I with inverted breve",525:"Latin small letter O with double grave",527:"Latin small letter O with inverted breve",529:"Latin small letter R with double grave",531:"Latin small letter R with inverted breve",533:"Latin small letter U with double grave", +535:"Latin small letter U with inverted breve",537:"Latin small letter S with comma below",539:"Latin small letter T with comma below",541:"Latin small letter YOGH",543:"Latin small letter H with caron",544:"Latin capital letter N with long right leg",545:"Latin small letter D with curl",547:"Latin small letter OU",549:"Latin small letter Z with hook",551:"Latin small letter A with dot above",553:"Latin small letter E with cedilla",559:"Latin small letter O with dot above",563:"Latin small letter Y with macron", +564:"Latin small letter L with curl",565:"Latin small letter N with curl",566:"Latin small letter T with curl",567:"Latin small letter dotless J",568:"Latin small letter DB digraph",569:"Latin small letter QP digraph",570:"Latin capital letter A with stroke",571:"Latin capital letter C with stroke",572:"Latin small letter C with stroke",573:"Latin capital letter L with bar",574:"Latin capital letter T with diagonal stroke",575:"Latin small letter S with swash tail",576:"Latin small letter Z with swash tail", +577:"Latin capital letter GLOTTAL STOP",578:"Latin small letter GLOTTAL STOP",579:"Latin capital letter B with stroke",580:"Latin capital letter U bar",581:"Latin capital letter turned V",582:"Latin capital letter E with stroke",583:"Latin small letter E with stroke",584:"Latin capital letter J with stroke",585:"Latin small letter J with stroke",586:"Latin capital letter small Q with hook tail",587:"Latin small letter Q with hook tail",588:"Latin capital letter R with stroke",589:"Latin small letter R with stroke", +590:"Latin capital letter Y with stroke",591:"Latin small letter Y with stroke",592:"Latin small letter turned A",593:"Latin small letter ALPHA",594:"Latin small letter turned ALPHA",595:"Latin small letter B with hook",596:"Latin small letter open O",597:"Latin small letter C with curl",598:"Latin small letter D with tail",599:"Latin small letter D with hook",600:"Latin small letter reversed E",601:"Latin small letter SCHWA",603:"Latin small letter open E",604:"Latin small letter reversed open E", +605:"Latin small letter reversed open E with hook",606:"Latin small letter closed reversed open E",607:"Latin small letter DOTLESS J with stroke",608:"Latin small letter G with hook",609:"Latin small letter script G",610:"Latin letter small capital G",611:"Latin small letter GAMMA",612:"Latin small letter RAMS horn",613:"Latin small letter turned H",614:"Latin small letter H with hook",616:"Latin small letter I with stroke",617:"Latin small letter IOTA",618:"Latin letter small capital I",619:"Latin small letter L with middle tilde", +620:"Latin small letter L with belt",621:"Latin small letter L with retroflex hook",622:"Latin small letter LEZH",623:"Latin small letter turned M",624:"Latin small letter turned M with long leg",625:"Latin small letter M with hook",626:"Latin small letter N with left hook",627:"Latin small letter N with retroflex hook",628:"Latin letter small capital N",629:"Latin small letter barred O",630:"Latin letter small capital OE",631:"Latin small letter closed OMEGA",632:"Latin small letter PHI",633:"Latin small letter turned R", +634:"Latin small letter turned R with long leg",635:"Latin small letter turned R with hook",636:"Latin small letter R with long leg",637:"Latin small letter R with tail",638:"Latin small letter R with fishhook",639:"Latin small letter reversed R with fishhook",640:"Latin letter small capital R",641:"Latin letter small capital inverted R",642:"Latin small letter S with hook",643:"Latin small letter ESH",645:"Latin small letter SQUAT reversed ESH",647:"Latin small letter turned T",648:"Latin small letter T with retroflex hook", +649:"Latin small letter U bar",650:"Latin small letter UPSILON",651:"Latin small letter V with hook",652:"Latin small letter turned V",653:"Latin small letter turned W",654:"Latin small letter turned Y",655:"Latin letter small capital Y",656:"Latin small letter Z with retroxflex hook",657:"Latin small letter Z with curl",658:"Latin small letter EZH",660:"Latin letter GLOTTAL STOP",661:"Latin letter PHARYNGEAL VOICED FRICATIVE",662:"Latin letter inverted GLOTTAL STOP",663:"Latin letter stretched C", +664:"Latin letter BULLSEYE",665:"Latin letter small capital B",666:"Latin small letter closed EPSILON",667:"Latin letter small capital G with hook",668:"Latin letter small capital H",669:"Latin small letter J with crossed-tail",670:"Latin small letter turned K",671:"Latin letter small capital L",672:"Latin small letter Q with hook",675:"Phonetic Digraphs",684:"Latin letter BILABIAL PERCUSSIVE",685:"Latin letter BIDENTAL PERCUSSIVE",686:"Latin small letter turned H with fishhook",688:"Phonetic Modifiers Derived from Latin Letters", +690:"Modifier letter small J",691:"Modifier letter small R",692:"Modifier letter small turned R",694:"Modifier letter small capital inverted R",695:"Modifier letter small W",696:"Modifier letter small Y",697:"Phonetic Modifiers",698:"Modifier letter DOUBLE PRIME",699:"Modifier letter turned COMMA",700:"Modifier letter APOSTROPHE",701:"Modifier letter reversed COMMA",703:"Modifier letter left half ring",704:"Modifier letter GLOTTAL STOP",705:"Modifier letter reversed GLOTTAL STOP",706:"Modifier letter ARROWHEADS", +710:"Modifier letter circumflex accent",711:"Mandarin chinese third tone",712:"Modifier letter vertical line",713:"Mandarin chinese first tone",714:"Mandarin chinese second tone",715:"Mandarin chinese fourth tone",716:"Modifier letter low VERTICAL LINE",717:"Modifier letter low MACRON",718:"Modifier letter low grave ACCENT",719:"Modifier letter low acute ACCENT",720:"Modifier letter TRIANGULAR COLON",721:"Modifier letter HALF TRIANGULAR COLON",723:"Modifier letter CENTRED LEFT HALF ring",724:"Modifier letter UP TACK", +726:"Modifier letter PLUS sign",727:"Modifier letter MINUS sign",728:"Breve",729:"Mandarin chinese fifth or neutral tone",730:"Ring above",731:"OGONEK",732:"Small TILDE",733:"Double acute accent",734:"Modifier letter RHOTIC hook",735:"Modifier letter CROSS accent",736:"Modifier letter small GAMMA",737:"Modifier letter small L",738:"Modifier letter small S",739:"Modifier letter small X",740:"Modifier letter small reversed GLOTTAL STOP",741:"Tone Letters",748:"Modifier letter VOICING",749:"Modifier letter UNASPIRATED", +750:"Modifier letter DOUBLE APOSTROPHE",751:"UPA Modifiers",768:"Combining grave accent",769:"Combining acute accent",770:"Combining circumflex accent",771:"Combining Tilde",772:"Combining macron",773:"Combining Overline",774:"Combining Breve",775:"Combining dot above",776:"Double dot above",777:"Combining hook above",778:"Combining ring above",779:"Combining double acute accent",780:"Combining caron",781:"Combining vertical line above",782:"Combining double vertical line above",783:"Combining double grave accent", +784:"Combining CANDRABINDU",785:"Combining inverted breve",786:"Cedilla above",787:"Combining COMMA above",788:"Combining reversed COMMA above",789:"Combining COMMA above right",790:"Combining grave accent below",791:"Combining acute accent below",792:"Combining left TACK below",793:"Combining right TACK below",794:"Combining left ANGLE above",795:"Combining horn",796:"Combining left half ring below",797:"Combining up TACK below",798:"Combining down TACK below",799:"Combining PLUS sign below",800:"Combining MINUS sign below", +801:"Combining PALATALIZED hook below",802:"Combining RETROFLEX hook below",803:"Combining DOT below",804:"Combining DIAERESIS below",805:"Combining ring below",806:"Combining COMMA below",807:"Combining CEDILLA",808:"Combining ogonek",809:"Combining vertical line below",810:"Combining BRIDGE below",811:"Combining inverted double ARCH below",812:"Combining CARON below",813:"Combining CIRCUMFLEX accent below",814:"Combining BREVE below",815:"Combining inverted BREVE below",816:"Combining TILDE below", +817:"Combining MACRON below",818:"Underscore",819:"Double underscore",820:"Combining TILDE overlay",821:"Combining short stroke overlay",822:"Combining long stroke overlay",823:"Combining short SOLIDUS overlay",824:"Combining long SOLIDUS overlay",825:"Combining right half ring below",826:"Combining inverted BRIDGE below",827:"Combining SQUARE below",828:"Combining SEAGULL below",829:"Combining X above",830:"Combining vertical TILDE",831:"Combining double OVERLINE",832:"Combining grave TONE MARK", +833:"Combining acute TONE MARK",834:"Combining Greek PERISPOMENI",835:"Combining Greek KORONIS",836:"Combining Greek DIALYTIKA TONOS",837:"Combining Greek YPOGEGRAMMENI",838:"Combining BRIDGE above",839:"Combining EQUALS sign below",840:"Combining double VERTICAL LINE below",841:"Combining left ANGLE below",842:"Combining NOT TILDE above",843:"Combining HOMOTHETIC above",844:"Combining ALMOST EQUAL TO above",845:"Combining left right ARROW below",846:"Combining UPWARDS ARROW below",847:"Combining GRAPHEME JOINER", +848:"Combining right ARROWHEAD above",849:"Combining Left half ring above",850:"Combining FERMATA",851:"Combining X below",852:"Combining left ARROWHEAD below",853:"Combining right ARROWHEAD below",855:"Combining right half ring above",856:"Combining DOT above right",857:"Combining ASTERISK below",858:"Combining double ring below",859:"Combining ZIGZAG above",860:"Combining double BREVE below",861:"Combining double BREVE",862:"Combining double MACRON",863:"Combining double MACRON below",864:"Combining double TILDE", +865:"Combining double inverted BREVE",866:"Combining double RIGHTWARDS ARROW below",867:"Combining Latin small letter A",868:"Combining Latin small letter E",869:"Combining Latin small letter I",870:"Combining Latin small letter O",871:"Combining Latin small letter U",872:"Combining Latin small letter C",873:"Combining Latin small letter D",874:"Combining Latin small letter H",875:"Combining Latin small letter M",876:"Combining Latin small letter R",877:"Combining Latin small letter T",878:"Combining Latin small letter V", +879:"Combining Latin small letter X",884:"Greek Punctuation and Signs",894:"Greek Question Mark",913:"Greek Capital Letters",915:"GAMMA function",945:"Greek Small Letters",960:"Greek small letter PI",976:"Greek BETA SYMBOL",977:"Greek THETA SYMBOL",981:"Greek PHI SYMBOL",982:"Greek PI SYMBOL",984:"Greek Archaic Letters",994:"Coptic Letters Derived from Demotic",1010:"Greek small letter lunate sigma",1013:"Greek LUNATE EPSILON SYMBOL",1014:"Greek reversed LUNATE EPSILON SYMBOL",1024:"Cyrillic Capital Letters", +1040:"Russian Alphabet",1072:"Cyrillic Small Letters",1104:"Cyrillic Extensions",1120:"Cyrillic Historic Letters",1155:"Cyrillic Combining Characters",1162:"Cyrillic Extensions",1280:"Cyrillic Supplement",1328:"Armenian Alphabet",1329:"Armenian Capital Letters",1369:"Armenian modifier letter left half ring",1370:"Armenian modifier letter right half ring",1371:"Armenian shesht",1372:"Armenian batsaganchakan nshan",1373:"Armenian bowt",1374:"Armenian hartsakan nshan",1375:"Armenian patiw",1377:"Armenian Small Letters", +1417:"Armenian vertsaket",1418:"Armenian yentamna",1424:"Hebrew",1425:"Hebrew Cantillation Marks",1456:"Hebrew Points and Punctuation",1488:"Hebrew Alphabet",1520:"Yiddish Digraphs",1536:"Arabic Subtending Marks",1547:"Afghani sign",1548:"Arabic Comma",1549:"Arabic Date Separator",1552:"Arabic Honorifics",1563:"Arabic Semicolon",1567:"Arabic Question Mark",1569:"Arabic Alphabet",1600:"Arabic kashida",1611:"Arabic Harakat",1619:"Arabic Combining Marks",1632:"Arabic-Indic Digits",1643:"Arabic Decimal Separator", +1644:"Arabic phrase separator",1645:"Arabic Five Pointed Star",1649:"Extended Arabic Letters",1728:"Arabic letter hamzah on ha",1748:"Arabic Full Stop",1750:"Arabic Koranic Annotation Signs",1776:"Eastern Arabic-Indic Digits",1792:"Syriac Punctuation and Signs",1807:"Syriac Abbreviation Mark",1808:"Syriac Letters",1840:"Syriac Points",1872:"Extended Arabic Letters",1920:"Thaana",1984:"NKo",2048:"Samaritan",2112:"Mandaic",2304:"Devanagari",2305:"Devanagari sign CANDRABINDU",2306:"Devanagari sign ANUSVARA", +2307:"Devanagari sign VISARGA",2308:"Devanagari Independent Vowels",2325:"Devanagari Consonants",2364:"Devanagari sign NUKTA",2365:"Devanagari sign AVAGRAHA",2366:"Devanagari Dependent Vowel Signs",2381:"Devanagari sign VIRAMA",2384:"Devanagari OM",2385:"Devanagari Extensions",2404:"Devanagari purna viram",2405:"Devanagari deergh viram",2406:"Devanagari Digits",2416:"Devanagari ABBREVIATION sign",2432:"Bengali",2437:"Bengali Independent Vowels",2453:"Bengali Consonants",2494:"Bengali Dependent Vowel Signs", +2509:"bengali hasant",2534:"Bengali Digits",2546:"Bengali Rupee Mark",2547:"Bengali RUPEE sign",2554:"Bengali ISSHAR",2560:"Gurmukhi",2565:"Gurmukhi Independent Vowels",2581:"Gurmukhi Consonants",2622:"Gurmukhi Dependent Vowel Signs",2662:"Gurmukhi Digits",2672:"Gurmukhi TIPPI",2673:"Gurmukhi ADDAK",2676:"Gurmukhi EK ONKAR",2688:"Gujarati",2693:"Gujarati Independent Vowels",2709:"Gujarati Consonants",2750:"Gujarati Dependent Vowel Signs",2790:"Gujarati Digits",2801:"GUJARATI RUPEE sign",2816:"Oriya", +2821:"Oriya Independent Vowels",2837:"Oriya Consonants",2878:"Oriya Dependent Vowel Signs",2918:"Oriya Digits",2928:"ORIYA ISSHAR",2944:"Tamil",2947:"Tamil aytham",2949:"Tamil Independent Vowels",2965:"Tamil Consonants",3006:"Tamil Dependent Vowel Signs",3047:"Tamil Digits",3059:"Tamil DAY sign",3060:"Tamil maatham",3061:"Tamil varudam",3062:"Tamil patru",3063:"Tamil varavu",3064:"Tamil merpadi",3065:"Tamil rupai",3066:"Tamil enn",3072:"Telugu",3074:"Telugu sunna",3077:"Telugu Independent Vowels", +3093:"Telugu Consonants",3134:"Telugu Dependent Vowel Signs",3174:"Telugu Digits",3200:"Kannada",3205:"Kannada Independent Vowels",3221:"Kannada Consonants",3262:"Kannada Dependent Vowel Signs",3302:"Kannada Digits",3313:"Vedic Signs",3328:"Malayalam",3333:"Malayalam Independent Vowels",3349:"Malayalam Consonants",3390:"Malayalam Dependent Vowel Signs",3405:"Malayalam chandrakkala",3430:"Malayalam Digits",3450:"Malayalam Chillu Letters",3456:"Sinhala",3461:"Sinhala Independent Vowels",3482:"Sinhala Consonants", +3530:"Sinhala sign AL-LAKUNA",3535:"Sinhala Dependent Vowel Signs",3584:"Thai",3585:"Thai Consonants",3632:"Thai Vowels",3647:"Thai CURRENCY SYMBOL BAHT",3656:"Thai Marks and Signs",3660:"Thai CHARACTER THANTHAKHAT",3661:"Thai CHARACTER NIKHAHIT",3662:"Thai CHARACTER YAMAKKAN",3663:"Thai CHARACTER FONGMAN",3664:"Thai Digits",3674:"Thai CHARACTER ANGKHANKHU",3675:"Thai CHARACTER KHOMUT",3712:"Lao",3713:"Lao Consonants",3759:"Lao ELLIPSIS",3760:"Lao Vowels",3784:"Lao Marks and Signs",3788:"Lao CANCELLATION MARK", +3789:"Lao NIGGAHITA",3792:"Lao Digits",3840:"Tibetan SYLLABLE OM",3841:"Tibetan Head Marks",3848:"Tibetan Marks and Signs",3851:"Tibetan MARK INTERSYLLABIC TSHEG",3852:"Tibetan MARK DELIMITER TSHEG BSTAR",3861:"Tibetan Astrological Signs",3872:"Tibetan Digits",3882:"Tibetan Digits Minus Half",3892:"Tibetan Marks and Signs",3904:"Tibetan Consonants",3953:"Tibetan Dependent Vowel Signs",3966:"tibetan anusvara",3967:"tibetan visarga",3970:"Tibetan Marks and Signs",3972:"tibetan srog med",3973:"Tibetan MARK PALUTA", +3984:"Tibetan Subjoined Consonants",4030:"Tibetan Marks and Signs",4031:"Tibetan KU RU KHA BZHI MIG CAN",4032:"Tibetan Cantillation Signs",4036:"Tibetan Symbols",4053:"Svasti Signs",4096:"Myanmar Consonants",4129:"Myanmar Independent Vowels",4140:"Myanmar Dependent Vowel Signs",4150:"Myanmar Signs",4151:"Myanmar sign DOT below",4153:"myanmar killer",4160:"Myanmar Digits",4170:"Myanmar Punctuation and Signs",4256:"Georgian Khutsuri",4304:"Georgian Mkhedruli",4337:"Georgian Extensions",4347:"Georgian PARAGRAPH SEPARATOR", +4352:"Korean Combining Alphabet",4447:"HANGUL CHOSEONG FILLER",4448:"HANGUL JUNGSEONG FILLER",4608:"Ethiopic Syllables",4957:"Ethiopic Combining Marks",4961:"Ethiopic Punctuation",4962:"Ethiopic FULL STOP",4963:"Ethiopic COMMA",4964:"Ethiopic SEMICOLON",4965:"Ethiopic COLON",4966:"Ethiopic PREFACE COLON",4967:"Ethiopic Question Mark",4968:"Ethiopic PARAGRAPH SEPARATOR",4969:"Ethiopic Digits",4992:"Ethiopic Supplement",5024:"Cherokee",5120:"Unified Canadian Aboriginal Syllabics",5741:"Canadian Syllabics Punctuation", +5742:"CANADIAN SYLLABICS FULL STOP",5760:"Ogham",5761:"Ogham Traditional Letters",5781:"Ogham Forfeda Supplement",5787:"Ogham Punctuation",5792:"Runic",5867:"Runic Punctuation",5870:"Runic Golden Numbers",5888:"Tagalog",5908:"TAGALOG sign VIRAMA",5920:"Hanunoo",5940:"HANUNOO sign PAMUDPOD",5941:"PHILIPPINE SINGLE PUNCTUATION",5942:"PHILIPPINE double PUNCTUATION",5952:"Buhid",5984:"Tagbanwa",6016:"Khmer Consonants",6053:"Khmer Independent Vowels",6070:"Khmer Dependent Vowel Signs",6086:"khmer anusvara", +6087:"khmer srak ah",6107:"KHMER CURRENCY SYMBOL RIEL",6112:"Khmer Digits",6128:"Khmer Numeric Symbols for Divination",6144:"Mongolian BIRGA",6145:"Mongolian ELLIPSIS",6146:"Mongolian COMMA",6147:"Mongolian FULL STOP",6148:"Mongolian COLON",6149:"Mongolian FOUR DOTS",6150:"Mongolian TODO SOFT HYPHEN",6151:"Mongolian SIBE SYLLABLE BOUNDARY MARKER",6152:"Mongolian MANCHU COMMA",6153:"Mongolian MANCHU FULL STOP",6154:"Mongolian NIRUGU",6155:"Mongolian FREE VARIATION SELECTOR ONE",6156:"Mongolian FREE VARIATION SELECTOR TWO", +6157:"Mongolian FREE VARIATION SELECTOR THREE",6158:"Mongolian VOWEL SEPARATOR",6160:"Mongolian Digits",6176:"Mongolian Basic Letters",6211:"Mongolian Extensions",6320:"Unified Canadian Aboriginal Syllabics Extended",6400:"Limbu",6457:"Limbu Signs",6468:"LIMBU EXCLAMATION MARK",6469:"LIMBU Question Mark",6470:"Limbu Digits",6480:"Tai Le",6528:"New Tai Lue",6608:"New Tai Lue Digits",6624:"Khmer Symbols",6656:"Buginese",6688:"Tai Tham",6912:"Balinese",6992:"Balinese Digits",7009:"Balinese Musical Symbols", +7040:"Sundanese",7104:"Batak",7168:"Lepcha",7248:"Ol Chiki",7376:"Vedic Extensions",7424:"Latin letter small capital A",7425:"Latin letter small capital AE",7426:"Latin small letter turned AE",7427:"Latin letter small capital BARRED B",7428:"Latin letter small capital C",7429:"Latin letter small capital D",7430:"Latin letter small capital ETH",7431:"Latin letter small capital E",7432:"Latin small letter turned OPEN E",7433:"Latin small letter turned I",7434:"Latin letter small capital J",7435:"Latin letter small capital K", +7436:"Latin letter small capital L with stroke",7437:"Latin letter small capital M",7438:"Latin letter small capital reversed N",7439:"Latin letter small capital O",7440:"Latin letter small capital OPEN O",7441:"Latin small letter SIDEWAYS O",7442:"Latin small letter SIDEWAYS OPEN O",7443:"Latin small letter SIDEWAYS O with stroke",7444:"Latin small letter turned OE",7445:"Latin letter small capital OU",7446:"Latin small letter TOP half O",7447:"Latin small letter BOTTOM half O",7448:"Latin letter small capital P", +7449:"Latin letter small capital reversed R",7450:"Latin letter small capital turned R",7451:"Latin letter small capital T",7452:"Latin letter small capital U",7453:"Latin small letter SIDEWAYS U",7454:"Latin small letter SIDEWAYS DIAERESIZED U",7455:"Latin small letter SIDEWAYS turned M",7456:"Latin letter small capital V",7457:"Latin letter small capital W",7458:"Latin letter small capital Z",7459:"Latin letter small capital EZH",7460:"Latin letter VOICED LARYNGEAL SPIRANT",7461:"Latin letter AIN", +7468:"Modifier letter Extensions",7522:"Latin subscript small letter I",7523:"Latin subscript small letter R",7524:"Latin subscript small letter U",7525:"Latin subscript small letter V",7627:"Contour Tone Marks",7635:"Latin Medieval Superscript Letter Diacritics",7676:"Combining double inverted BREVE below",7680:"Latin Extended Additional",7681:"Latin small letter A with ring below",7683:"Latin small letter B with dot above",7685:"Latin small letter B with DOT below",7687:"Latin small letter B with LINE below", +7691:"Latin small letter D with dot above",7693:"Latin small letter D with DOT below",7695:"Latin small letter D with LINE below",7697:"Latin small letter D with cedilla",7699:"Latin small letter D with CIRCUMFLEX below",7705:"Latin small letter E with CIRCUMFLEX below",7707:"Latin small letter E with TILDE below",7711:"Latin small letter F with dot above",7713:"Latin small letter G with macron",7715:"Latin small letter H with dot above",7717:"Latin small letter H with DOT below",7719:"Latin small letter H with diaeresis", +7721:"Latin small letter H with cedilla",7723:"Latin small letter H with BREVE below",7725:"Latin small letter I with TILDE below",7729:"Latin small letter K with acute",7731:"Latin small letter K with DOT below",7733:"Latin small letter K with LINE below",7735:"Latin small letter L with DOT below",7739:"Latin small letter L with LINE below",7741:"Latin small letter L with CIRCUMFLEX below",7743:"Latin small letter M with acute",7745:"Latin small letter M with dot above",7747:"Latin small letter M with DOT below", +7749:"Latin small letter N with dot above",7751:"Latin small letter N with DOT below",7753:"Latin small letter N with LINE below",7755:"Latin small letter N with CIRCUMFLEX below",7765:"Latin small letter P with acute",7767:"Latin small letter P with dot above",7769:"Latin small letter R with dot above",7771:"Latin small letter R with DOT below",7775:"Latin small letter R with LINE below",7777:"Latin small letter S with dot above",7779:"Latin small letter S with DOT below",7787:"Latin small letter T with dot above", +7789:"Latin small letter T with DOT below",7791:"Latin small letter T with LINE below",7793:"Latin small letter T with CIRCUMFLEX below",7795:"Latin small letter U with DIAERESIS below",7797:"Latin small letter U with TILDE below",7799:"Latin small letter U with CIRCUMFLEX below",7805:"Latin small letter V with tilde",7807:"Latin small letter V with DOT below",7809:"Latin small letter W with grave",7811:"Latin small letter W with acute",7813:"Latin small letter W with diaeresis",7815:"Latin small letter W with dot above", +7817:"Latin small letter W with DOT below",7819:"Latin small letter X with dot above",7821:"Latin small letter X with diaeresis",7823:"Latin small letter Y with dot above",7825:"Latin small letter Z with circumflex",7827:"Latin small letter Z with DOT below",7829:"Latin small letter Z with LINE below",7830:"Latin small letter H with LINE below",7831:"Latin small letter T with diaeresis",7832:"Latin small letter W with ring above",7833:"Latin small letter Y with ring above",7834:"Latin small letter A with right half ring", +7835:"Latin small letter long S with DOT above",7841:"Latin small letter A with DOT below",7843:"Latin small letter A with hook above",7865:"Latin small letter E with DOT below",7867:"Latin small letter E with hook above",7869:"Latin small letter E with tilde",7881:"Latin small letter I with hook above",7883:"Latin small letter I with DOT below",7885:"Latin small letter O with DOT below",7887:"Latin small letter O with hook above",7909:"Latin small letter U with DOT below",7911:"Latin small letter U with hook above", +7923:"Latin small letter Y with grave",7925:"Latin small letter Y with DOT below",7927:"Latin small letter Y with hook above",7929:"Latin small letter Y with tilde",7936:"Greek Extended",8192:"Symbols Area",8193:"EM QUAD",8193:"mutton quad",8193:"EM QUAD",8193:"mutton quad",8194:"EN SPACE",8194:"nut",8194:"EN SPACE",8195:"EM SPACE",8195:"mutton",8195:"EM SPACE",8196:"thick space",8196:"THREE-PER-EM SPACE",8196:"thick space",8196:"THREE-PER-EM SPACE",8197:"FOUR-PER-EM SPACE",8197:"mid space",8197:"FOUR-PER-EM SPACE", +8197:"mid space",8198:"SIX-PER-EM SPACE",8199:"FIGURE SPACE",8200:"PUNCTUATION SPACE",8201:"THIN SPACE",8202:"HAIR SPACE",8203:"ZERO WIDTH SPACE",8203:"zwsp",8204:"Format Characters",8204:"ZERO WIDTH NON-JOINER",8204:"zwnj",8205:"ZERO WIDTH JOINER",8205:"zwj",8206:"Left-TO-RIGHT MARK",8206:"lrm",8207:"RIGHT-TO-LEFT MARK",8207:"rlm",8208:"Dashes",8208:"HYPHEN",8209:"NON-BREAKING HYPHEN",8210:"FIGURE DASH",8211:"EN DASH",8212:"EM DASH",8213:"HORIZONTAL BAR",8213:"quotation dash",8213:"HORIZONTAL bar", +8213:"quotation dash",8214:"DOUBLE VERTICAL LINE",8215:"DOUBLE low LINE",8215:"spacing double underscore",8215:"DOUBLE low LINE",8215:"spacing double underscore",8216:"single turned comma quotation mark",8216:"Left SINGLE QUOTATION MARK",8216:"LEFT SINGLE QUOTATION MARK",8216:"single turned comma quotation mark",8216:"Quotation Marks",8216:"LEFT SINGLE QUOTATION MARK",8216:"single turned comma quotation mark",8217:"apostrophe",8217:"single comma quotation mark",8217:"right SINGLE QUOTATION MARK", +8217:"single comma quotation mark",8217:"RIGHT SINGLE QUOTATION MARK",8217:"single comma quotation mark",8217:"right SINGLE QUOTATION MARK",8218:"low single comma quotation mark",8218:"SINGLE LOW-9 QUOTATION MARK",8218:"low single comma quotation mark",8218:"SINGLE LOW-9 QUOTATION MARK",8218:"low single comma quotation mark",8218:"SINGLE LOW-9 QUOTATION MARK",8219:"single reversed comma quotation mark",8219:"SINGLE HIGH-reversed-9 QUOTATION MARK",8219:"single reversed comma quotation mark",8219:"SINGLE HIGH-reversed-9 QUOTATION MARK", +8219:"single reversed comma quotation mark",8220:"double turned comma quotation mark",8220:"LEFT double QUOTATION MARK",8220:"double turned comma quotation mark",8220:"Left double QUOTATION MARK",8220:"double turned comma quotation mark",8220:"LEFT double QUOTATION MARK",8220:"double turned comma quotation mark",8221:"double comma quotation mark",8221:"right double QUOTATION MARK",8221:"double comma quotation mark",8221:"right double QUOTATION MARK",8221:"RIGHT double QUOTATION MARK",8222:"low double comma quotation mark", +8222:"DOUBLE LOW-9 QUOTATION MARK",8222:"low double comma quotation mark",8222:"DOUBLE LOW-9 QUOTATION MARK",8222:"low double comma quotation mark",8223:"double reversed comma quotation mark",8223:"DOUBLE HIGH-reversed-9 QUOTATION MARK",8223:"double reversed comma quotation mark",8223:"DOUBLE HIGH-reversed-9 QUOTATION MARK",8223:"double reversed comma quotation mark",8224:"DAGGER",8225:"DOUBLE DAGGER",8226:"BULLET",8227:"TRIANGULAR BULLET",8228:"ONE DOT LEADER",8229:"TWO DOT LEADER",8230:"three dot leader", +8230:"HORIZONTAL ELLIPSIS",8230:"three dot leader",8231:"HYPHENATION POINT",8232:"LINE SEPARATOR",8233:"PARAGRAPH SEPARATOR",8234:"Bidirectional Format Characters",8234:"Bidirectional Format Controls",8234:"Directional Format Characters",8234:"LEFT-TO-RIGHT EMBEDDING",8234:"Directional Format Characters",8234:"Left-TO-RIGHT EMBEDDING",8234:"lre",8235:"right-TO-LEFT EMBEDDING",8235:"RIGHT-TO-LEFT EMBEDDING",8235:"rle",8236:"POP DIRECTIONAL FORMATTING",8236:"pdf",8236:"POP DIRECTIONAL FORMATTING",8237:"Left-TO-RIGHT OVERRIDE", +8237:"lro",8237:"LEFT-TO-RIGHT OVERRIDE",8238:"right-TO-LEFT OVERRIDE",8238:"RIGHT-TO-LEFT OVERRIDE",8238:"rlo",8239:"NARROW NO-BREAK SPACE",8239:"nnbsp",8239:"NARROW NO-BREAK SPACE",8240:"PER MILLE sign",8240:"per thousand",8241:"PER TEN THOUSAND sign",8242:"feet",8242:"minutes",8242:"PRIME",8243:"DOUBLE PRIME",8243:"inches",8243:"DOUBLE PRIME",8243:"seconds",8244:"TRIPLE PRIME",8245:"reversed PRIME",8246:"reversed double PRIME",8247:"reversed TRIPLE PRIME",8248:"CARET",8249:"SINGLE LEFT-POINTING ANGLE QUOTATION MARK", +8249:"left pointing single guillemet",8249:"SINGLE Left-POINTING ANGLE QUOTATION MARK",8249:"SINGLE LEFT-POINTING ANGLE QUOTATION MARK",8249:"left pointing single guillemet",8249:"SINGLE LEFT-POINTING ANGLE QUOTATION MARK",8250:"SINGLE right-POINTING ANGLE QUOTATION MARK",8250:"right pointing single guillemet",8250:"SINGLE right-POINTING ANGLE QUOTATION MARK",8250:"right pointing single guillemet",8250:"SINGLE RIGHT-POINTING ANGLE QUOTATION MARK",8250:"right pointing single guillemet",8250:"SINGLE right-POINTING ANGLE QUOTATION MARK", +8251:"japanese kome",8251:"urdu paragraph separator",8251:"REFERENCE MARK",8251:"urdu paragraph separator",8252:"DOUBLE EXCLAMATION MARK",8253:"INTERROBANG",8254:"OVERLINE",8254:"spacing overscore",8255:"greek enotikon",8255:"UNDERTIE",8256:"CHARACTER TIE",8256:"sequence concatenation",8256:"CHARACTER TIE",8257:"CARET INSERTION POINT",8258:"ASTERISM",8259:"HYPHEN BULLET",8260:"FRACTION SLASH",8260:"solidus",8261:"LEFT SQUARE BRACKET with QUILL",8261:"Left SQUARE BRACKET with QUILL",8261:"LEFT SQUARE BRACKET with QUILL", +8262:"right SQUARE BRACKET with QUILL",8262:"RIGHT SQUARE BRACKET with QUILL",8262:"right SQUARE BRACKET with QUILL",8263:"Double Punctuation for Vertical Text",8263:"DOUBLE Question Mark",8263:"Double Punctuation for Vertical Text",8263:"DOUBLE Question Mark",8263:"Double Punctuation for Vertical Text",8264:"QUESTION EXCLAMATION MARK",8265:"EXCLAMATION Question Mark",8266:"TIRONIAN sign ET",8267:"reversed PILCROW sign",8268:"BLACK LEFTWARDS BULLET",8268:"BLACK LeftWARDS BULLET",8269:"BLACK rightWARDS BULLET", +8269:"BLACK RIGHTWARDS BULLET",8270:"LOW ASTERISK",8271:"reversed SEMICOLON",8272:"CLOSE UP",8273:"TWO ASTERISKS ALIGNED VERTICALLY",8274:"COMMERCIAL MINUS sign",8274:"med avdrag av",8274:"COMMERCIAL MINUS sign",8274:"piska",8275:"SWUNG DASH",8276:"INVERTED UNDERTIE",8277:"phul",8277:"puspika",8278:"THREE DOT PUNCTUATION",8279:"QUADRUPLE PRIME",8280:"FOUR DOT PUNCTUATION",8281:"FIVE DOT PUNCTUATION",8281:"greek pentonkion",8282:"TWO DOT PUNCTUATION",8283:"FOUR DOT MARK",8284:"DOTTED CROSS",8285:"epidaurean acrophonic symbol three", +8285:"TRICOLON",8286:"VERTICAL FOUR DOTS",8287:"MEDIUM MATHEMATICAL SPACE",8287:"mmsp",8287:"MEDIUM MATHEMATICAL SPACE",8288:"WORD JOINER",8288:"wj",8288:"WORD JOINER",8289:"FUNCTION APPLICATION",8289:"Invisible Operators",8290:"INVISIBLE TIMES",8291:"invisible comma",8291:"INVISIBLE SEPARATOR",8292:"INVISIBLE PLUS",8304:"Superscript Digits",8304:"SUPERSCRIPT ZERO",8304:"Superscripts",8304:"SUPERSCRIPT ZERO",8305:"SUPERSCRIPT Latin small letter I",8320:"Subscript Digits",8320:"Subscripts",8341:"Latin subscript small letter H", +8342:"Latin subscript small letter K",8343:"Latin subscript small letter L",8344:"Latin subscript small letter M",8345:"Latin subscript small letter N",8346:"Latin subscript small letter P",8347:"Latin subscript small letter S",8348:"Latin subscript small letter T",8352:"Currency Symbols",8353:"COLON sign",8353:"costa rican currency",8353:"el salvadorian currency",8354:"brazilian currency",8354:"CRUZEIRO sign",8354:"brazilian currency",8355:"french currency",8355:"FRENCH FRANC sign",8356:"italian currency", +8356:"turkish currency",8356:"italian currency",8356:"LIRA sign",8356:"turkish currency",8357:"MILL sign",8358:"nigerian currency",8358:"NAIRA sign",8358:"nigerian currency",8359:"spanish currency",8359:"PESETA sign",8359:"spanish currency",8360:"indian currency",8360:"RUPEE sign",8361:"korean currency",8361:"WON sign",8362:"israeli currency",8362:"NEW SHEQEL sign",8363:"vietnamese currency",8363:"DONG sign",8363:"vietnamese currency",8364:"euro european currency",8364:"EURO sign",8365:"laotian currency", +8365:"KIP sign",8365:"laotian currency",8366:"mongolian currency",8366:"TUGRIK sign",8367:"greek currency",8367:"DRACHMA sign",8367:"greek currency",8368:"GERMAN PENNY sign",8369:"phillipine currency",8369:"PESO sign",8369:"phillipine currency",8370:"paraguayan currency",8370:"GUARANI sign",8370:"paraguayan currency",8371:"argentinian former currency",8371:"AUSTRAL sign",8371:"argentinian former currency",8372:"ukrainian currency",8372:"HRYVNIA sign",8372:"ukrainian currency",8373:"CEDI sign",8373:"ghana currency", +8374:"LIVRE TOURNOIS sign",8375:"SPESMILO sign",8376:"TENGE sign",8377:"INDIAN RUPEE sign",8400:"Combining left HARPOON above",8400:"Combining Diacritical Marks for Symbols",8400:"Combining left HARPOON above",8400:"Combining Diacritical Marks for Symbols",8400:"Combining left HARPOON above",8400:"Combining Left HARPOON above",8400:"Combining Diacritical Marks for Symbols",8400:"Diacritical Marks for Symbols",8401:"Combining right HARPOON above",8401:"Combining RIGHT HARPOON above",8401:"vector", +8402:"Combining long VERTICAL LINE OVERLAY",8403:"Combining SHORT VERTICAL LINE OVERLAY",8404:"Combining ANTICLOCKWISE ARROW above",8404:"combining counterclockwise arrow above",8404:"Combining ANTICLOCKWISE ARROW above",8404:"combining counterclockwise arrow above",8404:"Combining ANTICLOCKWISE ARROW above",8404:"combining counterclockwise arrow above",8405:"Combining CLOCKWISE ARROW above",8406:"Combining left ARROW above",8406:"Combining Left ARROW above",8407:"Combining right ARROW above",8407:"Combining RIGHT ARROW above", +8407:"vector",8408:"Combining ring OVERLAY",8409:"Combining CLOCKWISE ring OVERLAY",8410:"Combining ANTICLOCKWISE ring OVERLAY",8410:"combining counterclockwise ring overlay",8410:"Combining ANTICLOCKWISE ring OVERLAY",8410:"combining counterclockwise ring overlay",8410:"Combining ANTICLOCKWISE ring OVERLAY",8410:"combining counterclockwise ring overlay",8411:"Combining THREE DOTS above",8411:"third derivative",8411:"Combining THREE DOTS above",8411:"third derivative",8411:"Combining THREE DOTS above", +8412:"Combining FOUR DOTS above",8412:"fourth derivative",8412:"Combining FOUR DOTS above",8412:"fourth derivative",8413:"Combining enclosing CIRCLE",8413:"jis composition circle",8413:"Combining enclosing CIRCLE",8413:"jis composition circle",8413:"Enclosing Diacritics",8413:"Combining enclosing CIRCLE",8413:"Enclosing Diacritics",8413:"jis composition circle",8414:"Combining enclosing SQUARE",8415:"Combining enclosing DIAMOND",8416:"Combining enclosing CIRCLE BACKSLASH",8416:"no",8416:"prohibition", +8417:"Combining left right ARROW above",8417:"Combining Left right ARROW above",8417:"Combining left RIGHT ARROW above",8418:"Combining enclosing SCREEN",8419:"Combining enclosing KEYCAP",8420:"Combining enclosing UPWARD POINTING TRIANGLE",8421:"Combining REVERSE SOLIDUS OVERLAY",8421:"Combining Reverse SOLIDUS OVERLAY",8421:"Combining REVERSE SOLIDUS OVERLAY",8422:"Combining double VERTICAL stroke OVERLAY",8422:"finite function diacritic",8422:"Combining double VERTICAL stroke OVERLAY",8422:"finite function diacritic", +8422:"Combining double VERTICAL stroke OVERLAY",8423:"actuarial bend",8423:"Combining ANNUITY SYMBOL",8423:"actuarial bend",8423:"Combining ANNUITY SYMBOL",8424:"Combining TRIPLE UNDERDOT",8425:"Combining WIDE BRIDGE above",8425:"contraction operator",8425:"Combining WIDE BRIDGE above",8426:"Combining LEFTWARDS ARROW OVERLAY",8426:"Combining LeftWARDS ARROW OVERLAY",8426:"Combining LEFTWARDS ARROW OVERLAY",8427:"Combining long double SOLIDUS OVERLAY",8427:"long double slash overlay",8427:"Combining LONG double SOLIDUS OVERLAY", +8427:"long double slash overlay",8427:"Combining LONG double SOLIDUS OVERLAY",8427:"long double slash overlay",8427:"Combining LONG double SOLIDUS OVERLAY",8428:"Combining rightWARDS HARPOON with BARB DOWNWARDS",8428:"Combining RIGHTWARDS HARPOON with BARB DOWNWARDS",8429:"Combining LEFTWARDS HARPOON with BARB DOWNWARDS",8429:"Combining LeftWARDS HARPOON with BARB DOWNWARDS",8430:"Combining left ARROW below",8430:"Combining Left ARROW below",8431:"Combining right ARROW below",8431:"Combining RIGHT ARROW below", +8432:"Combining ASTERISK above",8448:"ACCOUNT OF",8448:"Letterlike Symbols",8449:"ADDRESSED TO THE SUBJECT",8450:"DOUBLE-STRUCK capital C",8450:"complex numbers",8450:"the set of complex numbers",8451:"DEGREE CELSIUS",8451:"degrees centigrade",8451:"DEGREE CELSIUS",8451:"degrees centigrade",8452:"CENTRE LINE SYMBOL",8452:"clone",8452:"CENTRE LINE SYMBOL",8453:"CARE OF",8454:"CADA UNA",8455:"EULER CONSTANT",8456:"SCRUPLE",8457:"DEGREE FAHRENHEIT",8458:"SCRIPT small G",8458:"real number symbol",8458:"SCRIPT small G", +8459:"SCRIPT capital H",8460:"BLACK-letter capital H",8460:"hilbert space",8461:"DOUBLE-STRUCK capital H",8462:"PLANCK CONSTANT",8463:"PLANCK CONSTANT OVER TWO PI",8464:"SCRIPT capital I",8465:"BLACK-letter capital I",8465:"imaginary part",8466:"SCRIPT capital L",8466:"laplace transform",8466:"SCRIPT capital L",8467:"SCRIPT small L",8467:"liter",8467:"SCRIPT small L",8468:"L B BAR SYMBOL",8468:"pounds",8469:"DOUBLE-STRUCK capital N",8469:"natural number",8470:"NUMERO sign",8471:"SOUND RECORDING COPYRIGHT", +8471:"phonorecord sign",8471:"published",8471:"SOUND RECORDING COPYRIGHT",8472:"weierstrass elliptic function",8472:"SCRIPT capital P",8472:"weierstrass elliptic function",8473:"DOUBLE-STRUCK capital P",8474:"rational numbers",8474:"DOUBLE-STRUCK capital Q",8474:"rational numbers",8474:"the set of rational numbers",8475:"riemann integral",8475:"SCRIPT capital R",8475:"riemann integral",8475:"SCRIPT capital R",8476:"BLACK-letter capital R",8476:"real part",8477:"real numbers",8477:"DOUBLE-STRUCK capital R", +8477:"real numbers",8477:"the set of real numbers",8478:"cross ratio",8478:"PRESCRIPTION TAKE",8478:"cross ratio",8478:"recipe",8478:"PRESCRIPTION TAKE",8479:"RESPONSE",8480:"SERVICE MARK",8481:"TELEPHONE sign",8482:"TRADE MARK sign",8483:"VERSICLE",8484:"integers",8484:"the set of integers",8484:"DOUBLE-STRUCK capital Z",8485:"OUNCE sign",8486:"OHM sign",8487:"INVERTED OHM sign",8487:"mho",8487:"INVERTED OHM sign",8488:"BLACK-letter capital Z",8489:"unique element",8489:"turned Greek small letter IOTA", +8489:"unique element",8490:"KELVIN sign",8491:"ANGSTROM sign",8492:"SCRIPT capital B",8492:"bernoulli function",8492:"SCRIPT capital B",8493:"BLACK-letter capital C",8494:"ESTIMATED SYMBOL",8495:"SCRIPT small E",8495:"error",8495:"natural exponent",8495:"SCRIPT small E",8496:"SCRIPT capital E",8496:"electromotive force",8496:"emf",8496:"SCRIPT capital E",8497:"SCRIPT capital F",8497:"fourier transform",8497:"SCRIPT capital F",8497:"fourier transform",8498:"claudian digamma inversum",8498:"turned capital F", +8499:"german mark pre-wwii",8499:"SCRIPT capital M",8499:"m-matrix",8499:"german mark pre-wwii",8499:"SCRIPT capital M",8500:"SCRIPT small O",8500:"order",8500:"SCRIPT small O",8501:"ALEF SYMBOL",8501:"first transfinite cardinal",8501:"first transfinite cardinal countable",8501:"Hebrew Letterlike Mathematical Symbols",8501:"first transfinite cardinal",8502:"BET SYMBOL",8502:"second transfinite cardinal",8502:"second transfinite cardinal continuum",8502:"second transfinite cardinal",8503:"third transfinite cardinal", +8503:"GIMEL SYMBOL",8503:"third transfinite cardinal",8504:"fourth transfinite cardinal",8504:"DALET SYMBOL",8504:"fourth transfinite cardinal",8505:"INFORMATION SOURCE",8506:"ROTATED capital Q",8507:"FACSIMILE sign",8508:"Double-struck Greek Letters",8508:"DOUBLE-STRUCK small PI",8509:"Double-struck Greek Letters",8509:"DOUBLE-STRUCK small GAMMA",8510:"DOUBLE-STRUCK capital GAMMA",8511:"DOUBLE-STRUCK capital PI",8512:"DOUBLE-STRUCK N-ARY SUMMATION",8513:"turned SANS-SERIF capital G",8513:"game", +8513:"turned SANS-SERIF capital G",8514:"turned SANS-SERIF capital L",8515:"reversed SANS-SERIF capital L",8516:"turned SANS-SERIF capital Y",8517:"DOUBLE-STRUCK ITALIC capital D",8517:"Double-struck Italic Mathematical Symbols",8518:"DOUBLE-STRUCK ITALIC small D",8519:"DOUBLE-STRUCK ITALIC small E",8520:"DOUBLE-STRUCK ITALIC small I",8521:"DOUBLE-STRUCK ITALIC small J",8522:"PROPERTY LINE",8523:"turned AMPERSAND",8524:"PER sign",8525:"AKTIESELSKAB",8526:"turned small F",8527:"SYMBOL FOR SAMARITAN SOURCE", +8528:"VULGAR FRACTION ONE SEVENTH",8528:"Number Forms",8528:"VULGAR FRACTION ONE SEVENTH",8529:"VULGAR FRACTION ONE NINTH",8530:"VULGAR FRACTION ONE TENTH",8531:"Fractions Thirds",8531:"Vulgar Fractions",8531:"Fractions Thirds",8531:"Vulgar Fractions",8533:"Fractions Fifths",8537:"Fractions Sixths",8539:"Fractions Eighths",8543:"FRACTION NUMERATOR ONE",8544:"Roman Numerals",8579:"claudian antisigma",8579:"apostrophic c",8579:"claudian antisigma",8580:"Latin small letter reversed C",8581:"Archaic Roman Numerals", +8592:"LEFTWARDS ARROW",8592:"Arrows",8592:"LeftWARDS ARROW",8593:"UPWARDS ARROW",8593:"egressive airflow",8593:"UPWARDS ARROW",8594:"rightWARDS ARROW",8594:"total function",8594:"RIGHTWARDS ARROW",8594:"total function",8595:"DOWNWARDS ARROW",8595:"ingressive airflow",8596:"relation",8606:"fast cursor left",8607:"fast cursor up",8608:"fast cursor right",8608:"total surjection",8609:"fast cursor down",8609:"form feed",8611:"total injection",8614:"maplet",8615:"depth symbol",8623:"electrolysis",8628:"line feed", +8632:"home",8633:"tab with shift tab",8636:"Harpoons",8653:"Double Arrows",8670:"page up",8671:"page down",8676:"leftward tab",8677:"rightward tab",8678:"Keyboard Symbols",8679:"shift",8682:"caps lock",8683:"level 2 lock",8684:"caps lock",8685:"numerics lock",8686:"level 3 select",8687:"level 3 lock",8688:"group lock",8689:"home",8690:"end",8691:"scrolling",8696:"partial function",8697:"partial relation",8699:"finite function",8700:"finite relation",8704:"FOR ALL",8704:"Mathematical Operators",8704:"universal quantifier", +8705:"COMPLEMENT",8706:"PARTIAL DIFFERENTIAL",8707:"existential quantifier",8707:"THERE EXISTS",8707:"existential quantifier",8707:"THERE EXISTS",8708:"THERE DOES NOT EXIST",8709:"EMPTY SET",8709:"null set",8709:"EMPTY SET",8709:"null set",8710:"forward difference",8710:"symmetric difference",8710:"forward difference",8710:"INCREMENT",8710:"laplace operator",8710:"symmetric difference",8711:"backward difference",8711:"del",8711:"backward difference",8711:"NABLA",8712:"ELEMENT OF",8712:"Set Membership Signs", +8713:"NOT AN ELEMENT OF",8714:"SMALL ELEMENT OF",8715:"CONTAINS AS MEMBER",8715:"such that",8716:"DOES NOT CONTAIN AS MEMBER",8717:"SMALL CONTAINS AS MEMBER",8717:"reversed straight epsilon",8717:"SMALL CONTAINS AS MEMBER",8718:"END OF PROOF",8718:"q.e.d.",8719:"N-ARY PRODUCT",8719:"product sign",8719:"N-ARY PRODUCT",8720:"coproduct sign",8720:"N-ARY COPRODUCT",8721:"N-ARY SUMMATION",8721:"summation sign",8721:"N-ARY SUMMATION",8722:"MINUS sign",8723:"MINUS-OR-PLUS sign",8724:"DOT PLUS",8725:"DIVISION SLASH", +8726:"SET MINUS",8727:"ASTERISK OPERATOR",8728:"apl jot",8728:"composite function",8728:"apl jot",8728:"ring OPERATOR",8729:"BULLET OPERATOR",8730:"radical sign",8730:"SQUARE ROOT",8731:"CUBE ROOT",8732:"FOURTH ROOT",8733:"PROPORTIONAL TO",8734:"INFINITY",8735:"right ANGLE",8735:"Angles",8735:"RIGHT ANGLE",8736:"ANGLE",8737:"MEASURED ANGLE",8738:"angle arc",8738:"SPHERICAL ANGLE",8738:"angle arc",8738:"SPHERICAL ANGLE",8739:"apl stile",8739:"DIVIDES",8739:"Vertical Lines",8739:"apl stile",8739:"such that", +8739:"Vertical Lines",8740:"DOES NOT DIVIDE",8741:"PARALLEL TO",8742:"NOT PARALLEL TO",8743:"LOGICAL AND",8743:"conjunction",8743:"LOGICAL AND",8743:"wedge",8744:"disjunction",8744:"LOGICAL OR",8744:"vee",8745:"cap",8745:"hat",8745:"INTERSECTION",8746:"cup",8746:"UNION",8747:"INTEGRAL",8747:"Integral Signs",8748:"DOUBLE INTEGRAL",8749:"TRIPLE INTEGRAL",8750:"CONTOUR INTEGRAL",8751:"SURFACE INTEGRAL",8752:"VOLUME INTEGRAL",8753:"CLOCKWISE INTEGRAL",8754:"CLOCKWISE CONTOUR INTEGRAL",8755:"ANTICLOCKWISE CONTOUR INTEGRAL", +8755:"counterclockwise contour integral",8755:"ANTICLOCKWISE CONTOUR INTEGRAL",8755:"counterclockwise contour integral",8756:"Dotted Mathematical Operators",8756:"THEREFORE",8757:"BECAUSE",8758:"RATIO",8759:"PROPORTION",8760:"symmetric difference",8760:"DOT MINUS",8760:"saturating subtraction",8760:"symmetric difference",8761:"EXCESS",8762:"GEOMETRIC PROPORTION",8763:"HOMOTHETIC",8763:"Tilde Mathematical Operators",8764:"apl tilde",8764:"cycle",8764:"difference between",8764:"not",8764:"proportional to", +8764:"similar to",8764:"TILDE OPERATOR",8764:"apl tilde",8764:"varies with",8765:"lazy s",8765:"reversed TILDE",8765:"lazy s",8765:"reversed TILDE",8766:"INVERTED LAZY S",8766:"most positive",8766:"INVERTED LAZY S",8767:"alternating current",8767:"SINE WAVE",8768:"WREATH PRODUCT",8769:"NOT TILDE",8770:"MINUS TILDE",8771:"ASYMPTOTICALLY EQUAL TO",8771:"Equality and Inequality Signs",8772:"NOT ASYMPTOTICALLY EQUAL TO",8773:"APPROXIMATELY EQUAL TO",8776:"ALMOST EQUAL TO",8776:"asymptotic to",8776:"ALMOST EQUAL TO", +8777:"NOT ALMOST EQUAL TO",8779:"TRIPLE TILDE",8780:"ALL EQUAL TO",8781:"EQUIVALENT TO",8782:"GEOMETRICALLY EQUIVALENT TO",8783:"DIFFERENCE BETWEEN",8784:"APPROACHES THE LIMIT",8785:"GEOMETRICALLY EQUAL TO",8786:"nearly equals",8788:"COLON EQUALS",8789:"EQUALS COLON",8790:"ring IN EQUAL TO",8791:"approximately equal to",8791:"ring EQUAL TO",8792:"CORRESPONDS TO",8793:"corresponds to",8793:"ESTIMATES",8794:"EQUIANGULAR TO",8795:"STAR EQUALS",8796:"equal to by definition",8796:"DELTA EQUAL TO",8796:"equal to by definition", +8796:"DELTA EQUAL TO",8796:"equiangular",8797:"EQUAL TO BY DEFINITION",8798:"MEASURED BY",8799:"QUESTIONED EQUAL TO",8800:"NOT EQUAL TO",8801:"IDENTICAL TO",8802:"NOT IDENTICAL TO",8803:"STRICTLY EQUIVALENT TO",8804:"LESS-THAN OR EQUAL TO",8805:"GREATER-THAN OR EQUAL TO",8810:"MUCH LESS-THAN",8811:"MUCH GREATER-THAN",8812:"BETWEEN",8812:"plaintiff",8812:"quantic",8826:"lower rank than",8826:"Order Relation Precedence Signs",8826:"PRECEDES",8827:"higher rank than",8827:"SUCCEEDS",8834:"included in set", +8834:"SUBSET OF",8834:"Superset and Subset Signs",8835:"includes in set",8835:"SUPERSET OF",8836:"NOT A SUBSET OF",8837:"NOT A SUPERSET OF",8844:"MULTISET",8845:"MULTISET MULTIPLICATION",8846:"bag addition",8846:"MULTISET UNION",8847:"SQUARE IMAGE OF",8848:"SQUARE ORIGINAL OF",8851:"SQUARE CAP",8852:"SQUARE CUP",8853:"CIRCLED PLUS",8853:"direct sum",8853:"Enclosed Mathematical Operators",8853:"CIRCLED PLUS",8853:"direct sum",8853:"vector pointing into page",8854:"CIRCLED MINUS",8854:"symmetric difference", +8854:"CIRCLED MINUS",8854:"symmetric difference",8855:"CIRCLED TIMES",8855:"tensor product",8855:"CIRCLED TIMES",8855:"vector pointing into page",8856:"CIRCLED DIVISION SLASH",8857:"CIRCLED DOT OPERATOR",8857:"direct product",8857:"CIRCLED DOT OPERATOR",8857:"direct product",8857:"vector pointing out of page",8858:"CIRCLED ring OPERATOR",8859:"CIRCLED ASTERISK OPERATOR",8860:"CIRCLED EQUALS",8861:"CIRCLED DASH",8862:"SQUARED PLUS",8863:"SQUARED MINUS",8864:"SQUARED TIMES",8865:"SQUARED DOT OPERATOR", +8866:"implies",8866:"proves",8866:"reducible",8866:"RIGHT TACK",8866:"right TACK",8866:"Tacks and Turnstiles",8866:"turnstile",8866:"Tacks and Turnstiles",8866:"yields",8867:"does not yield",8867:"Left TACK",8867:"non-theorem",8867:"does not yield",8867:"reverse turnstile",8867:"LEFT TACK",8867:"reverse turnstile",8867:"does not yield",8868:"DOWN TACK",8868:"top",8869:"base",8869:"bottom",8869:"orthogonal to",8869:"perpendicular",8869:"UP TACK",8870:"ASSERTION",8870:"reduces to",8871:"MODELS",8872:"results in", +8872:"satisfies",8872:"statement is true",8872:"tautology",8872:"TRUE",8872:"valid",8873:"FORCES",8880:"PRECEDES UNDER RELATION",8881:"SUCCEEDS UNDER RELATION",8882:"NORMAL SUBGROUP OF",8883:"CONTAINS AS NORMAL SUBGROUP",8886:"ORIGINAL OF",8887:"IMAGE OF",8888:"MULTIMAP",8889:"HERMITIAN CONJUGATE MATRIX",8890:"INTERCALATE",8891:"XOR",8892:"NAND",8893:"NOR",8894:"right ANGLE with ARC",8894:"RIGHT ANGLE with ARC",8895:"RIGHT TRIANGLE",8895:"right TRIANGLE",8896:"N-ARY LOGICAL AND",8896:"N-ary Operators", +8897:"N-ARY LOGICAL OR",8898:"generalized intersection",8898:"N-ARY INTERSECTION",8899:"generalized union",8899:"N-ARY UNION",8899:"generalized union",8899:"N-ARY UNION",8900:"DIAMOND OPERATOR",8901:"DOT OPERATOR",8902:"STAR OPERATOR",8903:"DIVISION TIMES",8904:"BOWTIE",8905:"Left NORMAL FACTOR SEMIDIRECT PRODUCT",8905:"LEFT NORMAL FACTOR SEMIDIRECT PRODUCT",8906:"right NORMAL FACTOR SEMIDIRECT PRODUCT",8906:"RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT",8906:"right NORMAL FACTOR SEMIDIRECT PRODUCT",8907:"Left SEMIDIRECT PRODUCT", +8907:"LEFT SEMIDIRECT PRODUCT",8908:"right SEMIDIRECT PRODUCT",8908:"RIGHT SEMIDIRECT PRODUCT",8908:"right SEMIDIRECT PRODUCT",8909:"reversed TILDE EQUALS",8910:"CURLY LOGICAL OR",8911:"CURLY LOGICAL AND",8912:"Double Operators",8912:"DOUBLE SUBSET",8912:"Double Operators",8912:"DOUBLE SUBSET",8913:"DOUBLE SUPERSET",8914:"DOUBLE INTERSECTION",8915:"DOUBLE UNION",8916:"proper intersection",8916:"PITCHFORK",8916:"proper intersection",8917:"Equality and Inequality Signs",8920:"VERY MUCH LESS-THAN",8921:"VERY MUCH GREATER-THAN", +8926:"Order Relation Precedence Signs",8938:"Normal Subgroup Signs",8942:"VERTICAL ELLIPSIS",8943:"MIDLINE HORIZONTAL ELLIPSIS",8944:"UP right DIAGONAL ELLIPSIS",8944:"UP RIGHT DIAGONAL ELLIPSIS",8944:"UP right DIAGONAL ELLIPSIS",8945:"DOWN right DIAGONAL ELLIPSIS",8945:"DOWN RIGHT DIAGONAL ELLIPSIS",8959:"Z NOTATION BAG MEMBERSHIP",8960:"DIAMETER sign",8960:"Miscellaneous Technical",8961:"ELECTRIC ARROW",8961:"end of transmission symbol",8962:"HOUSE",8963:"UP ARROWHEAD",8964:"DOWN ARROWHEAD",8965:"PROJECTIVE", +8966:"PERSPECTIVE",8967:"WAVY LINE",8968:"apl upstile",8968:"Corner Brackets",8968:"LEFT CEILING",8968:"Corner Brackets",8968:"Left CEILING",8968:"apl upstile",8969:"right CEILING",8969:"RIGHT CEILING",8970:"apl downstile",8970:"LEFT FLOOR",8970:"Left FLOOR",8971:"right FLOOR",8971:"RIGHT FLOOR",8972:"Crops",8976:"beginning of line",8976:"reversed NOT sign",8977:"kissen",8977:"SQUARE LOZENGE",8977:"pillow",8977:"SQUARE LOZENGE",8978:"ARC",8979:"SEGMENT",8980:"SECTOR",8981:"TELEPHONE RECORDER",8982:"POSITION INDICATOR", +8983:"VIEWDATA SQUARE",8984:"command key",8984:"PLACE OF INTEREST sign",8984:"command key",8984:"PLACE OF INTEREST sign",8985:"line marker",8985:"turned NOT sign",8986:"WATCH",8987:"HOURGLASS",8988:"Quine Corners",8992:"TOP half INTEGRAL",8993:"BOTTOM half INTEGRAL",8994:"FROWN",8995:"SMILE",8996:"enter key",8996:"Keyboard Symbols",8997:"OPTION KEY",8998:"delete to the right key",8998:"ERASE TO THE right",8998:"delete to the right key",8998:"ERASE TO THE RIGHT",8999:"X IN A RECTANGLE BOX",8999:"clear key", +8999:"X IN A RECTANGLE BOX",9E3:"KEYBOARD",9001:"LEFT-POINTING ANGLE BRACKET",9001:"Left-POINTING ANGLE BRACKET",9002:"right-POINTING ANGLE BRACKET",9002:"RIGHT-POINTING ANGLE BRACKET",9003:"delete to the left key",9003:"ERASE TO THE LEFT",9003:"delete to the left key",9003:"ERASE TO THE Left",9004:"BENZENE ring",9005:"CYLINDRICITY",9005:"Drafting Symbols",9006:"ALL AROUND-PROFILE",9007:"SYMMETRY",9008:"TOTAL RUNOUT",9009:"DIMENSION ORIGIN",9010:"CONICAL TAPER",9011:"SLOPE",9012:"COUNTERBORE",9013:"COUNTERSINK", +9014:"APL Functional Symbols",9060:"hoot",9061:"holler",9064:"smirk",9083:"NOT CHECK MARK",9085:"SHOULDERED OPEN BOX",9085:"Graphics for Control Codes",9085:"keyboard symbol for no break space",9085:"SHOULDERED OPEN BOX",9085:"keyboard symbol for no break space",9086:"BELL SYMBOL",9087:"VERTICAL LINE with MIDDLE DOT",9087:"symbol for end of medium",9087:"VERTICAL LINE with MIDDLE DOT",9087:"VERTICAL LINE with middle dot",9088:"INSERTION SYMBOL",9088:"Keyboard Symbols",9089:"CONTINUOUS UNDERLINE SYMBOL", +9090:"DISCONTINUOUS UNDERLINE SYMBOL",9091:"EMPHASIS SYMBOL",9092:"COMPOSITION SYMBOL",9093:"center",9094:"ENTER SYMBOL",9095:"ALTERNATIVE KEY SYMBOL",9096:"control",9096:"HELM SYMBOL",9097:"pause",9098:"interrupt",9099:"escape",9100:"UNDO SYMBOL",9101:"Electrotechnical Symbols",9101:"MONOSTABLE SYMBOL",9101:"Electrotechnical Symbols",9102:"HYSTERESIS SYMBOL",9107:"DIRECT CURRENT SYMBOL FORM TWO",9108:"SOFTWARE-FUNCTION SYMBOL",9110:"DECIMAL SEPARATOR KEY SYMBOL",9110:"Keyboard Symbols",9110:"DECIMAL SEPARATOR KEY SYMBOL", +9110:"Keyboard Symbols",9111:"PREVIOUS PAGE",9112:"NEXT PAGE",9113:"PRINT SCREEN SYMBOL",9114:"CLEAR SCREEN SYMBOL",9115:"Bracket Pieces",9136:"Bracket Pieces",9136:"left moustache",9137:"right moustache",9138:"Summation Sign Parts",9140:"Vertical Brackets",9143:"Terminal Graphic Characters",9146:"Horizontal Scan Lines",9150:"Dentistry Notation Symbols",9165:"SQUARE FOOT",9166:"RETURN SYMBOL",9167:"eject media",9169:"Metrical Symbols",9178:"EARTH GROUND",9179:"FUSE",9180:"Bracket Variants for Vertical Text", +9186:"WHITE TRAPEZIUM",9188:"STRAIGHTNESS",9189:"FLATNESS",9190:"AC CURRENT",9191:"ELECTRICAL INTERSECTION",9192:"DECIMAL EXPONENT SYMBOL",9193:"Double Triangles",9193:"fast forward",9193:"Double Triangles",9194:"fast rewind",9200:"ALARM CLOCK",9201:"STOPWATCH",9202:"TIMER CLOCK",9203:"HOURGLASS with FLOWING SAND",9216:"Graphic Pictures for Control Codes",9216:"SYMBOL FOR NULL",9216:"Graphic Pictures for Control Codes",9217:"SYMBOL FOR START OF HEADING",9218:"SYMBOL FOR START OF TEXT",9219:"SYMBOL FOR END OF TEXT", +9220:"SYMBOL FOR END OF TRANSMISSION",9221:"SYMBOL FOR ENQUIRY",9222:"SYMBOL FOR ACKNOWLEDGE",9223:"SYMBOL FOR BELL",9224:"SYMBOL FOR BACKSPACE",9225:"SYMBOL FOR HORIZONTAL TABULATION",9226:"SYMBOL FOR LINE FEED",9227:"SYMBOL FOR VERTICAL TABULATION",9228:"SYMBOL FOR FORM FEED",9229:"SYMBOL FOR CARRIAGE RETURN",9230:"SYMBOL FOR SHIFT OUT",9231:"SYMBOL FOR SHIFT IN",9232:"SYMBOL FOR DATA LINK ESCAPE",9233:"Symbols for Device Controls",9237:"SYMBOL FOR NEGATIVE ACKNOWLEDGE",9238:"SYMBOL FOR SYNCHRONOUS IDLE", +9239:"SYMBOL FOR END OF TRANSMISSION BLOCK",9240:"SYMBOL FOR CANCEL",9241:"SYMBOL FOR END OF MEDIUM",9242:"SYMBOL FOR SUBSTITUTE",9243:"SYMBOL FOR ESCAPE",9244:"SYMBOL FOR FILE SEPARATOR",9245:"SYMBOL FOR GROUP SEPARATOR",9246:"SYMBOL FOR RECORD SEPARATOR",9247:"SYMBOL FOR UNIT SEPARATOR",9248:"SYMBOL FOR SPACE",9249:"SYMBOL FOR DELETE",9250:"BLANK SYMBOL",9251:"OPEN BOX",9251:"graphic for space",9252:"SYMBOL FOR NEWLINE",9253:"SYMBOL FOR DELETE FORM TWO",9254:"SYMBOL FOR SUBSTITUTE FORM TWO",9280:"Optical Character Recognition OCR", +9280:"OCR Optical Character Recognition",9312:"Enclosed Alphanumerics",9312:"Circled Numbers",9312:"Enclosed Alphanumerics",9312:"Circled Numbers",9332:"Parenthesized Numbers",9352:"Numbers Followed by Period",9372:"Parenthesized Latin Letters",9398:"Circled Latin Letters",9450:"CIRCLED DIGIT ZERO",9451:"White on Black Circled Numbers",9461:"Double Circled Numbers",9472:"Box Drawing",9472:"Form and Chart Components",9600:"Block Elements",9608:"FULL BLOCK",9608:"solid",9617:"Shade Characters",9622:"Terminal Graphic Characters", +9632:"Geometric Shapes",9632:"Squares",9633:"quadrature",9644:"Rectangles",9646:"histogram marker",9648:"BLACK PARALLELOGRAM",9650:"Triangles",9651:"trine",9655:"range restriction",9658:"Pointers",9659:"forward arrow indicator",9661:"hamilton operator",9665:"domain restriction",9669:"backward arrow indicator",9670:"Diamonds",9673:"tainome japanese bullet",9673:"FISHEYE",9673:"tainome japanese bullet",9674:"LOZENGE",9675:"WHITE CIRCLE",9675:"Circles",9675:"WHITE CIRCLE",9676:"DOTTED CIRCLE",9678:"BULLSEYE", +9679:"BLACK CIRCLE",9692:"Arcs",9702:"WHITE BULLET",9711:"LARGE CIRCLE",9712:"Quadrant Control Code Graphics",9723:"always",9724:"BLACK MEDIUM SQUARE",9726:"BLACK MEDIUM small SQUARE",9728:"Weather and Astrological Symbols",9728:"BLACK SUN with RAYS",9728:"clear weather",9728:"Miscellaneous Dingbats",9728:"Weather Dingbats",9728:"BLACK SUN with RAYS",9728:"Miscellaneous Symbols",9728:"Weather and Astrological Symbols",9728:"clear weather",9729:"CLOUD",9729:"cloudy weather",9730:"rainy weather",9730:"UMBRELLA", +9730:"rainy weather",9731:"SNOWMAN",9731:"snowy weather",9732:"COMET",9733:"BLACK STAR",9734:"WHITE STAR",9735:"LIGHTNING",9736:"THUNDERSTORM",9737:"SUN",9738:"ASCENDING NODE",9739:"DESCENDING NODE",9740:"CONJUNCTION",9741:"OPPOSITION",9742:"BLACK TELEPHONE",9743:"WHITE TELEPHONE",9744:"BALLOT BOX",9745:"BALLOT BOX with CHECK",9746:"BALLOT BOX with X",9747:"st. andrews cross",9747:"SALTIRE",9747:"st. andrews cross",9748:"UMBRELLA with RAIN DROPS",9748:"showery weather",9748:"UMBRELLA with RAIN DROPS", +9748:"showery weather",9749:"HOT BEVERAGE",9749:"cup of coffee",9749:"cup of tea",9749:"HOT BEVERAGE",9749:"cup of tea",9750:"Japanese Chess Symbols",9750:"WHITE SHOGI PIECE",9750:"Japanese Chess Symbols",9750:"WHITE SHOGI PIECE",9751:"BLACK SHOGI PIECE",9752:"SHAMROCK",9753:"reversed ROTATED FLORAL HEART BULLET",9754:"BLACK left POINTING INDEX",9754:"Pointing Index Finger Dingbats",9754:"Pointing Hand Symbols",9754:"Pointing Index Finger Dingbats",9754:"BLACK left POINTING INDEX",9754:"BLACK Left POINTING INDEX", +9754:"Pointing Hand Symbols",9754:"Pointing Index Finger Dingbats",9754:"BLACK left POINTING INDEX",9754:"Pointing Hand Symbols",9755:"BLACK right POINTING INDEX",9755:"BLACK RIGHT POINTING INDEX",9756:"WHITE left POINTING INDEX",9756:"WHITE Left POINTING INDEX",9756:"WHITE left POINTING INDEX",9757:"WHITE UP POINTING INDEX",9758:"fist",9758:"WHITE right POINTING INDEX",9758:"WHITE RIGHT POINTING INDEX",9758:"WHITE right POINTING INDEX",9759:"WHITE DOWN POINTING INDEX",9760:"Hazard Dingbats",9760:"Warning Dingbats", +9760:"Hazard Dingbats",9760:"jolly roger",9760:"poison",9760:"Warning Signs",9760:"SKULL and CROSSBONES",9760:"Warning Signs",9761:"CAUTION sign",9762:"RADIOACTIVE sign",9763:"BIOHAZARD sign",9764:"CADUCEUS",9765:"ANKH",9765:"Religious and Political Symbols",9766:"ORTHODOX CROSS",9766:"Religious and Political Symbols",9767:"CHI RHO",9767:"christogram",9767:"constantines cross",9768:"CROSS OF LORRAINE",9769:"CROSS OF JERUSALEM",9770:"STAR and CRESCENT",9772:"ADI SHAKTI",9772:"gurmukhi khanda",9773:"HAMMER and SICKLE", +9774:"PEACE SYMBOL",9775:"YIN YANG",9776:"I Ching / Yijing Trigram Symbols",9776:"Yijing / I Ching Trigram Symbols",9784:"WHEEL OF DHARMA",9785:"WHITE FROWNING FACE",9786:"WHITE SMILING FACE",9786:"have a nice day!",9786:"WHITE SMILING FACE",9787:"BLACK SMILING FACE",9788:"compass",9788:"WHITE SUN with RAYS",9789:"Astrological Symbols",9789:"FIRST QUARTER MOON",9789:"Astrological Symbols",9790:"LAST QUARTER MOON",9791:"MERCURY",9791:"Planet Symbols",9792:"FEMALE sign",9792:"venus",9793:"EARTH",9794:"MALE sign", +9794:"mars",9795:"JUPITER",9796:"SATURN",9797:"URANUS",9798:"NEPTUNE",9799:"PLUTO",9800:"ARIES",9800:"Zodiacal Symbols",9801:"TAURUS",9802:"GEMINI",9803:"CANCER",9804:"LEO",9805:"minim alternate glyph",9805:"VIRGO",9806:"LIBRA",9807:"drop",9807:"minim",9807:"SCORPIUS",9808:"SAGITTARIUS",9809:"CAPRICORN",9810:"AQUARIUS",9811:"PISCES",9812:"Chess Symbols",9824:"Playing Card Suits",9824:"Playing Card Symbols",9827:"shamrock",9829:"valentine",9832:"HOT SPringS",9833:"crotchet",9833:"Music Dingbats",9833:"Basic Musical Symbols", +9833:"QUARTER NOTE",9833:"Basic Musical Symbols",9834:"EIGHTH NOTE",9834:"quaver",9835:"BEAMED EIGHTH NOTES",9835:"beamed quavers",9835:"BEAMED EIGHTH NOTES",9835:"beamed quavers",9836:"beamed semiquavers",9836:"BEAMED SIXTEENTH NOTES",9836:"beamed semiquavers",9836:"BEAMED SIXTEENTH NOTES",9837:"MUSIC FLAT sign",9838:"MUSIC NATURAL sign",9839:"infix bag count",9839:"MUSIC SHARP sign",9840:"WEST SYRIAC CROSS",9841:"EAST SYRIAC CROSS",9842:"UNIVERSAL RECYCLING SYMBOL",9842:"Recycling Symbols",9842:"UNIVERSAL RECYCLING SYMBOL", +9843:"Plastics Recycling Symbols",9852:"RECYCLED PAPER SYMBOL",9853:"PARTIALLY-RECYCLED PAPER SYMBOL",9853:"PARTIALLY- RECYCLED PAPER SYMBOL",9854:"PERMANENT PAPER sign",9855:"WHEELCHAIR SYMBOL",9856:"Dice",9862:"Go Markers",9866:"Yijing / I Ching Monogram and Digram Symbols",9866:"I Ching / Yijing Monogram and Digram Symbols",9866:"Yijing / I Ching Monogram and Digram Symbols",9866:"I Ching / Yijing Monogram and Digram Symbols",9866:"Yijing / I Ching Monogram and Digram Symbols",9872:"Dictionary and Map Symbols", +9872:"WHITE FLAG",9872:"Dictionary and Map Symbols",9872:"WHITE FLAG",9873:"BLACK FLAG",9874:"HAMMER and PICK",9874:"mining symbol",9874:"working day symbol",9875:"ANCHOR",9875:"harbor symbol",9876:"battleground symbol",9876:"CROSSED SWORDS",9877:"STAFF OF AESCULAPIUS",9878:"jurisprudence symbol",9878:"SCALES",9879:"ALEMBIC",9881:"GEAR",9882:"STAFF OF HERMES",9883:"ATOM SYMBOL",9884:"FLEUR-DE-LIS",9888:"Warning Signs",9888:"WARNING sign",9889:"HIGH VOLTAGE sign",9889:"lightning",9889:"thunder",9889:"HIGH VOLTAGE sign", +9890:"Gender Symbols",9898:"MEDIUM WHITE CIRCLE",9899:"MEDIUM BLACK CIRCLE",9900:"MEDIUM small WHITE CIRCLE",9901:"Genealogical Symbols",9901:"MARRIAGE SYMBOL",9901:"Genealogical Symbols",9902:"DIVORCE SYMBOL",9903:"UNMARRIED PARTNERSHIP SYMBOL",9904:"buried symbol",9904:"COFFIN",9905:"cremated symbol",9905:"FUNERAL URN",9906:"NEUTER",9907:"Astrological Signs",9917:"SOCCER BALL",9918:"BASEBALL",9919:"SQUARED KEY",9919:"parental lock",9920:"Symbols for Draughts and Checkers",9924:"light snow",9924:"SNOWMAN WITHOUT SNOW", +9925:"partly cloudy",9925:"SUN BEHIND CLOUD",9926:"RAIN",9927:"heavy snow",9927:"BLACK SNOWMAN",9928:"thunderstorm",9929:"turned WHITE SHOGI PIECE",9930:"turned BLACK SHOGI PIECE",9932:"accident",9933:"DISABLED CAR",9934:"OPHIUCHUS",9935:"construction",9935:"PICK",9936:"CAR SLIDING",9936:"icy road",9937:"HELMET with WHITE CROSS",9938:"CIRCLED CROSSING LANES",9938:"road closed",9939:"CHAINS",9940:"do not enter",9940:"NO ENTRY",9946:"DRIVE SLOW sign",9947:"yield",9951:"black lorry",9951:"BLACK TRUCK", +9954:"uranus",9956:"PENTAGRAM",9956:"pentangle pentalpha",9960:"hospital",9960:"BLACK CROSS ON SHIELD",9961:"SHINTO SHRINE",9961:"torii",9962:"CHURCH",9963:"CASTLE",9964:"HISTORIC SITE",9965:"factory",9966:"power plant",9967:"MAP SYMBOL FOR LIGHTHOUSE",9968:"MOUNTAIN",9969:"bathing beach",9969:"UMBRELLA ON GROUND",9970:"FOUNTAIN",9970:"park",9971:"FLAG IN HOLE",9971:"golf course",9972:"boat terminal",9972:"FERRY",9972:"marina or yacht harbour",9972:"SAILBOAT",9974:"SQUARE FOUR CORNERS",9975:"SKIER", +9976:"ICE SKATE",9978:"camping site",9978:"TENT",9980:"cemetery",9980:"graveyard",9980:"HEADSTONE GRAVEYARD SYMBOL",9981:"FUEL PUMP",9981:"gas station",9981:"petrol station",9982:"CUP ON BLACK SQUARE",9982:"drive-in restaurant",9984:"Dingbats",9984:"ITC Zapf Dingbats Series 100",9984:"Zapf Dingbats",9984:"ITC Zapf Dingbats Series 100",9985:"Scissors Dingbats",9985:"UPPER BLADE SCISSORS",9986:"BLACK SCISSORS",9988:"WHITE SCISSORS",9990:"TELEPHONE LOCATION sign",9991:"TAPE DRIVE",9992:"AIRPLANE",9993:"ENVELOPE", +9994:"RAISED FIST",9994:"paper, scissors game rock in rock",9995:"RAISED HAND",9995:"paper, scissors game paper in rock",9996:"VICTORY HAND",9996:"paper, scissors game scissors in rock",9996:"VICTORY HAND",9997:"WRITING HAND",9998:"Pencil Dingbats",9998:"LOWER right PENCIL",9998:"LOWER RIGHT PENCIL",9999:"PENCIL",1E4:"UPPER right PENCIL",1E4:"UPPER RIGHT PENCIL",1E4:"UPPER right PENCIL",10001:"WHITE NIB",10002:"BLACK NIB",10003:"CHECK MARK",10004:"HEAVY CHECK MARK",10005:"MULTIPLICATION X",10006:"HEAVY MULTIPLICATION X", +10007:"BALLOT X",10008:"HEAVY BALLOT X",10009:"Cross Dingbats",10009:"Crosses",10009:"Cross Dingbats",10013:"Latin CROSS",10016:"MALTESE CROSS",10017:"STAR OF DAVID",10017:"Snowflakes",10017:"STAR OF DAVID",10017:"Stars",10018:"Asterisk Dingbats",10022:"Star Dingbats",10024:"SPARKLES",10038:"sextile",10042:"starburst",10052:"Snowflake Dingbats",10055:"SPARKLE",10056:"HEAVY SPARKLE",10057:"jack",10059:"turbofan",10060:"CROSS MARK",10061:"SHADOWED WHITE CIRCLE",10061:"Drop-shadowed Dingbats",10061:"SHADOWED WHITE CIRCLE", +10062:"NEGATIVE SQUARED NEGATIVE SQUARED CROSS MARK",10067:"BLACK Question Mark ORNAMENT",10068:"WHITE Question Mark ORNAMENT",10069:"WHITE EXCLAMATION MARK ORNAMENT",10072:"Vertical Bar Dingbats",10075:"Quotation Mark Dingbats",10075:"Punctuation Ornaments",10075:"Quotation Mark Ornaments",10075:"Punctuation Ornaments",10075:"Quotation Mark Dingbats",10075:"Quotation Mark Ornaments",10081:"CURVED STEM PARAGRAPH sign ORNAMENT",10082:"HEAVY EXCLAMATION MARK ORNAMENT",10083:"Heart Dingbats",10083:"Heart Ornaments", +10086:"aldus leaf",10087:"hedera",10087:"ivy leaf",10088:"Ornamental Brackets",10094:"Ornamental Angle Quotation Marks",10102:"Dingbat Circled Digits",10102:"Circled Inverse Numbers",10102:"Dingbat Circled Digits",10102:"Circled Inverse Numbers",10132:"Arrow Dingbats",10132:"Dingbat Arrows",10132:"Arrow Dingbats",10160:"CURLY LOOP",10175:"DOUBLE CURLY LOOP",10176:"Mathematical Symbols",10176:"Miscellaneous Mathematical Symbols-A",10176:"Mathematical Symbols",10176:"Miscellaneous Mathematical Symbols-A", +10188:"LONG DIVISION",10195:"pullback",10196:"pushout",10197:"Database Theory Operators",10200:"Modal Logic Operators",10200:"Tacks and Turnstiles",10207:"radial component",10208:"Modal Logic Operators",10214:"left bag bracket",10214:"Mathematical Brackets",10214:"left bag bracket",10214:"Mathematical Brackets",10215:"right bag bracket",10216:"MATHEMATICAL left ANGLE BRACKET",10216:"bra",10216:"left sequence bracket",10216:"MATHEMATICAL Left ANGLE BRACKET",10216:"left sequence bracket",10217:"MATHEMATICAL right ANGLE BRACKET", +10217:"right sequence bracket",10217:"ket",10217:"MATHEMATICAL RIGHT ANGLE BRACKET",10217:"right sequence bracket",10218:"MATHEMATICAL left double ANGLE BRACKET",10218:"left chevron bracket",10218:"MATHEMATICAL left double ANGLE BRACKET",10218:"left chevron bracket",10218:"MATHEMATICAL left double ANGLE BRACKET",10218:"left chevron bracket",10218:"MATHEMATICAL Left double ANGLE BRACKET",10219:"MATHEMATICAL right double ANGLE BRACKET",10219:"right chevron bracket",10219:"MATHEMATICAL right double ANGLE BRACKET", +10219:"right chevron bracket",10219:"MATHEMATICAL RIGHT double ANGLE BRACKET",10222:"lgroup",10223:"rgroup",10224:"Arrows-A Supplement",10229:"Long Arrows",10235:"maps from",10236:"maps to",10240:"Braille Patterns",10496:"Supplemental Arrows-B",10496:"partial surjection",10496:"Supplemental Arrows-B",10496:"partial surjection",10497:"finite surjection",10501:"maps to",10502:"maps from",10503:"maps to",10516:"partial injection",10517:"finite injection",10518:"bijection",10519:"surjective injection", +10520:"finite surjective injection",10570:"Miscellaneous Harpoons",10620:"Fish Tails",10624:"Mathematical Symbols",10624:"Miscellaneous Mathematical Symbols-B",10624:"Mathematical Symbols",10624:"Miscellaneous Mathematical Symbols-B",10624:"TRIPLE VERTICAL BAR DELIMITER",10625:"Z NOTATION SPOT",10626:"Z NOTATION TYPE COLON",10627:"LEFT WHITE CURLY BRACKET",10627:"Brackets",10627:"LEFT WHITE CURLY BRACKET",10627:"Left WHITE CURLY BRACKET",10627:"LEFT WHITE CURLY BRACKET",10628:"right WHITE CURLY BRACKET", +10628:"RIGHT WHITE CURLY BRACKET",10628:"right WHITE CURLY BRACKET",10629:"Left WHITE PARENTHESIS",10629:"LEFT WHITE PARENTHESIS",10630:"right WHITE PARENTHESIS",10630:"RIGHT WHITE PARENTHESIS",10630:"right WHITE PARENTHESIS",10649:"DOTTED FENCE",10649:"Fences",10651:"Angles and Measured Angles",10672:"Empty Sets",10677:"Circle Symbols",10692:"Square Symbols",10698:"Triangle Symbols",10705:"Bowtie Symbols",10710:"vertical bowtie",10710:"white framus",10710:"vertical bowtie",10710:"white framus",10711:"BLACK HOURGLASS", +10712:"Wiggly Fences",10716:"isotech entity ⧜",10720:"dalembertian",10722:"SHUFFLE PRODUCT",10723:"Relational Operators",10726:"tautological equivalent",10726:"GLEICH STARK",10726:"tautological equivalent",10727:"THERMODYNAMIC",10731:"BLACK LOZENGE",10734:"Error Bar Symbols",10740:"colon right arrow",10740:"RULE-DELAYED",10741:"Reverse SOLIDUS OPERATOR",10741:"REVERSE SOLIDUS OPERATOR",10744:"BIG SOLIDUS",10744:"Large Operators",10744:"BIG SOLIDUS",10745:"BIG REVERSE SOLIDUS",10745:"BIG Reverse SOLIDUS", +10745:"schema hiding",10745:"BIG REVERSE SOLIDUS",10746:"DOUBLE PLUS",10746:"Specialized Plus Sign Operators",10746:"DOUBLE PLUS",10747:"TRIPLE PLUS",10750:"TINY",10751:"MINY",10752:"N-ARY CIRCLED DOT OPERATOR",10752:"Supplemental Mathematical Operators",10752:"N-ary Operators",10752:"Mathematical Operators Supplement",10752:"N-ary Operators",10752:"Supplemental Mathematical Operators",10753:"N-ARY CIRCLED PLUS OPERATOR",10754:"N-ARY CIRCLED TIMES OPERATOR",10759:"merge",10761:"N-ARY TIMES OPERATOR", +10762:"Summations and Integrals",10769:"ANTICLOCKWISE INTEGRATION",10769:"counterclockwise integration",10769:"ANTICLOCKWISE INTEGRATION",10769:"counterclockwise integration",10774:"QUATERNION INTEGRAL OPERATOR",10779:"upper integral",10780:"lower integral",10781:"large bowtie",10781:"JOIN",10781:"large bowtie",10786:"Plus and Minus Sign Operators",10788:"positive difference or sum",10790:"sum or positive difference",10791:"nim-addition",10799:"Multiplication and Division Sign Operators",10799:"VECTOR OR CROSS PRODUCT", +10803:"SMASH PRODUCT",10808:"CIRCLED DIVISION sign",10812:"INTERIOR PRODUCT",10813:"rightHAND INTERIOR PRODUCT",10813:"RIGHTHAND INTERIOR PRODUCT",10816:"Intersections and Unions",10817:"bag subtraction",10833:"Logical Ands and Ors",10835:"DOUBLE LOGICAL AND",10836:"DOUBLE LOGICAL OR",10913:"absolute continuity",10939:"DOUBLE PRECEDES",10940:"DOUBLE SUCCEEDS",10941:"Subset and Superset Relations",10969:"Forks",10972:"not independent",10973:"independent",10974:"Tacks and Turnstiles",10978:"ordinarily satisfies", +10987:"independence",10990:"Vertical Line Operators",10993:"necessarily satisfies",10996:"interleave",11005:"DOUBLE SOLIDUS OPERATOR",11006:"WHITE VERTICAL BAR",11006:"dijkstra choice",11006:"WHITE VERTICAL BAR",11006:"WHITE VERTICAL bar",11007:"n-ary dijkstra choice",11007:"N-ARY WHITE VERTICAL bar",11007:"N-ARY WHITE VERTICAL BAR",11008:"Miscellaneous Arrows",11026:"Polygonal Symbols",11034:"Squares",11045:"Diamonds and Lozenges",11052:"Ellipses",11056:"Mathematical Arrows",11093:"Heavy Circle Signs", +11264:"Glagolitic",11360:"Latin Extended-C",11392:"Bohairic Coptic",11442:"Extended Coptic",11499:"Cryptogrammic Letters",11520:"Georgian Supplement",11568:"Tifinagh",11648:"Ethiopic Extended",11744:"Cyrillic Extended-A",11776:"New Testament Editorial Symbols",11776:"Supplemental Punctuation",11776:"New Testament Editorial Symbols",11790:"Ancient Greek Textual Symbols",11800:"gnaborretni",11800:"INVERTED INTERROBANG",11801:"PALM BRANCH",11802:"Dictionary Punctuation",11818:"Medievalist Punctuation", +11825:"WORD SEPARATOR MIDDLE DOT",11825:"WORD SEPARATOR middle dot",11904:"CJK Phonetics and Symbols Area",11904:"CJK Radicals Supplement",11904:"CJK Phonetics and Symbols Area",11904:"CJK Radicals Supplement",11904:"CJK Phonetics and Symbols Area",12032:"CJK Kangxi Radicals",12272:"CJK Ideographic Description Characters",12288:"CJK Symbols and Punctuation",12288:"IDEOGRAPHIC SPACE",12288:"CJK Symbols and Punctuation",12288:"IDEOGRAPHIC SPACE",12288:"CJK Symbols and Punctuation",12289:"IDEOGRAPHIC COMMA", +12290:"IDEOGRAPHIC FULL STOP",12291:"DITTO MARK",12292:"JAPANESE INDUSTRIAL STANDARD SYMBOL",12293:"IDEOGRAPHIC ITERATION MARK",12294:"IDEOGRAPHIC CLOSING MARK",12295:"IDEOGRAPHIC NUMBER ZERO",12296:"LEFT ANGLE BRACKET",12296:"CJK Angle Brackets",12296:"LEFT ANGLE BRACKET",12296:"CJK Angle Brackets",12296:"Left ANGLE BRACKET",12297:"right ANGLE BRACKET",12297:"RIGHT ANGLE BRACKET",12298:"LEFT double ANGLE BRACKET",12298:"Left double ANGLE BRACKET",12299:"right double ANGLE BRACKET",12299:"RIGHT double ANGLE BRACKET", +12300:"LEFT CORNER BRACKET",12300:"CJK Corner Brackets",12300:"CJK Quotation Marks",12300:"CJK Corner Brackets",12300:"Left CORNER BRACKET",12300:"CJK Quotation Marks",12301:"right CORNER BRACKET",12301:"RIGHT CORNER BRACKET",12302:"LEFT WHITE CORNER BRACKET",12302:"Left WHITE CORNER BRACKET",12302:"LEFT WHITE CORNER BRACKET",12303:"right WHITE CORNER BRACKET",12303:"RIGHT WHITE CORNER BRACKET",12303:"right WHITE CORNER BRACKET",12304:"LEFT BLACK LENTICULAR BRACKET",12304:"Left BLACK LENTICULAR BRACKET", +12304:"LEFT BLACK LENTICULAR BRACKET",12305:"right BLACK LENTICULAR BRACKET",12305:"RIGHT BLACK LENTICULAR BRACKET",12306:"POSTAL MARK",12307:"GETA MARK",12308:"LEFT TORTOISE SHELL BRACKET",12308:"Left TORTOISE SHELL BRACKET",12308:"LEFT TORTOISE SHELL BRACKET",12309:"right TORTOISE SHELL BRACKET",12309:"RIGHT TORTOISE SHELL BRACKET",12309:"right TORTOISE SHELL BRACKET",12310:"LEFT WHITE LENTICULAR BRACKET",12310:"Left WHITE LENTICULAR BRACKET",12310:"LEFT WHITE LENTICULAR BRACKET",12311:"right WHITE LENTICULAR BRACKET", +12311:"RIGHT WHITE LENTICULAR BRACKET",12311:"right WHITE LENTICULAR BRACKET",12312:"LEFT WHITE TORTOISE SHELL BRACKET",12312:"Left WHITE TORTOISE SHELL BRACKET",12312:"LEFT WHITE TORTOISE SHELL BRACKET",12313:"right WHITE TORTOISE SHELL BRACKET",12313:"RIGHT WHITE TORTOISE SHELL BRACKET",12313:"right WHITE TORTOISE SHELL BRACKET",12314:"left abstract syntax bracket",12314:"LEFT WHITE SQUARE BRACKET",12314:"left abstract syntax bracket",12314:"Left WHITE SQUARE BRACKET",12314:"LEFT WHITE SQUARE BRACKET", +12315:"right abstract syntax bracket",12315:"right WHITE SQUARE BRACKET",12315:"right abstract syntax bracket",12315:"RIGHT WHITE SQUARE BRACKET",12315:"right WHITE SQUARE BRACKET",12316:"WAVE DASH",12317:"reversed double PRIME QUOTATION MARK",12318:"DOUBLE PRIME QUOTATION MARK",12319:"LOW double PRIME QUOTATION MARK",12320:"POSTAL MARK FACE",12321:"Hangzhou Numerals",12321:"Suzhou Numerals",12330:"CJK Diacritics",12330:"Ideographic Tone Marks",12336:"WAVY DASH",12337:"Kana Repeat Marks",12342:"CIRCLED POSTAL MARK", +12347:"VERTICAL IDEOGRAPHIC ITERATION MARK",12348:"MASU MARK",12350:"IDEOGRAPHIC VARIATION INDICATOR",12351:"IDEOGRAPHIC half FILL SPACE",12352:"Hiragana",12352:"Japanese Hiragana",12437:"HIRAGANA letter small KA",12437:"Hiragana Supplement",12437:"HIRAGANA letter small KA",12438:"HIRAGANA letter small KE",12441:"combining japanese daku-on",12442:"combining japanese han-daku-on",12443:"japanese daku-on",12444:"japanese han-daku-on",12445:"HIRAGANA ITERATION MARK",12446:"HIRAGANA VOICED ITERATION MARK", +12448:"KATAKANA-HIRAGANA double HYPHEN",12448:"Japanese Katakana",12448:"Katakana",12448:"KATAKANA-HIRAGANA double HYPHEN",12539:"KATAKANA MIDDLE DOT",12539:"KATAKANA middle dot",12539:"KATAKANA MIDDLE DOT",12540:"KATAKANA-HIRAGANA PROLONGED SOUND MARK",12541:"KATAKANA ITERATION MARK",12542:"KATAKANA VOICED ITERATION MARK",12543:"KATAKANA DIGRAPH KOTO",12544:"Chinese Bopomofo",12592:"Korean Hangul Compatibility Jamo",12644:"HANGUL FILLER",12645:"Korean Hangul Archaic Letters",12688:"Japanese Kanbun Ideographic Annotation", +12704:"Chinese Bopomofo Extensions",12736:"CJK Strokes",12784:"Katakana Extensions for Ainu",12784:"Katakana Phonetic Extensions",12800:"Enclosed CJK Letters and Months",12800:"Parenthesized Korean Hangul Letters",12800:"Enclosed CJK Letters and Months",12800:"Parenthesized Korean Hangul Letters",12814:"Parenthesized Korean Hangul Syllables",12832:"Parenthesized CJK Ideographs",12881:"Circled Numbers",12896:"Circled Korean Hangul Letters",12910:"Circled Korean Hangul Syllables",12927:"KOREAN STANDARD SYMBOL", +12928:"Circled Ideographs",12977:"Circled Numbers",12992:"Ideographic Telegraph Symbols for Months",13008:"Circled Katakana",13008:"Circled Japanese Katakana",13008:"Circled Katakana",13056:"CJK Compatibility",13056:"Squared Japanese Katakana Words",13056:"Squared Katakana Words",13056:"Squared Japanese Katakana Words",13056:"Squared Katakana Words",13144:"Ideographic Telegraph Symbols for Hours",13169:"Squared Latin Abbreviations",13179:"Japanese Era Names",13183:"japanese incorporated",13183:"kabusiki-gaisya", +13184:"Squared Latin Abbreviations",13280:"Ideographic Telegraph Symbols for Days",13312:"CJK Ideographs Area",13312:"CJK Unified Ideographs Extension A",13312:"CJK Ideographs Area",13312:"CJK Unified Ideographs Extension A",19904:"Yijing / I Ching Hexagram Symbols",19904:"I Ching / Yijing Hexagram Symbols",19904:"Yijing / I Ching Hexagram Symbols",19968:"CJK Unified Ideographs",19968:"Han Ideographs",19968:"CJK Unified Ideographs",19968:"Han Ideographs",19968:"CJK Unified Ideographs",40960:"Yi Syllables", +42128:"Yi Radicals",42192:"Lisu",42240:"Vai",42560:"Cyrillic Extended-B",42656:"Bamum",42752:"Corner Tone Marks for Chinese",42752:"Modifier Tone Letters",42752:"Corner Tone Marks for Chinese",42784:"Latin Extended-D",43008:"Syloti Nagri",43014:"SYLOTI NAGRI sign HASANTA",43056:"Common Indic Number Forms",43072:"Phags-pa",43136:"Saurashtra",43232:"Devanagari Extended",43264:"Kayah Li",43312:"Rejang",43360:"Korean Hangul Jamo Extended-A",43392:"Javanese",43520:"Cham",43616:"Myanmar Extended-A",43648:"Tai Viet", +43776:"Ethiopic Extended-A",43968:"Meetei Mayek",44032:"Asian Scripts Area",44032:"Korean Hangul Syllables Area",44032:"Asian Scripts Area",44032:"Korean Hangul Syllables Area",44032:"Korean Hangul Syllables",55216:"Korean Hangul Jamo Extended-B",55296:"Surrogates Area",55296:"High Surrogates",55296:"Surrogates Area",55296:"High Surrogates",56320:"Low Surrogates",57344:"Private Use Area",63744:"Compatibility and Specials Area",63744:"CJK Compatibility Ideographs",63744:"Compatibility and Specials Area", +63744:"CJK Compatibility Ideographs",63744:"Compatibility and Specials Area",64012:"Duplicate Characters from Big 5",64048:"JIS X 0213 Compatibility Ideographs",64112:"DPRK Compatibility Ideographs",64256:"Alphabetic Presentation Forms",64256:"Latin Ligatures",64256:"Alphabetic Presentation Forms",64275:"Armenian Ligatures",64285:"Hebrew Presentation Forms",64336:"Arabic Contextual Form Glyphs",64336:"Arabic Presentation Forms-A",64336:"Arabic Contextual Form Glyphs",64336:"Arabic Presentation Forms-A", +64434:"Arabic Spacing Diacritics",64490:"Arabic Ligatures",64830:"ORNATE Left PARENTHESIS",64830:"ORNATE left PARENTHESIS",64831:"ORNATE right PARENTHESIS",64831:"ORNATE Right PARENTHESIS",65020:"iranian currency",65020:"RIAL sign",65021:"Arabic LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM",65024:"Variation Selectors",65024:"VARIATION SELECTOR-1",65024:"Variation Selectors",65024:"vs1",65040:"Glyphs for Vertical Variants",65056:"Combining Half Marks",65060:"Combining MACRON left HALF",65060:"Continuous Macrons for Coptic", +65060:"Combining MACRON left HALF",65061:"Combining MACRON right HALF",65062:"Combining CONJOINING macron",65062:"Combining CONJOINING MACRON",65072:"CJK Compatibility Forms",65072:"Vertical Form Variants",65072:"Glyphs for Vertical Variants",65093:"SESAME DOT",65093:"Sidelining Emphasis Marks",65093:"SESAME DOT",65093:"Sidelining Emphasis Marks",65094:"WHITE SESAME DOT",65097:"DASHED OVERLINE",65097:"Overscores and Underscores",65098:"CENTRELINE OVERLINE",65099:"WAVY OVERLINE",65100:"DOUBLE WAVY OVERLINE", +65101:"DASHED low LINE",65102:"CENTRELINE low LINE",65103:"WAVY low LINE",65104:"Small Form Variants",65136:"Glyphs for Spacing Forms of Arabic Points",65136:"Arabic Presentation Forms-B",65152:"Arabic Contextual Form Glyphs",65279:"bom",65279:"byte order mark",65279:"ZERO WIDTH NO-BREAK SPACE",65279:"zwnbsp",65280:"Halfwidth and Fullwidth Forms",65281:"Fullwidth ASCII Variants",65377:"Halfwidth CJK Punctuation",65377:"Halfwidth Japanese Katakana Variants",65377:"Halfwidth CJK Punctuation",65440:"Halfwidth Korean Hangul Variants", +65504:"Fullwidth Symbol Variants",65512:"Halfwidth Symbol Variants",65520:"Specials",65529:"INTERLINEAR ANNOTATION ANCHOR",65529:"Interlinear Annotation",65529:"INTERLINEAR ANNOTATION ANCHOR",65530:"INTERLINEAR ANNOTATION SEPARATOR",65531:"INTERLINEAR ANNOTATION TERMINATOR",65532:"OBJECT REPLACEMENT CHARACTER",65533:"REPLACEMENT CHARACTER"}); \ No newline at end of file diff --git a/plugins/ckeditor4/symbol/dialogs/symbol.js b/plugins/ckeditor4/symbol/dialogs/symbol.js new file mode 100644 index 0000000..fb30534 --- /dev/null +++ b/plugins/ckeditor4/symbol/dialogs/symbol.js @@ -0,0 +1,18 @@ +/* + Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("symbol",function(j){function o(a,b,c){if(null!=a){for(var s=CKEDITOR.tools.getNextId()+"_symbol_table_label",i=[""],h=0,d=0,j=!1,f,g,k=a.split(","),l=0;l<k.length;l++){f=0;a=-1;g=!1;var e=k[l].split("-");switch(e.length){case 0:break;case 1:"*"==e[0].charAt(e[0].length-1)?(a=f=parseInt(e[0].substring(0,e[0].length-1),16),g=!0):a=f=parseInt(e[0],16);break;default:("*"==e[0].charAt(e[0].length-1)?(f=parseInt(e[0].substring(0,e[0].length-1),16),g=!0):f=parseInt(e[0],16),"*"==e[1].charAt(e[1].length- +1))?(a=parseInt(e[1].substring(0,e[1].length-1),16),g=!0):a=parseInt(e[1],16)}h+=a-f+1;if(a>=f){j||(i.push('<table role="listbox" aria-labelledby="'+s+'" style="width: 100%; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'),j=!0);for(;f<=a;){0==d&&i.push("<tr>");for(var e=!0,n=d;n<c;n++,f++)if(f<=a){var o=t(f),p=q&&q[f]||o,r="cke_symbol_label_"+f+"_"+CKEDITOR.tools.getNextNumber();i.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="'+ +(f+1)+'"',' aria-setsize="'+h+'"',' aria-labelledby="'+r+'"',' style="cursor: inherit; display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="',CKEDITOR.tools.htmlEncode(p),'" onkeydown="CKEDITOR.tools.callFunction( '+u+', event, this )" onclick="CKEDITOR.tools.callFunction('+v+', this); return false;" tabindex="-1"><span style="margin: 0 auto;cursor: inherit"'+(g?">"+m:">")+o+'</span><span class="cke_voice_label" id="'+r+'">'+p+"</span></a>");i.push("</td>")}else{d=n;e=!1; +break}if(e)d=0,i.push("</tr>");else break}}}if(0!=d){for(f=d;f<c;f++)i.push("<td> </td>");i.push("</tr>")}j?(i[0]=255<h?'<div style="width:100%;height:300px;overflow:auto;">':"<div>",i.push("</table></div>"),c=i.join(""),b.getElement().setHtml(c)):b.getElement().setHtml("<div>No valid range(s) defined...</div>")}else b.getElement().setHtml("<div>No range defined...</div>")}function t(a){a=a.toString(16).toUpperCase();return 1>a.length?eval('"\\u0000"'):2>a.length?eval('"\\u000'+a+'"'):3>a.length? +eval('"\\u00'+a+'"'):4>a.length?eval('"\\u0'+a+'"'):eval('"\\u'+a+'"')}function w(a,b){return a[0]==b[0]?0:a[0]>b[0]?1:-1}var m=" ",n=null,d,q=j.lang.symbol,k=null,p=function(a){var b,a=a.data?a.data.getTarget():new CKEDITOR.dom.element(a);if("a"==a.getName()&&(b=a.getChild(0).getHtml()))a.removeClass("cke_light_background"),b.length>m.length&&0==b.indexOf(m)&&(b=b.substring(m.length)),d.hide(),a=j.document.createElement("span"),a.setHtml(b),j.insertText(a.getText())},v=CKEDITOR.tools.addFunction(p), +l,g=function(a,b){var c,b=b||a.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(c=b.getChild(0).getHtml())){l&&h(null,l);var g=d.getContentElement("info","unicodePreview").getElement();d.getContentElement("info","charPreview").getElement().setHtml(c);var i=0,i=" "==c?160:c.length>m.length&&0==c.indexOf(m)?c.charCodeAt(m.length):c.charCodeAt(0);g.setHtml("Unicode (hex): "+i+" ("+i.toString(16).toUpperCase()+")");b.getParent().addClass("cke_light_background");l=b}}, +h=function(a,b){b=b||a.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(d.getContentElement("info","unicodePreview").getElement().setHtml(" "),d.getContentElement("info","charPreview").getElement().setHtml(" "),b.getParent().removeClass("cke_light_background"),l=void 0)},u=CKEDITOR.tools.addFunction(function(a){var a=new CKEDITOR.dom.event(a),b=a.getTarget(),c;c=a.getKeystroke();var d="rtl"==j.lang.dir;switch(c){case 38:if(c=b.getParent().getParent().getPrevious())c= +c.getChild([b.getParent().getIndex(),0]),c.focus(),h(null,b),g(null,c);a.preventDefault();break;case 40:if(c=b.getParent().getParent().getNext())if((c=c.getChild([b.getParent().getIndex(),0]))&&1==c.type)c.focus(),h(null,b),g(null,c);a.preventDefault();break;case 32:p({data:a});a.preventDefault();break;case d?37:39:case 9:if(c=b.getParent().getNext())c=c.getChild(0),1==c.type?(c.focus(),h(null,b),g(null,c),a.preventDefault(!0)):h(null,b);else if(c=b.getParent().getParent().getNext())(c=c.getChild([0, +0]))&&1==c.type?(c.focus(),h(null,b),g(null,c),a.preventDefault(!0)):h(null,b);break;case d?39:37:case CKEDITOR.SHIFT+9:(c=b.getParent().getPrevious())?(c=c.getChild(0),c.focus(),h(null,b),g(null,c),a.preventDefault(!0)):(c=b.getParent().getParent().getPrevious())?(c=c.getLast().getChild(0),c.focus(),h(null,b),g(null,c),a.preventDefault(!0)):h(null,b)}}),x=[CKEDITOR.dialog.cancelButton],y=j.lang.common.generalTab,z=j.lang.common.generalTab;j.config.sortSymbolRangesAlphabetically?k||(k=CKEDITOR.config.symbolRanges.slice(), +k.sort(w)):k=CKEDITOR.config.symbolRanges;return{title:"Select Symbol",buttons:x,charColumns:16,onShow:function(){var a=this.getContentElement("info","symbolRange").getInputElement().$;console.log("domElement.childNodes.length="+a.childNodes.length);if(a.childNodes.length>0){var b=null;if(!n){b="Basic Latin";if(j.config.defaultSymbolRange)b=j.config.defaultSymbolRange;console.log("startRange = "+b)}for(var c=0,d=0;d<a.childNodes.length;d++){console.log(d+" domElement.childNodes[i].text = "+a.childNodes[d].text); +if(a.childNodes[d].text==b||a.childNodes[d].value==n){c=d;break}}a.selectedIndex=c;console.log("selectedIndex = "+a.selectedIndex);b=this.getContentElement("info","charContainer");o(a.childNodes[c].value,b,this.definition.charColumns)}},contents:[{id:"info",label:y,title:z,padding:0,align:"top",onHide:function(){d&&d.destroy()},elements:[{type:"vbox",align:"top",width:"100%",children:[{type:"select",id:"symbolRange",width:"100%",items:k,size:1,onChange:function(a){console.log("Range changed:");console.log(a.sender.getValue()); +n=a.sender.getValue();var b=d.getContentElement("info","charContainer");o(a.sender.getValue(),b,d.definition.charColumns)}},{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:h,focus:function(){var a=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){a.focus();g(null,a)},0)},onShow:function(){var a=this.getElement().getElementsByTag("a").getItem(0);a!=null&&setTimeout(function(){a.focus();g(null,a)},0)},onLoad:function(a){d=a.sender}},{type:"hbox",align:"top",width:"100%", +children:[{type:"html",html:"<div></div>"},{type:"html",id:"unicodePreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:192px;padding-top:25px;font-family:'Microsoft Sans Serif',Arial,'Arial Unicode',Helvetica,Verdana;text-align:center;",html:"<div> </div>"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,'Arial Unicode',Helvetica,Verdana;text-align:center;", +html:"<div> </div>"}]}]}]}]}}); \ No newline at end of file diff --git a/plugins/ckeditor4/symbol/icons/symbol.png b/plugins/ckeditor4/symbol/icons/symbol.png new file mode 100644 index 0000000000000000000000000000000000000000..7f89bde90073f3cbdd79e62f9b35781235a81d1d GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJdx@v7EBiH0MphZC+3UrcfI^%F z9+AZi4BSE>%y{W;-5;PJOS+@4BLl<6e(pbstRO`JJ|V6L4jgD{X<=Y!IkHXUFHn%N zB*-tA!Qt7BG$6;()5S5Q;#O~;w-AE@httL1@>aQj67rG+ZO%wG>c13SJY!c8pZpt6 zn-yES{+!%x=&{WrBKf5JTH~d);vaUm{<+BL<HRtZ_3)NLpkWN2u6{1-oD!M<o=iZ5 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/symbol/lang/en.js b/plugins/ckeditor4/symbol/lang/en.js new file mode 100644 index 0000000..21579b7 --- /dev/null +++ b/plugins/ckeditor4/symbol/lang/en.js @@ -0,0 +1 @@ +CKEDITOR.plugins.setLang("symbol","en",{options:"Symbol Options",title:"Select Symbol",toolbar:"Insert Symbol"}); \ No newline at end of file diff --git a/plugins/ckeditor4/symbol/plugin.js b/plugins/ckeditor4/symbol/plugin.js new file mode 100644 index 0000000..bf95ec8 --- /dev/null +++ b/plugins/ckeditor4/symbol/plugin.js @@ -0,0 +1,15 @@ +/* + Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license + + If you find an error please let me know (helmoe {AT} gmail {DOTCOM} +*/ +CKEDITOR.plugins.add("symbol",{availableLangs:{en:1},lang:"en",requires:"dialog",icons:"symbol",init:function(a){var c=this;CKEDITOR.dialog.add("symbol",this.path+"dialogs/symbol.js");a.addCommand("symbol",{exec:function(){if(a.config.removeSymbolRanges&&0<a.config.removeSymbolRanges.length)for(var d=a.config.removeSymbolRanges.length-1;0<=d;d--){var e=a.config.removeSymbolRanges[d];e<a.config.symbolRanges.length&&a.config.symbolRanges.splice(e,1)}var b=a.langCode,b=c.availableLangs[b]?b:c.availableLangs[b.replace(/-.*/, +"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+b+".js"),function(){CKEDITOR.tools.extend(a.lang.symbol,c.langEntries[b]);a.openDialog("symbol")})},modes:{wysiwyg:1},canUndo:!1});a.ui.addButton&&a.ui.addButton("Symbol",{label:"Insert symbol",command:"symbol",toolbar:"insert"})}}); +CKEDITOR.config.symbolRanges=[["Basic Latin","0020-007E"],["Latin-1 Supplement","00A0-00B0,00B1,00B2-00FF"],["Latin Extended-A","0100-017F"],["Latin Extended-B","0180-024F"],["IPA Extensions","0250-02AF"],["Spacing Modifier Letters","02B0-02FF"],["Combining Diacritical Marks","0300-036F*"],["Greek and Coptic","0370-03FF"],["Cyrillic","0400-04FF"],["Cyrillic Supplementary","0500-052F"],["Armenian","0530-058F"],["Hebrew","0590-05FF"],["Arabic","0600-06FF"],["Syriac","0700-074F"],["Thaana","0780-07BF"], +["Devanagari","0900-097F"],["Bengali","0980-09FF"],["Gurmukhi","0A00-0A7F"],["Gujarati","0A80-0AFF"],["Oriya","0B00-0B7F"],["Tamil","0B80-0BFF"],["Telugu","0C00-0C7F"],["Kannada","0C80-0CFF"],["Malayalam","0D00-0D7F"],["Sinhala","0D80-0DFF"],["Thai","0E00-0E7F"],["Lao","0E80-0EFF"],["Tibetan","0F00-0FFF"],["Myanmar","1000-109F"],["Georgian","10A0-10FF"],["Hangul Jamo","1100-11FF"],["Ethiopic","1200-137F"],["Cherokee","13A0-13FF"],["Unified Canadian Aboriginal Syllabics","1400-167F"],["Ogham","1680-169F"], +["Runic","16A0-16FF"],["Tagalog","1700-171F"],["Hanunoo","1720-173F"],["Buhid","1740-175F"],["Tagbanwa","1760-177F"],["Khmer","1780-17FF"],["Mongolian","1800-18AF"],["Limbu","1900-194F"],["Tai Le","1950-197F"],["Khmer Symbols","19E0-19FF"],["Phonetic Extensions","1D00-1D7F"],["Latin Extended Additional","1E00-1EFF"],["Greek Extended","1F00-1FFF"],["General Punctuation","2000-206F"],["Superscripts and Subscripts","2070-209F"],["Currency Symbols","20A0-20CF"],["Combining Diacritical Marks for Symbols", +"20D0-20FF"],["Letterlike Symbols","2100-214F"],["Number Forms","2150-218F"],["Arrows","2190-21FF"],["Mathematical Operators","2200-22FF"],["Miscellaneous Technical","2300-23FF"],["Control Pictures","2400-243F"],["Optical Character Recognition","2440-245F"],["Enclosed Alphanumerics","2460-24FF"],["Box Drawing","2500-257F"],["Block Elements","2580-259F"],["Geometric Shapes","25A0-25FF"],["Miscellaneous Symbols","2600-26FF"],["Dingbats","2700-27BF"],["Miscellaneous Mathematical Symbols-A","27C0-27EF"], +["Supplemental Arrows-A","27F0-27FF"],["Braille Patterns","2800-28FF"],["Supplemental Arrows-B","2900-297F"],["Miscellaneous Mathematical Symbols-B","2980-29FF"],["Supplemental Mathematical Operators","2A00-2AFF"],["Miscellaneous Symbols and Arrows","2B00-2BFF"],["CJK Radicals Supplement","2E80-2EFF"],["Kangxi Radicals","2F00-2FDF"],["Ideographic Description Characters","2FF0-2FFF"],["CJK Symbols and Punctuation","3000-303F"],["Hiragana","3040-309F"],["Katakana","30A0-30FF"],["Bopomofo","3100-312F"], +["Hangul Compatibility Jamo","3130-318F"],["Kanbun","3190-319F"],["Bopomofo Extended","31A0-31BF"],["Katakana Phonetic Extensions","31F0-31FF"],["Enclosed CJK Letters and Months","3200-32FF"],["CJK Compatibility","3300-33FF"],["CJK Unified Ideographs Extension A","3400-4DBF"],["Yijing Hexagram Symbols","4DC0-4DFF"],["CJK Unified Ideographs","4E00-9FFF"],["Yi Syllables","A000-A48F"],["Yi Radicals","A490-A4CF"],["Hangul Syllables","AC00-D7AF"],["High Surrogates","D800-DB7F"],["High Private Use Surrogates", +"DB80-DBFF"],["Low Surrogates","DC00-DFFF"],["Private Use Area","E000-F8FF"],["CJK Compatibility Ideographs","F900-FAFF"],["Alphabetic Presentation Forms","FB00-FB4F"],["Arabic Presentation Forms-A","FB50-FDFF"],["Variation Selectors","FE00-FE0F"],["Combining Half Marks","FE20-FE2F"],["CJK Compatibility Forms","FE30-FE4F"],["Small Form Variants","FE50-FE6F"],["Arabic Presentation Forms-B","FE70-FEFF"],["Halfwidth and Fullwidth Forms","FF00-FFEF"],["Specials","FFF0-FFFF"]]; \ No newline at end of file diff --git a/plugins/ckeditor4/textselection/plugin.js b/plugins/ckeditor4/textselection/plugin.js new file mode 100644 index 0000000..9c9ad22 --- /dev/null +++ b/plugins/ckeditor4/textselection/plugin.js @@ -0,0 +1,423 @@ +/* +Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + /** + * Represent plain text selection range. + */ + CKEDITOR.plugins.add('textselection', + { + version: 1.04, + init: function (editor) { + // Corresponding text range of wysiwyg bookmark. + var wysiwygBookmark; + + // Auto sync text selection with 'WYSIWYG' mode selection range. + if (editor.config.syncSelection + && CKEDITOR.plugins.sourcearea) { + editor.on('beforeModeUnload', function (evt) { + if (editor.mode === 'source') { + if (editor.mode === 'source' && !editor.plugins.codemirror) { + var range = editor.getTextSelection(); + + // Fly the range when create bookmark. + delete range.element; + range.createBookmark(editor); + sourceBookmark = true; + evt.data = range.content; + } + } + }); + editor.on('mode', function () { + if (editor.mode === 'wysiwyg' && sourceBookmark) { + + editor.focus(); + var doc = editor.document, + range = new CKEDITOR.dom.range(editor.document), + startNode, + endNode, + isTextNode = false; + + range.setStartAt(doc.getBody(), CKEDITOR.POSITION_AFTER_START); + range.setEndAt(doc.getBody(), CKEDITOR.POSITION_BEFORE_END); + var walker = new CKEDITOR.dom.walker(range); + // walker.type = CKEDITOR.NODE_COMMENT; + walker.evaluator = function (node) { + // + var match = /cke_bookmark_\d+(\w)/.exec(node.$.nodeValue); + if (match) { + if(decodeURIComponent(node.$.nodeValue) + .match(/<!--cke_bookmark_[0-9]+S-->.*<!--cke_bookmark_[0-9]+E-->/)){ + isTextNode = true; + startNode = endNode = node; + return false; + } else { + if (match[1] === 'S') { + startNode = node; + } else if (match[1] === 'E') { + endNode = node; + return false; + } + } + } + }; + walker.lastForward(); + range.setStartAfter(startNode); + range.setEndBefore(endNode); + range.select(); + // Scroll into view for non-IE. + if (!CKEDITOR.env.ie || (CKEDITOR.env.ie && CKEDITOR.env.version === 9)) { + editor.getSelection().getStartElement().scrollIntoView(true); + } // Remove the comments node which are out of range. + if(isTextNode){ + //remove all of our bookmarks from the text node + //then remove all of the cke_protected bits that added because we had a comment + //whatever code is supposed to clean these cke_protected up doesn't work + //when there's two comments in a row like: <!--{cke_protected}{C}--><!--{cke_protected}{C}--> + startNode.$.nodeValue = decodeURIComponent(startNode.$.nodeValue). + replace(/<!--cke_bookmark_[0-9]+[SE]-->/g,''). + replace(/<!--[\s]*\{cke_protected}[\s]*\{C}[\s]*-->/g,''); + } else { + //just remove the comment nodes + startNode.remove(); + endNode.remove(); + } + } + }, null, null, 10); + + editor.on('beforeGetModeData', function () { + if (editor.mode === 'wysiwyg' && editor.getData()) { + if (CKEDITOR.env.gecko && !editor.focusManager.hasFocus) { + return; + } + var sel = editor.getSelection(), range; + if (sel && (range = sel.getRanges()[0])) { + wysiwygBookmark = range.createBookmark(editor); + } + } + }); + // Build text range right after wysiwyg has unloaded. + editor.on('afterModeUnload', function (evt) { + if (editor.mode === 'wysiwyg' && wysiwygBookmark) { + textRange = new CKEDITOR.dom.textRange(evt.data); + textRange.moveToBookmark(wysiwygBookmark, editor); + + evt.data = textRange.content; + } + }); + editor.on('mode', function () { + if (editor.mode === 'source' && textRange && !editor.plugins.codemirror) { + textRange.element = new CKEDITOR.dom.element(editor._.editable.$); + textRange.select(); + } + }); + + editor.on('destroy', function () { + textRange = null; + sourceBookmark = null; + }); + } + } + }); + + /** + * Gets the current text selection from the editing area when in Source mode. + * @returns {CKEDITOR.dom.textRange} Text range represent the caret positoins. + * @example + * var textSelection = CKEDITOR.instances.editor1.<b>getTextSelection()</b>; + * alert( textSelection.startOffset ); + * alert( textSelection.endOffset ); + */ + CKEDITOR.editor.prototype.getTextSelection = function () { + return this._.editable && getTextSelection(this._.editable.$) || null; + }; + + /** + * Returns the caret position of the specified textfield/textarea. + * @param {HTMLTextArea|HTMLTextInput} element + */ + function getTextSelection(element) { + var startOffset, endOffset; + + if (!CKEDITOR.env.ie) { + startOffset = element.selectionStart; + endOffset = element.selectionEnd; + } else { + element.focus(); + + // The current selection + if (window.getSelection) { + startOffset = element.selectionStart; + endOffset = element.selectionEnd; + } else { + var range = document.selection.createRange(), + textLength = range.text.length; + + // Create a 'measuring' range to help calculate the start offset by + // stretching it from start to current position. + var measureRange = range.duplicate(); + measureRange.moveToElementText(element); + measureRange.setEndPoint('EndToEnd', range); + + endOffset = measureRange.text.length; + startOffset = endOffset - textLength; + } + } + return new CKEDITOR.dom.textRange( + new CKEDITOR.dom.element(element), startOffset, endOffset); + } + + /** + * Represent the selection range within a html textfield/textarea element, + * or even a flyweight string content represent the text content. + * @constructor + * @param {CKEDITOR.dom.element|String} element + * @param {Number} start + * @param {Number} end + */ + CKEDITOR.dom.textRange = function (element, start, end) { + if (element instanceof CKEDITOR.dom.element + && (element.is('textarea') + || element.is('input') && element.getAttribute('type') == 'text')) { + this.element = element; + this.content = element.$.value; + } else if (typeof element == 'string') + this.content = element; + else + throw 'Unkown "element" type.'; + this.startOffset = start || 0; + this.endOffset = end || 0; + }; + + /** + * Changes the editing mode of this editor instance. (Override of the original function) + * + * **Note:** The mode switch could be asynchronous depending on the mode provider. + * Use the `callback` to hook subsequent code. + * + * // Switch to "source" view. + * CKEDITOR.instances.editor1.setMode( 'source' ); + * // Switch to "wysiwyg" view and be notified on completion. + * CKEDITOR.instances.editor1.setMode( 'wysiwyg', function() { alert( 'wysiwyg mode loaded!' ); } ); + * + * @param {String} [newMode] If not specified, the {@link CKEDITOR.config#startupMode} will be used. + * @param {Function} [callback] Optional callback function which is invoked once the mode switch has succeeded. + */ + CKEDITOR.editor.prototype.setMode = function (newMode, callback) { + var editor = this; + + var modes = this._.modes; + + // Mode loading quickly fails. + if (newMode == editor.mode || !modes || !modes[newMode]) + return; + + editor.fire('beforeSetMode', newMode); + + if (editor.mode) { + var isDirty = editor.checkDirty(); + + editor._.previousMode = editor.mode; + + editor.fire('beforeModeUnload'); + + editor.fire('beforeGetModeData'); + var data = editor.getData(); + + data = editor.fire('beforeModeUnload', data); + data = editor.fire('afterModeUnload', data); + + // Detach the current editable. + editor.editable(0); + + editor._.data = data; + + // Clear up the mode space. + editor.ui.space('contents').setHtml(''); + + editor.mode = ''; + } + + // Fire the mode handler. + this._.modes[newMode](function () { + // Set the current mode. + editor.mode = newMode; + + if (isDirty !== undefined) { + !isDirty && editor.resetDirty(); + } + + // Delay to avoid race conditions (setMode inside setMode). + setTimeout(function () { + editor.fire('mode'); + callback && callback.call(editor); + }, 0); + }); + }; + + CKEDITOR.dom.textRange.prototype = + { + /** + * Sets the text selection of the specified textfield/textarea. + * @param {HTMLTextArea|HTMLTextInput} element + * @param {CKEDITOR.dom.textRange} range + */ + select: function() { + + var startOffset = this.startOffset, + endOffset = this.endOffset, + element = this.element.$; + if (endOffset == undefined) { + endOffset = startOffset; + } + + if (CKEDITOR.env.ie && CKEDITOR.env.version == 9) { + element.focus(); + element.selectionStart = startOffset; + element.selectionEnd = startOffset; + setTimeout(function() { + element.selectionStart = startOffset; + element.selectionEnd = endOffset; + }, 20); + + } else { + if (element.setSelectionRange) { + if (CKEDITOR.env.ie) { + element.focus(); + } + element.setSelectionRange(startOffset, endOffset); + if (!CKEDITOR.env.ie) { + element.focus(); + } + } else if (element.createTextRange) { + element.focus(); + var range = element.createTextRange(); + range.collapse(true); + range.moveStart('character', startOffset); + range.moveEnd('character', endOffset - startOffset); + range.select(); + } + } + }, + + /** + * Select the range included within the bookmark text with the bookmark + * text removed. + * @param {Object} bookmark Exactly the one created by CKEDITOR.dom.range.createBookmark( true ). + */ + moveToBookmark: function(bookmark, editor) { + var content = this.content; + function removeBookmarkText(bookmarkId) { + + var bookmarkRegex = new RegExp('<span[^<]*?' + bookmarkId + '.*?/span>'), + offset; + content = content.replace(bookmarkRegex, function(str, index) { + offset = index; + return ''; + }); + return offset; + } + + this.startOffset = removeBookmarkText(bookmark.startNode); + this.endOffset = removeBookmarkText(bookmark.endNode); + this.content = content; + this.updateElement(); + + if (editor.undoManager) { + editor.undoManager.unlock(); + } + }, + + /** + * If startOffset/endOffset anchor inside element tag, start the range before/after the element + */ + enlarge: function() { + var htmlOpenTagRegexp = /<[a-zA-Z]+(>|.*?[^?]>)/g; + var htmlCloseTagRegexp = /<\/[^>]+>/g; + var content = this.content, + start = this.startOffset, + end = this.endOffset, + match, + tagStartIndex, + tagEndIndex; + + // Adjust offset position on parsing result. + while (match = htmlCloseTagRegexp.exec(content)) { + + tagStartIndex = match.index; + + if (start > tagStartIndex) { + start = tagStartIndex; + } + + if (end > tagStartIndex) { + end = tagStartIndex; + break; + } + + break; + } + + while (match = htmlOpenTagRegexp.exec(content)) { + + tagStartIndex = match.index; + + tagEndIndex = tagStartIndex + match[0].length; + + if (start < tagEndIndex) { + start = tagEndIndex; + } + + if (end < tagEndIndex) { + end = tagEndIndex; + break; + } + + break; + } + + + this.startOffset = start; + this.endOffset = end; + }, + + createBookmark: function(editor) { + // Enlarge the range to avoid tag partial selection. + this.enlarge(); + var content = this.content, + start = this.startOffset, + end = this.endOffset, + id = CKEDITOR.tools.getNextNumber(), + bookmarkTemplate = '<!--cke_bookmark_%1-->'; + + content = content.substring(0, start) + bookmarkTemplate.replace('%1', id + 'S') + + content.substring(start, end) + bookmarkTemplate.replace('%1', id + 'E') + + content.substring(end); + + if (editor.undoManager) { + editor.undoManager.lock(); + } + + this.content = content; + this.updateElement(); + }, + + updateElement: function() { + if (this.element) + this.element.$.value = this.content; + } + }; + + var Browser = { + Version: function() { + var version = 999; + if (navigator.appVersion.indexOf("MSIE") != -1) + version = parseFloat(navigator.appVersion.split("MSIE")[1]); + return version; + } + }; + + // Seamless selection range across different modes. + CKEDITOR.config.syncSelection = true; + + var textRange,sourceBookmark; diff --git a/plugins/ckeditor4/textselection/samples/textselection.html b/plugins/ckeditor4/textselection/samples/textselection.html new file mode 100644 index 0000000..fd10785 --- /dev/null +++ b/plugins/ckeditor4/textselection/samples/textselection.html @@ -0,0 +1,125 @@ +<!DOCTYPE html> +<!-- +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html> +<head> + <title>Textselection Plugin — CKEditor Sample</title> + <meta charset="utf-8"> + <script src="../../../ckeditor.js"></script> + <link rel="stylesheet" href="../../../samples/sample.css"> + <meta name="ckeditor-sample-name" content="textselection plugin"> + <meta name="ckeditor-sample-group" content="Plugins"> + <meta name="ckeditor-sample-description" content="Using the textselection plugin in order to make the editor keep it's text-selection when switching between WYSIWYG and Source mode"> +</head> +<body> + <h1 class="samples"> + <a href="../../../samples/index.html">CKEditor Samples</a> » Using textselection Plugin + </h1> + <div class="description"> + <p> + This sample shows how to configure CKEditor instances to use the + <strong>textselection</strong> (<code>textselection</code>) plugin that makes the editor keep it's text-selection when switching between WYSIWYG and Source mode, and scrolls the selection into the viewport.</p> + <p> + To add a CKEditor instance using the <code>textselection</code> plugin, insert the following JavaScript call to your code: + </p> +<pre class="samples"> +CKEDITOR.replace( '<em>textarea_id</em>', { + <strong>extraPlugins: 'textselection',</strong> +});</pre> + <p> + Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of + the <code><textarea></code> element to be replaced with CKEditor.</p> + </div> + <form action="../../../samples/sample_posteddata.php" method="post"> + <p> + <label for="editor1"> + CKEditor using the <code>textselection</code> plugin <strong>(mark some text and switch to Source View)</strong>: </label> + <textarea cols="80" id="editor1" name="editor1" rows="10"><p> <p></p> + +<h1><img alt="Saturn V carrying Apollo 11" class="right" src="http://b.cksource.com/a/1/img/sample.jpg" /> Apollo 11</h1> + +<p><strong>Apollo 11</strong> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.<p></p> + +<p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.<p></p> + +<h2>Broadcasting and <em>quotes</em> <a id="quotes" name="quotes"></a></h2> + +<p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:<p></p> + +<blockquote> +<p>One small step for [a] man, one giant leap for mankind.<p></p> +</blockquote> + +<p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy">John F. Kennedy</a> in a speech before the United States Congress:<p></p> + +<blockquote> +<p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.<p></p> +</blockquote> + +<h2>Technical details <a id="tech-details" name="tech-details"></a></h2> + +<table align="right" border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"> + <caption><strong>Mission crew</strong></caption> + <thead> + <tr> + <th scope="col">Position</th> + <th scope="col">Astronaut</th> + </tr> + </thead> + <tbody> + <tr> + <td>Commander</td> + <td>Neil A. Armstrong</td> + </tr> + <tr> + <td>Command Module Pilot</td> + <td>Michael Collins</td> + </tr> + <tr> + <td>Lunar Module Pilot</td> + <td>Edwin "Buzz" E. Aldrin, Jr.</td> + </tr> + </tbody> +</table> + +<p>Launched by a <strong>Saturn V</strong> rocket from <a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center">Kennedy Space Center</a> in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of <a href="http://en.wikipedia.org/wiki/NASA">NASA</a>'s Apollo program. The Apollo spacecraft had three parts:<p></p> + +<ol> + <li><strong>Command Module</strong> with a cabin for the three astronauts which was the only part which landed back on Earth</li> + <li><strong>Service Module</strong> which supported the Command Module with propulsion, electrical power, oxygen and water</li> + <li><strong>Lunar Module</strong> for landing on the Moon.</li> +</ol> + +<p>After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the <a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis">Sea of Tranquility</a>. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the <a href="http://en.wikipedia.org/wiki/Pacific_Ocean">Pacific Ocean</a> on July 24.<p></p> + +<hr /> +<p><small>Source: <a href="http://en.wikipedia.org/wiki/Apollo_11">Wikipedia.org</a></small><p></p> + +<p> <p></p> + </textarea> + <script> + + CKEDITOR.replace( 'editor1', { + extraPlugins: 'textselection', + }); + + </script> + </p> + <p> + <input type="submit" value="Submit"> + </p> + </form> + <div id="footer"> + <hr> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2013, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/plugins/ckeditor4/texttransform/LICENSE.md b/plugins/ckeditor4/texttransform/LICENSE.md new file mode 100644 index 0000000..b0e58ef --- /dev/null +++ b/plugins/ckeditor4/texttransform/LICENSE.md @@ -0,0 +1,28 @@ +Software License Agreement +========================== + +CKEditor Text Transform Plugin - A very simple plugin which provides transforming selected texts to new cases. - http://github.com/onderceylan/ckeditor-texttransform-plugin +Copyright (c) 2013, Önder Ceylan. All rights reserved. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. In any case, your choice will not restrict any +recipient of your version of this software to use, reproduce, modify +and distribute this software under any of the above licenses. diff --git a/plugins/ckeditor4/texttransform/README.md b/plugins/ckeditor4/texttransform/README.md new file mode 100644 index 0000000..62b9740 --- /dev/null +++ b/plugins/ckeditor4/texttransform/README.md @@ -0,0 +1,55 @@ +Text Transform Plugin for CKEditor +================================ + +A very simple plugin which provides transforming selected text to new cases. You can transform selected text to uppercase, lowercase or simply capitalize it. + +Available Transform Cases +------------------------- + +* Transform Text to Uppercase: Convert letters to uppercase +* Transform Text to Lowercase: Convert letters to lowercase +* Transform Capitalize: Capitalize each word of selected text +* Transform Switcher: Loop through all cases + +Internationalization +------------------------- + +Currently plugin supports 2 languages. + +* en +* tr + +*Translations are welcomed.* + +Usage +------------------------- + +1. Download source files and place them on to be created "texttransform" folder under the CKEditor's plugin base. + +2. Define plugin in CKEDITOR config object. + + CKEDITOR.config.extraPlugins = 'texttransform'; + +3. Add transform buttons to your editor toolbar. + + CKEDITOR.config.toolbar = [ + { name: 'texttransform', items: [ 'TransformTextToUppercase', 'TransformTextToLowercase', 'TransformTextCapitalize', 'TransformTextSwitcher' ] } + ]; + +4. Set your CKEDITOR language if you did not set it yet. + + CKEDITOR.config.language = 'en'; + +Demo +------------------------- + +[View the live demo](http://jsfiddle.net/t99kV/5/) on jsFiddle. + + +Cheers +-------------------- + +Thanks to [CKEditor] [1] and [jsFiddle] [2] for their good work. + + [1]: http://ckeditor.com "CKEditor" + [2]: http://jsfiddle.net "jsFiddle" diff --git a/plugins/ckeditor4/texttransform/images/transformCapitalize.png b/plugins/ckeditor4/texttransform/images/transformCapitalize.png new file mode 100644 index 0000000000000000000000000000000000000000..2914c059fdaa8d96136a9cb20921d57a12d8fc9a GIT binary patch literal 1410 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`<jAm(=3qqRfJl%=|nBkco*&`K2Yc zN<f!FypUVq>kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}jalaZmD zp`)>rlclSXp`oR-g`umHv!#WFg_)bVu_eq5Y<f+c9L)?|T}+%Tjhze)U5%W~jLa;Z z%?ym(oLo%}Or2qRJ@bl767!N%VfJPM?S<+!#;e!LxhOTUB)=#mKR*YS0s=DfOY(~| z@(UE4gUu8)!ZY(y^2>`gLD2*8txIZAW?5>ATTy<l0yuoFGO^fC*xwMnDddEiKF~4x zpu~ZcSYSfH6bNF%lRl6G&pfGlz#LNq%o<J;#P%>SFmCd6aSW-rmGtNTe|u)thR#MO zhmDLpFXA3NcrZgvL*vKX*4Cvgv9e}8@0c>Zy}hsh_))=UYrEHBLZtzxo12@M!Zfyr zk(<+g+SdM>B7K-UCMM>f!)?+3|Nj0C1hVBdo-j=|HZu!jf26Ju6B)TP(9P`_?_KU1 zD=RDOM~@!W&9N%YstO3WQ19t^a;8Vz1cpaD9c;F)UHjI~-28j}ggCK^3?oBH=G^kX zpPrtcyKC33?MzHe@hPdPcjwvHuVb9D&#>^(5%Kx<_4oLv{I7j|O}BV~c<O|`2UL`l z9%<|7ocZ$OWAf6=%l*UmRDN#rc5-rJ%$T6-;ppgiaL?7%;reVw;SD;>m+T+1F|aPF ztf)|$IdkTIhP?$W8Mpb=)t4vFx2yfdDALca^)NIj$g8Kf*Y@tkix2sE+AljyFHmTA zR10|c|I?>Wr4IYl1hnt(EI#fR8TpgVAi<GK=Iq(C|8L*Ey`Cj2t)Q$d?&YILO&rbK z;(9w6bN@5?Fwd_4`>S+rZ*Q-opWnNq-`?JS|Nr-Q|A!|gDlZBP3wsZA>78}4yUUJW rycj4U5hs7}qV<>0Oh?%mSR@#%A0A%K%-;VNR4RJ9`njxgN@xNACqDJP literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/texttransform/images/transformSwitcher.png b/plugins/ckeditor4/texttransform/images/transformSwitcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6db88e91319af6488286d9d9dfbc404178d27a GIT binary patch literal 1542 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`<jAm(=3qqRfJl%=|nBkco*&`K2Yc zN<f!FypUVq>kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}jalaZmD zp`)>rlclSXp`oR-g`umHv!#WFg_)bVu_eq5Y<f+Mjoi#!Tr8a|jhze)U5zZvT}&)3 zot-UB+}upeOif{WJ@bl767!N%VfJPM?S<;Kz^m8FxhOTUB)=#mKR*YS0s=DfOY(~| z@(UE4gUu8)!ZY(y^2>`gLD2*8txIZAW?5>ATTy<l0yuoFGO^fC*xwMnDddEiKF~4x zpu~ZcSYSfH6bNF%lRl6G&pfGlz#LNq%o=uD>yI%oFqwI}IEGZ*>Y41{5#%Uy{P=Xc z|E|m0*k*|=N?`xIV8Ro}u(tx*Hi?{ToH;ih_gge&`d-$1Hdhuld$V{RbYfTJSai6F zJ$k}{3w*a73paO5Y<fBA{Pl9V&v&LzF!}KCdvV?8ea4?>uW#9~@M1<;V@t{O6>Tb> z*%vpJiYINHar*h^iEfJzmhO)Iw7)sIu>JYZ9jBiv`7QsfR%ahDx2H((&Bj0aDU8hr zH$41W#ou)Bfw7BKY4p~UwI7bY|IXcE`a$5sE8(048E?P;-k-fyN|J{yovHDF>Y4au z++3}PMCZJjelbHu;CsS#rDgVw#haRL=F~~^wTp+Xo@y5Gslp~mYwE8|qnYzIsO2^B z{rW8Uk=a6Ls@MB~s#P3+I9i>K?~Hj@Y&XANpW{&D(WJ<P<IYpg8%_NDK=pLxg!Lg> z)tee_znv%AebjvN$s^wLm&UD+Kd#A^khJ}F{@>NVBeYL=?!G&1)zz#;mtUTEZ#CC% zeXrZ%zj5o!gY>4ChwT#%kB~aLAnoirb*>k)bq;OZKCjVNEIqp>Iq<^kuPQ>FI=wEu zQ(P;2at|(x3vOSvzwO6HrrNNzVbxj&GJO3P{_ghJ-&`9}-7UqDqxrr6_+yzq`{fA& zeUJTE4di-{KNdXmMR)Q^f!Sx>7F~RyH2ZAaQr8+Em%tc}@C8g)P8A7<`d(_v{lIi@ z!LgrQ?=DEa(^i}885lX+Z~0LdCB-7`@;S}VAH=P`YIW!e@00ZzYj5V9`#3++Zt3BN g3RZLb{s<;8%;^v;&;C)g1ynM7y85}Sb4q9e0I%CfbN~PV literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/texttransform/images/transformToLower.png b/plugins/ckeditor4/texttransform/images/transformToLower.png new file mode 100644 index 0000000000000000000000000000000000000000..2fcdf713140e2a2cc9082cad3604d115d11e4686 GIT binary patch literal 1152 zcmbVMT}b3s6b`kD2(~J8!L6+!mhIopWNya9N$ON5$xNN%sEpH{=|f>+a@C;8O_OUU z3Z?YVwjlbjr9V#v>B6?GTYcDNL6_2HD=4LXsL*z#MewoEE-bqu7VM2Wwhv;VA<6y8 z`M&R*bI-{K1AQ;l*PX4SD5^f)qh`t25InUt<lTCAUn4^^P8RSW8pb8fg;c^oLy%5e z+6c@-&6s?34R%sg)v%c>;6kQX(vcO`0-LaJIRs5non5}8>0=PnLvX~j<IJDSUo*66 z#F;#wiDVoFj+#AFE*zZd%jr{Nx@a(6&(od0L<lU1HQKkvZBO#!%mJ@N=D{}0&<7@X zEY2J{Rmcp`3UVRMhod1q0st)tVbIPC0ys}|5x}t#atk5QF7blIb<jr_L)2VjSjwuY zBQ3IuGou(g63doKrEn=4M(zj;L{SVlI4(piLf)i}H9ur~Z50L;db(>m*hDrRFls|+ z0>>HR>0t<#lgS(t+ul*4NXl4Wb660Lu$C3Xbztq`Ed0lf6Ro}6qyyP3^w5N>lk*sE ztAI)FP8SLci8oTeYm!6J##N+GSkT64HO`PPVZ$^eMU**^0*R<Bi%AXuQHg=1tcbB# zOh|P^#R|tsSYA*-M~YWuF)9O)<YFKyD7=~w+Et#9Mz{(#ZF^X=by(3giS7}WsGfqA z6c=h3xjBT!D-|#>iZJp<kwYtk0{v9pv<+19o(_)ZFj^J5=4;SMxyYgq@++Aq=>K=z zhgjqP<cuZGut9PBt5_;qqymHKap{xAaq~c%bc{<{qrB1o2x+Uuw3^8I<&BHqJXF=# zF#TTB?;AJ#ravCnKHJ>unJT>W`HzcB_qR6E=ca%7Yq#-<OAkJq(7;F4Mf}dn^|s~h zD=*I#8szmmv3vERm3z2X@BJyVz3}#vXXN*b3-RY#-SW?MpJZPw&P@E8Z>gU5X6L_c z={9$|KVDfkYQbtp`MXDN?aXh@=09za#r)FlGhcl8r8m?3)dRon>6^mJFPE>?e81aY jTwUAWe;2+vM^#ZbZ@;nm`h`~>3;qe|WS@FfF240Q0V99E literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/texttransform/images/transformToUpper.png b/plugins/ckeditor4/texttransform/images/transformToUpper.png new file mode 100644 index 0000000000000000000000000000000000000000..4857535ad47186a4267b5bf6d3fc8ec29891076a GIT binary patch literal 1211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`<jAm(=3qqRfJl%=|nBkco*&`K2Yc zN<f!FypUVq>kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}jalaZmD zp`)>rlclSXp`oR-g`umHv!#WFg_)bVu_eq5Y<f*y%q*OYO^lo@jhze)U5zY_3=JGj z%pF|}Tnr3NoLpggJ@bl767!N%VfJPM?S<+!#H-iJxhOTUB)=#mKR*YS0s=DfOY(~| z@(UE4gUu8)!ZY(y^2>`gLD2*8txIZAW?5>ATTy<l0yuoFGO^fC*xwMnDddEiKF~4x zpu~ZcSYSfH6bNF%lRl6G&pfGlz#LNq%o>kd>g#~n>b0kfV@SoVq(A@v+cT>+bT&E} zd|*>(uC1x5S-_B~;_X{e@#BBy<z;`%i;8}=dz+h?Cg^Y2v}xPsjT;R+y1L??K75$S z!qvJk``A*poQ9PvGg+0DAFqG#Afb4IQfcW|u@dHjm5h=C3l}XqRPgv%?|&a3pW`!U z&XnZg;R$Jcl;!cOa8+VhaPaOk=g*%%aQ5uq<2P<Z{5n71etv`5hWdYhA|D@a=kIph z^>HQR$^ZNu96MNiCJH&MVK`Fdu+d(jP+=NNlKY-4Is3Xl|6g8SzHxyH?_r03<_mQH ti|a%P{QvXw^Zy@L4Emn2vNbR;Gt88m`E8eO-&{~};_2$=vd$@?2>|zZpk@F7 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/texttransform/lang/en.js b/plugins/ckeditor4/texttransform/lang/en.js new file mode 100644 index 0000000..75bab00 --- /dev/null +++ b/plugins/ckeditor4/texttransform/lang/en.js @@ -0,0 +1,17 @@ +/** + * @author: Önder Ceylan <onderceylan@gmail.com> + * @copyright Copyright (c) 2013 - Önder Ceylan. All rights reserved. + * @license Licensed under the terms of GPL, LGPL and MPL licenses. + * @version 1.0 + * + * Date: 5/10/13 + * Time: 9:45 AM + */ + +// set CKeditor lang +CKEDITOR.plugins.setLang( 'texttransform', 'en', { + transformTextSwitchLabel: 'Transform Text Switcher', + transformTextToLowercaseLabel: 'Transform Text to Lowercase', + transformTextToUppercaseLabel: 'Transform Text to Uppercase', + transformTextCapitalizeLabel: 'Capitalize Text' +}); diff --git a/plugins/ckeditor4/texttransform/lang/tr.js b/plugins/ckeditor4/texttransform/lang/tr.js new file mode 100644 index 0000000..9caedbc --- /dev/null +++ b/plugins/ckeditor4/texttransform/lang/tr.js @@ -0,0 +1,41 @@ +/** + * @author: Önder Ceylan <onderceylan@gmail.com> + * @copyright Copyright (c) 2013 - Önder Ceylan. All rights reserved. + * @license Licensed under the terms of GPL, LGPL and MPL licenses. + * @version 1.0 + * + * Date: 5/10/13 + * Time: 9:45 AM + */ + +// define a prototype toUpperCase fn for Turkish character recognization +String.prototype.trToUpperCase = function(){ + var string = this; + var letters = { "i": "Ä°", "ÅŸ": "Åž", "ÄŸ": "Äž", "ü": "Ãœ", "ö": "Ö", "ç": "Ç", "ı": "I" }; + string = string.replace(/(([iışğüçö]))/g, function(letter){ return letters[letter]; }); + if (typeof(String.prototype.toLocaleUpperCase()) != 'undefined') { + return string.toLocaleUpperCase(); + } else { + return string.toUpperCase(); + } +}; + +// define prototype toLowerCase fn for Turkish character recognization +String.prototype.trToLowerCase = function(){ + var string = this; + var letters = { "Ä°": "i", "I": "ı", "Åž": "ÅŸ", "Äž": "ÄŸ", "Ãœ": "ü", "Ö": "ö", "Ç": "ç" }; + string = string.replace(/(([Ä°IŞĞÜÇÖ]))/g, function(letter){ return letters[letter]; }); + if (typeof(String.prototype.toLocaleLowerCase()) != 'undefined') { + return string.toLocaleLowerCase(); + } else { + return string.toLowerCase(); + } +}; + +// set CKeditor lang +CKEDITOR.plugins.setLang( 'texttransform', 'tr', { + transformTextSwitchLabel: 'Harf Düzenini DeÄŸiÅŸtir', + transformTextToLowercaseLabel: 'Küçük Harfe Dönüştür', + transformTextToUppercaseLabel: 'Büyük Harfe Dönüştür', + transformTextCapitalizeLabel: 'BaÅŸ Harfleri Büyüt' +}); diff --git a/plugins/ckeditor4/texttransform/plugin.js b/plugins/ckeditor4/texttransform/plugin.js new file mode 100644 index 0000000..7ccdcfe --- /dev/null +++ b/plugins/ckeditor4/texttransform/plugin.js @@ -0,0 +1,151 @@ +/** + * @authors: Önder Ceylan <onderceylan@gmail.com>, PPKRAUSS https://github.com/ppKrauss + * @license Licensed under the terms of GPL, LGPL and MPL licenses. + * @version 1.1 + * @history v1.0 at 2013-05-09 by onderceylan, v1.1 at 2013-08-27 by ppkrauss. + */ + +CKEDITOR.plugins.add('texttransform', + { + + // define lang codes for available lang files here + lang: 'en,tr', + + // plugin initialise + init: function(editor) + { + // set num for switcher loop + var num = 0; + + // add transformTextSwitch command to be used with button + editor.addCommand('transformTextSwitch', + { + exec : function() + { + var selection = editor.getSelection(); + var commandArray = ['transformTextToUppercase', 'transformTextToLowercase', 'transformTextCapitalize']; + + if (selection.getSelectedText().length > 0) { + + selection.lock(); + + editor.execCommand( commandArray[num] ); + + selection.unlock(true); + + if (num < commandArray.length - 1) { + num++; + } else { + num = 0; + } + + } + } + }); + + // add transformTextToUppercase command to be used with buttons and 'execCommand' method + editor.addCommand('transformTextToUppercase', + { + exec : function() + { + var selection = editor.getSelection(); + if (selection.getSelectedText().length > 0) { + var ranges = selection.getRanges(), + walker = new CKEDITOR.dom.walker( ranges[0] ), + node; + while ( ( node = walker.next() ) ) + if ( node.type == CKEDITOR.NODE_TEXT && node.getText() ) + if (editor.langCode == "tr") { + node.$.textContent = node.$.textContent.trToUpperCase(); + } else { + node.$.textContent = node.$.textContent.toLocaleUpperCase(); + } + }//if + } //func + }); + + // add transformTextToUppercase command to be used with buttons and 'execCommand' method + editor.addCommand('transformTextToLowercase', + { + exec : function() + { + var selection = editor.getSelection(); + if (selection.getSelectedText().length > 0) { + var ranges = selection.getRanges(), + walker = new CKEDITOR.dom.walker( ranges[0] ), + node; + while ( ( node = walker.next() ) ) + if ( node.type == CKEDITOR.NODE_TEXT && node.getText() ) + if (editor.langCode == "tr") { + node.$.textContent = node.$.textContent.trToLowerCase(); + } else { + node.$.textContent = node.$.textContent.toLocaleLowerCase(); + } + + }//if + + } + }); + + // add transformTextCapitalize command to be used with buttons and 'execCommand' method + editor.addCommand( 'transformTextCapitalize', + { + exec : function() + { + var selection = editor.getSelection(); + if (selection.getSelectedText().length > 0) { + var ranges = selection.getRanges(), + walker = new CKEDITOR.dom.walker( ranges[0] ), + node; + while ( ( node = walker.next() ) ) + if ( node.type == CKEDITOR.NODE_TEXT && node.getText() ) + node.$.textContent = node.$.textContent.replace( + /[^\s]\S*/g, + function(txt){ + if (editor.langCode == "tr") { + return txt.charAt(0).trToUpperCase() + + txt.substr(1).trToLowerCase(); + } else { + return txt.charAt(0).toLocaleUpperCase() + + txt.substr(1).toLocaleLowerCase(); + } + + } + ); + }//if + } + }); + + // add TransformTextSwitcher button to editor + editor.ui.addButton('TransformTextSwitcher', + { + label: editor.lang.texttransform.transformTextSwitchLabel, + command: 'transformTextSwitch', + icon: this.path + 'images/transformSwitcher.png' + } ); + + // add TransformTextToLowercase button to editor + editor.ui.addButton('TransformTextToLowercase', + { + label: editor.lang.texttransform.transformTextToLowercaseLabel, + command: 'transformTextToLowercase', + icon: this.path + 'images/transformToLower.png' + } ); + + // add TransformTextToUppercase button to editor + editor.ui.addButton('TransformTextToUppercase', + { + label: editor.lang.texttransform.transformTextToUppercaseLabel, + command: 'transformTextToUppercase', + icon: this.path + 'images/transformToUpper.png' + } ); + + // add TransformTextCapitalize button to editor + editor.ui.addButton('TransformTextCapitalize', + { + label: editor.lang.texttransform.transformTextCapitalizeLabel, + command: 'transformTextCapitalize', + icon: this.path + 'images/transformCapitalize.png' + } ); + } + } ); diff --git a/plugins/ckeditor4/token/LICENSE b/plugins/ckeditor4/token/LICENSE new file mode 100644 index 0000000..8cdb845 --- /dev/null +++ b/plugins/ckeditor4/token/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/> + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + diff --git a/plugins/ckeditor4/token/ReadMe.md b/plugins/ckeditor4/token/ReadMe.md new file mode 100644 index 0000000..b6ac641 --- /dev/null +++ b/plugins/ckeditor4/token/ReadMe.md @@ -0,0 +1,103 @@ +Token Replacement CKEditor Plugin +================================= + +Overview +-------- + +This plugin allows you to insert tokens into the CKEditor for replacement with data. For instance, it can be used for variables in [mako](http://www.makotemplates.org) or [twig](http://twig.sensiolabs.org) templates, or your own custom token replacement code. + +The default token style is currently for mako template variables (e.g. - ${tokenName}), as that is what I initially developed this for, but it is configurable for any strings to start/end a token. You can also configure what tokens are available in the dropdown. + +This plugin is largely based on the [placeholder](http://ckeditor.com/addon/placeholder) plugin made by the CKEditor folks. I haven't supplied all of the translations that they did in that plugin, but I will add in any contributed translations that folks would like if they supply them. + +How To Use It +------------- + +#### Install It +Put the `token` folder in the `ckeditor/plugins` folder. + +#### Enable It + +##### Globally + +Add the plugin along with any other configuration items you would like to the `config.js` file in the `ckeditor` folder. + +``` +// Enable token plugin +config.extraPlugins = 'token'; + +// Configure available tokens +config.availableTokens = [ + ["", ""], + ["token1", "token1"], + ["token2", "token2"], + ["token3", "token3"], +]; + +// Configure token string +config.tokenStart = '[['; +config.tokenEnd = ']]'; +``` + +##### At instantiation + +``` +CKEDITOR.replace('some-class', { + extraPlugins: 'token', + availableTokens: [ + ["", ""], + ["token1", "token1"], + ["token2", "token2"], + ["token3", "token3"], + ] +}); +``` + +Or... + +``` +CKEDITOR.replaceAll(function (textarea, config) { + if (textarea.className == 'some-class') { + // Enable token plugin + config.extraPlugins = 'token'; + + // Configure available tokens + config.availableTokens = [ + ["", ""], + ["token1", "token1"], + ["token2", "token2"], + ["token3", "token3"], + ]; + return true; + } + return false; +}); +``` + +Configuration Options +--------------------- + +None of these are required, per se, but the plugin will be pretty useless if you don't configure the list of available tokens. I may add a configuration to allow the user to type in arbitrary tokens like the original placeholder plugin, but that isn't something I needed in the initial version. + +#### availableTokens + +A list of tokens the user can select from the dropdown in the format: + +``` +[ [ "Display Text", "form_value"], [ "Display Text 2", "form_value_2" ] ] +``` + +#### tokenStart + +A string that designates the beginning of a token (`${` by default). + +#### tokenEnd + +A string that deginates the end of a token (`}` by default). + +Putting it all together +----------------------- + +So given the configuration above, a user would be presented with a dialog that has a dropdown with the items 'Display Text' and 'Display Text 2' in it. When they select 'Display Text 2' and hit OK, the token `${form_value_2}` will be inserted at the caret. + +The user can also double-click any of the tokens to change their value. \ No newline at end of file diff --git a/plugins/ckeditor4/token/dialogs/token.js b/plugins/ckeditor4/token/dialogs/token.js new file mode 100644 index 0000000..52029af --- /dev/null +++ b/plugins/ckeditor4/token/dialogs/token.js @@ -0,0 +1,46 @@ +/** + * @fileOverview Definition for token plugin dialog. + * + */ + +'use strict'; + +CKEDITOR.dialog.add( 'token', function( editor ) { + var lang = editor.lang.token; + var generalLabel = editor.lang.common.generalTab; + var tokens = [["",""]]; + if (typeof editor.config.availableTokens != "undefined") { + tokens = editor.config.availableTokens; + } + + return { + title: lang.title, + minWidth: 300, + minHeight: 60, + contents: [ + { + id: 'info', + label: generalLabel, + title: generalLabel, + elements: [ + // Dialog window UI elements. + { + id: "name", + type: "select", + style: 'width: 300px;', + label: lang.name, + 'default': '', + required: true, + items: tokens, + setup: function( widget ) { + this.setValue( widget.data.name ); + }, + commit: function( widget ) { + widget.setData( 'name', this.getValue() ); + } + } + ] + } + ] + }; +} ); diff --git a/plugins/ckeditor4/token/icons/hidpi/token.png b/plugins/ckeditor4/token/icons/hidpi/token.png new file mode 100644 index 0000000000000000000000000000000000000000..5b77c582717ec68080388430fa1db2459fc24ffa GIT binary patch literal 14976 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 YCieTY9f#*Vp*|y8R4~u^VO~wke<fdaSO5S3 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/token/icons/token.png b/plugins/ckeditor4/token/icons/token.png new file mode 100644 index 0000000000000000000000000000000000000000..1d0276d2c8931c6298b409b8ce091c291f088614 GIT binary patch literal 14658 zcmeI3TWs4@7{^_yf>Jiv+Ym2UDNLP&<4Z1XOp>W<x;BV(RT{JogjUx+X{{!<vE3yt znl!B-=p$>Tag!z?E>9pa4PFM?141x?5Kl}@NSojZkcPw%Xiw$XPLnTb(zBsGo~TK_ zp7Z~I-|_EU;uo(^PfhF{d~}dun7#SQToHfo^WOva;m^lzZK?R{0ekYei~Fzo@4mys zZ`T=SWY{Rpdb5RR6wRteRo$9L(R$U!YKBQ4s@tlzggka0Ef{7d^5><?5!TQ%kz<L1 zP_W0)qA|JZpqbUFlD4{}rS!<5>|naC-~?6VscgMkF<qsei3E8S9Q)0DgbgI#QYJF$ z7i4D()9je#AT|+Aa+;8oSveII6S5qapJXLLOz=XCj|rR<Q{sXWm)OQDk{!fR+R@8O zF?Xa<4*!>lEP9@;@O-USi`HUM%UR&XR4T;_5-&*{R&ef$>8W+jbcezu+j(-x)f~h2 z49jHwyz0EQ>}4VmzfkklxUQ<*EM&S3c9<exS8ZO53Vb({t~EXOvQr6$rfWQ^peiyw z7yHDnK6}yfEO*iBQL@?HvoM~MLZMl^>v*fxuBBaX{3J%uK-$&mmR4-U7m;f%I~p24 zi7#cS+tqtUxivX$nf#ufV@GwPht2N^ZNX9qXDE%YRT*=T>RC?7vMSkdl}&FWWXHyW zRmBb$RLwAbt_Rb6r>QmLt$Zk_dMN9!NKTMBK`IHdg8!sAC&U#&07*h+M~;G}8|4*{ zV}ujMk~pG>NktriIe@Y=2i`%t>Zx~>1!_SaT~o@IQ&qjJQB@ZZZ<`BgzSRhn&2^=W zSryB{!$R3un(x*OT)|pX@}}#lriSvlEN+MzhOWfqa#@sRi9@;`=i&)5#;Iyt=i+E& zBq61cl#=xTVxa)-J5uK?ZQ0*1jnw*GrUv#MsgF7aKI_y9(D<Xj+Y(*U>?k#9xOj!G zfR&5aZ*ZE;pcmU)w>v6Ea4OlV<0600Wg^>~u6c|#PbuFM>|I6G{PQfU`C9^Ez-_Iq zVKto%oAG}qFw76^y=&AKk-6K33R4BD-bq}m?A25UjV|Cdac8?d%-e44ERg2?Ux13y zJ{4hW`wVTb*_|_*_764%uLe9aHJAl4&F^SyRSxyD{;XD(1AR*HU%cplHmtC_(|UY& zE9~yHww%wJhL@EZ)jFDi%Rha?gJA~WD4=XIk%%SId}ni~W7?>r%52WSJJ|KtrI>7Z zIy<@=kM}Zyj)pOuD)5sY%w*V#Zy4~s3g5h0X`kfgR=CGO>x%AiVwjE=fi#FQ#YIE} z1r!&gL5wLbA|fcDxF8K;OmPtrK>@`DX%J(Ii--scC@x5Y7*kwCL{LC+K^nxE;vyn~ z0*VXLAjT9I5fKznT#yDarnrcRpn&3nG>9?9MMMMz6c?mHj43W6A}FA^APr(naS;(g z0mTJr5MzpqhzJTOE=YqIQ(QzuP(X1(8pN35A|iqUiVM;p#uOJ35fo5dkOncPxQK|L zfZ~EQh%v=QL<9vC7o<UqDJ~)+D4@6?4Ps1j5fMQF#RX{)<6UtLwjTdOCVu9xh9B;` znUp8+gMq9zSu8Nj>JtoedW~UjZ{hFX7-m^unBV6ZMtOr__FHF9e02nCH}kpCQvKS` z8>0_>$?oa@`n3ly|GIVkMt`5h8=LQbP}q3>*e~-J%b!aJ)}NB*{$Q_6z4=}8=r^gM zE8o9${^9(EcVeGx{`J`{c_6=89Qf$dZ*N_FZvBgYQycrQttpJQ=gg%O2OiP(okKsp z8vF26{r(?bx;$~?=F11y&i~E#pD$+L-#q){E3ZHP&%(8>Q!kt@K7HZR_1hwIZuL~( U+~MK(@c5Yg_*CxW!*gf;1FRG42><{9 literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/token/lang/en.js b/plugins/ckeditor4/token/lang/en.js new file mode 100644 index 0000000..98d5e45 --- /dev/null +++ b/plugins/ckeditor4/token/lang/en.js @@ -0,0 +1,6 @@ +CKEDITOR.plugins.setLang( 'token', 'en', { + title: 'Token Insertion', + toolbar: 'Token', + name: 'Token to Insert', + pathName: 'token' +} ); diff --git a/plugins/ckeditor4/token/lang/ru.js b/plugins/ckeditor4/token/lang/ru.js new file mode 100644 index 0000000..dc240df --- /dev/null +++ b/plugins/ckeditor4/token/lang/ru.js @@ -0,0 +1,6 @@ +CKEDITOR.plugins.setLang( 'token', 'ru', { + title: 'Ð’Ñтавить токен', + toolbar: 'Токен', + name: 'Токен', + pathName: 'token' +} ); diff --git a/plugins/ckeditor4/token/plugin.js b/plugins/ckeditor4/token/plugin.js new file mode 100644 index 0000000..9cc7e22 --- /dev/null +++ b/plugins/ckeditor4/token/plugin.js @@ -0,0 +1,115 @@ +/** + * @fileOverview The "token" plugin. + * + */ + +'use strict'; + +function escapeRegExp(string){ + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + +( function() { + CKEDITOR.plugins.add( 'token', { + requires: 'widget,dialog', + lang: 'en,ru', + icons: 'token', + hidpi: true, + + onLoad: function() { + // Register styles for token widget frame. + CKEDITOR.addCss( '.cke_token{background-color:#ff0}' ); + }, + + init: function( editor ) { + + var lang = editor.lang.token; + var tokenStart = '${'; + var tokenEnd = '}'; + if (typeof editor.config.tokenStart != 'undefined') { + tokenStart = editor.config.tokenStart; + } + if (typeof editor.config.tokenEnd != 'undefined') { + tokenEnd = editor.config.tokenEnd; + } + var tokenStartNum = tokenStart.length; + var tokenEndNum = 0 - tokenEnd.length; + + // Register dialog. + CKEDITOR.dialog.add( 'token', this.path + 'dialogs/token.js' ); + + // Put ur init code here. + editor.widgets.add( 'token', { + // Widget code. + dialog: 'token', + pathName: lang.pathName, + // We need to have wrapping element, otherwise there are issues in + // add dialog. + template: '<span class="cke_token"></span>', + + downcast: function() { + return new CKEDITOR.htmlParser.text( tokenStart + this.data.name + tokenEnd ); + }, + + init: function() { + // Note that token markup characters are stripped for the name. + this.setData( 'name', this.element.getText().slice( tokenStartNum, tokenEndNum ) ); + }, + + data: function() { + this.element.setText( tokenStart + this.data.name + tokenEnd ); + } + } ); + + editor.ui.addButton && editor.ui.addButton( 'CreateToken', { + label: lang.toolbar, + command: 'token', + toolbar: 'insert,5', + icon: 'token' + } ); + }, + + afterInit: function( editor ) { + + var tokenStart = '${'; + var tokenEnd = '}'; + if (typeof editor.config.tokenStart != 'undefined') { + tokenStart = editor.config.tokenStart; + } + if (typeof editor.config.tokenEnd != 'undefined') { + tokenEnd = editor.config.tokenEnd; + } + var tokenStartRegex = escapeRegExp(tokenStart); + var tokenEndRegex = escapeRegExp(tokenEnd); + var tokenReplaceRegex = new RegExp(tokenStartRegex + '([^' + tokenStartRegex + tokenEndRegex +'])+' + tokenEndRegex, 'g'); + + editor.dataProcessor.dataFilter.addRules( { + text: function( text, node ) { + var dtd = node.parent && CKEDITOR.dtd[ node.parent.name ]; + + // Skip the case when token is in elements like <title> or <textarea> + // but upcast token in custom elements (no DTD). + if ( dtd && !dtd.span ) + return; + + return text.replace( tokenReplaceRegex, function( match ) { + // Creating widget code. + var widgetWrapper = null, + innerElement = new CKEDITOR.htmlParser.element( 'span', { + 'class': 'cke_token' + } ); + + // Adds token identifier as innertext. + innerElement.add( new CKEDITOR.htmlParser.text( match ) ); + widgetWrapper = editor.widgets.wrapElement( innerElement, 'token' ); + + // Return outerhtml of widget wrapper so it will be placed + // as replacement. + return widgetWrapper.getOuterHtml(); + } ); + } + } ); + } + } ); + +} )(); diff --git a/plugins/ckeditor4/tweetabletext/README.md b/plugins/ckeditor4/tweetabletext/README.md new file mode 100644 index 0000000..4ce6f1e --- /dev/null +++ b/plugins/ckeditor4/tweetabletext/README.md @@ -0,0 +1,58 @@ +# Tweetable Text +A simple CKEditor plugin to make some of text tweetable. + +##### Screenshots for the UI as below: + +![Screenshot] +(http://i.imgur.com/mQAu3wI.png) + +![Screenshot] +(http://i.imgur.com/38J9RLn.png) + +![Screenshot] +(http://i.imgur.com/w08LYCz.png) + +------------------------------------------------------------------ + +##### Screenshot on the frontend as below: + +![Screenshot] +(http://i.imgur.com/1ATzYJ3.png) + +##### CSS for the frontend: + +```css +a.tweetabletext { + text-decoration: underline; +} +a.tweetabletext:hover { + background-color: #A9F43B; + color: #2C4414; + text-decoration: none; +} +a.tweetabletext::after { + display: inline-block; + background: url("http://i.imgur.com/ikC8axw.png") no-repeat center center; + width: 16px; + height: 16px; + content: "\00a0"; + text-decoration: none; + margin: 0; + margin-left: 5px; + right: 0px; + position: relative; + padding: 0; + top: 3px; +} +``` +_feel free to make modification on the css._ + + +##### @todo: +* Proper Roadmap planning. +* ~~URL need to encode~~ (_checked_). +* Adding more parameter as mentioned here: https://dev.twitter.com/web/tweet-button/web-intent +* Improving README file. + + + diff --git a/plugins/ckeditor4/tweetabletext/css/tweetabletext.css b/plugins/ckeditor4/tweetabletext/css/tweetabletext.css new file mode 100755 index 0000000..40bdf71 --- /dev/null +++ b/plugins/ckeditor4/tweetabletext/css/tweetabletext.css @@ -0,0 +1,7 @@ +.tweetabletext { + margin: 0; + padding: 0; + background-color: #4099FF; + text-decoration: none; + color: #ffffff; +} diff --git a/plugins/ckeditor4/tweetabletext/dialogs/tweetabletext.js b/plugins/ckeditor4/tweetabletext/dialogs/tweetabletext.js new file mode 100755 index 0000000..8e007d3 --- /dev/null +++ b/plugins/ckeditor4/tweetabletext/dialogs/tweetabletext.js @@ -0,0 +1,92 @@ +CKEDITOR.dialog.add('tweetabletextDialog', function(editor) { + return { + title: 'TweetableText Properties', + minWidth: 400, + minHeight: 200, + contents: [ + { + id: 'tab-basic', + label: 'Basic Settings', + elements: [ + { + type: 'text', + id: 'displaytext', + label: 'Display Text', + validate: CKEDITOR.dialog.validate.notEmpty('Display Text field can not be empty.'), + setup: function(element) { + this.setValue(element.getText()); + + }, + commit: function(element) { + element.setText(this.getValue()); + + } + }, + { + type: 'text', + id: 'tweetabletext', + label: 'Tweetable Text', + validate: CKEDITOR.dialog.validate.notEmpty('Tweetable Text field can not be empty.'), + setup: function(element) { + var splitURL = element.getAttribute('href').split("?"); + var dataTweet = splitURL[1].split("="); + var decodedDataTweet = decodeURI(dataTweet[1]); + this.setValue(decodedDataTweet); + + }, + commit: function(element) { + var twitterBaseUrl = 'http://twitter.com/intent/tweet?'; + var encodedValue = encodeURI(this.getValue()); + twitterBaseUrl += 'text=' + encodedValue; + element.setAttribute('href', twitterBaseUrl); + + // For some reason, without doing this the changes won't be reflected on frontend. + element.setAttribute('data-cke-saved-href', twitterBaseUrl); + } + } + ] + } + ], + + onShow: function() { + var selection = editor.getSelection(); + var element = selection.getStartElement(); + + if (element.getAttribute('class') !== 'tweetabletext') { + element = editor.document.createElement('a'); + this.insertMode = true; + } + else { + this.insertMode = false; + } + + this.element = element; + if (!this.insertMode) { + this.setupContent(this.element); + } + }, + + onOk: function() { + var dialog = this; + var retrieveElement = this.element; + + var getDisplayText = dialog.getValueOf('tab-basic', 'displaytext'); + var getTweetableText = dialog.getValueOf('tab-basic', 'tweetabletext'); + var getTweetableText = encodeURI(getTweetableText); + + var twitterBaseUrl = 'http://twitter.com/intent/tweet?'; + var tweetabletext = editor.document.createElement('a'); + tweetabletext.setAttribute('class', 'tweetabletext'); + + twitterBaseUrl += 'text=' + getTweetableText; + tweetabletext.setAttribute('href', twitterBaseUrl); + tweetabletext.setText(getDisplayText); + + this.commitContent(retrieveElement); + + if (this.insertMode) { + editor.insertElement(tweetabletext); + } + } + }; +}); diff --git a/plugins/ckeditor4/tweetabletext/icons/tweetabletext.png b/plugins/ckeditor4/tweetabletext/icons/tweetabletext.png new file mode 100755 index 0000000000000000000000000000000000000000..057ab004b5d826e151a4f9cc6a66d88caffa8911 GIT binary patch literal 1509 zcmbVMT}%{L6dqg_sA8nmMy!cU7j3A8ow>X0-^j}T%x<BwNC7Kp)$TBJVJEmd<Ln>{ ziioWWjRg{0+q5?FKw6$ECbfwv%~C-uL8X=08cY)ugvM&sqT&xSy$h`N!T8Y0%-nm= zobNl|IrrRYEXaRz;rv(TV;HtDH-|1nV^ZWvh(qs`357w!GTBuk7YSu@6(d2+&IzRu z&-F9qun;m_^|n5kg<&cmUtA)Wc=9M#@N1cfk2d5N5gNm?vO^-nRzMjqh2?y}s=4_? zScCJNRkP9HAw8lK`uLn02^Q7l7qc}LtcBBLuf?-M6e93LnZZN;t$`pFvT9~{DKw9m z2@O8uB3D>7v!Y5o1-Mg?Aa2m=GguM;+-TH-OoPz~(s3OLbOecRV+P2i3`R<4!sjjx ziY9SoR3Yu2i-lHJjZc<EiXf`0s<c<ss>Xz+$mPICQ!U<dG4q4#-R>BM?lDGSD!{ zO1voZLI962GNnSLY}Fv8vnlvRkLL+-AUIbjR5BvOhy>7*gx?>@YsNb$7s979p6MMd zt`;Ft2!leU#G?HuOO1k2?VcYf;)v8x>m?p-3bU0K*h)VP$hovtgT81vo}=6*lN$h2 zCTY@<Ml(R^XF45DquEZ=CWkB266JUn)@3#Vy~}O4yLEN|T);xQEN)uwa5)SPgWgU@ zvAKbu%mi2%jmx9Bb6CrBv6NGSj4VjSg0MB(0R=um7J@!O#GOS3Ex<ht%LgKs$Og^k zOGAm@4mr0Z`0<$vQ~Wa&ka{!fpQo9dodBgyJAq4QrVVDKeiqC9pQ;f^3=wIM|Flcg zgnBSCebW4B@#Ofx06H@gIvkrP`0W@rZ*eYdFAfcrPAN*ZYSr$>dPkQu+!Ygd+Id8M z@6zpEU0-7><J+#)U&I<xux+UYH&pG1=cPJFUQ@Zt4yhGodYjD@+qNvNYB=0}c&#el zr0TwTB=Nw}6}3~!qtiQEzf)x|TEF~Y=jR=xb?VKvttS`Q7RIHWW1(kWA4pgSNO3|> zCNzMljmF{fmV(vZcR=xUfA7mZZNyK?67FFgbXMcFD||oiY#Fr0HN2J6x7+WIJCmM> zt2V@*_`dEO5V$2@id`PMpS(NtP54!>I%NwWJ8NR)znkOJul$o<M{}@a?^(rb-{8If z2lIB)<wv`&O^+mX=<V2_dF1rtqRWe#TE<z}sXCw7)O+yPedEWMz~8;?rEtGD-F8Q5 z9u!k7X7kjQ(WN`@e%ko)?YjfYY9%@OV#2A~rt8Y4Q|}*5Il1`!srZ4wrV|rgcLt7R zXMLFYhNQpY)4jOnh340jj)9)xjFyikEe}_X4vmK&PKKu^x~@((zI&$9rYJUmrQM28 zuB_`>2}{;?h=1vBHI`oJ?AxP1yXC;+srnr`yt@5ZOwPD!<h|hwDXq<+2L*#vYWLFG zn6cwOQr8#Mf3fI;bmyV+*fICs5uvUk@5H12(Xr3Ms|Ui$#<KFV`<kBK`-NZae~{m# zyR>W_^V@RU@%6tLx)XO-t3TmGt;uakqXR^1oBArN#$w{Idt7(_nwNIiB0t_-S3do% H!@K8S?9(ld literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/tweetabletext/plugin.js b/plugins/ckeditor4/tweetabletext/plugin.js new file mode 100755 index 0000000..5e31ab3 --- /dev/null +++ b/plugins/ckeditor4/tweetabletext/plugin.js @@ -0,0 +1,78 @@ +CKEDITOR.plugins.add('tweetabletext', { + icons: 'tweetabletext', + beforeInit: function () { + + }, + + init: function(editor) { + editor.addCommand('tweetabletext', new CKEDITOR.dialogCommand('tweetabletextDialog')); + editor.addCommand('untweetabletext', new CKEDITOR.unlinkCommand()); + + editor.ui.addButton('TweetableText', { + label: 'Insert TweetableText', + command: 'tweetabletext', + toolbar: 'insert' + }); + + if (editor.contextMenu) { + editor.addMenuGroup('tweetabletextGroup'); + + editor.addMenuItems({ + tweetabletextItem: { + label: 'Edit TweetableText', + icon: this.path + 'icons/tweetabletext.png', + command: 'tweetabletext', + group: 'tweetabletextGroup' + }, + unTweetabletextItem: { + label: 'Remove TweetableText', + icon: this.path + 'icons/tweetabletext.png', + command: 'untweetabletext', + group: 'tweetabletextGroup' + }, + + }); + + editor.contextMenu.addListener(function(element) { + if (element.getAttribute('class') === 'tweetabletext') { + return { tweetabletextItem: CKEDITOR.TRISTATE_OFF, unTweetabletextItem: CKEDITOR.TRISTATE_OFF,}; + } + }); + } + + CKEDITOR.dialog.add('tweetabletextDialog', this.path + 'dialogs/tweetabletext.js'); + + if (typeof editor.config.contentsCss === 'object') { + editor.config.contentsCss.push(CKEDITOR.getUrl(this.path + 'css/tweetabletext.css')); + } + } +}); + +// This part was getting from http://ckeditor.com/addon/link. +CKEDITOR.unlinkCommand = function() {}; +CKEDITOR.unlinkCommand.prototype = { + exec: function(editor) { + var style = new CKEDITOR.style({ + element: 'a', + type: CKEDITOR.STYLE_INLINE, + alwaysRemoveElement: 1 + }); + + editor.removeStyle(style); + }, + + refresh: function(editor, path) { + var element = path.lastElement && path.lastElement.getAscendant('a', true); + if (element && element.getName() === 'a' && element.getAttribute('href') && element.getChildCount()) { + this.setState(CKEDITOR.TRISTATE_OFF); + } + else { + this.setState(CKEDITOR.TRISTATE_DISABLED); + } + }, + + contextSensitive: 1, + startDisabled: 1, + requiredContent: 'a[href]' +}; + \ No newline at end of file diff --git a/plugins/ckeditor4/videodetector/dialogs/videoDialog.js b/plugins/ckeditor4/videodetector/dialogs/videoDialog.js new file mode 100644 index 0000000..93f81b8 --- /dev/null +++ b/plugins/ckeditor4/videodetector/dialogs/videoDialog.js @@ -0,0 +1,143 @@ +/* +* Plugin developed by Netbroad, C.B. +* +* LICENCE: GPL, LGPL, MPL +* NON-COMMERCIAL PLUGIN. +* +* Website: netbroad.eu +* Twitter: @netbroadcb +* Facebook: Netbroad +* LinkedIn: Netbroad +* +*/ + +CKEDITOR.dialog.add( 'videoDialog', function( editor ) { + return { + title: 'Insert a Youtube, Vimeo, Dailymotion URL or embed code', + minWidth: 400, + minHeight: 100, + contents: [ + { + id: 'tab-basic', + label: 'Basic Settings', + elements: [ + { + type: 'text', + id: 'url_video', + label: 'Youtube, Vimeo, Dailymotion URL or embed code', + validate: CKEDITOR.dialog.validate.notEmpty( "Empty!" ) + } + ] + } + ], + + onOk: function(){ + var dialog = this; + + + //detectamos el video + var respuesta = detectar(); + var url = ""; + + if(respuesta.reproductor == "youtube"){ + var url = "https://www.youtube.com/embed/"+respuesta.id_video+"?autohide=1&controls=1&showinfo=0"; + } + else if(respuesta.reproductor == "vimeo"){ + var url = "https://player.vimeo.com/video/"+respuesta.id_video+"?portrait=0"; + } + else if(respuesta.reproductor == "dailymotion"){ + var url = "https://www.dailymotion.com/embed/video/"+respuesta.id_video; + } + + var p = new CKEDITOR.dom.element('div'); + p.setAttribute('class', 'videodetector'); + + var iframe = new CKEDITOR.dom.element('iframe'); + iframe.setAttribute('src', url); + iframe.setAttribute('frameborder', '0'); + p.append(iframe); + + // var edit_btn = new CKEDITOR.dom.element('input'); + // edit_btn.setAttribute('type', 'button'); + // edit_btn.setAttribute('value', 'Edit video'); + // edit_btn.setAttribute('class', 'edit-videodetector'); + // p.append(edit_btn); + + var remove_btn = new CKEDITOR.dom.element('input'); + remove_btn.setAttribute('type', 'button'); + remove_btn.setAttribute('value', 'Remove video'); + remove_btn.setAttribute('class', 'remove-videodetector'); + p.append(remove_btn); + + editor.insertElement(p); + + // edit_btn.on('click', function(){ + // new CKEDITOR.dialog(editor, 'videoDialog'); + // }); + + remove_btn.on('click', function(){ + var to_remove = remove_btn.getParent(); + to_remove.remove(); + }); + } + }; +}); + + +//funcion para detectar el id y la plataforma (youtube, vimeo o dailymotion) de los videos +function detectar(){ + var getDialog = document.getElementsByClassName('cke_dialog_contents').item(0); + var url = getDialog.getElementsByTagName('input').item(0).value; + var id = ''; + var reproductor = ''; + var url_comprobar = ''; + + if(url.indexOf('youtu.be') >= 0){ + reproductor = 'youtube'; + id = url.substring(url.lastIndexOf("/")+1, url.length); + } + if(url.indexOf("youtube") >= 0){ + reproductor = 'youtube' + if(url.indexOf("</iframe>") >= 0){ + var fin = url.substring(url.indexOf("embed/")+6, url.length) + id = fin.substring(fin.indexOf('"'), 0); + }else{ + if(url.indexOf("&") >= 0) + id = url.substring(url.indexOf("?v=")+3, url.indexOf("&")); + else + id = url.substring(url.indexOf("?v=")+3, url.length); + } + url_comprobar = "https://gdata.youtube.com/feeds/api/videos/" + id + "?v=2&alt=json"; + //"https://gdata.youtube.com/feeds/api/videos/" + id + "?v=2&alt=json" + } + if(url.indexOf("vimeo") >= 0){ + reproductor = 'vimeo' + if(url.indexOf("</iframe>") >= 0){ + var fin = url.substring(url.lastIndexOf('vimeo.com/"')+6, url.indexOf('>')) + id = fin.substring(fin.lastIndexOf('/')+1, fin.indexOf('"',fin.lastIndexOf('/')+1)) + }else{ + id = url.substring(url.lastIndexOf("/")+1, url.length) + } + url_comprobar = 'http://vimeo.com/api/v2/video/' + id + '.json'; + //'http://vimeo.com/api/v2/video/' + video_id + '.json'; + } + if(url.indexOf('dai.ly') >= 0){ + reproductor = 'dailymotion'; + id = url.substring(url.lastIndexOf("/")+1, url.length); + } + if(url.indexOf("dailymotion") >= 0){ + reproductor = 'dailymotion'; + if(url.indexOf("</iframe>") >= 0){ + var fin = url.substring(url.indexOf('dailymotion.com/')+16, url.indexOf('></iframe>')) + id = fin.substring(fin.lastIndexOf('/')+1, fin.lastIndexOf('"')) + }else{ + if(url.indexOf('_') >= 0) + id = url.substring(url.lastIndexOf('/')+1, url.indexOf('_')) + else + id = url.substring(url.lastIndexOf('/')+1, url.length); + } + url_comprobar = 'https://api.dailymotion.com/video/' + id; + // https://api.dailymotion.com/video/x26ezrb + } + return {'reproductor':reproductor,'id_video':id}; +} \ No newline at end of file diff --git a/plugins/ckeditor4/videodetector/icons/icon_black.png b/plugins/ckeditor4/videodetector/icons/icon_black.png new file mode 100644 index 0000000000000000000000000000000000000000..5f8a0434522173b13fe56846b5cd6ab27f581db4 GIT binary patch literal 656 zcmV;B0&o3^P)<h;3K|Lk000e1NJLTq000pH000pP1^@s6J8eh$00004XF*Lt006O% z3;baP0006<Nkl<ZI1!DMPiPZS5XQ5cElnU^^x#1(B-j?QUflfKrbrYo!Gj{+ys4nn zgV2fxp%6q`u!5ITM9^bEB6x_H7AkJNX#PnNwM8hs^^lVi5dzt)zj<WKnzrb`*YCY= z=FPmFd8roYvt%+EbzS!cI0It14NcRwSid(6<9Vf0`P_FTpm~C6ngawsAovcN4t}s- zhg~p=eyF#82H$Qp8oyy>5*)~8vj+5vz`O7lUDtE<di@|62bpLzdKmo**Z|i_zLLpg z4zO0HlC)Z_Id<p4awrs<sMTsq1j-GR6^liO%7s`gb`t#!#jJL_z3BNhdN9)McE2L5 zMIsT)w(XAR+>5z&grckXPSGQa9(~lwdKF0X?)wwO<MCo5kvQF-h?rj-z9qWjIFrJX z<Se|&CzM3+4E-`UT$N-pF;5qk>J<IXGAnyYatz)zHgSqcGAgb!z1e&|uX@<i*YF*c zq3C4n0!N+L|IZ*Uvs5aDd?BiL;cz%8qunCosL%P=Qm)O&r>oWKYrg}1gmc^Fa=9&^ zW8)l4rBcKGAl4fMPT?QxPe81R9>*_J3dl{KfT>QW^AN`+9O`}WE{;pUUPg~*diqmg zo#0LQF}TPi=0)7kD5BBeNALxTz2r69605q+OT35pmi;t|3h8uu*DWl|I)d+o#DGu1 zVDK8OZ084<%jE`}&E^8CI9-yygTDcd$|v9nFaQc*k}voPE89up3B1w-hi-y%XhS`H q8@8#wK$AasvH!(#JNXy!ui!rsHw6QO4V|<A0000<MNUMnLSTaAG&3~- literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/videodetector/icons/icon_white.png b/plugins/ckeditor4/videodetector/icons/icon_white.png new file mode 100644 index 0000000000000000000000000000000000000000..688fd85e818649c0d4a11b5fa65fb478619fc57f GIT binary patch literal 983 zcmV;|11S87P)<h;3K|Lk000e1NJLTq001HY001Hg1^@s6I!6n_00004XF*Lt006O% z3;baP000AyNkl<ZSP9jbU1*O{9LN1fV`Q^s2)U8Tyd*DSZg8PUiW=qpLL?XDVi&j= z<-+|gxU!OrsFjP+Cbc20xL8Ip%#^ozDQ(!i{C&RL|2#YY^M9UaXaDWSuRfjM`*Z$# zp68tNEHTPclF8&4Qdh#N6muBIK`!*bQ+NUope~U}^fHc|Fo8)>0Uh8gpGd5Nl3~w; zCJ8tSU68HxP<RH$4>qAhSOSGp@K?izkhpHcBX|g1AY1wKVKL-`E3a^D;&$oQ`3aMl z3GLuYGmdRAHmZ|iP!6}imCra<MAfGGNi2d^r^8$9jcJJ<hHBuY(@VE`d2BfeInd-3 z)?rVMEsP0LI}vU>J=^4uEF*Z(DX7QRt2r#8hi=ymr}xFsrX&@^7c031eL`q*7EXHQ zgL|8_CZ!8Wr@_cyl+2{`k|A64EQ3GhB8*qkn&8lSVZS98(h?kl+*45QxV=p3u7QzX zD6@h>j5Q{b8e^Yoa(<`s?lLY58hI$nPt}^?NKl5S(s&tLgFu90<x16UtcK|k=^1Wv z_52yBF$p;+rN&@vv~(X;EAw7>M(2~DO>i)=ub~aJUnsU0u*1e5HJYCiF}}vXJ*rlI z;=7#Mz9m9`5qocV6W7EeriZVF3u$4T7Lote@dp#pre#EDj*$?({yMLO$#=&YI*~jl zDI4<+MN8Rfn<9z}Eq@Zd?+>9{({2S8So%=a7Zhw^0_&h9rg)we>mavVwkC4V3Y1y8 zulkL|3Mi#%tw+%kE9Y^b^HA9f+E47_AQ++$H=^bGJm^s5CFJVZ`2&oc2nzA!!aEaT ztPFx73UM6`Zo;CFaIA}(LtsRU;lL8FN*u>cl(7@+S30)2Z;+k^VE^ETj9L;3!9FC1 zpBFMJ{T=kL0$bLHR+Dke&O+Z4nwW)?UI(1smm}MdsN+C`RiIsVUu1!2fF3)+K8NT4 z7Pad3cO_v4d;lYQp!8khvzet$jhZ|-2ex!$tWHaeGDw^Y?pIwKzO69m7C?^9sQckL z*rJcE@aKZbM15fCwW@~_XTl$`b%tmLEk>Q7y+WsQEmZoon_(*0(t)v?1+UR|dg;u5 zJe&m`>4qbhC@%22Xj~Fa7Q$7~s_QFyIIqLN!6)t_#6oXPSPe~!@b7@Npv`eMj0Pj` zQSPUx<u+&&^cL@lxE-08-Xwkd=>H(ST-ZL>xat3o{SP!~*07IWz-Ryf002ovPDHLk FV1jgV&c6Tv literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/videodetector/icons/videodetector.svg b/plugins/ckeditor4/videodetector/icons/videodetector.svg new file mode 100644 index 0000000..8f2ef99 --- /dev/null +++ b/plugins/ckeditor4/videodetector/icons/videodetector.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve"> +<g> + <g id="_x33_56._Play"> + <g> + <path fill="#FFFFFF" d="M15,4C12.8,0.2,7.9-1.1,4,1.1C0.2,3.3-1.1,8.2,1.1,12C3.3,15.9,8.2,17.2,12,15C15.9,12.8,17.2,7.9,15,4z + M11.2,13.6c-3.1,1.8-7,0.7-8.7-2.3c-1.8-3.1-0.7-7,2.3-8.7c3.1-1.8,7-0.7,8.7,2.3C15.3,7.9,14.3,11.8,11.2,13.6z M10.9,7.7 + L6.7,5.3C6.3,5,6,5.2,6,5.7l0,4.8c0,0.4,0.3,0.6,0.7,0.4l4.2-2.4C11.3,8.3,11.3,7.9,10.9,7.7z"/> + </g> + </g> +</g> +</svg> diff --git a/plugins/ckeditor4/videodetector/plugin.js b/plugins/ckeditor4/videodetector/plugin.js new file mode 100644 index 0000000..16bfa6b --- /dev/null +++ b/plugins/ckeditor4/videodetector/plugin.js @@ -0,0 +1,31 @@ +/* +* Plugin developed by Netbroad, C.B. +* +* LICENCE: GPL, LGPL, MPL +* NON-COMMERCIAL PLUGIN. +* +* Website: netbroad.eu +* Twitter: @netbroadcb +* Facebook: Netbroad +* LinkedIn: Netbroad +* +*/ + +CKEDITOR.plugins.add( 'videodetector', { + icons: 'videodetector', + init: function( editor ) { + + var pluginDirectory = this.path; + editor.addContentsCss(pluginDirectory + '/videodetector.css'); + + editor.addCommand('videodetector', new CKEDITOR.dialogCommand('videoDialog')); + editor.ui.addButton( 'VideoDetector', { + label: 'Insert a Youtube, Vimeo or Dailymotion video', + command: 'videodetector', + icon: CKEDITOR.plugins.getPath('videodetector') + '/icons/icon_black.png' + }); + + CKEDITOR.dialog.add('videoDialog', this.path + 'dialogs/videoDialog.js'); + + } +}); \ No newline at end of file diff --git a/plugins/ckeditor4/videodetector/videodetector.css b/plugins/ckeditor4/videodetector/videodetector.css new file mode 100644 index 0000000..fd7c42c --- /dev/null +++ b/plugins/ckeditor4/videodetector/videodetector.css @@ -0,0 +1,48 @@ +.videodetector { + position : relative; + width : 100%; + height : 0; + padding-bottom: 60%; +} + +.videodetector iframe { + position: absolute; + top : 0; + left : 0; + width : 100%; + height : 100%; +} + +.remove-videodetector{ + position: absolute; + top: 15px; + left: 15px; + z-index: 999; + cursor: pointer!important; + display: none; + outline: none; + padding: 10px 20px; + appearance: none; + -webkit-appearance: none; + box-shadow: 0px 2px 6px rgba(0,0,0,0.2); + border-radius: 3px; + border: none; + background-color: #e74c3c; + color: #fff; + font-weight: bold; + font-size: 12px; + text-transform: uppercase; + -webkit-transition: 0.2s; + -moz-transition: 0.2s; + -ms-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} + +.remove-videodetector:hover{ + background-color: #c0392b; +} + +.videodetector:hover .remove-videodetector{ + display: block; +} \ No newline at end of file diff --git a/plugins/ckeditor4/wordcount/README.md b/plugins/ckeditor4/wordcount/README.md new file mode 100644 index 0000000..428f2f0 --- /dev/null +++ b/plugins/ckeditor4/wordcount/README.md @@ -0,0 +1,92 @@ +CKEditor-WordCount-Plugin +========================= + +WordCount Plugin for CKEditor v4 (or above) that counts the words/characters an shows the word count and/or char count in the footer of the editor. + +![Screenshot] +(http://www.watchersnet.de/Portals/0/screenshots/dnn/CKEditorWordCountPlugin.png) + +####Demo + +http://w8tcha.github.com/CKEditor-WordCount-Plugin/ + +DISCLAIMER: This is a forked Version, i can not find the original Author anymore if anyone knows the original Author please contact me and i can include the Author in the Copyright Notices. + +####License + +Licensed under the terms of the MIT License. + +####Installation + + If building a new editor using the CKBuilder from http://ckeditor.com/, there is no need to follow numbers steps below. If adding the Word Count & Char Count plugin to an already established CKEditor, follow the numbered steps below. + +1. Download the Word Count & Char Count plugin from http://ckeditor.com/addon/wordcount or https://github.com/w8tcha/CKEditor-WordCount-Plugin. This will download a folder named **wordcount_*version*.zip** or **CKEditor-WordCount-Plugin-master.zip** to your Downloads folder. +2. Download the Notification plugin from http://ckeditor.com/addon/notification. This will download a folder named **notification_*version*.zip** to your Downloads folder. +3. Extract the .zip folders for both the Word Count & Char Count and Notification plugin. After extraction, you should have a folder named **wordcount** and a folder named **notification**. +4. Move the wordcount folder to /web/server/root/ckeditor/plugins/. Move the notification folder to /web/server/root/ckeditor/plugins/. +5. Add the following line of text to the config.js file, which is located at /web/server/root/ckeditor/. + +```javascript +config.extraPlugins = 'wordcount,notification'; +``` + +Below is an example of what your config.js file might look like after adding config.extraPlugins = 'wordcount,notification'; + +```javascript +CKEDITOR.editorConfig = function( config ) { + config.extraPlugins = 'wordcount,notification'; + config.toolbar [ + et cetera . . . + ]; +}; +``` + +There now should be text in the bottom right-hand corner of your CKEditor which counts the number of Paragraphs and number of Words in your CKEditor. + + + +To modify the behavior of the Word Count & Char Count text at the bottom right-hand corner of your CKEditor, add the following text to your config.js file located at /web/server/root/ckeditor/config.js. + +````js +config.wordcount = { + + // Whether or not you want to show the Paragraphs Count + showParagraphs: true, + + // Whether or not you want to show the Word Count + showWordCount: true, + + // Whether or not you want to show the Char Count + showCharCount: false, + + // Whether or not you want to count Spaces as Chars + countSpacesAsChars: false, + + // Whether or not to include Html chars in the Char Count + countHTML: false, + + // Maximum allowed Word Count, -1 is default for unlimited + maxWordCount: -1, + + // Maximum allowed Char Count, -1 is default for unlimited + maxCharCount: -1, + + // How long to show the 'paste' warning, 0 is default for not auto-closing the notification + pasteWarningDuration: 0, + + + // Add filter to add or remove element before counting (see CKEDITOR.htmlParser.filter), Default value : null (no filter) + filter: new CKEDITOR.htmlParser.filter({ + elements: { + div: function( element ) { + if(element.attributes.class == 'mediaembed') { + return false; + } + } + } + }) +}; +```` + +**Note:** If you plan to change some of the JavaScript, you probably will not want to use the CKBuilder, because this will place the JavaScript of the Word Count & Char Count plugin in the ckeditor.js file located at /web/server/root/ckeditor/ckeditor.js. The JavaScript for the Word Count & Char Count plugin in the ckeditor.js file is different than the JavaScript used when manually adding the Word Count & Char Count plugin. When manually adding the Word Count & Char Count plugin, the JavaScript will be in the plugin.js file located at + diff --git a/plugins/ckeditor4/wordcount/css/wordcount.css b/plugins/ckeditor4/wordcount/css/wordcount.css new file mode 100644 index 0000000..36f86d4 --- /dev/null +++ b/plugins/ckeditor4/wordcount/css/wordcount.css @@ -0,0 +1,3 @@ +.cke_wordcount {display:block;float:right;margin-top:-2px;margin-right:3px;color:black;} + +.cke_wordcountLimitReached {color:red! important} \ No newline at end of file diff --git a/plugins/ckeditor4/wordcount/lang/ar.js b/plugins/ckeditor4/wordcount/lang/ar.js new file mode 100644 index 0000000..f22d815 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/ar.js @@ -0,0 +1,11 @@ +// Arabic Translation by Amine BENHAMIDA + +CKEDITOR.plugins.setLang('wordcount', 'ar', { + WordCount: 'كلمات:', + CharCount: 'ØروÙ:', + CharCountWithHTML: 'Øرو٠مع إتش تي إم إل', + Paragraphs: 'Ùقرات', + pasteWarning: 'لا يمكن اضاÙØ© هذا المØتوى لانه تجاوز الØد الاقصى', + Selected: 'Ù…Øدد: ', + title: 'اØصائيات' +}); diff --git a/plugins/ckeditor4/wordcount/lang/ca.js b/plugins/ckeditor4/wordcount/lang/ca.js new file mode 100644 index 0000000..e47365b --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/ca.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'ca', { + WordCount: 'Paraules:', + CharCount: 'Carà cters:', + CharCountWithHTML: 'Carà cters (including HTML):', + Paragraphs: 'Paragraphs:', + pasteWarning: 'Content can not be pasted because it is above the allowed limit', + Selected: 'Selected: ', + title: 'EstadÃstiques' +}); diff --git a/plugins/ckeditor4/wordcount/lang/da.js b/plugins/ckeditor4/wordcount/lang/da.js new file mode 100644 index 0000000..73a3502 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/da.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'da', { + WordCount: 'Ord:', + CharCount: 'Karakterer:', + CharCountWithHTML: 'Karakterer (med HTML):', + Paragraphs: 'Afsnit:', + pasteWarning: 'Indholdet kan ikke indsættes da det er længere end den tilladte grænse.', + Selected: 'Markeret: ', + title: 'Statistik' +}); diff --git a/plugins/ckeditor4/wordcount/lang/de.js b/plugins/ckeditor4/wordcount/lang/de.js new file mode 100644 index 0000000..e3d3319 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/de.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'de', { + WordCount: 'Wörter:', + CharCount: 'Zeichen:', + CharCountWithHTML: 'Zeichen (inkl. HTML):', + Paragraphs: 'Absätze:', + pasteWarning: 'Content can not be pasted because it is above the allowed limit', + Selected: 'Selected: ', + title: 'Statistik' +}); diff --git a/plugins/ckeditor4/wordcount/lang/el.js b/plugins/ckeditor4/wordcount/lang/el.js new file mode 100644 index 0000000..3140df8 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/el.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'el', { + WordCount: 'ΛÎξεις:', + CharCount: 'ΧαÏακτήÏες:', + CharCountWithHTML: 'ΧαÏακτήÏες (μαζί με HTML):', + Paragraphs: 'Paragraphs:', + pasteWarning: 'Content can not be pasted because it is above the allowed limit', + Selected: 'Selected: ', + title: 'Στατιστικά' +}); diff --git a/plugins/ckeditor4/wordcount/lang/en.js b/plugins/ckeditor4/wordcount/lang/en.js new file mode 100644 index 0000000..dfc7f01 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/en.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'en', { + WordCount: 'Words:', + CharCount: 'Characters:', + CharCountWithHTML: 'Characters (with HTML):', + Paragraphs: 'Paragraphs:', + pasteWarning: 'Content can not be pasted because it is above the allowed limit', + Selected: 'Selected: ', + title: 'Statistics' +}); diff --git a/plugins/ckeditor4/wordcount/lang/es.js b/plugins/ckeditor4/wordcount/lang/es.js new file mode 100644 index 0000000..e7f4864 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/es.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'es', { + WordCount: 'Palabras:', + CharCount: 'Carácteres:', + CharCountWithHTML: 'Carácteres (con HTML):', + Paragraphs: 'Párrafos:', + pasteWarning: 'El contenido no se puede pegar, ya que se encuentra fuera del lÃmite permitido', + Selected: 'Seleccionado: ', + title: 'EstadÃsticas' +}); diff --git a/plugins/ckeditor4/wordcount/lang/eu.js b/plugins/ckeditor4/wordcount/lang/eu.js new file mode 100644 index 0000000..9eefa74 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/eu.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'eu', { + WordCount: 'Hitzak:', + CharCount: 'Karaktereak:', + CharCountWithHTML: 'Karaktereak (HTMLarekin):', + Paragraphs: 'Paragrafoak:', + pasteWarning: 'Ezin da edukia itsatsi, onartutako muga gainditu duelako', + Selected: 'Hautatuta: ', + title: 'Estatistikak' +}); diff --git a/plugins/ckeditor4/wordcount/lang/fa.js b/plugins/ckeditor4/wordcount/lang/fa.js new file mode 100644 index 0000000..2c646a9 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/fa.js @@ -0,0 +1,12 @@ +/* +Its The Persian (Farsi) Language Translate For Iranian By "Mohsen Esmaili" +*/ +CKEDITOR.plugins.setLang('wordcount', 'fa', { + WordCount: 'لغت:', + CharCount: 'کاراکتر:', + CharCountWithHTML: 'کاراکترها (با HTML):', + Paragraphs: 'پاراگراÙ:', + pasteWarning: 'Ù…Øتوای مورد نظر را نمی توان چسباند. زیرا این بیشتر از Øد مجاز است.', + Selected: 'انتخاب شده: ', + title: 'آمار' +}); \ No newline at end of file diff --git a/plugins/ckeditor4/wordcount/lang/fi.js b/plugins/ckeditor4/wordcount/lang/fi.js new file mode 100644 index 0000000..a905900 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/fi.js @@ -0,0 +1,14 @@ +/** + * Finnish localisation. + * + * @author Joel Posti / Response200.pro + */ +CKEDITOR.plugins.setLang('wordcount', 'fi', { + WordCount: 'Sanoja:', + CharCount: 'Merkkejä:', + CharCountWithHTML: 'Merkkejä (ml. HTML):', + Paragraphs: 'Kappaleita:', + pasteWarning: 'Sisältöä ei voida liittää, koska se ylittää sallitun rajan.', + Selected: 'Valittuna: ', + title: 'Statistiikkaa' +}); diff --git a/plugins/ckeditor4/wordcount/lang/fr.js b/plugins/ckeditor4/wordcount/lang/fr.js new file mode 100644 index 0000000..250935f --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/fr.js @@ -0,0 +1,11 @@ +// French Translation by Nicolas M. et Pierre-Luc Auclair + +CKEDITOR.plugins.setLang('wordcount', 'fr', { + WordCount: 'Mots :', + CharCount: 'Caractères :', + CharCountWithHTML: 'Caractères (incluant HTML) :', + Paragraphs: 'Paragraphes :', + pasteWarning: 'Le contenu ne peut pas être collé car il dépasse la limite autorisée', + Selected: 'Sélectionné :', + title: 'Statistiques' +}); diff --git a/plugins/ckeditor4/wordcount/lang/he.js b/plugins/ckeditor4/wordcount/lang/he.js new file mode 100644 index 0000000..83ebafd --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/he.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'he', { + WordCount: 'מילי×:', + CharCount: 'תווי×:', + CharCountWithHTML: '×ª×•×•×™× (כולל HTML):', + Paragraphs: 'פסק×ות:', + pasteWarning: '×œ× × ×™×ª×Ÿ להדביק תוכן בשל עודף תווי×', + Selected: '× ×‘×—×¨: ', + title: 'סטטיסטיקות' +}); \ No newline at end of file diff --git a/plugins/ckeditor4/wordcount/lang/hr.js b/plugins/ckeditor4/wordcount/lang/hr.js new file mode 100644 index 0000000..adeae1d --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/hr.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'hr', { + WordCount: 'RijeÄi:', + CharCount: 'Znakova:', + CharCountWithHTML: 'Znakova (ukljuÄujući HTML):', + Paragraphs: 'Paragraphs:', + pasteWarning: 'Content can not be pasted because it is above the allowed limit', + Selected: 'Selected: ', + title: 'Statistika' +}); diff --git a/plugins/ckeditor4/wordcount/lang/hu.js b/plugins/ckeditor4/wordcount/lang/hu.js new file mode 100644 index 0000000..715281a --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/hu.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'hu', { + WordCount: 'Szavak:', + CharCount: 'Karakaterek:', + CharCountWithHTML: 'Karakterek (HTML tagekkel):', + Paragraphs: 'Bekezdések:', + pasteWarning: 'A szöveget nem lehet beilleszteni, mert a megadott limit felett van', + Selected: 'Kiválasztva: ', + title: 'Statisztika' +}); diff --git a/plugins/ckeditor4/wordcount/lang/it.js b/plugins/ckeditor4/wordcount/lang/it.js new file mode 100644 index 0000000..c6433d1 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/it.js @@ -0,0 +1,14 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +@author translation: Davide Montorio +*/ +CKEDITOR.plugins.setLang('wordcount', 'it', { + WordCount: 'Parole:', + CharCount: 'Caratteri:', + CharCountWithHTML: 'Caratteri (HTML incluso):', + Paragraphs: 'Paragrafi:', + pasteWarning: 'Il contenuto non può essere incollato poiché supera il limite massimo di caratteri disponibili', + Selected: 'Selezionato: ', + title: 'Statistiche' +}); diff --git a/plugins/ckeditor4/wordcount/lang/ja.js b/plugins/ckeditor4/wordcount/lang/ja.js new file mode 100644 index 0000000..60576b4 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/ja.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'ja', { + WordCount: 'å˜èªžæ•°:', + CharCount: 'æ–‡å—æ•°:', + CharCountWithHTML: 'æ–‡å—æ•° (with HTML):', + Paragraphs: 'Paragraphs:', + pasteWarning: 'Content can not be pasted because it is above the allowed limit', + Selected: 'Selected: ', + title: 'ワードカウント' +}); diff --git a/plugins/ckeditor4/wordcount/lang/nl.js b/plugins/ckeditor4/wordcount/lang/nl.js new file mode 100644 index 0000000..e8fb501 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/nl.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'nl', { + WordCount: 'Woorden:', + CharCount: 'Tekens:', + CharCountWithHTML: 'Tekens (inclusief HTML):', + Paragraphs: 'Paragraven:', + pasteWarning: 'De tekst kan niet worden geplakt omdat de limiet is overschreden', + Selected: 'Selected: ', + title: 'Statistieken' +}); diff --git a/plugins/ckeditor4/wordcount/lang/no.js b/plugins/ckeditor4/wordcount/lang/no.js new file mode 100644 index 0000000..16dfae5 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/no.js @@ -0,0 +1,10 @@ +// Norwegian translation by Vegard S. +CKEDITOR.plugins.setLang('wordcount', 'no', { + WordCount: 'Ord:', + CharCount: 'Tegn:', + CharCountWithHTML: 'Tegn (including HTML):', + Paragraphs: 'Paragraphs:', + pasteWarning: 'Content can not be pasted because it is above the allowed limit', + Selected: 'Selected: ', + title: 'Statistikk' +}); diff --git a/plugins/ckeditor4/wordcount/lang/pl.js b/plugins/ckeditor4/wordcount/lang/pl.js new file mode 100644 index 0000000..7c522dc --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/pl.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'pl', { + WordCount: 'Słów:', + CharCount: 'Znaków:', + CharCountWithHTML: 'Znaków (wraz z kodem HTML):', + Paragraphs: 'Paragraphs:', + pasteWarning: 'Zawartość nie może zostać wklejona, ponieważ przekracza dozwolony limit', + Selected: 'Selected: ', + title: 'Statystyka' +}); diff --git a/plugins/ckeditor4/wordcount/lang/pt-br.js b/plugins/ckeditor4/wordcount/lang/pt-br.js new file mode 100644 index 0000000..6c45f7f --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/pt-br.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'pt-br', { + WordCount: 'Contagem de palavras:', + CharCount: 'Contagem de carateres:', + CharCountWithHTML: 'Carateres (incluindo HTML):', + Paragraphs: 'Parágrafos:', + pasteWarning: 'Conteúdo não pode ser colado porque ultrapassa o limite permitido', + Selected: 'Selecionado: ', + title: 'EstatÃsticas' +}); diff --git a/plugins/ckeditor4/wordcount/lang/pt.js b/plugins/ckeditor4/wordcount/lang/pt.js new file mode 100644 index 0000000..ddeacb7 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/pt.js @@ -0,0 +1,9 @@ +CKEDITOR.plugins.setLang('wordcount', 'pt', { + WordCount: 'Palavras:', + CharCount: 'Caracteres:', + CharCountWithHTML: 'Carateres (incluindo HTML):', + Paragraphs: 'Parágrafos:', + pasteWarning: 'O conteúdo não pode ser colado porque ultrapassa o limite permitido', + Selected: 'Selecionado: ', + title: 'EstatÃsticas' +}); diff --git a/plugins/ckeditor4/wordcount/lang/ru.js b/plugins/ckeditor4/wordcount/lang/ru.js new file mode 100644 index 0000000..54972aa --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/ru.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'ru', { + WordCount: 'Слов:', + CharCount: 'Символов:', + CharCountWithHTML: ' (Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ HTML разметку):', + Paragraphs: 'Параграфов:', + pasteWarning: 'Контент не может быть вÑтавлен, Ñ‚.к. привышает допуÑтимый лимит', + Selected: 'Выделено: ', + title: 'СтатиÑтика' +}); diff --git a/plugins/ckeditor4/wordcount/lang/sk.js b/plugins/ckeditor4/wordcount/lang/sk.js new file mode 100644 index 0000000..6db2670 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/sk.js @@ -0,0 +1,14 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'sk', { + WordCount: 'Slov:', + CharCount: 'Znakov:', + CharCountWithHTML: 'Znakov (vrátane HTML):', + Paragraphs: 'Odstavcov:', + pasteWarning: 'Obsah sa nedá prilepiÅ¥.', + Selected: 'Výber: ', + title: 'Å tatistika' +}); + diff --git a/plugins/ckeditor4/wordcount/lang/sv.js b/plugins/ckeditor4/wordcount/lang/sv.js new file mode 100644 index 0000000..ba12a75 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/sv.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'sv', { + WordCount: 'Ord:', + CharCount: 'Tecken:', + CharCountWithHTML: 'Tecken (inklusive HTML):', + Paragraphs: 'Paragraphs:', + pasteWarning: 'Content can not be pasted because it is above the allowed limit', + Selected: 'Selected: ', + title: 'Statistik' +}); diff --git a/plugins/ckeditor4/wordcount/lang/tr.js b/plugins/ckeditor4/wordcount/lang/tr.js new file mode 100644 index 0000000..ea08c87 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/tr.js @@ -0,0 +1,13 @@ +/* +Mesut ÇAKIR +mesut.cakir@hotmail.com.tr +*/ +CKEDITOR.plugins.setLang('wordcount', 'tr', { + WordCount: 'Kelime:', + CharCount: 'Karakter:', + CharCountWithHTML: 'Karakter (HTML dahil):', + Paragraphs: 'Paragraf:', + pasteWarning: 'Content can not be pasted because it is above the allowed limit', + Selected: 'Selected: ', + title: 'Ä°statistik' +}); diff --git a/plugins/ckeditor4/wordcount/lang/zh-cn.js b/plugins/ckeditor4/wordcount/lang/zh-cn.js new file mode 100644 index 0000000..853e3c6 --- /dev/null +++ b/plugins/ckeditor4/wordcount/lang/zh-cn.js @@ -0,0 +1,13 @@ +/* +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang('wordcount', 'zh-cn', { + WordCount: 'è¯æ•°:', + CharCount: 'å—符:', + CharCountWithHTML: 'å—符 (å«HTML)', + Paragraphs: '段è½:', + pasteWarning: '由于上é™å…许,内容ä¸èƒ½ç²˜è´´', + Selected: '已选择: ', + title: '统计' +}); diff --git a/plugins/ckeditor4/wordcount/plugin.js b/plugins/ckeditor4/wordcount/plugin.js new file mode 100644 index 0000000..3296ea0 --- /dev/null +++ b/plugins/ckeditor4/wordcount/plugin.js @@ -0,0 +1,430 @@ +/** + * @license Copyright (c) CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +CKEDITOR.plugins.add("wordcount", { + lang: "ar,ca,da,de,el,en,es,eu,fa,fi,fr,he,hr,hu,it,ja,nl,no,pl,pt,pt-br,ru,sk,sv,tr,zh-cn", // %REMOVE_LINE_CORE% + version: 1.16, + requires: 'htmlwriter,notification,undo', + bbcodePluginLoaded: false, + onLoad: function(editor) { + CKEDITOR.document.appendStyleSheet(this.path + "css/wordcount.css"); + }, + init: function (editor) { + var defaultFormat = "", + intervalId, + lastWordCount = -1, + lastCharCount = -1, + limitReachedNotified = false, + limitRestoredNotified = false, + snapShot = editor.getSnapshot(), + notification = null; + + + var dispatchEvent = function (type, currentLength, maxLength) { + if (typeof document.dispatchEvent == 'undefined') { + return; + } + + type = 'ckeditor.wordcount.' + type; + + var cEvent; + var eventInitDict = { + bubbles: false, + cancelable: true, + detail: { + currentLength: currentLength, + maxLength: maxLength + } + }; + + try { + cEvent = new CustomEvent(type, eventInitDict); + } catch (o_O) { + cEvent = document.createEvent('CustomEvent'); + cEvent.initCustomEvent( + type, + eventInitDict.bubbles, + eventInitDict.cancelable, + eventInitDict.detail + ); + } + + document.dispatchEvent(cEvent); + }; + + // Default Config + var defaultConfig = { + showParagraphs: true, + showWordCount: true, + showCharCount: false, + countSpacesAsChars: false, + countHTML: false, + hardLimit: true, + + //MAXLENGTH Properties + maxWordCount: -1, + maxCharCount: -1, + + // Filter + filter: null, + + // How long to show the 'paste' warning + pasteWarningDuration: 0, + + //DisAllowed functions + wordCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) { + dispatchEvent('wordCountGreaterThanMaxLengthEvent', currentLength, maxLength); + }, + charCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) { + dispatchEvent('charCountGreaterThanMaxLengthEvent', currentLength, maxLength); + }, + + //Allowed Functions + wordCountLessThanMaxLengthEvent: function (currentLength, maxLength) { + dispatchEvent('wordCountLessThanMaxLengthEvent', currentLength, maxLength); + }, + charCountLessThanMaxLengthEvent: function (currentLength, maxLength) { + dispatchEvent('charCountLessThanMaxLengthEvent', currentLength, maxLength); + } + }; + + // Get Config & Lang + var config = CKEDITOR.tools.extend(defaultConfig, editor.config.wordcount || {}, true); + + if (config.showParagraphs) { + defaultFormat += editor.lang.wordcount.Paragraphs + " %paragraphs%"; + } + + if (config.showParagraphs && (config.showWordCount || config.showCharCount)) { + defaultFormat += ", "; + } + + if (config.showWordCount) { + defaultFormat += editor.lang.wordcount.WordCount + " %wordCount%"; + if (config.maxWordCount > -1) { + defaultFormat += "/" + config.maxWordCount; + } + } + + if (config.showCharCount && config.showWordCount) { + defaultFormat += ", "; + } + + if (config.showCharCount) { + var charLabel = editor.lang.wordcount[config.countHTML ? "CharCountWithHTML" : "CharCount"]; + + defaultFormat += charLabel + " %charCount%"; + if (config.maxCharCount > -1) { + defaultFormat += "/" + config.maxCharCount; + } + } + + var format = defaultFormat; + + bbcodePluginLoaded = typeof editor.plugins.bbcode != 'undefined'; + + function counterId(editorInstance) { + return "cke_wordcount_" + editorInstance.name; + } + + function counterElement(editorInstance) { + return document.getElementById(counterId(editorInstance)); + } + + function strip(html) { + if (bbcodePluginLoaded) { + // stripping out BBCode tags [...][/...] + return html.replace(/\[.*?\]/gi, ''); + } + + var tmp = document.createElement("div"); + + // Add filter before strip + html = filter(html); + + tmp.innerHTML = html; + + if (tmp.textContent == "" && typeof tmp.innerText == "undefined") { + return ""; + } + + return tmp.textContent || tmp.innerText; + } + + /** + * Implement filter to add or remove before counting + * @param html + * @returns string + */ + function filter(html) { + if(config.filter instanceof CKEDITOR.htmlParser.filter) { + var fragment = CKEDITOR.htmlParser.fragment.fromHtml(html), + writer = new CKEDITOR.htmlParser.basicWriter(); + config.filter.applyTo( fragment ); + fragment.writeHtml( writer ); + return writer.getHtml(); + } + return html; + } + + function countCharacters(text, editorInstance) { + if (config.countHTML) { + return (filter(text).length); + } else { + var normalizedText; + + // strip body tags + if (editor.config.fullPage) { + var i = text.search(new RegExp("<body>", "i")); + if (i != -1) { + var j = text.search(new RegExp("</body>", "i")); + text = text.substring(i + 6, j); + } + + } + + normalizedText = text; + + if (!config.countSpacesAsChars) { + normalizedText = text. + replace(/\s/g, ""). + replace(/ /g, ""); + } + + normalizedText = normalizedText. + replace(/(\r\n|\n|\r)/gm, ""). + replace(/ /gi, " "); + + normalizedText = strip(normalizedText).replace(/^([\t\r\n]*)$/, ""); + + return(normalizedText.length); + } + } + + function countParagraphs(text) { + return (text.replace(/ /g, " ").replace(/(<([^>]+)>)/ig, "").replace(/^\s*$[\n\r]{1,}/gm, "++").split("++").length); + } + + function countWords(text) { + var normalizedText = text. + replace(/(\r\n|\n|\r)/gm, " "). + replace(/^\s+|\s+$/g, ""). + replace(" ", " "); + + normalizedText = strip(normalizedText); + + var words = normalizedText.split(/\s+/); + + for (var wordIndex = words.length - 1; wordIndex >= 0; wordIndex--) { + if (words[wordIndex].match(/^([\s\t\r\n]*)$/)) { + words.splice(wordIndex, 1); + } + } + + return (words.length); + } + + function limitReached(editorInstance, notify) { + limitReachedNotified = true; + limitRestoredNotified = false; + + if (config.hardLimit) { + editorInstance.loadSnapshot(snapShot); + // lock editor + editorInstance.config.Locked = 1; + } + + if (!notify) { + counterElement(editorInstance).className = "cke_path_item cke_wordcountLimitReached"; + editorInstance.fire("limitReached", {}, editor); + } + } + + function limitRestored(editorInstance) { + limitRestoredNotified = true; + limitReachedNotified = false; + editorInstance.config.Locked = 0; + snapShot = editor.getSnapshot(); + + counterElement(editorInstance).className = "cke_path_item"; + } + + function updateCounter(editorInstance) { + var paragraphs = 0, + wordCount = 0, + charCount = 0, + text; + + if (text = editorInstance.getData()) { + if (config.showCharCount) { + charCount = countCharacters(text, editorInstance); + } + + if (config.showParagraphs) { + paragraphs = countParagraphs(text); + } + + if (config.showWordCount) { + wordCount = countWords(text); + } + } + + var html = format.replace("%wordCount%", wordCount).replace("%charCount%", charCount).replace("%paragraphs%", paragraphs); + + (editorInstance.config.wordcount || (editorInstance.config.wordcount = {})).wordCount = wordCount; + (editorInstance.config.wordcount || (editorInstance.config.wordcount = {})).charCount = charCount; + + if (CKEDITOR.env.gecko) { + counterElement(editorInstance).innerHTML = html; + } else { + counterElement(editorInstance).innerText = html; + } + + if (charCount == lastCharCount && wordCount == lastWordCount) { + return true; + } + + //If the limit is already over, allow the deletion of characters/words. Otherwise, + //the user would have to delete at one go the number of offending characters + var deltaWord = wordCount - lastWordCount; + var deltaChar = charCount - lastCharCount; + + lastWordCount = wordCount; + lastCharCount = charCount; + + if (lastWordCount == -1) { + lastWordCount = wordCount; + } + if (lastCharCount == -1) { + lastCharCount = charCount; + } + + // Check for word limit and/or char limit + if ((config.maxWordCount > -1 && wordCount > config.maxWordCount && deltaWord > 0) || + (config.maxCharCount > -1 && charCount > config.maxCharCount && deltaChar > 0)) { + + limitReached(editorInstance, limitReachedNotified); + } else if ((config.maxWordCount == -1 || wordCount < config.maxWordCount) && + (config.maxCharCount == -1 || charCount < config.maxCharCount)) { + + limitRestored(editorInstance); + } else { + snapShot = editorInstance.getSnapshot(); + } + + // Fire Custom Events + if (config.charCountGreaterThanMaxLengthEvent && config.charCountLessThanMaxLengthEvent) { + if (charCount > config.maxCharCount && config.maxCharCount > -1) { + config.charCountGreaterThanMaxLengthEvent(charCount, config.maxCharCount); + } else { + config.charCountLessThanMaxLengthEvent(charCount, config.maxCharCount); + } + } + + if (config.wordCountGreaterThanMaxLengthEvent && config.wordCountLessThanMaxLengthEvent) { + if (wordCount > config.maxWordCount && config.maxWordCount > -1) { + config.wordCountGreaterThanMaxLengthEvent(wordCount, config.maxWordCount); + + } else { + config.wordCountLessThanMaxLengthEvent(wordCount, config.maxWordCount); + } + } + + return true; + } + + editor.on("key", function (event) { + if (editor.mode === "source") { + updateCounter(event.editor); + } + }, editor, null, 100); + + editor.on("change", function (event) { + updateCounter(event.editor); + }, editor, null, 100); + + editor.on("uiSpace", function (event) { + if (editor.elementMode === CKEDITOR.ELEMENT_MODE_INLINE) { + if (event.data.space == "top") { + event.data.html += "<div class=\"cke_wordcount\" style=\"\"" + + " title=\"" + + editor.lang.wordcount.title + + "\"" + + "><span id=\"" + + counterId(event.editor) + + "\" class=\"cke_path_item\"> </span></div>"; + } + } else { + if (event.data.space == "bottom") { + event.data.html += "<div class=\"cke_wordcount\" style=\"\"" + + " title=\"" + + editor.lang.wordcount.title + + "\"" + + "><span id=\"" + + counterId(event.editor) + + "\" class=\"cke_path_item\"> </span></div>"; + } + } + + }, editor, null, 100); + + editor.on("dataReady", function (event) { + updateCounter(event.editor); + }, editor, null, 100); + + editor.on("paste", function(event) { + if (config.maxWordCount > 0 || config.maxCharCount > 0) { + + // Check if pasted content is above the limits + var wordCount = -1, + charCount = -1, + text = event.editor.getData() + event.data.dataValue; + + + if (config.showCharCount) { + charCount = countCharacters(text, event.editor); + } + + if (config.showWordCount) { + wordCount = countWords(text); + } + + + // Instantiate the notification when needed and only have one instance + if(notification === null) { + notification = new CKEDITOR.plugins.notification(event.editor, { + message: event.editor.lang.wordcount.pasteWarning, + type: 'warning', + duration: config.pasteWarningDuration + }); + } + + if (config.maxCharCount > 0 && charCount > config.maxCharCount && config.hardLimit) { + if(!notification.isVisible()) { + notification.show(); + } + event.cancel(); + } + + if (config.maxWordCount > 0 && wordCount > config.maxWordCount && config.hardLimit) { + if(!notification.isVisible()) { + notification.show(); + } + event.cancel(); + } + } + }, editor, null, 100); + + editor.on("afterPaste", function (event) { + updateCounter(event.editor); + }, editor, null, 100); + + editor.on("blur", function () { + if (intervalId) { + window.clearInterval(intervalId); + } + }, editor, null, 300); + } +}); diff --git a/plugins/ckeditor4/wordcount/samples/wordcount.html b/plugins/ckeditor4/wordcount/samples/wordcount.html new file mode 100644 index 0000000..2f11345 --- /dev/null +++ b/plugins/ckeditor4/wordcount/samples/wordcount.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<!-- +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +--> +<html> +<head> + <meta charset="utf-8"> + <title>WordCount — CKEditor Sample</title> + <script src="../../../ckeditor.js"></script> + <link href="../../../samples/sample.css" rel="stylesheet"> + <meta name="ckeditor-sample-name" content="WordCount plugin"> + <meta name="ckeditor-sample-group" content="Plugins"> + <meta name="ckeditor-sample-description" content="Counts the words an shows the word count in the footer of the editor."> + <meta name="ckeditor-sample-isnew" content="1"> + <script> + CKEDITOR.disableAutoInline = true; + </script> +</head> +<body> + <h1 class="samples"> + <a href="../../../samples/index.html">CKEditor Samples</a> » WordCount Plugin + </h1> + + <div class="description"> + <p> + WordCount Plugin for CKEditor that counts the words an shows the word count in the footer of the editor.</a>. + </p> + <p> + In order to use the new plugin, include it in the <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-extraPlugins">config.extraPlugins</a></code> configuration setting. + </p> +<pre class="samples"> +CKEDITOR.replace( '<em>textarea_id</em>', { + <strong>extraPlugins: 'wordcount'</strong> +} ); +</pre> + </div> + +<textarea cols="80" id="editor1" name="editor1" rows="10"> + This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>. +</textarea> + <script> + + CKEDITOR.replace('editor1', { + extraPlugins: 'wordcount' + }); + + </script> + + <div id="footer"> + <hr> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2015, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/plugins/ckeditor4/wordcount/samples/wordcountWithMaxCount.html b/plugins/ckeditor4/wordcount/samples/wordcountWithMaxCount.html new file mode 100644 index 0000000..04c00c4 --- /dev/null +++ b/plugins/ckeditor4/wordcount/samples/wordcountWithMaxCount.html @@ -0,0 +1,110 @@ +<!DOCTYPE html> +<!-- +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +--> +<html> +<head> + <meta charset="utf-8"> + <title>WordCount — CKEditor Sample</title> + <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script> + <script src="../../../ckeditor.js"></script> + <link href="../../../samples/sample.css" rel="stylesheet"> + <meta name="ckeditor-sample-name" content="WordCount plugin"> + <meta name="ckeditor-sample-group" content="Plugins"> + <meta name="ckeditor-sample-description" content="Counts the words an shows the word count in the footer of the editor."> + <meta name="ckeditor-sample-isnew" content="1"> + <script> + CKEDITOR.disableAutoInline = true; + </script> +</head> +<body> + <h1 class="samples"> + <a href="../../../samples/index.html">CKEditor Samples</a> » WordCount Plugin + </h1> + + <div class="description"> + <p> + WordCount Plugin for CKEditor that counts the words an shows the word count in the footer of the editor.</a>. + </p> + <p> + In order to use the new plugin, include it in the <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-extraPlugins">config.extraPlugins</a></code> configuration setting. + </p> +<pre class="samples"> +CKEDITOR.replace( '<em>textarea_id</em>', { + <strong>extraPlugins: 'wordcount', + maxWordCount: 4, + maxCharCount: 10, + // optional events + paragraphsCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationparagraphs").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - paragraphs").show(); + }, + wordCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationword").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - word").show(); + }, + charCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationchar").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - char").show(); + }, + charCountLessThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationchar").css("background-color", "white").css("color", "black").hide(); + }, + paragraphsCountLessThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationparagraphs").css("background-color", "white").css("color", "black").hide(); + }, + wordCountLessThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationword").css("background-color", "white").css("color", "black").hide(); + }</strong> +} ); +</pre> + </div> + +<textarea cols="80" id="editor1" name="editor1" rows="10"> + This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>. +</textarea> + <div id="informationchar"></div> + <div id="informationword"></div> + <div id="informationparagraphs"></div> + <script> + + CKEDITOR.replace('editor1', { + extraPlugins: 'wordcount', + wordcount: { + showWordCount: true, + showCharCount: true, + maxWordCount: 4, + maxCharCount: 10, + paragraphsCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationparagraphs").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - paragraphs").show(); + }, + wordCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationword").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - word").show(); + }, + charCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationchar").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - char").show(); + }, + charCountLessThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationchar").css("background-color", "white").css("color", "black").hide(); + }, + paragraphsCountLessThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationparagraphs").css("background-color", "white").css("color", "black").hide(); + }, + wordCountLessThanMaxLengthEvent: function (currentLength, maxLength) { + $("#informationword").css("background-color", "white").css("color", "black").hide(); + } + } + }); + + </script> + + <div id="footer"> + <hr> + <p> + CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> + </p> + <p id="copy"> + Copyright © 2003-2015, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico + Knabben. All rights reserved. + </p> + </div> +</body> +</html> diff --git a/plugins/ckeditor4/youtube/LICENSE.md b/plugins/ckeditor4/youtube/LICENSE.md new file mode 100644 index 0000000..29eab05 --- /dev/null +++ b/plugins/ckeditor4/youtube/LICENSE.md @@ -0,0 +1,15 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + + diff --git a/plugins/ckeditor4/youtube/images/icon.png b/plugins/ckeditor4/youtube/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b1cf6deda686cc01192b48be2651c765e371932c GIT binary patch literal 419 zcmV;U0bKrxP)<h;3K|Lk000e1NJLTq000mG000mO1ONa4wfZ;e00007bV*G`2i*!D z2`VBj*ef3Z000SaNLh0L03N{r03N{s!)a7g00004XF*Lt006O%3;baP0003pNkl<Z zc-nQ4F-rqM5QV?nBtjyH2oXUDSENbf*@=aXg%&oZwiHEBtQ5f?kjBPBti(T%#y_B? z2o~B|7`PxP5-ag8$>oxq?_!D&lQ+DbVdm}5%vuLd?j~z95?|G~O-imGje{SRTr+DY zsAF*_)`u*?ylpag3YXbpgKZ``rYLc-C-6vN0va^g<C7h3Iit)IHL)pc5ReQBHO`8- zK!zDHMy8iVXR;;L9|E%MtJx2yO!c!Zl7UoRh0jV|4XhXoj81DV%J-l9j}#S5NSa;l zx$Gw|1_bGNhS*)R$e}iQp`d3^cwn7r&iU@Ok-(C(B+7|~5BXJ<mQ*2LGet*1XQ+Rf zcU3}+um9@O#^;eW`L=G>c;!g<J!LK2yj@^o#11XZRH=f4OEkt@oL}{-i5T@GK0p8f N002ovPDHLkV1fv>r=S1; literal 0 HcmV?d00001 diff --git a/plugins/ckeditor4/youtube/lang/ar.js b/plugins/ckeditor4/youtube/lang/ar.js new file mode 100644 index 0000000..bfc5123 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/ar.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'ar', { + button : 'شيÙرة تضمين اليوتيوب', + title : 'شيÙرة تضمين اليوتيوب', + txtEmbed : 'الصق شيÙرة التضمين هنا', + txtUrl : 'الصق رابط Ùيديو اليوتيوب', + txtWidth : 'العرض', + txtHeight : 'الطول', + chkRelated : 'اظهر الÙيديوهات المقترØØ© ÙÙŠ نهاية الÙيديو', + txtStartAt : 'ابدأ عند (ss او mm:ss او hh:mm:ss)', + chkPrivacy : 'تÙعيل وضع تØسين الخصوصية', + chkOlderCode : 'استخدم شيÙرة التضمين القديمة', + chkAutoplay : 'Autoplay', + chkControls: 'إظهار عناصر التØكم بالمشغّل', + noCode : 'يجب عليك ادخال شيÙرة التضمين او الرابط', + invalidEmbed : 'شيÙرة التضمين التي قمت بإدخالها تبدو غير صØÙŠØØ©', + invalidUrl : 'الرابط الذي قمت بإدخاله يبدو غير صØÙŠØ', + or : 'او', + noWidth : 'يجب عليك ادخال العرض', + invalidWidth : 'يجب عليك ادخال عرض صØÙŠØ', + noHeight : 'يجب عليك ادخال الطول', + invalidHeight : 'يجب عليك ادخال طول صØÙŠØ', + invalidTime : 'يجب عليك ادخال وقت بداية صØÙŠØ', + txtResponsive : 'Responsive video' +}); diff --git a/plugins/ckeditor4/youtube/lang/cs.js b/plugins/ckeditor4/youtube/lang/cs.js new file mode 100644 index 0000000..29eb2a6 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/cs.js @@ -0,0 +1,25 @@ +CKEDITOR.plugins.setLang('youtube', 'cs', { + button : 'Vložit video YouTube', + title : 'Vložit video YouTube', + txtEmbed : 'Zde vložte kód pro vloženÃ', + txtUrl : 'Vložte adresu URL videa YouTube', + txtWidth : 'Å ÃÅ™ka', + txtHeight : 'Výška', + chkRelated : 'Po dohránà videa zobrazit navrhovaná videa', + txtStartAt : 'ZaÄÃt pÅ™ehrávat v Äase (ss nebo mm:ss nebo hh:mm:ss)', + chkPrivacy : 'Povolit režim s rozÅ¡ÃÅ™eným soukromÃm', + chkOlderCode : 'PoužÃt starý kód pro vloženÃ', + chkAutoplay : 'Automatické spuÅ¡tÄ›nà pÅ™ehrávánÃ', + chkControls : 'Zobrazit ovladaÄe pÅ™ehrávánÃ', + noCode : 'MusÃte vložit kód pro vloženà nebo adresu URL', + invalidEmbed : 'Vložený kód pro vloženà zÅ™ejmÄ› nenà platný', + invalidUrl : 'Zadaná adresa URL zÅ™ejmÄ› nenà platná', + or : 'nebo', + noWidth : 'MusÃte zadat Å¡ÃÅ™ku', + invalidWidth : 'Zadejte platnou Å¡ÃÅ™ku', + noHeight : 'MusÃte zadat výšku', + invalidHeight : 'Zadejte platnou výšku', + invalidTime : 'Zadejte platný poÄáteÄnà Äas', + txtResponsive : 'Responzivnà design (ignorovat výšku a Å¡ÃÅ™ku, uzpůsobit Å¡ÃÅ™ce)', + txtNoEmbed : 'Pouze obrázek videa s odkazem' +}); diff --git a/plugins/ckeditor4/youtube/lang/de.js b/plugins/ckeditor4/youtube/lang/de.js new file mode 100644 index 0000000..e8f644d --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/de.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'de', { + button : 'YouTube Video einbinden', + title : 'YouTube Video einbinden', + txtEmbed : 'Embed Code hier einfügen', + txtUrl : 'YouTube Video URL hier einfügen', + txtWidth : 'Breite', + txtHeight : 'Höhe', + chkRelated : 'Vorschläge am Ende des Videos einblenden', + txtStartAt : 'Start bei Position (ss oder mm:ss oder hh:mm:ss)', + chkPrivacy : 'Erweiterten Datenschutzmodus aktivieren', + chkOlderCode : 'Benutze alten Embed Code', + chkAutoplay : 'Autoplay', + chkControls : 'Player-Steuerelemente anzeigen', + noCode : 'Sie müssen einen Embed Code oder URL angeben', + invalidEmbed : 'Der angegebene Embed Code scheint nicht gültig zu sein.', + invalidUrl : 'Die angegebene URL scheint nicht gültig zu sein.', + or : 'oder', + noWidth : 'Geben Sie eine Breite an', + invalidWidth : 'Geben Sie eine gültige Breite an', + noHeight : 'Geben Sie eine Höhe an', + invalidHeight : 'Geben Sie eine gültige Höhe an', + invalidTime : 'Geben Sie eine gültige Startzeit an', + txtResponsive : 'Automatische Größe (ignoriert Breite und Höhe)' +}); diff --git a/plugins/ckeditor4/youtube/lang/el.js b/plugins/ckeditor4/youtube/lang/el.js new file mode 100644 index 0000000..57a18c7 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/el.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('youtube', 'el', { + button: 'Ενσωμάτωση Youtube βίντεο', + title: 'Ενσωμάτωση Youtube βίντεο', + txtEmbed: 'Επικόλλησε τον κώδικα ενσωμάτωσης', + txtUrl: 'Επικόλλησε το URL του βίντεο', + txtWidth: 'Πλάτος', + txtHeight: 'Ύψος', + chkRelated: 'Εμφάνιση Ï€Ïοτεινόμενων βίντεο μόλις ολοκληÏωθεί', + txtStartAt: 'ΧÏόνος εκκίνησης (ss or mm:ss or hh:mm:ss)', + chkPrivacy: 'ΕνεÏγοποίηση λειτουÏγίας ενισχυμÎνου αποÏÏήτου', + chkOlderCode: 'ΧÏήση Ï€Î±Î»Î±Î¹Î¿Ï ÎºÏŽÎ´Î¹ÎºÎ± ενσωμάτωσης', + chkAutoplay: 'Αυτόματη εκκίνηση', + chkControls: 'Εμφάνιση στοιχείων ελÎγχου Ï€ÏογÏάμματος αναπαÏαγωγής', + noCode: 'ΧÏειάζεται κώδικας ενσωμάτωσης ή URL', + invalidEmbed: 'Ο κώδικας ενσωμάτωσης που εισήγατε δεν μοιάζει σωστός', + invalidUrl: 'Το URL που εισήγατε δεν μοιάζει σωστό', + or: 'ή', + noWidth: 'ΣυμπληÏώστε το πλάτος', + invalidWidth: 'ΛανθασμÎνο πλάτος', + noHeight: 'ΣυμπληÏώστε το Ïψος', + invalidHeight: 'ΛανθασμÎνο Ïψος', + invalidTime: 'ΛανθασμÎνος χÏόνος εκκίνησης' +}); diff --git a/plugins/ckeditor4/youtube/lang/en.js b/plugins/ckeditor4/youtube/lang/en.js new file mode 100644 index 0000000..173fbc7 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/en.js @@ -0,0 +1,25 @@ +CKEDITOR.plugins.setLang('youtube', 'en', { + button : 'Embed YouTube Video', + title : 'Embed YouTube Video', + txtEmbed : 'Paste Embed Code Here', + txtUrl : 'Paste YouTube Video URL', + txtWidth : 'Width', + txtHeight : 'Height', + chkRelated : 'Show suggested videos at the video\'s end', + txtStartAt : 'Start at (ss or mm:ss or hh:mm:ss)', + chkPrivacy : 'Enable privacy-enhanced mode', + chkOlderCode : 'Use old embed code', + chkAutoplay: 'Autoplay', + chkControls: 'Show player controls', + noCode : 'You must input an embed code or URL', + invalidEmbed : 'The embed code you\'ve entered doesn\'t appear to be valid', + invalidUrl : 'The URL you\'ve entered doesn\'t appear to be valid', + or : 'or', + noWidth : 'You must inform the width', + invalidWidth : 'Inform a valid width', + noHeight : 'You must inform the height', + invalidHeight : 'Inform a valid height', + invalidTime : 'Inform a valid start time', + txtResponsive : 'Make Responsive (ignore width and height, fit to width)', + txtNoEmbed : 'Video image and link only' +}); diff --git a/plugins/ckeditor4/youtube/lang/es.js b/plugins/ckeditor4/youtube/lang/es.js new file mode 100644 index 0000000..c567cb1 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/es.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'es', { + button : 'Embed YouTube video', + title : 'Embed YouTube video', + txtEmbed : 'Pegar el código embed', + txtUrl : 'Pegar la URL al video de Youtube', + txtWidth : 'Anchura', + txtHeight : 'Altura', + chkRelated : 'Mostrar videos sugeridos al final de este video', + txtStartAt : 'Comenzar en (ss or mm:ss or hh:mm:ss)', + chkPrivacy : 'Habilitar el modo privacy-enhanced', + chkOlderCode : 'Usar código embed viejo', + chkAutoplay: 'Autoplay', + chkControls: 'Mostrar controles del reproductor', + noCode : 'Debes de introducir un código embed o URL', + invalidEmbed : 'El código embed introducido parece no ser valido', + invalidUrl : 'La URL introducida parece no ser valida', + or : 'o', + noWidth : 'Debes de dar la anchura', + invalidWidth : 'Da una anchura valida', + noHeight : 'Debes dar una altura valida', + invalidHeight : 'Da una altura valida', + invalidTime : 'Da un tiempo de valido', + txtResponsive : 'Hacer responsivo (ignorar anchura y altura, ajustar a la anchura)' +}); diff --git a/plugins/ckeditor4/youtube/lang/et.js b/plugins/ckeditor4/youtube/lang/et.js new file mode 100644 index 0000000..89588cb --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/et.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'et', { + button : 'Lisa YouTube video', + title : 'YouTube video lisamine', + txtEmbed : 'Kleepige manustatud kood siia', + txtUrl : 'Kleepige YouTube video veebiaadress', + txtWidth : 'Laius', + txtHeight : 'Kõrgus', + chkRelated : 'Näita soovitatud videosi antud video lõppus', + txtStartAt : 'Alguskoht: (ss või mm:ss või hh:mm:ss)', + chkPrivacy : 'Aktiveerige privaatsust täiendav režiim', + chkOlderCode : 'Kasutage vana manuskoodi', + chkAutoplay: 'Automaatesitlus', + chkControls : 'Kuva pleieri nupud', + noCode : 'Te peate sisestama video manuskoodi või veebiaadressi', + invalidEmbed : 'Manuskood mille sisestasite ei paista olevat korrektne', + invalidUrl : 'Veebiaadress mille sisestasite ei paista olevat korrektne', + or : 'või', + noWidth : 'Te peate sisestama video laiuse', + invalidWidth : 'Sisestage korrektne laius', + noHeight : 'Te peate sisestama video kõrguse', + invalidHeight : 'Sisestage korrektne kõrgus', + invalidTime : 'Sisestage korrektne algusaeg', + txtResponsive : 'Aktiveerige ekraani laiusega ühilduv režiim' +}); diff --git a/plugins/ckeditor4/youtube/lang/fi.js b/plugins/ckeditor4/youtube/lang/fi.js new file mode 100644 index 0000000..f42b2ae --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/fi.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'fi', { + button : 'Upota YouTube-video', + title : 'Upota YouTube-video', + txtEmbed : 'Syötä YouTube-videon upotuskoodi', + txtUrl : 'Syötä YouTube-videon www-osoite', + txtWidth : 'Leveys', + txtHeight : 'Korkeus', + chkRelated : 'Näytä suositukset lopussa', + txtStartAt : 'Aloitusaika (ss tai mm:ss tai tt:mm:ss)', + chkPrivacy : 'Aktivoi yksityisyyttä parantava tila', + chkOlderCode : 'Käytä vanhaa upotuskoodia', + chkAutoplay: 'Soita automaattisesti', + chkControls : 'Näytä soittimen ohjaimet', + noCode : 'Sinun täytyy syötää upotuskoodi tai www-osoite', + invalidEmbed : 'Upotuskoodi on virheellinen', + invalidUrl : 'Www-osoite on virheellinen', + or : 'tai', + noWidth : 'Syötä leveys', + invalidWidth : 'Leveys on virheellinen', + noHeight : 'Syötä korkeus', + invalidHeight : 'Korkeus on virheellinen', + invalidTime : 'Aloitusaika on virheellinen', + txtResponsive : 'Responsiivinen leveys (sovita leveys)' +}); \ No newline at end of file diff --git a/plugins/ckeditor4/youtube/lang/fr.js b/plugins/ckeditor4/youtube/lang/fr.js new file mode 100644 index 0000000..94c434a --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/fr.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'fr', { + button : 'Insérer une vidéo Youtube', + title : 'Insérer une vidéo youtube', + txtEmbed : 'Coller le code embed ici', + txtUrl : 'Coller l\'url de la vidéo ici', + txtWidth : 'Largeur', + txtHeight : 'Hauteur', + chkRelated : 'Montrer les suggestions de vidéo à la fin', + txtStartAt : 'Commencer à (ss ou mm:ss ou hh:mm:ss)', + chkPrivacy : 'Activer la protection de la vie privée', + chkOlderCode : 'Utiliser l\'ancien code embed', + chkAutoplay : 'Autoplay', + chkControls : 'Afficher les commandes du lecteur', + noCode : 'Vous devez entrer un code embed ou une url', + invalidEmbed : 'Le code embed est invalide', + invalidUrl : 'L\'url est invalide', + or : 'ou', + noWidth : 'Vous devez saisir une largeur', + invalidWidth : 'La largeur saisie est invalide', + noHeight : 'Vous devez saisir une hauteur', + invalidHeight : 'La hauteur saisie est invalide', + invalidTime : 'Le temps de départ de la vidéo est invalide', + txtResponsive : 'Responsive video' +}); diff --git a/plugins/ckeditor4/youtube/lang/he.js b/plugins/ckeditor4/youtube/lang/he.js new file mode 100644 index 0000000..cd91b6b --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/he.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'he', { + button : 'שבץ ויד×ו של YouTube', + title : 'שבץ ויד×ו של YouTube', + txtEmbed : 'הדבק ×ת קוד השיבוץ ×›×ן', + txtUrl : 'הדבק כתובת ויד×ו YouTube', + txtWidth : '×ורך', + txtHeight : 'גובה', + chkRelated : 'הצג ×¡×¨×˜×•× ×™× ×ž×•×ž×œ×¦×™× ×‘×¡×•×£ הודי×ו', + txtStartAt : 'התחל ב (ss ×ו mm:ss ×ו hh:mm:ss)', + chkPrivacy : 'הפעל מצב פרטיות המשופרת', + chkOlderCode : 'השתמש בקוד הטמעה ישן', + chkAutoplay: 'הפעלה ×וטומטית', + chkControls : 'הצג פקדי × ×’×Ÿ', + noCode : '×תה חייב להזין קוד embed כתובת ויד×ו ×תר', + invalidEmbed : 'קוד ההטמעה שהוזן ××™× ×• × ×¨××” חוקי', + invalidUrl : 'כתובת הויד×ו ××™× ×” × ×¨×ת חוקית', + or : '×ו', + noWidth : 'חובה להזין ×ורך', + invalidWidth : '×”×ורך שהוזן שגוי', + noHeight : 'חובה להזין גובה', + invalidHeight : 'הגובה שהוזן שגוי', + invalidTime : 'זמן התחלה שהוזן שגוי', + txtResponsive : 'הפוך ×œ×¨×¡×¤×•× ×¡×™×‘×™ (×”×ª×¢×œ× ×ž×¨×•×—×‘ וגובה, הת×× ×œ×¨×•×—×‘)' +}); diff --git a/plugins/ckeditor4/youtube/lang/hu.js b/plugins/ckeditor4/youtube/lang/hu.js new file mode 100644 index 0000000..c708434 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/hu.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'hu', { + button : 'Youtube videó beillesztése', + title : 'Youtube videó beillesztése', + txtEmbed : 'Illessze be a beágyazott kódot', + txtUrl : 'Illessze be a Youtube videó URL-jét', + txtWidth : 'Szélesség', + txtHeight : 'Magasság', + txtStartAt : 'KezdÅ‘ idÅ‘pont (ss vagy mm:ss vagy hh:mm:ss)', + chkRelated : 'Ajánlott videók megjelenÃtése, amikor a videó befejezÅ‘dik', + chkPrivacy : 'Fokozott adatvédelmi mód engedélyezése', + chkOlderCode : 'Régi beágyazott kód használata', + chkAutoplay : 'Automatikus lejátszás', + chkControls : 'LejátszásvezérlÅ‘k mutatása', + noCode : 'A beágyazott kód, vagy az URL megadása kötelezÅ‘', + invalidEmbed : 'A beágyazott kód érvénytelen', + invalidUrl : 'A megadott URL érvénytelen', + or : 'vagy', + noWidth : 'A szélesség megadása kötelezÅ‘', + invalidWidth : 'Érvényes szélességet adjon meg', + noHeight : 'A magasság megadása kötelezÅ‘', + invalidHeight : 'Érvényes magasságot adjon meg', + invalidTime : 'Érvényes kezdÅ‘ idÅ‘pontot adjon meg', + txtResponsive : 'Responsive video' +}); diff --git a/plugins/ckeditor4/youtube/lang/it.js b/plugins/ckeditor4/youtube/lang/it.js new file mode 100644 index 0000000..9c55d90 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/it.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'it', { + button : 'Incorpora video Youtube', + title : 'Incorpora video Youtube', + txtEmbed : 'Incolla qui il codice di incorporamento', + txtUrl : 'Incolla l\'URL del video Youtube', + txtWidth : 'Larghezza', + txtHeight : 'Altezza', + chkRelated : 'Mostra i video suggeriti dopo il video', + txtStartAt : 'Inizia a (ss o mm:ss o hh:mm:ss)', + chkPrivacy : 'Abilita la protezione della privacy', + chkOlderCode : 'Usa il vecchio codice di incorporamento', + chkAutoplay : 'Autoplay', + chkControls : 'Mostra i controlli del player', + noCode : 'Devi inserire un codice di incorporamento o un URL', + invalidEmbed : 'Il codice di incorporamento inserito non sembra valido', + invalidUrl : 'L\'URL inserito non sembra valido', + or : 'o', + noWidth : 'Devi indicare la larghezza', + invalidWidth : 'Indica una larghezza valida', + noHeight : 'Devi indicare l\'altezza', + invalidHeight : 'Indica un\'altezza valida', + invalidTime : 'Indica un tempo di inizio valido', + txtResponsive : 'Responsive video' +}); diff --git a/plugins/ckeditor4/youtube/lang/ja.js b/plugins/ckeditor4/youtube/lang/ja.js new file mode 100644 index 0000000..2d10146 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/ja.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'ja', { + button : 'Youtube動画埋ã‚è¾¼ã¿', + title : 'Youtube動画埋ã‚è¾¼ã¿', + txtEmbed : '埋ã‚è¾¼ã¿ã‚³ãƒ¼ãƒ‰ã‚’貼り付ã‘ã¦ãã ã•ã„', + txtUrl : 'URLを貼り付ã‘ã¦ãã ã•ã„', + txtWidth : 'å¹…', + txtHeight : '高ã•', + chkRelated : 'å‹•ç”»ãŒçµ‚ã‚ã£ãŸã‚‰é–¢é€£å‹•ç”»ã‚’表示ã™ã‚‹', + txtStartAt : '開始時間(秒)', + chkPrivacy : 'プライãƒã‚·ãƒ¼å¼·åŒ–モードを有効ã«ã™ã‚‹', + chkOlderCode : '以å‰ã®åŸ‹ã‚è¾¼ã¿ã‚³ãƒ¼ãƒ‰ã‚’使用ã™ã‚‹', + chkAutoplay : '自動å†ç”Ÿ', + chkControls: 'プレーヤーã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã‚’表示ã™ã‚‹', + noCode : '埋ã‚è¾¼ã¿ã‚³ãƒ¼ãƒ‰ã¾ãŸã¯URLを入力ã—ã¦ãã ã•ã„', + invalidEmbed : 'ä¸é©åˆ‡ãªåŸ‹ã‚è¾¼ã¿ã‚³ãƒ¼ãƒ‰ãŒå…¥åŠ›ã•ã‚Œã¾ã—ãŸ', + invalidUrl : 'ä¸é©åˆ‡ãªURLãŒå…¥åŠ›ã•ã‚Œã¾ã—ãŸ', + or : 'ã¾ãŸã¯', + noWidth : '幅を指定ã—ã¦ãã ã•ã„', + invalidWidth : '幅指定ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™', + noHeight : '高ã•ã‚’指定ã—ã¦ãã ã•ã„', + invalidHeight : '高ã•æŒ‡å®šã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™', + invalidTime : '開始時間をæ£ã®æ•´æ•°ã§å…¥åŠ›ã—ã¦ãã ã•ã„', + txtResponsive : 'レスãƒãƒ³ã‚·ãƒ–表示' +}); diff --git a/plugins/ckeditor4/youtube/lang/ko.js b/plugins/ckeditor4/youtube/lang/ko.js new file mode 100644 index 0000000..199143f --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/ko.js @@ -0,0 +1,25 @@ +CKEDITOR.plugins.setLang('youtube', 'ko', { + button : 'ìœ íˆ¬ë¸Œ 비디오 삽입', + title : 'ìœ íˆ¬ë¸Œ 비디오 삽입', + txtEmbed : '여기 embed 코드를 붙여넣으세요', + txtUrl : 'ìœ íˆ¬ë¸Œ 주소(URL)를 붙여넣으세요', + txtWidth : '너비', + txtHeight : '높ì´', + chkRelated : '비디오 ë§ˆì§€ë§‰ì— ì¶”ì²œ ì˜ìƒ ë³´ì´ê¸°', + txtStartAt : '시작 ì‹œì (ss ë˜ëŠ” mm:ss ë˜ëŠ” hh:mm:ss)', + chkPrivacy : 'ê°œì¸ì •ë³´ 보호 모드 활성화', + chkOlderCode : 'ì˜›ë‚ embed 코드 사용', + chkAutoplay: 'ìžë™ 재ìƒ', + chkControls: 'í”Œë ˆì´ì–´ 컨트롤 표시', + noCode : 'embed 코드 ë˜ëŠ” URLì„ ìž…ë ¥í•´ì•¼ 합니다', + invalidEmbed : 'ìž…ë ¥í•˜ì‹ embed 코드가 ìœ íš¨í•˜ì§€ 않습니다', + invalidUrl : 'ìž…ë ¥í•˜ì‹ ì£¼ì†Œ(URL)ê°€ ìœ íš¨í•˜ì§€ 않습니다', + or : 'ë˜ëŠ”', + noWidth : '너비를 ì•Œë ¤ì£¼ì„¸ìš”', + invalidWidth : '너비가 ìœ íš¨í•˜ì§€ 않습니다', + noHeight : '높ì´ë¥¼ ì•Œë ¤ì£¼ì„¸ìš”', + invalidHeight : '높ì´ê°€ ìœ íš¨í•˜ì§€ 않습니다', + invalidTime : '시작 ì‹œì ì´ ìœ íš¨í•˜ì§€ 않습니다', + txtResponsive : 'ë°˜ì‘형 너비 (ìž…ë ¥í•œ 너비와 높ì´ë¥¼ ë¬´ì‹œí•˜ê³ ì°½ ë„ˆë¹„ì— ë§žì¶¤)', + txtNoEmbed : '비디오 ì´ë¯¸ì§€ì™€ ë§í¬ë§Œ 달기' +}); diff --git a/plugins/ckeditor4/youtube/lang/nb.js b/plugins/ckeditor4/youtube/lang/nb.js new file mode 100644 index 0000000..ee5532f --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/nb.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'nb', { + button : 'Bygg inn YouTube-video', + title : 'Bygg inn YouTube-video', + txtEmbed : 'Lim inn embed-kode her', + txtUrl : 'Lim inn YouTube video-URL', + txtWidth : 'Bredde', + txtHeight : 'Høyde', + chkRelated : 'Vis foreslÃ¥tte videoer nÃ¥r videoen er ferdig', + txtStartAt : 'Start ved (ss eller mm:ss eller hh:mm:ss)', + chkPrivacy : 'Bruk personverntilpasset modus', + chkOlderCode : 'Bruk gammel embedkode', + chkAutoplay: 'Spill automatisk', + chkControls: 'Vis spillerkontrollene', + noCode : 'Du mÃ¥ legge inn en embed-kode eller URL', + invalidEmbed : 'Emded-koden du la inn ser ikke ut til Ã¥ være gyldig', + invalidUrl : 'URLen du la inn ser ikke ut til Ã¥ være gyldig', + or : 'eller', + noWidth : 'Du mÃ¥ legge inn bredde', + invalidWidth : 'Legg inn en gyldig bredde', + noHeight : 'Du mÃ¥ legge inn høyde', + invalidHeight : 'Legg inn en gyldig høyde', + invalidTime : 'Legg inn gyldig starttid', + txtResponsive : 'Gjør responsiv (ignorer bredde og høyde, tilpass bredde pÃ¥ sida)' +}); diff --git a/plugins/ckeditor4/youtube/lang/nl.js b/plugins/ckeditor4/youtube/lang/nl.js new file mode 100644 index 0000000..698951f --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/nl.js @@ -0,0 +1,25 @@ +CKEDITOR.plugins.setLang('youtube', 'nl', { + button : 'Youtube video insluiten', + title : 'Youtube video insluiten', + txtEmbed : 'Plak embedcode hier', + txtUrl : 'Plak video URL', + txtWidth : 'Breedte', + txtHeight : 'Hoogte', + chkRelated : 'Toon gesuggereerde video aan het einde van de video', + txtStartAt : 'Starten op (ss of mm:ss of hh:mm:ss)', + chkPrivacy : 'Privacy-enhanced mode inschakelen', + chkOlderCode : 'Gebruik oude embedcode', + chkAutoplay: 'Automatisch starten', + chkControls: 'Afspeelbediening weergeven', + noCode : 'U moet een embedcode of url ingeven', + invalidEmbed : 'De ingegeven embedcode lijkt niet geldig', + invalidUrl : 'De ingegeven url lijkt niet geldig', + or : 'of', + noWidth : 'U moet een breedte ingeven', + invalidWidth : 'U moet een geldige breedte ingeven', + noHeight : 'U moet een hoogte ingeven', + invalidHeight : 'U moet een geldige starttijd ingeven', + invalidTime : 'Inform a valid start time', + txtResponsive : 'Responsive video', + txtNoEmbed : 'Alleen video afbeelding en link' +}); diff --git a/plugins/ckeditor4/youtube/lang/nn.js b/plugins/ckeditor4/youtube/lang/nn.js new file mode 100644 index 0000000..dd2a897 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/nn.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'nn', { + button : 'Bygg inn YouTube-video', + title : 'Bygg inn YouTube-video', + txtEmbed : 'Lim inn embed-kode her', + txtUrl : 'Lim inn YouTube video-URL', + txtWidth : 'Breidde', + txtHeight : 'Høgde', + chkRelated : 'Vis foreslÃ¥tte videoar nÃ¥r videoen er ferdig', + txtStartAt : 'Start ved (ss eller mm:ss eller hh:mm:ss)', + chkPrivacy : 'Bruk personverntilpassa modus', + chkOlderCode : 'Bruk gamal embedkode', + chkAutoplay: 'Spel automatisk', + chkControls: 'Vis spillerkontrollene', + noCode : 'Du mÃ¥ leggja inn ein embed-kode eller URL', + invalidEmbed : 'Emded-koden du la inn ser ikkje ut til Ã¥ vera gyldig', + invalidUrl : 'URLen du la inn ser ikkje ut til Ã¥ vera gyldig', + or : 'eller', + noWidth : 'Du mÃ¥ leggja inn breidde', + invalidWidth : 'Legg inn ei gyldig breidde', + noHeight : 'Du mÃ¥ leggja inn høgde', + invalidHeight : 'Legg inn ei gyldig høgde', + invalidTime : 'Legg inn gyldig starttid', + txtResponsive : 'Gjer responsiv (ignorer breidde og høgde, tilpass breidda pÃ¥ sida)' +}); diff --git a/plugins/ckeditor4/youtube/lang/pl.js b/plugins/ckeditor4/youtube/lang/pl.js new file mode 100644 index 0000000..48b2c33 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/pl.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'pl', { + button : 'ZaÅ‚Ä…cznik wideo z YouTube', + title : 'ZaÅ‚Ä…cznik wideo z YouTube', + txtEmbed : 'Wklej kod do umieszczenia', + txtUrl : 'Wklej adres URL do wideo z YouTube', + txtWidth : 'Szerokość', + txtHeight : 'Wysokość', + chkRelated : 'Pokaż sugerowane filmy po zakoÅ„czeniu odtwarzania', + txtStartAt : 'Rozpocznij od (ss lub mm:ss lub gg:mm:ss)', + chkPrivacy : 'WÅ‚Ä…cz rozszerzony tryb prywatnoÅ›ci', + chkOlderCode : 'Użyj starego kodu', + chkAutoplay: 'Autoodtwarzanie', + chkControls: 'Pokaż elementy sterujÄ…ce odtwarzacza', + noCode : 'Musisz wprowadzić kod lub adres URL', + invalidEmbed : 'Wprowadzony kod nie jest poprawny', + invalidUrl : 'Wprowadzony adres URL nie jest poprawny', + or : 'lub', + noWidth : 'Musisz wpisać szerokość', + invalidWidth : 'Wprowadzona szerokość nie jest poprawna', + noHeight : 'Musisz wprowadzić wysokość', + invalidHeight : 'Wprowadzona wysokość nie jest poprawna', + invalidTime : 'Musisz wprowadzić poprawny czas rozpoczÄ™cia', + txtResponsive : 'El. responsywny (ignoruj szerokość i wysokość, dopasuj do szerokoÅ›ci)' +}); \ No newline at end of file diff --git a/plugins/ckeditor4/youtube/lang/pt-br.js b/plugins/ckeditor4/youtube/lang/pt-br.js new file mode 100644 index 0000000..803e04c --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/pt-br.js @@ -0,0 +1,25 @@ +CKEDITOR.plugins.setLang('youtube', 'pt-br', { + button : 'Inserir VÃdeo do Youtube', + title : 'Inserir VÃdeo do Youtube', + txtEmbed : 'Cole aqui o código embed de um vÃdeo do Youtube', + txtUrl : 'Cole aqui uma URL de um vÃdeo do Youtube', + txtWidth : 'Largura', + txtHeight : 'Altura', + chkRelated : 'Mostrar vÃdeos sugeridos ao final do vÃdeo', + txtStartAt : 'Iniciar em (ss ou mm:ss ou hh:mm:ss)', + chkPrivacy : 'Ativar o modo de privacidade aprimorada', + chkOlderCode : 'Usar código de incorporação antigo', + chkAutoplay : 'Reproduzir automaticamente', + chkControls: 'Mostrar controles do player', + noCode : 'Você precisa informar um código embed ou uma URL', + invalidEmbed : 'O código informado não parece ser válido', + invalidUrl : 'A URL informada não parece ser válida', + or : 'ou', + noWidth : 'Você deve informar a largura do vÃdeo', + invalidWidth : 'Informe uma largura válida', + noHeight : 'Você deve informar a altura do vÃdeo', + invalidHeight : 'Informe uma altura válida', + invalidTime : 'O tempo informado é inválido', + txtResponsive : 'VÃdeo responsivo', + txtNoEmbed : 'Somente imagem e link para o vÃdeo' +}); diff --git a/plugins/ckeditor4/youtube/lang/pt.js b/plugins/ckeditor4/youtube/lang/pt.js new file mode 100644 index 0000000..394a29e --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/pt.js @@ -0,0 +1,25 @@ +CKEDITOR.plugins.setLang('youtube', 'pt', { + button : 'Inserir VÃdeo do Youtube', + title : 'Inserir VÃdeo do Youtube', + txtEmbed : 'Cole aqui o código embed de um vÃdeo do Youtube', + txtUrl : 'Cole aqui uma URL de um vÃdeo do Youtube', + txtWidth : 'Largura', + txtHeight : 'Altura', + chkRelated : 'Mostrar vÃdeos sugeridos quando o vÃdeo terminar', + txtStartAt : 'Iniciar em (ss ou mm:ss ou hh:mm:ss)', + chkPrivacy : 'Ativar o modo de privacidade otimizada', + chkOlderCode : 'Usar código de incorporação antigo', + chkAutoplay : 'Reproduzir automaticamente', + chkControls: 'Mostrar controles do player', + noCode : 'Você precisa informar um código embed ou uma URL', + invalidEmbed : 'O código informado não parece ser válido', + invalidUrl : 'A URL informada não parece ser válida', + or : 'ou', + noWidth : 'Você deve informar a largura do vÃdeo', + invalidWidth : 'Informe uma largura válida', + noHeight : 'Você deve informar a altura do vÃdeo', + invalidHeight : 'Informe uma altura válida', + invalidTime : 'O tempo informado é inválido', + txtResponsive : 'VÃdeo responsivo', + txtNoEmbed : 'Somente imagem e link para o vÃdeo' +}); diff --git a/plugins/ckeditor4/youtube/lang/ru.js b/plugins/ckeditor4/youtube/lang/ru.js new file mode 100644 index 0000000..4cdd426 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/ru.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'ru', { + button : 'Ð’Ñтавить YouTube видео', + title : 'Ð’Ñтавить YouTube видео', + txtEmbed : 'Ð’Ñтавьте HTML-код Ñюда', + txtUrl : 'Ð’Ñтавьте Ð°Ð´Ñ€ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ (URL)', + txtWidth : 'Ширина', + txtHeight : 'Ð’Ñ‹Ñота', + chkRelated : 'Показать похожие видео поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñмотра', + txtStartAt : 'Ðачать Ñ (ÑÑ Ð¸Ð»Ð¸ мм:ÑÑ Ð¸Ð»Ð¸ чч:мм:ÑÑ)', + chkPrivacy : 'Включить режим повышенной конфиденциальноÑти', + chkOlderCode : 'ИÑпользовать Ñтарый код вÑтавки', + chkAutoplay: 'ÐвтозапуÑк', + chkControls: 'Показать панель управлениÑ', + noCode : 'Ð’Ñ‹ должны ввеÑти HTML-код или адреÑ', + invalidEmbed : 'Ваш HTML-код не похож на правильный', + invalidUrl : 'Ваш Ð°Ð´Ñ€ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ не похож на правильный', + or : 'или', + noWidth : 'Ð’Ñ‹ должны указать ширину', + invalidWidth : 'Укажите правильную ширину', + noHeight : 'Ð’Ñ‹ должны указать выÑоту', + invalidHeight : 'Укажите правильную выÑоту', + invalidTime : 'Укажите правильное Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°', + txtResponsive : 'РаÑÑ‚Ñгиваемое видео' +}); diff --git a/plugins/ckeditor4/youtube/lang/sk.js b/plugins/ckeditor4/youtube/lang/sk.js new file mode 100644 index 0000000..07a941d --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/sk.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'sk', { + button : 'VložiÅ¥ YouTube video', + title : 'VložiÅ¥ YouTube video', + txtEmbed : 'VložiÅ¥ Youtube Embed Video kódu', + txtUrl : 'VložiÅ¥ pomocou YouTube video URL', + txtWidth : 'Å Ãrka', + txtHeight : 'Výška', + chkRelated : 'ZobraziÅ¥ odporúÄané videá po prehratÃ', + txtStartAt : 'ZaÄaÅ¥ prehrávanie videa (ss alebo mm:ss alebo hh:mm:ss)', + chkPrivacy : 'PovoliÅ¥ pokroÄilý mód súkromia', + chkOlderCode : 'PoužiÅ¥ starú metódu vkladania', + chkAutoplay: 'Automatické prehrávanie', + chkControls: 'ZobraziÅ¥ ovládacie prvky prehrávaÄa', + noCode : 'MusÃte vložiÅ¥ Youtube Embed kód alebo URL', + invalidEmbed : 'Vložený kód nie je valÃdny', + invalidUrl : 'Vložená URL nie je platná', + or : 'alebo', + noWidth : 'ProsÃm, zadajte Å¡Ãrku videa', + invalidWidth : 'Zadajte valÃdnu Å¡Ãrku videa', + noHeight : 'ProsÃm, zadajte výšku videa', + invalidHeight : 'Zadajte valÃdnu výšku videa', + invalidTime : 'Zadajte valÃdny formát zaÄiatku prehrávania videa', + txtResponsive : 'Prispôsobit rozmery videa rozmerom obrazovky (ignoruje Å¡Ãrku a výšku, prispôsobà sa Å¡Ãrke obrazovky)' +}); diff --git a/plugins/ckeditor4/youtube/lang/tr.js b/plugins/ckeditor4/youtube/lang/tr.js new file mode 100644 index 0000000..ca00b1d --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/tr.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'tr', { + button : 'Youtube Video Gömün (Embed)', + title : 'Youtube Video', + txtEmbed : 'Youtube gömülü kodu (embed) buraya yapıştırınız', + txtUrl : 'Youtube linkinizi buraya yapıştırınız', + txtWidth : 'GeniÅŸlik', + txtHeight : 'Yükseklik', + chkRelated : 'Önerilen videoları video bitiminde göster', + txtStartAt : 'Video baÅŸlangıç anı (ss ya da dd:ss ya da ss:dd:ss)', + chkPrivacy : 'Gizlilik modunu etkinleÅŸtir', + chkOlderCode : 'Eski gömülü kodu (embed) kullan', + chkAutoplay: 'Otomatik', + chkControls: 'Oynatıcı kontrollerini göster', + noCode : 'Gömülü kod (embed) veya url yapıştırmak zorundasınız', + invalidEmbed : 'VerdiÄŸiniz gömülü kod (embed) ile video bulunamadı', + invalidUrl : 'VerdiÄŸiniz linkte video bulunamadı', + or : 'ya da', + noWidth : 'GeniÅŸliÄŸi belirtmek zorundasınız', + invalidWidth : 'Bir geniÅŸlik belirtin', + noHeight : 'YükseliÄŸi belirtmek zorundasınız', + invalidHeight : 'Yükseklik belirtin', + invalidTime : 'BaÅŸlangıç anını doÄŸru girin, örneÄŸin: 13 (13. saniye) ya da 12:25 (12. dakika 25. saniye) ya da 01.25.33 (1 saat 25 dakika 33 saniye)', + txtResponsive : 'Responsive video' +}); diff --git a/plugins/ckeditor4/youtube/lang/vi.js b/plugins/ckeditor4/youtube/lang/vi.js new file mode 100644 index 0000000..18c9477 --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/vi.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'vi', { + button : 'Embed Youtube Video', + title : 'Nhúng Video Youtube', + txtEmbed : 'Dãn mã nhúng Embed và o đây', + txtUrl : 'Dãn Ä‘Æ°á»ng dẫn video Youtube', + txtWidth : 'Rá»™ng', + txtHeight : 'Cao', + chkRelated : 'Hiển thị các video được Ä‘á» xuất khi video kết thúc', + txtStartAt : 'Bắt đầu (ss hoặc mm:ss hoặc hh:mm:ss)', + chkPrivacy : 'KÃch hoạt chế Ä‘á»™ bảo máºt nâng cao', + chkOlderCode : 'Sá» dụng mã nhúng cÅ©', + chkAutoplay: 'Tá»± Ä‘á»™ng chạy video', + chkControls: 'Hiển thị các Ä‘iá»u khiển trình phát', + noCode : 'Bạn phải nháºp mã nhúng hoặc URL', + invalidEmbed : 'Mã nhúng bạn đã nháºp không đúng', + invalidUrl : 'URL bạn đã nháºp không đúng', + or : 'hoặc', + noWidth : 'Bạn phải chiá»u rá»™ng', + invalidWidth : 'Chiá»u rá»™ng hợp lệ', + noHeight : 'Bạn phải chiá»u cao', + invalidHeight : 'Chiá»u cao hợp lệ', + invalidTime : 'Thá»i gian bắt đầu không đúng', + txtResponsive : 'Responsive video' +}); diff --git a/plugins/ckeditor4/youtube/lang/zh.js b/plugins/ckeditor4/youtube/lang/zh.js new file mode 100644 index 0000000..3f4616f --- /dev/null +++ b/plugins/ckeditor4/youtube/lang/zh.js @@ -0,0 +1,24 @@ +CKEDITOR.plugins.setLang('youtube', 'zh', { + button: '嵌入 Youtube 影片', + title: '嵌入 Youtube 影片', + txtEmbed: '貼上嵌入碼', + txtUrl: '貼上 Youtube 影片 URL', + txtWidth: '寬', + txtHeight: '高', + txtResponsive: '使用自é©æ‡‰ç¸®æ”¾æ¨¡å¼ (忽略è¨å®šçš„長寬, 以寬為基準縮放)', + chkRelated: '影片çµæŸæ™‚顯示建è°å½±ç‰‡', + txtStartAt: '開始時間 (ss or mm:ss or hh:mm:ss)', + chkPrivacy: 'å•Ÿç”¨åŠ å¼·éš±ç§æ¨¡å¼', + chkOlderCode: '使用舊的嵌入碼', + chkAutoplay: '自動æ’放', + chkControls: '显示æ’放器控件', + noCode: 'å¿…é ˆè¼¸å…¥åµŒå…¥ç¢¼', + invalidEmbed: '錯誤的嵌入碼', + invalidUrl: '錯誤的URL', + or: '或', + noWidth: 'å¿…é ˆè¨å®šå¯¬', + invalidWidth: '寬è¨å®šéŒ¯èª¤', + noHeight: 'å¿…é ˆè¨å®šé«˜', + invalidHeight: '高è¨å®šéŒ¯èª¤', + invalidTime: '開始時間è¨å®šéŒ¯èª¤' +}); diff --git a/plugins/ckeditor4/youtube/plugin.js b/plugins/ckeditor4/youtube/plugin.js new file mode 100644 index 0000000..4f57a45 --- /dev/null +++ b/plugins/ckeditor4/youtube/plugin.js @@ -0,0 +1,448 @@ +/* +* Youtube Embed Plugin +* +* @author Jonnas Fonini <jonnasfonini@gmail.com> +* @version 2.1.5 +*/ +(function () { + CKEDITOR.plugins.add('youtube', { + lang: [ 'en', 'pt', 'pt-br', 'ja', 'hu', 'it', 'fr', 'tr', 'ru', 'de', 'ar', 'nl', 'pl', 'vi', 'zh', 'el', 'he', 'es', 'nb', 'nn', 'fi', 'et', 'sk', 'cs', 'ko'], + init: function (editor) { + editor.addCommand('youtube', new CKEDITOR.dialogCommand('youtube', { + allowedContent: 'div{*}(*); iframe{*}[!width,!height,!src,!frameborder,!allowfullscreen]; object param[*]; a[*]; img[*]' + })); + + editor.ui.addButton('Youtube', { + label : editor.lang.youtube.button, + toolbar : 'insert', + command : 'youtube', + icon : this.path + 'images/icon.png' + }); + + CKEDITOR.dialog.add('youtube', function (instance) { + var video, + disabled = editor.config.youtube_disabled_fields || []; + + return { + title : editor.lang.youtube.title, + minWidth : 510, + minHeight : 200, + onShow: function () { + for (var i = 0; i < disabled.length; i++) { + this.getContentElement('youtubePlugin', disabled[i]).disable(); + } + }, + contents : + [{ + id : 'youtubePlugin', + expand : true, + elements : + [{ + id : 'txtEmbed', + type : 'textarea', + label : editor.lang.youtube.txtEmbed, + onChange : function (api) { + handleEmbedChange(this, api); + }, + onKeyUp : function (api) { + handleEmbedChange(this, api); + }, + validate : function () { + if (this.isEnabled()) { + if (!this.getValue()) { + alert(editor.lang.youtube.noCode); + return false; + } + else + if (this.getValue().length === 0 || this.getValue().indexOf('//') === -1) { + alert(editor.lang.youtube.invalidEmbed); + return false; + } + } + } + }, + { + type : 'html', + html : editor.lang.youtube.or + '<hr>' + }, + { + type : 'hbox', + widths : [ '70%', '15%', '15%' ], + children : + [ + { + id : 'txtUrl', + type : 'text', + label : editor.lang.youtube.txtUrl, + onChange : function (api) { + handleLinkChange(this, api); + }, + onKeyUp : function (api) { + handleLinkChange(this, api); + }, + validate : function () { + if (this.isEnabled()) { + if (!this.getValue()) { + alert(editor.lang.youtube.noCode); + return false; + } + else{ + video = ytVidId(this.getValue()); + + if (this.getValue().length === 0 || video === false) + { + alert(editor.lang.youtube.invalidUrl); + return false; + } + } + } + } + }, + { + type : 'text', + id : 'txtWidth', + width : '60px', + label : editor.lang.youtube.txtWidth, + 'default' : editor.config.youtube_width != null ? editor.config.youtube_width : '640', + validate : function () { + if (this.getValue()) { + var width = parseInt (this.getValue()) || 0; + + if (width === 0) { + alert(editor.lang.youtube.invalidWidth); + return false; + } + } + else { + alert(editor.lang.youtube.noWidth); + return false; + } + } + }, + { + type : 'text', + id : 'txtHeight', + width : '60px', + label : editor.lang.youtube.txtHeight, + 'default' : editor.config.youtube_height != null ? editor.config.youtube_height : '360', + validate : function () { + if (this.getValue()) { + var height = parseInt(this.getValue()) || 0; + + if (height === 0) { + alert(editor.lang.youtube.invalidHeight); + return false; + } + } + else { + alert(editor.lang.youtube.noHeight); + return false; + } + } + } + ] + }, + { + type : 'hbox', + widths : [ '55%', '45%' ], + children : + [ + { + id : 'chkResponsive', + type : 'checkbox', + label : editor.lang.youtube.txtResponsive, + 'default' : editor.config.youtube_responsive != null ? editor.config.youtube_responsive : false + }, + { + id : 'chkNoEmbed', + type : 'checkbox', + label : editor.lang.youtube.txtNoEmbed, + 'default' : editor.config.youtube_noembed != null ? editor.config.youtube_noembed : false + } + ] + }, + { + type : 'hbox', + widths : [ '55%', '45%' ], + children : + [ + { + id : 'chkRelated', + type : 'checkbox', + 'default' : editor.config.youtube_related != null ? editor.config.youtube_related : true, + label : editor.lang.youtube.chkRelated + }, + { + id : 'chkOlderCode', + type : 'checkbox', + 'default' : editor.config.youtube_older != null ? editor.config.youtube_older : false, + label : editor.lang.youtube.chkOlderCode + } + ] + }, + { + type : 'hbox', + widths : [ '55%', '45%' ], + children : + [ + { + id : 'chkPrivacy', + type : 'checkbox', + label : editor.lang.youtube.chkPrivacy, + 'default' : editor.config.youtube_privacy != null ? editor.config.youtube_privacy : false + }, + { + id : 'chkAutoplay', + type : 'checkbox', + 'default' : editor.config.youtube_autoplay != null ? editor.config.youtube_autoplay : false, + label : editor.lang.youtube.chkAutoplay + } + ] + }, + { + type : 'hbox', + widths : [ '55%', '45%'], + children : + [ + { + id : 'txtStartAt', + type : 'text', + label : editor.lang.youtube.txtStartAt, + validate : function () { + if (this.getValue()) { + var str = this.getValue(); + + if (!/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/i.test(str)) { + alert(editor.lang.youtube.invalidTime); + return false; + } + } + } + }, + { + id : 'chkControls', + type : 'checkbox', + 'default' : editor.config.youtube_controls != null ? editor.config.youtube_controls : true, + label : editor.lang.youtube.chkControls + } + ] + } + ] + } + ], + onOk: function() + { + var content = ''; + var responsiveStyle = ''; + + if (this.getContentElement('youtubePlugin', 'txtEmbed').isEnabled()) { + content = this.getValueOf('youtubePlugin', 'txtEmbed'); + } + else { + var url = 'https://', params = [], startSecs; + var width = this.getValueOf('youtubePlugin', 'txtWidth'); + var height = this.getValueOf('youtubePlugin', 'txtHeight'); + + if (this.getContentElement('youtubePlugin', 'chkPrivacy').getValue() === true) { + url += 'www.youtube-nocookie.com/'; + } + else { + url += 'www.youtube.com/'; + } + + url += 'embed/' + video; + + if (this.getContentElement('youtubePlugin', 'chkRelated').getValue() === false) { + params.push('rel=0'); + } + + if (this.getContentElement('youtubePlugin', 'chkAutoplay').getValue() === true) { + params.push('autoplay=1'); + } + + if (this.getContentElement('youtubePlugin', 'chkControls').getValue() === false) { + params.push('controls=0'); + } + + startSecs = this.getValueOf('youtubePlugin', 'txtStartAt'); + + if (startSecs) { + var seconds = hmsToSeconds(startSecs); + + params.push('start=' + seconds); + } + + if (params.length > 0) { + url = url + '?' + params.join('&'); + } + + if (this.getContentElement('youtubePlugin', 'chkResponsive').getValue() === true) { + content += '<div class="youtube-embed-wrapper" style="position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden">'; + responsiveStyle = 'style="position:absolute;top:0;left:0;width:100%;height:100%"'; + } + + if (this.getContentElement('youtubePlugin', 'chkOlderCode').getValue() === true) { + url = url.replace('embed/', 'v/'); + url = url.replace(/&/g, '&'); + + if (url.indexOf('?') === -1) { + url += '?'; + } + else { + url += '&'; + } + url += 'hl=' + (this.getParentEditor().config.language ? this.getParentEditor().config.language : 'en') + '&version=3'; + + content += '<object width="' + width + '" height="' + height + '" ' + responsiveStyle + '>'; + content += '<param name="movie" value="' + url + '"></param>'; + content += '<param name="allowFullScreen" value="true"></param>'; + content += '<param name="allowscriptaccess" value="always"></param>'; + content += '<embed src="' + url + '" type="application/x-shockwave-flash" '; + content += 'width="' + width + '" height="' + height + '" '+ responsiveStyle + ' allowscriptaccess="always" '; + content += 'allowfullscreen="true"></embed>'; + content += '</object>'; + } + else + if (this.getContentElement('youtubePlugin', 'chkNoEmbed').getValue() === true) { + var imgSrc = '//img.youtube.com/vi/' + video + '/sddefault.jpg'; + content += '<a href="' + url + '" ><img width="' + width + '" height="' + height + '" src="' + imgSrc + '" ' + responsiveStyle + '/></a>'; + } + else { + content += '<iframe width="' + width + '" height="' + height + '" src="' + url + '" ' + responsiveStyle; + content += 'frameborder="0" allowfullscreen></iframe>'; + } + + if (this.getContentElement('youtubePlugin', 'chkResponsive').getValue() === true) { + content += '</div>'; + } + } + + var element = CKEDITOR.dom.element.createFromHtml(content); + var instance = this.getParentEditor(); + instance.insertElement(element); + } + }; + }); + } + }); +})(); + +function handleLinkChange(el, api) { + var video = ytVidId(el.getValue()); + var time = ytVidTime(el.getValue()); + + if (el.getValue().length > 0) { + el.getDialog().getContentElement('youtubePlugin', 'txtEmbed').disable(); + } + else { + el.getDialog().getContentElement('youtubePlugin', 'txtEmbed').enable(); + } + + if (video && time) { + var seconds = timeParamToSeconds(time); + var hms = secondsToHms(seconds); + el.getDialog().getContentElement('youtubePlugin', 'txtStartAt').setValue(hms); + } +} + +function handleEmbedChange(el, api) { + if (el.getValue().length > 0) { + el.getDialog().getContentElement('youtubePlugin', 'txtUrl').disable(); + } + else { + el.getDialog().getContentElement('youtubePlugin', 'txtUrl').enable(); + } +} + + +/** + * JavaScript function to match (and return) the video Id + * of any valid Youtube Url, given as input string. + * @author: Stephan Schmitz <eyecatchup@gmail.com> + * @url: http://stackoverflow.com/a/10315969/624466 + */ +function ytVidId(url) { + var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; + return (url.match(p)) ? RegExp.$1 : false; +} + +/** + * Matches and returns time param in YouTube Urls. + */ +function ytVidTime(url) { + var p = /t=([0-9hms]+)/; + return (url.match(p)) ? RegExp.$1 : false; +} + +/** + * Converts time in hms format to seconds only + */ +function hmsToSeconds(time) { + var arr = time.split(':'), s = 0, m = 1; + + while (arr.length > 0) { + s += m * parseInt(arr.pop(), 10); + m *= 60; + } + + return s; +} + +/** + * Converts seconds to hms format + */ +function secondsToHms(seconds) { + var h = Math.floor(seconds / 3600); + var m = Math.floor((seconds / 60) % 60); + var s = seconds % 60; + + var pad = function (n) { + n = String(n); + return n.length >= 2 ? n : "0" + n; + }; + + if (h > 0) { + return pad(h) + ':' + pad(m) + ':' + pad(s); + } + else { + return pad(m) + ':' + pad(s); + } +} + +/** + * Converts time in youtube t-param format to seconds + */ +function timeParamToSeconds(param) { + var componentValue = function (si) { + var regex = new RegExp('(\\d+)' + si); + return param.match(regex) ? parseInt(RegExp.$1, 10) : 0; + }; + + return componentValue('h') * 3600 + + componentValue('m') * 60 + + componentValue('s'); +} + +/** + * Converts seconds into youtube t-param value, e.g. 1h4m30s + */ +function secondsToTimeParam(seconds) { + var h = Math.floor(seconds / 3600); + var m = Math.floor((seconds / 60) % 60); + var s = seconds % 60; + var param = ''; + + if (h > 0) { + param += h + 'h'; + } + + if (m > 0) { + param += m + 'm'; + } + + if (s > 0) { + param += s + 's'; + } + + return param; +} \ No newline at end of file diff --git a/plugins/ckeditor4/zoom/plugin.js b/plugins/ckeditor4/zoom/plugin.js new file mode 100644 index 0000000..dcca3a1 --- /dev/null +++ b/plugins/ckeditor4/zoom/plugin.js @@ -0,0 +1,109 @@ +/* + * @file Zoom plugin for CKEditor + * Copyright (C) 2008-2013 Alfonso Martínez de Lizarrondo + * Upgrade to CKEditor 4 sponsored by Solution architects gmbh + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + */ + +CKEDITOR.plugins.add( 'zoom', +{ + requires : [ 'richcombo' ], + + init : function( editor ) + { + var config = editor.config; + + // Inject basic sizing for the pane as the richCombo doesn't allow to specify it + var node = CKEDITOR.document.getHead().append( 'style' ); + node.setAttribute( 'type', 'text/css' ); + var content = '.cke_combopanel__zoom { height: 200px; width: 100px; }' + + '.cke_combo__zoom .cke_combo_text { width: 40px;}'; + + if ( CKEDITOR.env.ie && CKEDITOR.env.version<11 ) + node.$.styleSheet.cssText = content; + else + node.$.innerHTML = content; + + editor.ui.addRichCombo( 'Zoom', + { + label : 'Zoom', + title : 'Zoom', + multiSelect : false, + className : 'zoom', + modes:{wysiwyg:1,source:1 }, + + panel : + { + css : [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ) + }, + + init : function() + { + var zoomOptions = [50, 75, 100, 125, 150, 200, 400], + zoom; + + this.startGroup( 'Zoom level' ); + // Loop over the Array, adding all items to the combo. + for ( var i = 0 ; i < zoomOptions.length ; i++ ) + { + zoom = zoomOptions[ i ]; + // value, html, text + this.add( zoom + "", zoom + " %", zoom + " %" ); + } + // Default value on first click + this.setValue("100", "100 %"); + }, + + onClick : function( sValue ) + { + var body = editor.editable().$; + var value = parseInt(sValue); + + body.style.MozTransformOrigin = "top left"; + body.style.MozTransform = "scale(" + (value/100) + ")"; + + body.style.WebkitTransformOrigin = "top left"; + body.style.WebkitTransform = "scale(" + (value/100) + ")"; + + body.style.OTransformOrigin = "top left"; + body.style.OTransform = "scale(" + (value/100) + ")"; + + body.style.TransformOrigin = "top left"; + body.style.Transform = "scale(" + (value/100) + ")"; + // IE + body.style.zoom = value/100; + + this.setValue( sValue, sValue + " %"); + this.lastValue = sValue; + }, + + onRender: function() { + editor.on( 'mode', function( ev ) { + // Restore zoom level after switching from Source mode + if (this.lastValue) + this.onClick( this.lastValue ); + + }, this ); + } + }); + // End of richCombo element + + } //Init +} ); + diff --git a/plugins/dependencies.json b/plugins/dependencies.json index a322df5..aed771e 100644 --- a/plugins/dependencies.json +++ b/plugins/dependencies.json @@ -85,5 +85,52 @@ ], "colordialog": [ "dialog" + ], + "autocorrect": [ + "menubutton" + ], + "enhancecolorbutton": [ + "panelbutton", + "floatpanel" + ], + "floating-tools": [ + "toolbar" + ], + "symbol": [ + "dialog" + ], + "loremipsum": [ + "richcombo" + ], + "wordcount": [ + "htmlwriter", + "notification", + "undo" + ], + "zoom": [ + "richcombo" + ], + "ckawesome": [ + "colordialog" + ], + "html5audio": [ + "widget" + ], + "prism": [ + "codesnippet" + ], + "pre": [ + "widget", + "dialog" + ], + "cssanim": [ + "contextmenu" + ], + "crossreference": [ + "dialog", + "notification" + ], + "lineheight": [ + "richcombo" ] } \ No newline at end of file -- GitLab