ndd-url_checker 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/LICENSE.txt +18 -17
  4. data/README.md +14 -7
  5. data/lib/ndd/url_checker.rb +6 -0
  6. data/lib/ndd/url_checker/reporting_url_checker.rb +4 -0
  7. data/lib/ndd/url_checker/status.rb +1 -0
  8. data/lib/ndd/url_checker/status_decorator.rb +11 -0
  9. data/lib/ndd/url_checker/version.rb +5 -0
  10. metadata +9 -249
  11. data/.document +0 -5
  12. data/.rspec +0 -1
  13. data/.ruby-gemset +0 -1
  14. data/.ruby-version +0 -1
  15. data/.travis.yml +0 -16
  16. data/Gemfile +0 -50
  17. data/Gemfile.lock +0 -162
  18. data/Guardfile +0 -38
  19. data/Rakefile +0 -51
  20. data/VERSION +0 -1
  21. data/lib/ndd/url_checker/reporting_url_checker.csv.erb +0 -4
  22. data/lib/ndd/url_checker/reporting_url_checker.html.erb +0 -188
  23. data/lib/ndd/url_checker/reporting_url_checker.json.erb +0 -27
  24. data/ndd-url_checker.gemspec +0 -134
  25. data/spec/ndd/url_checker/abstract_url_checker_spec.rb +0 -11
  26. data/spec/ndd/url_checker/blocking_url_checker_spec.rb +0 -12
  27. data/spec/ndd/url_checker/forked_url_checker_spec.rb +0 -12
  28. data/spec/ndd/url_checker/parallel_url_checker_spec.rb +0 -62
  29. data/spec/ndd/url_checker/reporting_url_checker/custom.txt.erb +0 -8
  30. data/spec/ndd/url_checker/reporting_url_checker/multiple_urls.csv +0 -6
  31. data/spec/ndd/url_checker/reporting_url_checker/multiple_urls.html +0 -246
  32. data/spec/ndd/url_checker/reporting_url_checker/multiple_urls.json +0 -49
  33. data/spec/ndd/url_checker/reporting_url_checker/multiple_urls.txt +0 -26
  34. data/spec/ndd/url_checker/reporting_url_checker/single_url.csv +0 -2
  35. data/spec/ndd/url_checker/reporting_url_checker/single_url.html +0 -182
  36. data/spec/ndd/url_checker/reporting_url_checker/single_url.json +0 -25
  37. data/spec/ndd/url_checker/reporting_url_checker/single_url.txt +0 -6
  38. data/spec/ndd/url_checker/reporting_url_checker_spec.rb +0 -131
  39. data/spec/ndd/url_checker/status_decorator_spec.rb +0 -208
  40. data/spec/ndd/url_checker/status_spec.rb +0 -510
  41. data/spec/ndd/url_checker/threaded_url_checker_spec.rb +0 -13
  42. data/spec/spec_helper.rb +0 -81
  43. data/spec/support/multiple_url_checker_spec.rb +0 -58
  44. data/spec/support/single_url_checker_spec.rb +0 -252
