brandon-codex 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/History.txt +18 -0
  2. data/LICENSE.txt +29 -0
  3. data/Manifest.txt +105 -0
  4. data/PostInstall.txt +5 -0
  5. data/README.txt +31 -0
  6. data/Rakefile +6 -0
  7. data/app_generators/codex/USAGE +5 -0
  8. data/app_generators/codex/codex_generator.rb +109 -0
  9. data/app_generators/codex/templates/Rakefile +59 -0
  10. data/app_generators/codex/templates/bin/build_all.rb +47 -0
  11. data/app_generators/codex/templates/bin/postprocess_all.rb +5 -0
  12. data/app_generators/codex/templates/bin/pressie.rb +10 -0
  13. data/app_generators/codex/templates/code/control/basic_continuation.rb +11 -0
  14. data/app_generators/codex/templates/code/control/cc_throw_catch.rb +59 -0
  15. data/app_generators/codex/templates/code/control/closure_continuation.rb +8 -0
  16. data/app_generators/codex/templates/code/control/closure_continuation_2.rb +12 -0
  17. data/app_generators/codex/templates/content/basics.textile +37 -0
  18. data/app_generators/codex/templates/content/building.textile +27 -0
  19. data/app_generators/codex/templates/content/example.textile +80 -0
  20. data/app_generators/codex/templates/content/including_code.textile +80 -0
  21. data/app_generators/codex/templates/content/including_tex.textile +31 -0
  22. data/app_generators/codex/templates/content/metadata.yml +4 -0
  23. data/app_generators/codex/templates/content/table_of_contents.textile +20 -0
  24. data/app_generators/codex/templates/dp.SyntaxHighlighter/CSS.html +115 -0
  25. data/app_generators/codex/templates/dp.SyntaxHighlighter/CSharp.html +134 -0
  26. data/app_generators/codex/templates/dp.SyntaxHighlighter/CollapseCode.html +90 -0
  27. data/app_generators/codex/templates/dp.SyntaxHighlighter/Cpp.html +190 -0
  28. data/app_generators/codex/templates/dp.SyntaxHighlighter/CrashTest.html +108 -0
  29. data/app_generators/codex/templates/dp.SyntaxHighlighter/Delphi.html +112 -0
  30. data/app_generators/codex/templates/dp.SyntaxHighlighter/FirstLine.html +90 -0
  31. data/app_generators/codex/templates/dp.SyntaxHighlighter/Index.html +80 -0
  32. data/app_generators/codex/templates/dp.SyntaxHighlighter/Java.html +122 -0
  33. data/app_generators/codex/templates/dp.SyntaxHighlighter/JavaScript.html +112 -0
  34. data/app_generators/codex/templates/dp.SyntaxHighlighter/NoControls.html +89 -0
  35. data/app_generators/codex/templates/dp.SyntaxHighlighter/NoGutter.html +89 -0
  36. data/app_generators/codex/templates/dp.SyntaxHighlighter/PHP.html +102 -0
  37. data/app_generators/codex/templates/dp.SyntaxHighlighter/Python.html +121 -0
  38. data/app_generators/codex/templates/dp.SyntaxHighlighter/Ruby.html +131 -0
  39. data/app_generators/codex/templates/dp.SyntaxHighlighter/SQL.html +98 -0
  40. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/clipboard.swf +0 -0
  41. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushCSharp.js +32 -0
  42. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushCpp.js +73 -0
  43. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushCss.js +52 -0
  44. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushDelphi.js +34 -0
  45. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushJScript.js +22 -0
  46. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushJava.js +28 -0
  47. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushPhp.js +60 -0
  48. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushPython.js +30 -0
  49. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushRuby.js +28 -0
  50. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushSql.js +42 -0
  51. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushVb.js +29 -0
  52. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushXml.js +70 -0
  53. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shCore.js +414 -0
  54. data/app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shCore.uncompressed.js +674 -0
  55. data/app_generators/codex/templates/dp.SyntaxHighlighter/ShowColumns.html +89 -0
  56. data/app_generators/codex/templates/dp.SyntaxHighlighter/SmartTabs.html +88 -0
  57. data/app_generators/codex/templates/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css +158 -0
  58. data/app_generators/codex/templates/dp.SyntaxHighlighter/Styles/TestPages.css +63 -0
  59. data/app_generators/codex/templates/dp.SyntaxHighlighter/Templates/Test.dwt +80 -0
  60. data/app_generators/codex/templates/dp.SyntaxHighlighter/VB.html +115 -0
  61. data/app_generators/codex/templates/dp.SyntaxHighlighter/XML.html +136 -0
  62. data/app_generators/codex/templates/html/all.html +0 -0
  63. data/app_generators/codex/templates/readme.txt +4 -0
  64. data/app_generators/codex/templates/ui/default/blank.gif +0 -0
  65. data/app_generators/codex/templates/ui/default/bodybg.gif +0 -0
  66. data/app_generators/codex/templates/ui/default/framing.css +23 -0
  67. data/app_generators/codex/templates/ui/default/iepngfix.htc +42 -0
  68. data/app_generators/codex/templates/ui/default/opera.css +7 -0
  69. data/app_generators/codex/templates/ui/default/outline.css +15 -0
  70. data/app_generators/codex/templates/ui/default/pretty.css +86 -0
  71. data/app_generators/codex/templates/ui/default/print.css +1 -0
  72. data/app_generators/codex/templates/ui/default/s5-core.css +9 -0
  73. data/app_generators/codex/templates/ui/default/slides.css +3 -0
  74. data/app_generators/codex/templates/ui/default/slides.js +553 -0
  75. data/bin/codex +17 -0
  76. data/codex.gemspec +30 -0
  77. data/config/hoe.rb +76 -0
  78. data/config/requirements.rb +15 -0
  79. data/lib/codex.rb +23 -0
  80. data/lib/codex/content.rb +27 -0
  81. data/lib/codex/pressie.rb +108 -0
  82. data/lib/codex/version.rb +9 -0
  83. data/lib/stylesheets/pressie.css +196 -0
  84. data/lib/stylesheets/print.css +149 -0
  85. data/lib/stylesheets/ruby.png +0 -0
  86. data/script/console +10 -0
  87. data/script/destroy +14 -0
  88. data/script/generate +14 -0
  89. data/setup.rb +1585 -0
  90. data/tasks/deployment.rake +34 -0
  91. data/tasks/environment.rake +7 -0
  92. data/tasks/website.rake +9 -0
  93. data/test/test_codex.rb +11 -0
  94. data/test/test_codex_generator.rb +78 -0
  95. data/test/test_generator_helper.rb +29 -0
  96. data/test/test_helper.rb +3 -0
  97. metadata +164 -0