@@ -1,27 +0,0 @@
1
- {
2
- "benchmark": {
3
- "total_duration": <%= benchmark.total_duration %>,
4
- "average_duration": <%= benchmark.average_duration %>,
5
- "average_throughput": <%= benchmark.average_throughput %>
6
- },
7
- "statistics": {
8
- "count": <%= urls.count %>,
9
- "valid_count": <%= urls.valid_count %>,
10
- "direct_count": <%= urls.direct_count %>,
11
- "redirected_count": <%= urls.redirected_count %>,
12
- "invalid_count": <%= urls.invalid_count %>,
13
- "failed_count": <%= urls.failed_count %>,
14
- "too_many_redirects_count": <%= urls.too_many_redirects_count %>,
15
- "unknown_host_count": <%= urls.unknown_host_count %>
16
- },
17
- "results": [
18
- <% statuses.each_with_index do |status, index| %>
19
- {
20
- "index": <%= index+1 %>,
21
- "url": "<%= status.uri %>",
22
- "code": "<%= status.code %>",
23
- "details": "<% if status.invalid? %><%= status.error %><% end %>"
24
- }<% if index < statuses.size - 1 %>,<% end %>
25
- <% end %>
26
- ]
27
- }
@@ -1,134 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
- # stub: ndd-url_checker 0.3.2 ruby lib
6
-
7
- Gem::Specification.new do |s|
8
- s.name = "ndd-url_checker"
9
- s.version = "0.3.2"
10
-
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["David DIDIER"]
14
- s.date = "2016-01-08"
15
- s.description = "Validate URLs"
16
- s.email = "c_inconnu2@yahoo.fr"
17
- s.extra_rdoc_files = [
18
- "LICENSE.txt",
19
- "README.md"
20
- ]
21
- s.files = [
22
- ".document",
23
- ".rspec",
24
- ".ruby-gemset",
25
- ".ruby-version",
26
- ".travis.yml",
27
- "CHANGELOG.md",
28
- "Gemfile",
29
- "Gemfile.lock",
30
- "Guardfile",
31
- "LICENSE.txt",
32
- "README.md",
33
- "Rakefile",
34
- "VERSION",
35
- "lib/ndd/url_checker.rb",
36
- "lib/ndd/url_checker/abstract_url_checker.rb",
37
- "lib/ndd/url_checker/blocking_url_checker.rb",
38
- "lib/ndd/url_checker/forked_url_checker.rb",
39
- "lib/ndd/url_checker/parallel_url_checker.rb",
40
- "lib/ndd/url_checker/reporting_url_checker.csv.erb",
41
- "lib/ndd/url_checker/reporting_url_checker.html.erb",
42
- "lib/ndd/url_checker/reporting_url_checker.json.erb",
43
- "lib/ndd/url_checker/reporting_url_checker.rb",
44
- "lib/ndd/url_checker/status.rb",
45
- "lib/ndd/url_checker/status_decorator.rb",
46
- "lib/ndd/url_checker/threaded_url_checker.rb",
47
- "ndd-url_checker.gemspec",
48
- "spec/ndd/url_checker/abstract_url_checker_spec.rb",
49
- "spec/ndd/url_checker/blocking_url_checker_spec.rb",
50
- "spec/ndd/url_checker/forked_url_checker_spec.rb",
51
- "spec/ndd/url_checker/parallel_url_checker_spec.rb",
52
- "spec/ndd/url_checker/reporting_url_checker/custom.txt.erb",
53
- "spec/ndd/url_checker/reporting_url_checker/multiple_urls.csv",
54
- "spec/ndd/url_checker/reporting_url_checker/multiple_urls.html",
55
- "spec/ndd/url_checker/reporting_url_checker/multiple_urls.json",
56
- "spec/ndd/url_checker/reporting_url_checker/multiple_urls.txt",
57
- "spec/ndd/url_checker/reporting_url_checker/single_url.csv",
58
- "spec/ndd/url_checker/reporting_url_checker/single_url.html",
59
- "spec/ndd/url_checker/reporting_url_checker/single_url.json",
60
- "spec/ndd/url_checker/reporting_url_checker/single_url.txt",
61
- "spec/ndd/url_checker/reporting_url_checker_spec.rb",
62
- "spec/ndd/url_checker/status_decorator_spec.rb",
63
- "spec/ndd/url_checker/status_spec.rb",
64
- "spec/ndd/url_checker/threaded_url_checker_spec.rb",
65
- "spec/spec_helper.rb",
66
- "spec/support/multiple_url_checker_spec.rb",
67
- "spec/support/single_url_checker_spec.rb"
68
- ]
69
- s.homepage = "http://github.com/ddidier/ndd-url_checker"
70
- s.licenses = ["MIT"]
71
- s.rubygems_version = "2.5.0"
72
- s.summary = "Validate URLs"
73
-
74
- if s.respond_to? :specification_version then
75
- s.specification_version = 4
76
-
77
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
78
- s.add_runtime_dependency(%q<cod>, ["~> 0.6"])
79
- s.add_runtime_dependency(%q<logging>, ["~> 1.8"])
80
- s.add_development_dependency(%q<bundler>, ["~> 1.7"])
81
- s.add_development_dependency(%q<guard>, ["~> 2.13"])
82
- s.add_development_dependency(%q<guard-bundler>, ["~> 2.0"])
83
- s.add_development_dependency(%q<guard-rspec>, ["~> 4.6"])
84
- s.add_development_dependency(%q<guard-spork>, ["~> 2.0"])
85
- s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
86
- s.add_development_dependency(%q<rdoc>, ["~> 4.1"])
87
- s.add_development_dependency(%q<rspec>, ["~> 3.3"])
88
- s.add_development_dependency(%q<rspec-collection_matchers>, ["~> 1.1"])
89
- s.add_development_dependency(%q<simplecov>, ["~> 0.9"])
90
- s.add_development_dependency(%q<spork>, ["~> 0.9"])
91
- s.add_development_dependency(%q<webmock>, ["~> 1.20"])
92
- s.add_development_dependency(%q<yard>, ["~> 0.8"])
93
- s.add_development_dependency(%q<libnotify>, [">= 0"])
94
- s.add_development_dependency(%q<rb-inotify>, [">= 0"])
95
- else
96
- s.add_dependency(%q<cod>, ["~> 0.6"])
97
- s.add_dependency(%q<logging>, ["~> 1.8"])
98
- s.add_dependency(%q<bundler>, ["~> 1.7"])
99
- s.add_dependency(%q<guard>, ["~> 2.13"])
100
- s.add_dependency(%q<guard-bundler>, ["~> 2.0"])
101
- s.add_dependency(%q<guard-rspec>, ["~> 4.6"])
102
- s.add_dependency(%q<guard-spork>, ["~> 2.0"])
103
- s.add_dependency(%q<jeweler>, ["~> 2.0"])
104
- s.add_dependency(%q<rdoc>, ["~> 4.1"])
105
- s.add_dependency(%q<rspec>, ["~> 3.3"])
106
- s.add_dependency(%q<rspec-collection_matchers>, ["~> 1.1"])
107
- s.add_dependency(%q<simplecov>, ["~> 0.9"])
108
- s.add_dependency(%q<spork>, ["~> 0.9"])
109
- s.add_dependency(%q<webmock>, ["~> 1.20"])
110
- s.add_dependency(%q<yard>, ["~> 0.8"])
111
- s.add_dependency(%q<libnotify>, [">= 0"])
112
- s.add_dependency(%q<rb-inotify>, [">= 0"])
113
- end
114
- else
115
- s.add_dependency(%q<cod>, ["~> 0.6"])
116
- s.add_dependency(%q<logging>, ["~> 1.8"])
117
- s.add_dependency(%q<bundler>, ["~> 1.7"])
118
- s.add_dependency(%q<guard>, ["~> 2.13"])
119
- s.add_dependency(%q<guard-bundler>, ["~> 2.0"])
120
- s.add_dependency(%q<guard-rspec>, ["~> 4.6"])
121
- s.add_dependency(%q<guard-spork>, ["~> 2.0"])
122
- s.add_dependency(%q<jeweler>, ["~> 2.0"])
123
- s.add_dependency(%q<rdoc>, ["~> 4.1"])
124
- s.add_dependency(%q<rspec>, ["~> 3.3"])
125
- s.add_dependency(%q<rspec-collection_matchers>, ["~> 1.1"])
126
- s.add_dependency(%q<simplecov>, ["~> 0.9"])
127
- s.add_dependency(%q<spork>, ["~> 0.9"])
128
- s.add_dependency(%q<webmock>, ["~> 1.20"])
129
- s.add_dependency(%q<yard>, ["~> 0.8"])
130
- s.add_dependency(%q<libnotify>, [">= 0"])
131
- s.add_dependency(%q<rb-inotify>, [">= 0"])
132
- end
133
- end
134
-
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe NDD::UrlChecker::AbstractUrlChecker do
4
-
5
- context '#check' do
6
- it 'is not implemented' do
7
- expect { subject.check('http://www.valid.mock/') }.to raise_error /must be implemented/
8
- end
9
- end
10
-
11
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe NDD::UrlChecker::BlockingUrlChecker do
4
-
5
- before(:all) do
6
- # Logging.logger.root.level = :debug
7
- end
8
-
9
- it_behaves_like 'a single URL checker'
10
- it_behaves_like 'a multiple URL checker'
11
-
12
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe NDD::UrlChecker::ForkedUrlChecker do
4
-
5
- before(:all) do
6
- # Logging.logger.root.level = :debug
7
- end
8
-
9
- it_behaves_like 'a single URL checker'
10
- it_behaves_like 'a multiple URL checker', skip_verify = true
11
-
12
- end
@@ -1,62 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe NDD::UrlChecker::ParallelUrlChecker do
4
-
5
- before(:all) do
6
- # Logging.logger.root.level = :debug
7
- end
8
-
9
- # ---------------------------------------------------------------------------------------------------------- MRI -----
10
- context 'when running MRI' do
11
-
12
- before(:all) do
13
- @old_engine = RUBY_ENGINE
14
- silence_warnings { RUBY_ENGINE = 'ruby' }
15
- end
16
-
17
- describe '#initialize' do
18
- it 'delegates to a ForkedUrlChecker instance' do
19
- expect(NDD::UrlChecker::ParallelUrlChecker.new.delegate).to be_a NDD::UrlChecker::ForkedUrlChecker
20
- end
21
- end
22
-
23
- it_behaves_like 'a single URL checker'
24
-
25
- after(:all) do
26
- silence_warnings { RUBY_ENGINE = @old_engine }
27
- end
28
- end
29
-
30
- # -------------------------------------------------------------------------------------------------------- JRuby -----
31
- context 'when running JRuby' do
32
- before(:all) do
33
- @old_engine = RUBY_ENGINE
34
- silence_warnings { RUBY_ENGINE = 'jruby' }
35
- end
36
-
37
- describe '#initialize' do
38
- it 'delegates to a ThreadedUrlChecker instance' do
39
- expect(NDD::UrlChecker::ParallelUrlChecker.new.delegate).to be_a NDD::UrlChecker::ThreadedUrlChecker
40
- end
41
- end
42
-
43
- # TODO
44
- # it_behaves_like 'a single URL checker'
45
-
46
- after(:all) do
47
- silence_warnings { RUBY_ENGINE = @old_engine }
48
- end
49
- end
50
-
51
-
52
- # ------------------------------------------------------------------------------------------------------ private -----
53
- private
54
-
55
- def silence_warnings(&block)
56
- warn_level = $VERBOSE
57
- $VERBOSE = nil
58
- result = block.call
59
- $VERBOSE = warn_level
60
- result
61
- end
62
- end
@@ -1,8 +0,0 @@
1
- count = <%= statuses.size %>
2
-
3
- <% statuses.each_with_index do |status, index| %>
4
- - index = <%= index+1 %>
5
- - uri = <%= status.uri %>
6
- - valid = <%= status.valid? %>
7
- - code = <%= status.code %>
8
- <% end %>
@@ -1,6 +0,0 @@
1
- Index,URL,Result,Code,Details
2
- 1,http://www.google.com,valid,redirected,
3
- 2,http://www.google.de,invalid,failed,some error
4
- 3,http://www.google.es,invalid,too_many_redirects,
5
- 4,http://www.google.fr,valid,direct,
6
- 5,http://www.google.it,invalid,unknown_host,
@@ -1,246 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8" />
6
-
7
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
8
- <style type="text/css">
9
- .popover-title {
10
- font-weight: bold;
11
- }
12
-
13
- .popover-content em {
14
- font-style: normal;
15
- font-weight: bold;
16
- }
17
-
18
- .popover-content ol {
19
- margin-left: -20px;
20
- }
21
- </style>
22
-
23
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
24
- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
25
- <script language="JavaScript">
26
- if (!window.ndd_url_checker) {
27
- window.ndd_url_checker = {};
28
- }
29
-
30
- ndd_url_checker.STATES = ['direct', 'redirected', 'failed', 'too-many-redirects', 'unknown-host'];
31
-
32
- ndd_url_checker.displayStates = function () {
33
- var displayStates = {};
34
- $.each(ndd_url_checker.STATES, function (_, state) {
35
- var checked = $('.display-' + state).is(':checked');
36
- displayStates[state] = checked;
37
- });
38
- return displayStates;
39
- }
40
-
41
- ndd_url_checker.filter = function () {
42
- var displayStates = ndd_url_checker.displayStates();
43
-
44
- $.each(displayStates, function (state, display) {
45
- $('.result-' + state).toggle(display);
46
- });
47
- }
48
-
49
- $(document).ready(function () {
50
- // show or hide results depending on their state
51
- $.each(ndd_url_checker.STATES, function (_, state) {
52
- $('.display-' + state).change(function () {
53
- ndd_url_checker.filter();
54
- });
55
- });
56
-
57
- // activate all tooltips
58
- $('[data-toggle="popover"]')
59
- .popover()
60
- .click(function (e) {
61
- e.preventDefault();
62
- });
63
- });
64
- </script>
65
- </head>
66
-
67
-
68
- <body>
69
-
70
- <div class="container">
71
-
72
- <div class="page-header">
73
- <h1>
74
- <span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span>
75
- URL Checker Report
76
- </h1>
77
- </div>
78
-
79
-
80
- <div class="row">
81
- <div class="col-md-4">
82
- <dl class="page-info dl-horizontal">
83
- <dt>Number of URLs</dt>
84
- <dd>5</dd>
85
- <dt>Duration</dt>
86
- <dd>123.456 s</dd>
87
- <dt>Average duration</dt>
88
- <dd>123.456 s/URL</dd>
89
- <dt>Average throughput</dt>
90
- <dd>123.456 URL/s</dd>
91
- </dl>
92
- </div>
93
- <div class="col-md-4">
94
- <dl class="page-info dl-horizontal">
95
- <dt>Valid URLS</dt>
96
- <dd>2</dd>
97
- <dt>direct</dt>
98
- <dd>1</dd>
99
- <dt>redirected</dt>
100
- <dd>1</dd>
101
- </dl>
102
- </div>
103
- <div class="col-md-4">
104
- <dl class="page-info dl-horizontal">
105
- <dt>Invalid URLS</dt>
106
- <dd>3</dd>
107
- <dt>failed</dt>
108
- <dd>1</dd>
109
- <dt>too many redirects</dt>
110
- <dd>1</dd>
111
- <dt>unknown host</dt>
112
- <dd>1</dd>
113
- </dl>
114
- </div>
115
- </div>
116
- <hr />
117
-
118
-
119
- <div class="row page-controls hidden-print">
120
- <div class="col-md-6">
121
- <span>Valid URLs:</span>
122
-
123
- <div class="btn-group page-display" data-toggle="buttons">
124
- <label class="btn btn-default active">
125
- <input type="checkbox" autocomplete="off" class="display-direct" checked="true" />
126
- Direct (1)
127
- </label>
128
- <label class="btn btn-default active">
129
- <input type="checkbox" autocomplete="off" class="display-redirected" checked="true" />
130
- Redirected (1)
131
- </label>
132
- </div>
133
- </div>
134
- <div class="col-md-6">
135
- <span>Invalid URLs:</span>
136
-
137
- <div class="btn-group page-display" data-toggle="buttons">
138
- <label class="btn btn-default active">
139
- <input type="checkbox" autocomplete="off" class="display-failed" checked="true" />
140
- Failed (1)
141
- </label>
142
- <label class="btn btn-default active">
143
- <input type="checkbox" autocomplete="off" class="display-too-many-redirects" checked="true" />
144
- Too many redirects (1)
145
- </label>
146
- <label class="btn btn-default active">
147
- <input type="checkbox" autocomplete="off" class="display-unknown-host" checked="true" />
148
- Unknown host (1)
149
- </label>
150
- </div>
151
- </div>
152
- </div>
153
- <hr />
154
-
155
-
156
- <table id="results" class="table table-condensed table-hover">
157
- <thead>
158
- <tr>
159
- <th>#</th>
160
- <th>URL</th>
161
- <th>Code</th>
162
- <th>Details</th>
163
- </tr>
164
- </thead>
165
- <tbody>
166
-
167
- <tr class="result result-redirected ">
168
- <td>1</td>
169
- <td><a href="http://www.google.com" target="_blank">http://www.google.com</a></td>
170
- <td>redirected</td>
171
- <td>1</td>
172
- <td>
173
- <a href="#" data-toggle="popover" data-placement="left" data-trigger="focus"
174
- data-html="true" title="http://www.google.com" data-content="<p><em>Status:</em> redirected</p>
175
- <p><em>URIs:</em><p>
176
- <ol><li>http://www.google.com</li><li>http://www.google.fr</li></ol>
177
- ">
178
- <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
179
- </a>
180
- </td>
181
- </tr>
182
-
183
- <tr class="result result-failed danger">
184
- <td>2</td>
185
- <td><a href="http://www.google.de" target="_blank">http://www.google.de</a></td>
186
- <td>failed</td>
187
- <td>StandardError</td>
188
- <td>
189
- <a href="#" data-toggle="popover" data-placement="left" data-trigger="focus"
190
- data-html="true" title="http://www.google.de" data-content="<p><em>Status:</em> failed</p>
191
- <p><em>URIs:</em><p>
192
- <ol><li>http://www.google.de</li></ol>
193
- <p><em>Error:</em> StandardError</p>">
194
- <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
195
- </a>
196
- </td>
197
- </tr>
198
-
199
- <tr class="result result-too-many-redirects danger">
200
- <td>3</td>
201
- <td><a href="http://www.google.es" target="_blank">http://www.google.es</a></td>
202
- <td>too_many_redirects</td>
203
- <td>1</td>
204
- <td>
205
- <a href="#" data-toggle="popover" data-placement="left" data-trigger="focus"
206
- data-html="true" title="http://www.google.es" data-content="<p><em>Status:</em> too_many_redirects</p>
207
- <p><em>URIs:</em><p>
208
- <ol><li>http://www.google.es</li><li>http://www.google.fr</li></ol>
209
- ">
210
- <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
211
- </a>
212
- </td>
213
- </tr>
214
-
215
- <tr class="result result-direct ">
216
- <td>4</td>
217
- <td><a href="http://www.google.fr" target="_blank">http://www.google.fr</a></td>
218
- <td>direct</td>
219
- <td></td>
220
- <td>
221
- </td>
222
- </tr>
223
-
224
- <tr class="result result-unknown-host danger">
225
- <td>5</td>
226
- <td><a href="http://www.google.it" target="_blank">http://www.google.it</a></td>
227
- <td>unknown_host</td>
228
- <td>http://www.google.it</td>
229
- <td>
230
- <a href="#" data-toggle="popover" data-placement="left" data-trigger="focus"
231
- data-html="true" title="http://www.google.it" data-content="<p><em>Status:</em> unknown_host</p>
232
- <p><em>URIs:</em><p>
233
- <ol><li>http://www.google.it</li></ol>
234
- ">
235
- <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
236
- </a>
237
- </td>
238
- </tr>
239
-
240
- </tbody>
241
- </table>
242
-
243
- </div>
244
-
245
- </body>
246
- </html>