@@ -0,0 +1,11 @@
1
+ def open_box(continuation)
2
+ continuation.call if rand < 0.5
3
+ end
4
+
5
+ callcc do |continuation|
6
+ puts "opening box"
7
+ open_box(continuation)
8
+ puts "Phew--kitty's OK"
9
+ end
10
+
11
+ puts "closing box"
@@ -0,0 +1,59 @@
1
+ #START:stack
2
+ class CatchStack
3
+ Frame = Struct.new(:symbol, :cc)
4
+
5
+ def stack
6
+ Thread.current[:catch_stack] ||= []
7
+ end
8
+
9
+ def wrap(symbol, cc)
10
+ stack << Frame.new(symbol, cc)
11
+ begin
12
+ yield
13
+ ensure
14
+ stack.pop
15
+ end
16
+ end
17
+
18
+ def find_continuation_for(symbol)
19
+ stack.pop until stack.empty? || stack.last.symbol == symbol
20
+ if stack.empty?
21
+ fail NameError, "uncaught throw `#{sym}'"
22
+ else
23
+ stack.pop.cc
24
+ end
25
+ end
26
+ end
27
+ #END:stack
28
+
29
+ #START:CC
30
+ module CC
31
+ CATCH_STACK = CatchStack.new
32
+
33
+ def self.catch(sym)
34
+ callcc do |cc|
35
+ CATCH_STACK.wrap(sym, cc) do
36
+ yield
37
+ end
38
+ end
39
+ end
40
+
41
+ def self.throw(sym, value=nil)
42
+ cc = CATCH_STACK.find_continuation_for(sym)
43
+ cc.call(value)
44
+ end
45
+ end
46
+ #END:CC
47
+
48
+ #START:body
49
+ def test_method
50
+ CC.throw(:x, "thrown X") if rand < 0.5
51
+ end
52
+
53
+ result = CC.catch(:x) do
54
+ test_method
55
+ "normal exit"
56
+ end
57
+
58
+ puts "Result is #{result}"
59
+ #END:body
@@ -0,0 +1,8 @@
1
+ def create_continuation(arg)
2
+ callcc { |continuation| return continuation }
3
+ puts "Back in method: arg = #{arg}"
4
+ exit
5
+ end
6
+
7
+ cont_one = create_continuation(123)
8
+ cont_one.call #=> Back in method: arg = 123
@@ -0,0 +1,12 @@
1
+ def create_continuation(arg)
2
+ callcc { |continuation| return continuation }
3
+ puts "Back in method: arg = #{arg}"
4
+ end
5
+
6
+ cont_one = create_continuation(123)
7
+ cont_one.call
8
+
9
+ ### Results in:
10
+ #
11
+ # Back in method: arg = 123
12
+ # closure_continuation_2.rb:8: undefined method `call' for nil:NilClass
@@ -0,0 +1,37 @@
1
+ h1. The Basics
2
+
3
+ h1. Content and Code
4
+
5
+ * Content is created using "Textile markup":http://www.textism.com/tools/textile/
6
+ * Code is written as normal source files
7
+ * Content can embed parts of the source files
8
+ * It's all processed into an HTML-based presentation
9
+
10
+ h1. Presentation Metadata
11
+
12
+ * Required file @content/metadata.yml@
13
+
14
+ :code content/metadata.yml
15
+
16
+ h1. Where Stuff Goes
17
+
18
+ * Create your content in @content/xxx.textile@
19
+ * Write code under @code/xxx@
20
+ * Build the files @html/xxx.html@ by running @Rake@
21
+
22
+
23
+ h1. @.textile@ files
24
+
25
+ * Each @.textile@ file is a separate chunk of the presentation
26
+ * The first @h1.@ heading is the banner page for that chunk
27
+ * Each subsequent @h1.@ starts a new slide
28
+
29
+
30
+ h1. Table of Contents
31
+
32
+ * You can divide your material into segments, each in a separate @xxx.textile@ file
33
+ * Then create @content/table_of_contents.textile@, eg:
34
+
35
+ :code content/table_of_contents.textile[class=code-small]
36
+
37
+
@@ -0,0 +1,27 @@
1
+ h1. Building and Displaying HTML Slides
2
+
3
+ h1. Building HTML Slides
4
+
5
+ * Given an individual section in @content/xxx.textile@
6
+
7
+ @rake html/xxx.html@
8
+
9
+ * If you've created a @content/table_of_contents.textile@, build the whole presentation with
10
+
11
+ @rake all@
12
+
13
+ The output will be in @html/all.html@
14
+
15
+ h1. Running the Presentation
16
+
17
+ * Simply open the appropriate HTML file
18
+
19
+ * See the "S5 documentation":http://meyerweb.com/eric/tools/s5/ for details
20
+
21
+ * Some hints
22
+ ** arrow keys and space bar work
23
+ ** type the slide number to jump
24
+ ** mouse over the bottom right to bring up a set of controls and a list of all available slides
25
+ ** most IR and radio clickers seem to work OK
26
+ ** resizing your browser fonts works well to make stuff fit during the presentation
27
+
@@ -0,0 +1,80 @@
1
+ h1. An Example
2
+
3
+ This comes from the "Advanced Ruby Course":http://pragmaticstudio.com/ruby/
4
+
5
+ h1. Continuation
6
+
7
+ <div style="width: 50%; float: right">
8
+ :code code/control/basic_continuation.rb[class=code-normal]
9
+ </div>
10
+
11
+ <div style="width: 50%">
12
+
13
+ * Construct using @callcc@
14
+ ** pass it a block
15
+ ** block receives @Continuation@ object
16
+ ** invoke that object's @call@ method, and control passes to the end of that block
17
+
18
+ </div>
19
+
20
+
21
+ h1. Continuations Are Closures
22
+
23
+ :code code/control/closure_continuation.rb
24
+
25
+ h1. But...
26
+
27
+ :code code/control/closure_continuation_2.rb
28
+
29
+ h1. But...
30
+
31
+ <div>
32
+ :code code/control/closure_continuation_2.rb
33
+
34
+ <div style="position: relative; left: 60%; top: -3em; font-size: 400%; color: #6b6">Why?</div>
35
+ </div>
36
+
37
+
38
+
39
+ h1. Implementing throw...catch
40
+
41
+ Let's try to implement throw and catch so that the following works as expected:
42
+
43
+ :code code/control/cc_throw_catch.rb[body]
44
+
45
+ h1. Implementing throw...catch
46
+
47
+ * We need a thread-local stack of all current catch blocks
48
+
49
+ * When we see a @catch@, we store the symbol and a continuation for the block on the stack. If that continuation gets called, execution resumes after the block (which is what @catch@ does)
50
+
51
+ * When we see a @throw@ we traverse it looking for the entry
52
+ with the corresponding system.
53
+
54
+ * When we find that entry, we call the corresponding continuation
55
+
56
+ &nbsp;
57
+
58
+ bq{font-size="50%"}. This implementation is based on code from Jim Weirich
59
+
60
+ h1. Catch and Throw
61
+
62
+ :code code/control/cc_throw_catch.rb[CC class=code-tiny]
63
+
64
+ h1. And the stack
65
+
66
+ :code code/control/cc_throw_catch.rb[stack class=code-tiny]
67
+
68
+ h1. Continuations.
69
+
70
+ * Can't invoke across threads
71
+
72
+ * Can carry stale state around with them
73
+
74
+ * Can use up a lot of memory
75
+
76
+ * Are not fun to debug
77
+
78
+ But...
79
+
80
+ * They'll impress your friends
@@ -0,0 +1,80 @@
1
+ h1. Including Code in Slides
2
+
3
+ h1. Including Code in Slides
4
+
5
+ * Write code under @code/@
6
+ * Include it in your slides using @:code@ directives
7
+
8
+ :inlinecode
9
+ :code code/myfile.rb
10
+ :endinlinecode
11
+
12
+ * The entire contents of @code/myfile.rb@ will be included in the slide
13
+
14
+ h1. Including Parts of a Source File
15
+
16
+ * In the source file, use comments containing @START:sometag@ and @END:sometag@
17
+
18
+ :inlinecode
19
+ class SomeClass
20
+ #START:useful-method
21
+ def my_method
22
+ puts "hello world"
23
+ end
24
+ #END:useful-method
25
+ end
26
+ :endinlinecode
27
+
28
+ * In the slide, reference the tag in square brackets after the file name
29
+
30
+ :inlinecode
31
+ :code code/myfile.rb[useful-method]
32
+ :endinlinecode
33
+
34
+ h1. Merge Multiple Fragments
35
+
36
+ :inlinecode
37
+ #START:constructor
38
+ class SomeClass
39
+
40
+ def initialize
41
+ # ...
42
+ end
43
+ #END:constructor
44
+
45
+ def other_methods...
46
+ end
47
+ #START:constructor
48
+ end
49
+ #END:constructor
50
+ :endinlinecode
51
+
52
+
53
+ h1. Override Code Language and/or CSS Class
54
+
55
+ :inlinecode
56
+ :code code/file.xxx[section lang=name class=name]
57
+ :endinlinecode
58
+
59
+ * can appear in any order
60
+ * @lang=@<em>anything supported by SyntaxHighlighter</em>
61
+ ** look in @dp.SyntaxHighlighter/Scripts@)
62
+ * @class=code-large | code-normal | code-small | code-tiny | code-supertiny@
63
+
64
+ h1. Embedding Code Inline
65
+
66
+ :inlinecode
67
+ :inlinecode
68
+ code that
69
+ goes inline in slides
70
+ :endinlinecode
71
+ :endinlinecode
72
+
73
+ * @:inlinecode@ optionally takes @lang=xxx@ and @class=xx@
74
+
75
+ :inlinecode
76
+ :inlinecode lang=ruby
77
+ puts "Hello World!"
78
+ :endinlinecode
79
+ :endinlinecode
80
+
@@ -0,0 +1,31 @@
1
+ h1. Including TeX math formulas in slides
2
+
3
+ h1. Including TeX (WebTeX) math formula in slides
4
+
5
+ Everything line between :inlinetex and :endlinetex is treated as a TeX math formula
6
+
7
+ *Example:*
8
+
9
+ :inlinecode
10
+ :inlinewebtex
11
+ \alpha\beta\gamma
12
+ :endinlinewebtex
13
+ :end
14
+
15
+ *Result:*
16
+
17
+ :inlinewebtex
18
+ \alpha\beta\gamma
19
+ :end
20
+
21
+ h1. Ritex and WebTex
22
+
23
+ WebTeX is an adapation of the TeX math syntax which is designed for web page display.
24
+
25
+ Ritex is a nice little gem used to generate MathML from from WebTeX.
26
+
27
+ Ressources:
28
+ * "The WebTeX documentation":http://stuff.mit.edu/afs/athena/software/webeq/currenthome/docs/webtex/toc.html
29
+ * "The Ritex documentation":http://ritex.rubyforge.org/
30
+
31
+ The flipside is that MathML doesn't always display properly in browsers :-(
@@ -0,0 +1,4 @@
1
+ title: The Codex Presentation System
2
+ author: Dave Thomas
3
+ company: The Pragmatic Programmers, LLC
4
+ copyright: 2008 Dave Thomas
@@ -0,0 +1,20 @@
1
+ h1. The Codex System
2
+
3
+ h1. Creating Content
4
+
5
+ * "The Basics":basics.html
6
+ * "Including Code":including_code.html
7
+
8
+ h1. Creating Slideshows
9
+
10
+ * "Building and Displaying HTML":building.html
11
+
12
+ h1. An Example
13
+
14
+ * "Some Sample Slides":example.html
15
+
16
+ h1. Extra filters
17
+
18
+ * "The Ritex filter":including_tex.html
19
+ * "The Graphviz filter":graphviz.html
20
+ * "Defining your own":user_defined.html
@@ -0,0 +1,115 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/Test.dwt" codeOutsideHTMLIsLocked="false" -->
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
5
+ <title>dp.SyntaxHighlighter Tests</title>
6
+ <link type="text/css" rel="stylesheet" href="Styles/SyntaxHighlighter.css"></link>
7
+ <link href="Styles/TestPages.css" rel="stylesheet" type="text/css">
8
+ </head>
9
+
10
+ <body>
11
+
12
+ <h1>dp.SyntaxHighlighter 1.5.0 Tests and Samples</h1>
13
+ <p><a href="http://code.google.com/p/syntaxhighlighter/">http://code.google.com/p/syntaxhighlighter/</a></p>
14
+
15
+ <h2><!-- InstanceBeginEditable name="Title" -->CSS<!-- InstanceEndEditable --></h2>
16
+
17
+ <div class="layout">
18
+
19
+ <div class="column1">
20
+ <h3>Languages:</h3>
21
+ <ol>
22
+ <li><a href="CSharp.html">C#</a></li>
23
+ <li><a href="CSS.html">CSS</a></li>
24
+ <li><a href="Cpp.html">C++</a></li>
25
+ <li><a href="Delphi.html">Delphi</a></li>
26
+ <li><a href="Java.html">Java</a></li>
27
+ <li><a href="JavaScript.html">JavaScript</a></li>
28
+ <li><a href="PHP.html">PHP</a></li>
29
+ <li><a href="Python.html">Python</a></li>
30
+ <li><a href="Ruby.html">Ruby</a></li>
31
+ <li><a href="SQL.html">SQL</a></li>
32
+ <li><a href="VB.html">Visual Basic</a></li>
33
+ <li><a href="XML.html">XML / HTML</a></li>
34
+ </ol>
35
+ <h3>Features:</h3>
36
+ <ol>
37
+ <li><a href="SmartTabs.html">Smart tabs</a></li>
38
+ <li><a href="FirstLine.html">First line</a> </li>
39
+ <li><a href="CollapseCode.html">Expand code</a></li>
40
+ <li><a href="ShowColumns.html">Show columns</a></li>
41
+ <li><a href="NoGutter.html">No gutter</a></li>
42
+ <li><a href="NoControls.html">No controls</a></li>
43
+ </ol>
44
+ </div>
45
+
46
+ <div class="column2">
47
+ Text body before.
48
+ <hr/>
49
+ <!-- InstanceBeginEditable name="Code" -->
50
+ <pre name="code" class="css">
51
+ /* Main style for the table */
52
+
53
+ .dp-highlighter
54
+ {
55
+ font-family: "Courier New", Courier, mono;
56
+ font-size: 12px;
57
+ text-align: left;
58
+ border: 1px solid #2B91AF;
59
+ background-color: #fff;
60
+ width: 99%;
61
+ overflow: auto;
62
+ line-height: 100% !important;
63
+ margin: 18px 0px 18px 0px;
64
+ }
65
+
66
+ .dp-highlighter ol
67
+ {
68
+ margin: 0px 0px 0px 45px;
69
+ padding: 0px;
70
+ color: #2B91AF;
71
+ }
72
+
73
+ .dp-highlighter ol li
74
+ {
75
+ border-left: 3px solid #6CE26C;
76
+ border-bottom: 1px solid #eee;
77
+ background-color: #fff;
78
+ padding-left: 10px;
79
+ }
80
+
81
+ .dp-highlighter ol li.alt
82
+ {
83
+ background-color: #f8f8f8;
84
+ }
85
+ </pre>
86
+ <!-- InstanceEndEditable -->
87
+ <hr/>
88
+ Text body after.
89
+ </div>
90
+ </div>
91
+
92
+ <div class="footer">
93
+ Copyright 2004-2007 Alex Gorbatchev.<br/>
94
+ </div>
95
+
96
+ <script class="javascript" src="Scripts/shCore.js"></script>
97
+ <script class="javascript" src="Scripts/shBrushCSharp.js"></script>
98
+ <script class="javascript" src="Scripts/shBrushPhp.js"></script>
99
+ <script class="javascript" src="Scripts/shBrushJScript.js"></script>
100
+ <script class="javascript" src="Scripts/shBrushJava.js"></script>
101
+ <script class="javascript" src="Scripts/shBrushVb.js"></script>
102
+ <script class="javascript" src="Scripts/shBrushSql.js"></script>
103
+ <script class="javascript" src="Scripts/shBrushXml.js"></script>
104
+ <script class="javascript" src="Scripts/shBrushDelphi.js"></script>
105
+ <script class="javascript" src="Scripts/shBrushPython.js"></script>
106
+ <script class="javascript" src="Scripts/shBrushRuby.js"></script>
107
+ <script class="javascript" src="Scripts/shBrushCss.js"></script>
108
+ <script class="javascript" src="Scripts/shBrushCpp.js"></script>
109
+ <script class="javascript">
110
+ dp.SyntaxHighlighter.ClipboardSwf = 'Scripts/clipboard.swf';
111
+ dp.SyntaxHighlighter.HighlightAll('code');
112
+ </script>
113
+
114
+ </body>
115
+ <!-- InstanceEnd --></html>