scrapula 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.rspec +1 -0
  4. data/.simplecov +1 -0
  5. data/CHANGELOG.md +15 -0
  6. data/CONTRIBUTING.md +0 -0
  7. data/Gemfile +24 -0
  8. data/Gemfile.lock +127 -0
  9. data/Guardfile +12 -0
  10. data/LICENSE +21 -0
  11. data/README.md +108 -0
  12. data/ROADMAP.md +42 -0
  13. data/Rakefile +30 -0
  14. data/examples/block_syntax.rb +20 -0
  15. data/examples/find_nodes.rb +6 -0
  16. data/examples/get_first_and_scrape_later.rb +13 -0
  17. data/examples/metas.rb +32 -0
  18. data/examples/more_api.rb +17 -0
  19. data/examples/nested_results.rb +14 -0
  20. data/examples/one_liners.rb +9 -0
  21. data/examples/posting_data.rb +7 -0
  22. data/examples/s.rb +24 -0
  23. data/examples/validation.rb +40 -0
  24. data/lib/scrapula.rb +47 -0
  25. data/lib/scrapula/_old_scraper.rb +110 -0
  26. data/lib/scrapula/agent.rb +8 -0
  27. data/lib/scrapula/data.rb +18 -0
  28. data/lib/scrapula/page.rb +109 -0
  29. data/lib/scrapula/page/meta.rb +74 -0
  30. data/lib/scrapula/request.rb +44 -0
  31. data/lib/scrapula/s.rb +21 -0
  32. data/lib/scrapula/scraper.rb +56 -0
  33. data/lib/scrapula/version.rb +3 -0
  34. data/scrapula.gemspec +36 -0
  35. data/spec/cassettes/Scrapula_Page_Meta/_.yml +748 -0
  36. data/spec/cassettes/Scrapula_Page_Meta/_/Open_Graph.yml +322 -0
  37. data/spec/cassettes/Scrapula_Page_Meta/_/other_names.yml +586 -0
  38. data/spec/cassettes/Scrapula_Page_Meta/_/standard_names.yml +429 -0
  39. data/spec/lib/scrapula/agent_spec.rb +6 -0
  40. data/spec/lib/scrapula/data_spec.rb +19 -0
  41. data/spec/lib/scrapula/page/meta_spec.rb +89 -0
  42. data/spec/lib/scrapula/page_spec.rb +136 -0
  43. data/spec/lib/scrapula/request_spec.rb +91 -0
  44. data/spec/lib/scrapula/s_spec.rb +44 -0
  45. data/spec/lib/scrapula/scraper_spec.rb +205 -0
  46. data/spec/lib/scrapula_spec.rb +141 -0
  47. data/spec/spec_helper.rb +26 -0
  48. metadata +118 -0
@@ -0,0 +1,74 @@
1
+ module Scrapula
2
+ class Page
3
+ # http://www.w3.org/TR/html5/document-metadata.html#the-meta-element
4
+ #
5
+ # TODO lang?
6
+ class Meta
7
+
8
+ # Only 1 charset, without content
9
+ CHARSET = 'charset'
10
+
11
+ # "http-equiv" with content
12
+ PRAGMAS = %w[
13
+ content-type
14
+ default-style
15
+ refresh
16
+ ]
17
+
18
+ # "name" with content NOTE currently not used
19
+ STANDARD_NAMES = %w[
20
+ application-name
21
+ author
22
+ description
23
+ generator
24
+ keywords
25
+ ]
26
+
27
+ # TODO include a list of common headers
28
+ HTTP_HEADERS = %w[
29
+ ]
30
+
31
+ def initialize page
32
+ @page = page
33
+ @page_meta = @page.search! 'meta'
34
+
35
+ # TODO generate method for each meta
36
+ end
37
+
38
+ # TODO?
39
+ # def has? key
40
+ # end
41
+
42
+ # TODO?
43
+ # def all
44
+ # end
45
+
46
+ def [] key
47
+ case
48
+ when CHARSET == key
49
+ @page.instance_variable_get(:@agent_page).meta_charset.first
50
+
51
+ when (PRAGMAS + HTTP_HEADERS).include?(key)
52
+ @page_meta.at("[http-equiv='#{key}']").attr 'content'
53
+
54
+ # Open Graph is not standard; uses "property" instead of "name"
55
+ when key[/og:.+/]
56
+ # TODO return more than 1 content for some meta
57
+ @page_meta.at("[property='#{key}']").attr 'content'
58
+
59
+ else
60
+ # TODO try http-equiv also
61
+ @page_meta.at("[name='#{key}']").attr 'content'
62
+ end
63
+ rescue NoMethodError
64
+ nil
65
+ end
66
+
67
+ private
68
+
69
+ def extract_namespaces
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,44 @@
1
+ module Scrapula
2
+ class Request
3
+
4
+ attr_reader :agent, :url, :method, :params
5
+
6
+ def initialize(url:, method:, params: [], &block)
7
+
8
+ # raise "Invalid http method: #{method}" unless Scrapula.http_methods.include? method
9
+
10
+ # Prepend the protocol if necessary
11
+ @url = url.sub /\A(?!(?:https?:\/\/))/, 'http://'
12
+
13
+ # TODO
14
+ agent = Agent.new
15
+
16
+ @agent, @method, @params = agent, method, params
17
+
18
+ # TODO
19
+ @headers = {}
20
+ @options = {
21
+ redirects: 0
22
+ }
23
+ end
24
+
25
+ def execute
26
+ # TODO other methods
27
+ # TODO other parameters
28
+ Scrapula::Page.new agent.get @url, @params
29
+ end
30
+
31
+ # # Gets a raw page (Mechanize::Page object) TODO other agents...
32
+ # def page &block
33
+ # request do |agent, page|
34
+ # begin
35
+ # yield page if block_given?
36
+ # rescue => e
37
+ # puts "ERROR: #{e.message}" if Scrapula.verbose
38
+ # exit 1
39
+ # end
40
+ # end
41
+ # end
42
+
43
+ end
44
+ end
@@ -0,0 +1,21 @@
1
+ require 'forwardable'
2
+ require_relative '../scrapula'
3
+
4
+ module S
5
+ class << self
6
+ extend Forwardable
7
+ def_delegators Scrapula, *Scrapula::HTTP_METHODS.map(&:to_sym)
8
+
9
+ alias g get
10
+ # alias p post
11
+ # alias u put
12
+ # alias a patch
13
+ # alias d delete
14
+ # alias h head
15
+
16
+ end
17
+ end
18
+
19
+ def S(*args)
20
+ S.get args
21
+ end
@@ -0,0 +1,56 @@
1
+ require 'forwardable'
2
+
3
+ module Scrapula
4
+ class Scraper
5
+
6
+ extend Forwardable
7
+
8
+ # TODO url!
9
+ def_delegators :@page, :search!, :at!, :txt!
10
+
11
+ def initialize page, &block
12
+ @page, @data = page, {}
13
+
14
+ (block.arity == 0 ? instance_eval(&block) : block.call(@page)) if block
15
+ end
16
+
17
+ # TODO remove this method
18
+ def data!
19
+ result = {}
20
+ @data.each_pair do |key, value|
21
+ result[key] = value.is_a?(self.class) ? value.data! : value
22
+ end
23
+ result
24
+ end
25
+
26
+ def respond_to? name
27
+ true
28
+ end
29
+
30
+ private
31
+
32
+ def method_missing name, *args, &block
33
+
34
+ if args.empty?
35
+
36
+ # Used as nested block (TODO it's not compatible with using a query)
37
+ if block_given?
38
+ @data[name] = self.class.new @page, &block
39
+
40
+ # Invoked as an attribute
41
+ elsif @data.has_key? name
42
+ return @data[name]
43
+
44
+ else
45
+ raise 'Unknown case!'
46
+ end
47
+
48
+ else
49
+
50
+ @data[name] = @page.txt! *args
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,3 @@
1
+ module Scrapula
2
+ VERSION = '0.6.3'
3
+ end
@@ -0,0 +1,36 @@
1
+ require_relative './lib/scrapula/version'
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'scrapula'
5
+ s.version = Scrapula::VERSION
6
+ s.summary = 'Succinctest scraper in the world?'
7
+ s.description = <<-EOF
8
+ Scrapula is a library for scraping web pages that simplifies some of the
9
+ common actions that are involved.
10
+
11
+ It has a very simple API that can be used in several ways and contexts, and
12
+ another, shorter, that facilitates processing pages when characters are
13
+ scarce, like irb / pry, or quick and dirty scripts.
14
+ EOF
15
+ s.authors = ['Juan A. Martín Lucas']
16
+ s.email = 'scrapula@jaml.site'
17
+ s.homepage = 'http://github.com/j-a-m-l/scrapula'
18
+ s.license = 'MIT'
19
+
20
+ # TODO
21
+ # s.required_ruby_version
22
+ s.rdoc_options = ['--charset=UTF-8']
23
+
24
+ s.post_install_message = <<-EOF
25
+ Thanks for installing, but keep in mind that this project is not complete!
26
+ EOF
27
+
28
+ s.files = `git ls-files`.split("\n")
29
+ s.test_files = `git ls-files -- {spec}/*`.split("\n")
30
+ s.require_paths = ['lib']
31
+
32
+ s.add_runtime_dependency 'mechanize', '~> 2.7', '>= 2.7.3'
33
+
34
+ # Development and testing dependencies are listed in the Gemfile.
35
+
36
+ end
@@ -0,0 +1,748 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://ruby-doc.org/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip,deflate,identity
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Mechanize/2.7.3 Ruby/2.1.2p95 (http://github.com/sparklemotion/mechanize/)
16
+ Accept-Charset:
17
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
18
+ Accept-Language:
19
+ - en-us,en;q=0.5
20
+ Host:
21
+ - ruby-doc.org
22
+ Connection:
23
+ - keep-alive
24
+ Keep-Alive:
25
+ - 300
26
+ response:
27
+ status:
28
+ code: 200
29
+ message: OK
30
+ headers:
31
+ Date:
32
+ - Fri, 14 Aug 2015 18:05:20 GMT
33
+ Server:
34
+ - Apache/2.2.22 (Ubuntu)
35
+ Last-Modified:
36
+ - Thu, 07 May 2015 04:45:34 GMT
37
+ Etag:
38
+ - '"13e009c-4187-515769504d780"'
39
+ Accept-Ranges:
40
+ - bytes
41
+ Vary:
42
+ - Accept-Encoding
43
+ Content-Length:
44
+ - '16775'
45
+ Keep-Alive:
46
+ - timeout=5, max=100
47
+ Connection:
48
+ - Keep-Alive
49
+ Content-Type:
50
+ - text/html
51
+ body:
52
+ encoding: ASCII-8BIT
53
+ string: !binary |-
54
+ PCFkb2N0eXBlIGh0bWw+CjwhLS0gcGF1bGlyaXNoLmNvbS8yMDA4L2NvbmRp
55
+ dGlvbmFsLXN0eWxlc2hlZXRzLXZzLWNzcy1oYWNrcy1hbnN3ZXItbmVpdGhl
56
+ ci8gLS0+CjwhLS1baWYgbHQgSUUgN10+IDxodG1sIGNsYXNzPSJuby1qcyBp
57
+ ZTYgb2xkaWUiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+CjwhLS1baWYgSUUg
58
+ N10+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTcgb2xkaWUiIGxhbmc9ImVu
59
+ Ij4gPCFbZW5kaWZdLS0+CjwhLS1baWYgSUUgOF0+ICAgIDxodG1sIGNsYXNz
60
+ PSJuby1qcyBpZTggb2xkaWUiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cjwh
61
+ LS0gQ29uc2lkZXIgYWRkaW5nIGEgbWFuaWZlc3QuYXBwY2FjaGU6IGg1YnAu
62
+ Y29tL2QvT2ZmbGluZSAtLT4KPCEtLVtpZiBndCBJRSA4XT48IS0tPiA8aHRt
63
+ bCBjbGFzcz0ibm8tanMiIGxhbmc9ImVuIj4gPCEtLTwhW2VuZGlmXS0tPgo8
64
+ aGVhZD4KCiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDwhLS0gVXNlIHRo
65
+ ZSAuaHRhY2Nlc3MgYW5kIHJlbW92ZSB0aGVzZSBsaW5lcyB0byBhdm9pZCBl
66
+ ZGdlIGNhc2UgaXNzdWVzLgogIE1vcmUgaW5mbzogaDVicC5jb20vYi8zNzgg
67
+ LS0+CiAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250
68
+ ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KICA8dGl0bGU+UnVieS1Eb2Mub3Jn
69
+ OiBEb2N1bWVudGluZyB0aGUgUnVieSBMYW5ndWFnZTwvdGl0bGU+CgogIDwh
70
+ LS0gTW9iaWxlIHZpZXdwb3J0IG9wdGltaXplZDogai5tcC9icGxhdGV2aWV3
71
+ cG9ydCAtLT4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lk
72
+ dGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSI+CiAgPGxpbmsgcmVs
73
+ PSJzZWFyY2giIHR5cGU9ImFwcGxpY2F0aW9uL29wZW5zZWFyY2hkZXNjcmlw
74
+ dGlvbit4bWwiIHRpdGxlPSJSdWJ5LURvYyBTZWFyY2giIGhyZWY9Imh0dHA6
75
+ Ly93d3cucnVieS1kb2Mub3JnL3J1YnktZG9jLXNlYXJjaC54bWwiID4KICA8
76
+ bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IldlYmJ5IiA+CiAgPG1l
77
+ dGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkZhc3QgYW5kIHNlYXJj
78
+ aGFibGUgUnVieSBkb2N1bWVudGF0aW9uIGZvciBjb3JlLCBzdGFuZGFyZCBs
79
+ aWJyYXJpZXMsIGFuZCBydWJ5Z2Vtcy4gQXZhaWxhYmxlIGluIGJvdGggUkRv
80
+ YyBhbmQgWWFyZCBmb3JtYXQuIFBsdXMsIGxpbmtzIHRvIHR1dG9yaWFscywg
81
+ Z3VpZGVzLCBib29rcywgYW5kIHJlbGF0ZWQgc2l0ZXMuIiA+CiAgPG1ldGEg
82
+ bmFtZT0icm9ib3RzIiBjb250ZW50PSJOT09EUCIgPgogIDxtZXRhIGh0dHAt
83
+ ZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFy
84
+ c2V0PXV0Zi04IiA+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIv
85
+ Y3NzL2ludWl0LmNzcyI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
86
+ PSIvY3NzL2dyaWQuaW51aXQuY3NzIj4KICA8bGluayBocmVmPSIvY3NzLzIw
87
+ MTEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KICA8
88
+ bGluayBocmVmPSIvY3NzL3Jkb2MuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5
89
+ cGU9InRleHQvY3NzIj4KCiAgPGxpbmsgaHJlZj0iL2Zhdmljb24uaWNvIiBy
90
+ ZWw9IlNob3J0Y3V0IEljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgPgogIDxz
91
+ Y3JpcHQgc3JjPSIvanMvbGlicy9tb2Rlcm5penItMi4wLjYubWluLmpzIj48
92
+ L3NjcmlwdD4KICA8c2NyaXB0IHNyYz0iaHR0cDovL2NvZGUuanF1ZXJ5LmNv
93
+ bS9qcXVlcnktMS44LjMubWluLmpzIj48L3NjcmlwdD4KCiA8c3R5bGUgdHlw
94
+ ZT0ndGV4dC9jc3MnPgogICAuYWR6Ym94LW1haW4gewpiYWNrZ3JvdW5kLWNv
95
+ bG9yOiNGRkY7CmJvcmRlcjowIHNvbGlkICMzMzM7CmZsb2F0OiByaWdodDsK
96
+ aGVpZ2h0OjYwMHB4OwptYXJnaW4tcmlnaHQ6LTcwcHg7Cm1hcmdpbi10b3A6
97
+ MjAwcHg7Ci8qd2lkdGg6MTYwcHg7ICovCgp9CgogICAuYWR6Ym94LW1haW5f
98
+ IHsKbWFyZ2luLXRvcDoyMDBweDsKCn0KCiB1bC5tYWluLXN1YiB7IAogICBt
99
+ YXJnaW46IDAgMCAwIDIwcHg7CiB9CgogI3Z1bG5zLWFsZXJ0ICN2dWxuc3sK
100
+ ICAgYmFja2dyb3VuZC1jb2xvcjogI2MzMyAhIGltcG9ydGFudDsKICAgd2lk
101
+ dGg6IDEwMCU7CiAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgfQogICAjdnVs
102
+ bnMtYWxlcnQgI3Z1bG5zIGEgewpjb2xvcjogI0Y5OSAhIGltcG9ydGFudDsK
103
+ ICAgfQoKICAgLmd1aWRlbGluZXMgIGxpIHsKICAgIHBhZGRpbmctYm90dG9t
104
+ OiAwLjVlbSA7CiAgICBwYWRkaW5nLXRvcCAwLjVlbSA7CiAgfQoKICB1bC5n
105
+ dWlkZWxpbmVzICB7CiAgICBtYXJnaW4tYm90dG9tOiAxZW0gOwogICAgbWFy
106
+ Z2luLXRvcCAxZW0gOwogIH0KIDwvc3R5bGU+CjwvaGVhZD4KCjxib2R5IGNs
107
+ YXNzPSdkZWZhdWx0Jz4KPGRpdiBpZD0nYWN0aW9uYmFyJyA+CjxkaXYgY2xh
108
+ c3M9J3dyYXBwZXInPgo8dWwgY2xhc3M9J2dyaWRzIGcwJz4KICA8bGkgY2xh
109
+ c3M9J2dyaWQtMicgPjxhIGhyZWY9Jy8nPkhvbWU8L2E+PC9saT4KICA8bGkg
110
+ Y2xhc3M9J2dyaWQtMicgPjxhIGhyZWY9Jy9jb3JlJz5Db3JlPC9hPjwvbGk+
111
+ CiAgPGxpIGNsYXNzPSdncmlkLTInID48YSBocmVmPScvc3RkbGliJz5TdGQt
112
+ bGliPC9hPjwvbGk+CiAgPGxpIGNsYXNzPSdncmlkLTInID48YSBocmVmPScv
113
+ ZG93bmxvYWRzJz5Eb3dubG9hZHM8L2E+PC9saT4KICA8bGkgY2xhc3M9J2dy
114
+ aWQtNSByaWdodCcgaWQ9J3JkLWFjdGlvbi1zZWFyY2gnPjxmb3JtIAogICBp
115
+ ZD0ic2VhcmNoYm94XzAxMTgxNTgxNDEwMDY4MTgzNzM5Mjp3bmNjdjZzdDVx
116
+ ayIgCiAgIGFjdGlvbj0iaHR0cDovL3J1YnktZG9jLmNvbS9zZWFyY2guaHRt
117
+ bCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgCiAgICAgICAgICAgICBuYW1lPSJj
118
+ eCIgCiAgICAgICAgICAgICB2YWx1ZT0iMDExODE1ODE0MTAwNjgxODM3Mzky
119
+ OnduY2N2NnN0NXFrIiA+PGlucHV0IG5hbWU9InEiIAogICAgICAgICAgICAg
120
+ ICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IiBzaXplPSIyMCIgaWQ9
121
+ J3JkLXNlYXJjaC1pbnB1dCcgPiYjMTYwOyYjMTYwOzxpbnB1dCAKICAgICAg
122
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InN1Ym1pdCIg
123
+ bmFtZT0ic2EiIHZhbHVlPSJTZWFyY2giID48aW5wdXQgdHlwZT0iaGlkZGVu
124
+ IiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
125
+ IG5hbWU9ImNvZiIgdmFsdWU9IkZPUklEOjkiID48L2Zvcm0+CjwvbGk+Cjwv
126
+ dWw+CjwvZGl2Pgo8c3BhbiBpZD0ndnVsbnMtYWxlcnQnPjwvc3Bhbj4KPC9k
127
+ aXY+CjwhLS0gLS0+Cgo8ZGl2IGNsYXNzPSd3cmFwcGVyJz4KPGRpdiBpZD0i
128
+ aGVhZGVyIiBjbGFzcz0iZ3JpZHMgZzEiPgogIDxoZWFkZXIgY2xhc3M9J2dy
129
+ aWQtMTYnPgogIDxoMT48YSBocmVmPScvJyAgPlJ1YnktRG9jLm9yZzwvYT48
130
+ L2gxPgogIDxwPkhlbHAgYW5kIGRvY3VtZW50YXRpb24gZm9yIHRoZSBSdWJ5
131
+ IHByb2dyYW1taW5nIGxhbmd1YWdlLjwvcD4KICA8L2hlYWRlcj4KPC9kaXY+
132
+ IDwhLS0gZW5kICNoZWFkZXIgLS0+Cgo8ZGl2IGNsYXNzPSdncmlkcyBnMic+
133
+ CiAgPGRpdiBjbGFzcz0nZ3JpZC0xNic+CiAgICA8IS0tIElOREVYIC0tPgoK
134
+ PHVsIGNsYXNzPSJncmlkcyBpbmRleC1nMSIgaWQ9J3Jvdy10d28nPgogIDxs
135
+ aSBpZD0nY29yZScgY2xhc3M9ImdyaWQtNyIgPiA8IS0tIGxpIDEgLS0+CiAg
136
+ ICA8aDI+PGEgaHJlZj0iL2NvcmUiPkNvcmUgQVBJPC9hPjwvaDI+CiAgICA8
137
+ cD5UaGVzZSBhcmUgdGhlIEFQSSBkb2N1bWVudHMgZm9yIHRoZSBiYXNlIGNs
138
+ YXNzZXMgYW5kIG1vZHVsZXMgaW4gdGhlIGN1cnJlbnQgc3RhYmxlIHJlbGVh
139
+ c2Ugb2YgUnVieSAyLjIuPC9wPgogICAgPHVsICBpZD0nY29yZS1hcGktbGlz
140
+ dCcgY2xhc3M9J21haW4tc3ViJz4gPCEtLSB1bCAyIC0tPgogICAgICA8bGk+
141
+ PHNwYW4+PGEgaHJlZj0iL2NvcmUiPjIuMi4yIGNvcmU8L2E+IC0gQ29yZSBB
142
+ UEkgZG9jcyBmb3IgUnVieSAyLjIuMiAgVGhpcyBpcyAgdGhlIGN1cnJlbnQg
143
+ b2ZmaWNpYWwgcmVsZWFzZS48L3NwYW4+PC9saT4KICAgICAgPGxpPjxzcGFu
144
+ PjxhIGhyZWY9Ii9jb3JlLTIuMi4xIj4yLjIuMSBjb3JlPC9hPiAtIENvcmUg
145
+ QVBJIGRvY3MgZm9yIFJ1YnkgMi4yLjE8L3NwYW4+PC9saT4KICAgICAgPGxp
146
+ PjxzcGFuPjxhIGhyZWY9Ii9jb3JlLTIuMi4wIj4yLjIuMCBjb3JlPC9hPiAt
147
+ IENvcmUgQVBJIGRvY3MgZm9yIFJ1YnkgMi4yLjA8L3NwYW4+PC9saT4KICAg
148
+ ICAgPGxpPjxzcGFuPjxhIGhyZWY9Ii9jb3JlLTIuMS42Ij4yLjEuNiBjb3Jl
149
+ PC9hPiAtIENvcmUgQVBJIGRvY3MgZm9yIFJ1YnkgMi4xLjY8L3NwYW4+PC9s
150
+ aT4KICAgICAgPGxpPjxzcGFuPjxhIGhyZWY9Ii9jb3JlLTIuMS41Ij4yLjEu
151
+ NSBjb3JlPC9hPiAtIENvcmUgQVBJIGRvY3MgZm9yIFJ1YnkgMi4xLjU8L3Nw
152
+ YW4+PC9saT4KICAgICAgPGxpPjxzcGFuPjxhIGhyZWY9Ii9jb3JlLTIuMS40
153
+ Ij4yLjEuNCBjb3JlPC9hPiAtIENvcmUgQVBJIGRvY3MgZm9yIFJ1YnkgMi4x
154
+ LjQgPC9zcGFuPjwvbGk+CiAgICAgIDxsaT48c3Bhbj48YSBocmVmPSIvY29y
155
+ ZS0yLjEuMyI+Mi4xLjMgY29yZTwvYT4gLSBDb3JlIEFQSSBkb2NzIGZvciBS
156
+ dWJ5IDIuMS4zIDwvc3Bhbj48L2xpPgogICAgICA8bGk+PHNwYW4+PGEgaHJl
157
+ Zj0iL2NvcmUtMi4xLjIiPjIuMS4yIGNvcmU8L2E+IC0gQ29yZSBBUEkgZG9j
158
+ cyBmb3IgUnVieSAyLjEuMiA8L3NwYW4+PC9saT4KICAgICAgPGxpPjxzcGFu
159
+ PjxhIGhyZWY9Ii9jb3JlLTIuMS4xIj4yLjEuMSBjb3JlPC9hPiAtIENvcmUg
160
+ QVBJIGRvY3MgZm9yIFJ1YnkgMi4xLjEgPC9zcGFuPjwvbGk+CiAgICAgIDxs
161
+ aT48c3Bhbj48YSBocmVmPSIvY29yZS0yLjEuMCI+Mi4xLjAgY29yZTwvYT4g
162
+ LSBDb3JlIEFQSSBkb2NzIGZvciBSdWJ5IDIuMS4wPC9zcGFuPjwvbGk+CiAg
163
+ ICAgIDxsaT48c3Bhbj48YSBocmVmPSIvY29yZS0yLjAuMCI+Mi4wLjAgY29y
164
+ ZTwvYT4gLSBDb3JlIEFQSSBkb2NzIGZvciBSdWJ5IDIuMC4wICA8L3NwYW4+
165
+ PC9saT4KICAgICAgPGxpPjxzcGFuPjxhIGhyZWY9Ii9jb3JlLTEuOS4zIj4x
166
+ LjkuMyBjb3JlPC9hPiAtIENvcmUgQVBJIGRvY3MgZm9yIFJ1YnkgMS45LjMg
167
+ YmFzZSBjbGFzc2VzIGFuZCBtb2R1bGVzLCBzdWNoIGFzIFN0cmluZywgQXJy
168
+ YXksIFN5bWJvbCwgZXRjLjwvc3Bhbj4gPC9saT4KICAgICAgPGxpPjxzcGFu
169
+ PjxhIGhyZWY9Ii9kb2NzL2tleXdvcmRzLzEuOS8iPjEuOSBrZXl3b3Jkczwv
170
+ YT4gLSBLZXl3b3JkcyBkZWZpbmVkIGluIDEuOS48L3NwYW4+PC9saT4KICAg
171
+ ICAgPGxpPjxzcGFuPjxhIGhyZWY9Ii9jb3JlLW1ydWJ5LyI+TVJ1YnkgY29y
172
+ ZTwvYT4gLSBDb3JlIEFQSSBkb2NzIGZvciBNUnVieSAodGhpcyBpcyA8ZW0+
173
+ bm90PC9lbT4gYW4gYWN0aXZlIHJlbGVhc2UgdmVyc2lvbikuPC9zcGFuPjwv
174
+ bGk+CiAgICAgIDxsaT48c3Bhbj48YSBocmVmPSIvY29yZS10cnVuayI+dHJ1
175
+ bmstY29yZTwvYT4gLSBDb3JlIEFQSSBkb2NzIGZvciBSdWJ5IHRydW5rIChu
176
+ b3QgeWV0IG9mZmljaWFsbHkgcmVsZWFzZWQpIDwvc3Bhbj48L2xpPgogICAg
177
+ ICA8bGk+PHNwYW4+PGEgaHJlZj0iL2NvcmUtMS45LjIiPjEuOS4yIGNvcmU8
178
+ L2E+IC0gQ29yZSBBUEkgZG9jcyBmb3IgUnVieSAxLjkuMjwvc3Bhbj4gPC9s
179
+ aT4KICAgICAgPGxpPjxzcGFuPjxhIGhyZWY9Ii9jb3JlLTEuOS4xIj4xLjku
180
+ MSBjb3JlPC9hPiAtIENvcmUgQVBJIGRvY3MgZm9yIFJ1YnkgMS45LjE8L3Nw
181
+ YW4+IDwvbGk+CiAgICAgIDxsaT48c3Bhbj48YSBocmVmPSIvY29yZS0xLjgu
182
+ NyI+MS44LjcgY29yZTwvYT4gLSBDb3JlIEFQSSBkb2NzIGZvciBSdWJ5IDEu
183
+ OC43LiAgPC9zcGFuPjwvbGk+CiAgICAgIDxsaT48c3Bhbj48YSBocmVmPSIv
184
+ Y29yZS0xLjguNi9pbmRleC5odG1sIj4xLjguNiBjb3JlPC9hPiAtIENvcmUg
185
+ QVBJIGRvY3MgZm9yIFJ1YnkgMS44LjYuPC9zcGFuPjwvbGk+CiAgICAgIAog
186
+ ICAgPC91bD4gPCEtLSB1bCAyIC0tPgoKICA8L2xpPiAgPCEtLSBsaSAxIC0t
187
+ PgogIDxkaXYgY2xhc3M9J2dyaWQtMic+PC9kaXY+CiAgPGxpIGlkPSdzdGFu
188
+ ZGFyZGxpYicgY2xhc3M9ImdyaWQtNyI+CiAgICA8aDI+PGEgaHJlZj0iL3N0
189
+ ZGxpYi8iPlN0YW5kYXJkIExpYnJhcnkgQVBJPC9hPjwvaDI+CiAgICA8cD5U
190
+ aGVzZSBhcmUgdGhlIEFQSSBkb2N1bWVudHMgZm9yIHRoZSBzdGFuZGFyZCBs
191
+ aWJyYXJ5IGNsYXNzZXMgYW5kIG1vZHVsZXMgaW4gdmVyc2lvbiAyLjI8L3A+
192
+ CiAgICA8dWwgaWQ9J3N0ZGxpYi1hcGktbGlzdCcgIGNsYXNzPSdtYWluLXN1
193
+ Yic+IDwhLS0gdWwgMSAtLT4KICAgICAgPGxpPiA8c3Bhbj4gPGEgaHJlZj0i
194
+ L3N0ZGxpYi8iPlRoZSAyLjIuMiBzdGFuZGFyZCBsaWJyYXJ5ICh0aGlzIGlz
195
+ IHRoZSBjdXJyZW50IG9mZmljaWFsIHJlbGVhc2UpPC9hPgogICAgICAgICAg
196
+ PGJyPiBBZGRpdGlvbmFsIGxpYnJhcmllcyBpbmNsdWRlZCB3aXRoIHRoZSBz
197
+ dGFuZGFyZCBSdWJ5IGRpc3RyaWJ1dGlvbiwgc3VjaCBhcyBDR0ksIE9wZW5V
198
+ UkksIGFuZCBSRVhNTDwvc3Bhbj4gPC9saT4KICAgICAgPGxpPiA8c3Bhbj4g
199
+ PGEgaHJlZj0iL3N0ZGxpYi0yLjIuMSI+VGhlIDIuMi4xIHN0YW5kYXJkIGxp
200
+ YnJhcnk8L2E+PC9zcGFuPiAgPC9saT4KICAgICAgPGxpPiA8c3Bhbj4gPGEg
201
+ aHJlZj0iL3N0ZGxpYi0yLjIuMCI+VGhlIDIuMi4wIHN0YW5kYXJkIGxpYnJh
202
+ cnk8L2E+PC9zcGFuPiAgPC9saT4KICAgICAgPGxpPiA8c3Bhbj4gPGEgaHJl
203
+ Zj0iL3N0ZGxpYi0yLjEuNiI+VGhlIDIuMS42IHN0YW5kYXJkIGxpYnJhcnk8
204
+ L2E+PC9zcGFuPiAgPC9saT4KICAgICAgPGxpPiA8c3Bhbj4gPGEgaHJlZj0i
205
+ L3N0ZGxpYi0yLjEuNSI+VGhlIDIuMS41IHN0YW5kYXJkIGxpYnJhcnk8L2E+
206
+ PC9zcGFuPiAgPC9saT4KICAgICAgPGxpPiA8c3Bhbj4gPGEgaHJlZj0iL3N0
207
+ ZGxpYi0yLjEuNCI+VGhlIDIuMS40IHN0YW5kYXJkIGxpYnJhcnk8L2E+PC9z
208
+ cGFuPiAgPC9saT4KICAgICAgPGxpPiA8c3Bhbj4gPGEgaHJlZj0iL3N0ZGxp
209
+ Yi0yLjEuMyI+VGhlIDIuMS4zIHN0YW5kYXJkIGxpYnJhcnk8L2E+PC9zcGFu
210
+ PiAgPC9saT4KICAgICAgPGxpPiA8c3Bhbj4gPGEgaHJlZj0iL3N0ZGxpYi0y
211
+ LjEuMiI+VGhlIDIuMS4yIHN0YW5kYXJkIGxpYnJhcnk8L2E+PC9zcGFuPiAg
212
+ PC9saT4KICAgICAgPGxpPiA8c3Bhbj4gPGEgaHJlZj0iL3N0ZGxpYi0yLjEu
213
+ MSI+VGhlIDIuMS4xIHN0YW5kYXJkIGxpYnJhcnk8L2E+PC9zcGFuPiAgPC9s
214
+ aT4KICAgICAgPGxpPiA8c3Bhbj4gPGEgaHJlZj0iL3N0ZGxpYi0yLjEuMCI+
215
+ VGhlIDIuMS4wIHN0YW5kYXJkIGxpYnJhcnk8L2E+PC9zcGFuPiAgPC9saT4K
216
+ ICAgICAgPGxpPiA8c3Bhbj4gPGEgaHJlZj0iL3N0ZGxpYi0yLjAuMCI+VGhl
217
+ IDIuMC4wIHN0YW5kYXJkIGxpYnJhcnk8L2E+PC9zcGFuPiAgPC9saT4KICAg
218
+ ICAgPGxpPiA8c3Bhbj4gPGEgaHJlZj0iL3N0ZGxpYi0xLjkuMy8iPlRoZSAx
219
+ LjkuMyBzdGFuZGFyZCBsaWJyYXJ5PC9hPjwvc3Bhbj4gPC9saT4KICAgICAg
220
+ PGxpPiA8c3Bhbj4gPGEgaHJlZj0iL3N0ZGxpYi0xLjkuMi8iPlRoZSAxLjku
221
+ MiBzdGFuZGFyZCBsaWJyYXJ5PC9hPjwvc3Bhbj48L2xpPgogICAgICA8bGk+
222
+ IDxzcGFuPiA8YSBocmVmPSIvc3RkbGliLTEuOS4xLyI+VGhlIDEuOS4xIHN0
223
+ YW5kYXJkIGxpYnJhcnk8L2E+PC9zcGFuPjwvbGk+CiAgICAgIDxsaT4gPHNw
224
+ YW4+IDxhIGhyZWY9Ii9zdGRsaWItMS44LjcvIj5UaGUgMS44Ljcgc3RhbmRh
225
+ cmQgbGlicmFyeTwvYT48L3NwYW4+PC9saT4KICAgICAgPGxpPiA8c3Bhbj4g
226
+ PGEgaHJlZj0iL3N0ZGxpYi0xLjguNi8iPlRoZSAxLjguNiBzdGFuZGFyZCBs
227
+ aWJyYXJ5PC9hPjwvc3Bhbj48L2xpPgogICAgICA8bGk+IDxzcGFuPiA8YSBo
228
+ cmVmPSIvc3RkbGliLXRydW5rIj5UaGUgUnVieSB0cnVuayBzdGFuZGFyZCBs
229
+ aWJyYXJ5PC9hPjwvc3Bhbj48L2xpPgogICAgICAKICAgIDwvdWw+IDwhLS0g
230
+ dWwgMSAtLT4KICAgPC9saT4gPCEtLSBsaSAwIC0tPgoJIAogIDxsaSBjbGFz
231
+ cz0nYWR6Ym94LW1haW5fIGdyaWQtMSByaWdodCcgPgogICAgPGRpdiBpZD0i
232
+ Y2FyYm9uYWRzLWNvbnRhaW5lciI+PGRpdiBjbGFzcz0iY2FyYm9uYWQiPjxk
233
+ aXYgaWQ9ImF6Y2FyYm9uIj48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2
234
+ YXNjcmlwdCI+dmFyIHogPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3Jp
235
+ cHQiKTsgei50eXBlID0gInRleHQvamF2YXNjcmlwdCI7IHouYXN5bmMgPSB0
236
+ cnVlOyB6LnNyYyA9ICJodHRwOi8vZW5naW5lLmNhcmJvbmFkcy5jb20vei8x
237
+ OTY0Ny9hemNhcmJvbl8yXzFfMF9WRVJUIjsgdmFyIHMgPSBkb2N1bWVudC5n
238
+ ZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07IHMucGFyZW50Tm9k
239
+ ZS5pbnNlcnRCZWZvcmUoeiwgcyk7PC9zY3JpcHQ+PC9kaXY+PC9kaXY+CiAg
240
+ PC9saT4KCiAgCiA8L3VsPiAKCgoKCjxkaXYgY2xhc3M9J2dyaWQtMTYgaW5k
241
+ ZXgtZzAnIGlkPSdnZXR0aW5nLXN0YXJ0ZWQtaGVhZGVyJyBzdHlsZT0ncGFk
242
+ ZGluZy1ib3R0b206MDsgbWFyZ2luLWJvdHRvbTowJyA+CiAgPCEtLSBoMj48
243
+ YSBocmVmPSIvZ2V0dGluZ3N0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4g
244
+ PGEgaHJlZj0iL3doeXJ1YnkiPmFuZCBtb3JlPC9hPiA8L2gyIC0tPgogIDwv
245
+ ZGl2Pgo8dWwgY2xhc3M9ImdyaWRzIGluZGV4LWcwIiBpZD0ncm93LW9uZSc+
246
+ CiAgPGxpIGlkPSJnZXR0aW5nc3RhcnRlZCIgY2xhc3M9ImdyaWQtNyI+CiAg
247
+ ICA8aDI+PGEgaHJlZj0iL2dldHRpbmdzdGFydGVkIj5HZXR0aW5nIFN0YXJ0
248
+ ZWQ8L2E+IDwvaDI+CiAgICA8cCAgc3R5bGU9J3BhZGRpbmctYm90dG9tOjA7
249
+ IG1hcmdpbi1ib3R0b206MTBweDsgY29sb3I6IzZDNkM2QzsgZm9udC1mYW1p
250
+ bHk6SGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7JyA+QSBjb2xsZWN0aW9u
251
+ IG9mIHJlc291cmNlcyBmb3IgdGhvc2UganVzdCBzdGFydGluZyBvdXQgd2l0
252
+ aCBSdWJ5LjwvcD4KCiAgICA8dWwgY2xhc3M9J21haW4tc3ViJz4KICAgICAg
253
+ PGxpPlNvbWUgUnVieSAyLnggcmVzb3VyY2VzPGJyPgogICAgICAgIDx1bD4K
254
+ ICAgICAgICAgIDxsaT48YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcnVi
255
+ eS9ydWJ5L2Jsb2IvdjJfMV8wL05FV1MnPldoYXQncyBuZXcgaW4gUnVieSAy
256
+ LjEuMDwvYT48L2xpPgogICAgICAgICAgPGxpPjxhIGhyZWY9J2h0dHA6Ly93
257
+ d3cucnVieS1sYW5nLm9yZy9lbi9uZXdzLzIwMTMvMDIvMjQvcnVieS0yLTAt
258
+ MC1wMC1pcy1yZWxlYXNlZCNsYWJlbC0xJz5XaGF0IGlzIFJ1YnkgMi4wLjA/
259
+ PC9hPjwvbGk+CiAgICAgICAgICA8bGk+PGEgaHJlZj0naHR0cDovL2Jsb2cu
260
+ bWFyYy1hbmRyZS5jYS8yMDEzLzAyLzIzL3J1YnktMi1ieS1leGFtcGxlLyc+
261
+ UnVieSAyLjAuMCBieSBFeGFtcGxlPC9hPjwvbGk+CiAgICAgICAgICAgIDwv
262
+ dWw+IAogICAgICA8bGk+IDxzcGFuPiA8YSBocmVmPSJodHRwOi8vZG9jcy5y
263
+ dWJ5LWRvYy5jb20vZG9jcy9Qcm9ncmFtbWluZ1J1YnkvIj5Qcm9ncmFtbWlu
264
+ ZyBSdWJ5PC9hPiA8YnI+QW4gb24tbGluZSBjb3B5IG9mIHRoZSBmaXJzdCBl
265
+ ZGl0aW9uIG9mIHRoZSBib29rIFByb2dyYW1taW5nIFJ1YnksIGJ5IERhdmUg
266
+ VGhvbWFzLjwvc3Bhbj4gPC9saT4KICAgICAgPGxpPjxhIGhyZWY9J2h0dHA6
267
+ Ly9uZXVyb2dhbWkuY29tL2NvbnRlbnQvMTBfbWludXRlc190b195b3VyX2Zp
268
+ cnN0X1J1YnlfYXBwJz4xMCBNaW51dGVzIHRvIFlvdXIgRmlyc3QgUnVieSBB
269
+ cHBsaWNhdGlvbjwvYT48YnI+V3JpdGUgYSB1c2VmdWwgUnVieSBwcm9ncmFt
270
+ IHRoYXQgZGVtb25zdHJhdGVzIGtleSBsYW5ndWFnZSBjb25jZXB0cy48L2xp
271
+ PgogICAgICA8bGk+IDxzcGFuPiA8YSBocmVmPSJodHRwOi8vYmxvZy5ydWJ5
272
+ YmVzdHByYWN0aWNlcy5jb20vcG9zdHMvZ3JlZ29yeS8wMjItcmJwLW5vdy1v
273
+ cGVuLmh0bWwiPlJ1YnkgQmVzdCBQcmFjdGljZXM8L2E+PGJyPkZyZWUgb24t
274
+ bGluZSBib29rLjwvc3Bhbj48L2xpPgogICAgICA8bGk+IDxzcGFuPiA8YSBo
275
+ cmVmPSIvZG9jcyI+QWRkaXRpb25hbCBEb2N1bWVudHM8L2E+IDxicj5BIHZh
276
+ cmllZCBjb2xsZWN0aW9uIG9mIG90aGVyIGRvY3VtZW50cyBob3N0ZWQgb24g
277
+ UnVieS1Eb2M8L3NwYW4+IDwvbGk+CiAgICAgIDxsaT4gPHNwYW4+IDxhIGhy
278
+ ZWY9Ii9kb3dubG9hZHMiPkRvd25sb2FkczwvYT4gPGJyPlZhcmlvdXMgZG9j
279
+ dW1lbnQgc2V0cyBhbmQgdHJhbnNsYXRlZCB3b3Jrcywgc3VpdGFibGUgZm9y
280
+ IGRvd25sb2FkaW5nIGZvciBsb2NhbCBwZXJ1c2FsLjwvc3Bhbj4gPC9saT4K
281
+ ICAgICAgPGxpPjxhIGhyZWY9J2h0dHBzOi8vcHJhY3RpY2luZ3J1YnkuY29t
282
+ Jz5QcmFjdGljaW5nIFJ1Ynk8L2E+PGJyPkEgdW5pcXVlIGpvdXJuYWwgY3Vy
283
+ YXRlZCBieSA8YSBocmVmPSdodHRwOi8vYmxvZy5ydWJ5YmVzdHByYWN0aWNl
284
+ cy5jb20vYWJvdXQvZ3JlZ29yeS5odG1sJz5HcmVnb3J5IEJyb3duPC9hPjwv
285
+ bGk+CgogICAgICA8bGk+PGEgaHJlZj0iL3doeXJ1YnkiPk1vcmUgLi4uPC9h
286
+ PjwvbGk+CgogICAgPC91bD4KICA8L2xpPgogIDxkaXYgY2xhc3M9J2dyaWQt
287
+ Mic+PC9kaXY+CgogIDxsaSBpZD0id2h5cnVieSIgY2xhc3M9ImdyaWQtNyI+
288
+ CiAgICA8aDI+IDxhPkRvY3MgaW4gT3RoZXIgTGFuZ3VhZ2VzPC9hPjwvaDI+
289
+ CiAgICA8dWwgY2xhc3M9J21haW4tc3ViJz4KICAgICAgPGxpPjxhIGhyZWY9
290
+ Jy9mcic+RnJlbmNoIC8gRnJhbsOnYWlzPC9hPjwvbGk+CiAgICAgPGxpPjxh
291
+ IGhyZWY9Jy9kZSc+R2VybWFuIC8gRGV1dHNjaDwvYT48L2xpPgogICAgIDxs
292
+ aT48YSBocmVmPScvYmcnPkJ1bGdhcmlhbiAvINCx0YrQu9Cz0LDRgNGB0LrQ
293
+ uDwvYT48L2xpPgogICAgIDxsaT48YSBocmVmPScvZXMnPlNwYW5pc2ggLyBF
294
+ c3Bhw7FvbDwvYT48L2xpPgogICAgIDxsaT48YSBocmVmPScvcGwnPlBvbGlz
295
+ aCAvIFBvbHNraTwvYT48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaSBj
296
+ bGFzcz0nYWR6Ym94LW1haW5fIGdyaWQtMSByaWdodCcgPgo8L2xpPgoKICA8
297
+ bGkgaWQ9J2Jvb2tzJyBjbGFzcz0iZ3JpZC03ICI+CiAgICA8aDI+PGEgaHJl
298
+ Zj0iaHR0cDovL2Jvb2tzLnJ1YnktZG9jLmNvbS9ib29rc3RvcmUiPlJ1Ynkg
299
+ Qm9va3M8L2E+PC9oMj4KICAgIDxwPlRoZXJlIGFyZSBhbiBpbmNyZWFzaW5n
300
+ IG51bWJlciBvZiBSdWJ5IGJvb2tzLiBUaGlzIHNlY3Rpb24gc2hvd3Mgd2hh
301
+ dCdzIGN1cnJlbnRseSBhdmFpbGFibGUuPC9wPgogICAgPHVsICBjbGFzcz0n
302
+ bWFpbi1zdWInPgogICAgICA8bGk+IDxzcGFuPiA8YSBocmVmPSJodHRwOi8v
303
+ Ym9va3MucnVieS1kb2MuY29tL2Jvb2tzdG9yZSMwOTc0NTE0MDU1Ij5Qcm9n
304
+ cmFtbWluZyBSdWJ5PC9hPiA8L3NwYW4+IDwvbGk+CiAgICAgIDxsaT4gPHNw
305
+ YW4+IDxhIGhyZWY9Imh0dHA6Ly9ib29rcy5ydWJ5LWRvYy5jb20vYm9va3N0
306
+ b3JlIzA2NzIzMjA4MzUiPlRoZSBSdWJ5IFdheTwvYT4gPC9zcGFuPiA8L2xp
307
+ PgogICAgICA8bGk+IDxzcGFuPiA8YSBocmVmPSJodHRwOi8vYm9va3MucnVi
308
+ eS1kb2MuY29tL2Jvb2tzdG9yZSMwOTc2Njk0MDQyIj5MZWFybiB0byBQcm9n
309
+ cmFtIHdpdGggUnVieTwvYT4gPC9zcGFuPiA8L2xpPgogICAgICA8bGk+IDxz
310
+ cGFuPiA8YSBocmVmPSJodHRwOi8vYm9va3MucnVieS1kb2MuY29tL2Jvb2tz
311
+ dG9yZSI+TW9yZSAuLi48L2E+IDwvc3Bhbj4gPC9saT4KICAgIDwvdWw+CiAg
312
+ PC9saT4KPC91bD4KCgoKPHVsIGNsYXNzPSJncmlkcyBpbmRleC1nMCIgaWQ9
313
+ J3Jvdy10aHJlZSc+CiAgPCEtLSAKICA8bGkgaWQ9J2Jvb2tzJyBjbGFzcz0i
314
+ Z3JpZC03ICI+CiAgICA8aDI+PGEgaHJlZj0iaHR0cDovL2Jvb2tzLnJ1Ynkt
315
+ ZG9jLmNvbS9ib29rc3RvcmUiPlJ1YnkgQm9va3M8L2E+PC9oMj4KICAgIDxw
316
+ PlRoZXJlIGFyZSBhbiBpbmNyZWFzaW5nIG51bWJlciBvZiBSdWJ5IGJvb2tz
317
+ LiBUaGlzIHNlY3Rpb24gc2hvd3Mgd2hhdCdzIGN1cnJlbnRseSBhdmFpbGFi
318
+ bGUuPC9wPgogICAgPHVsICBjbGFzcz0nbWFpbi1zdWInPgogICAgICA8bGk+
319
+ IDxzcGFuPiA8YSBocmVmPSJodHRwOi8vYm9va3MucnVieS1kb2MuY29tL2Jv
320
+ b2tzdG9yZSMwOTc0NTE0MDU1Ij5Qcm9ncmFtbWluZyBSdWJ5PC9hPiA8L3Nw
321
+ YW4+IDwvbGk+CiAgICAgIDxsaT4gPHNwYW4+IDxhIGhyZWY9Imh0dHA6Ly9i
322
+ b29rcy5ydWJ5LWRvYy5jb20vYm9va3N0b3JlIzA2NzIzMjA4MzUiPlRoZSBS
323
+ dWJ5IFdheTwvYT4gPC9zcGFuPiA8L2xpPgogICAgICA8bGk+IDxzcGFuPiA8
324
+ YSBocmVmPSJodHRwOi8vYm9va3MucnVieS1kb2MuY29tL2Jvb2tzdG9yZSMw
325
+ OTc2Njk0MDQyIj5MZWFybiB0byBQcm9ncmFtIHdpdGggUnVieTwvYT4gPC9z
326
+ cGFuPiA8L2xpPgogICAgICA8bGk+IDxzcGFuPiA8YSBocmVmPSJodHRwOi8v
327
+ Ym9va3MucnVieS1kb2MuY29tL2Jvb2tzdG9yZSI+TW9yZSAuLi48L2E+IDwv
328
+ c3Bhbj4gPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8ZGl2IGNsYXNzPSdn
329
+ cmlkLTInPjwvZGl2PgogIC0tPgogIDxsaSBpZD0nc3R1ZmYnIGNsYXNzPSJn
330
+ cmlkLTciPgogICAgPGgyPiA8YSBocmVmPSJodHRwOi8vd3d3LmNhZmVwcmVz
331
+ cy5jb20vcnVieXN0dWZmIj5SdWJ5IFN0dWZmPC9hPiA8L2gyPgogICAgPHA+
332
+ SGVscCBzdXBwb3J0IHRoaXMgc2l0ZSAtIHNjb3BlIG91dCB0aGUgZ29vZHMg
333
+ Zm9yIHNhbGUgYXQgCiAgICAgIDxhIGhyZWY9J2h0dHA6Ly93d3cuY2FmZXBy
334
+ ZXNzLmNvbS9ydWJ5c3R1ZmYnPlJ1YnlTdHVmZi48L2E+PC9wPgogICAgPHVs
335
+ IGNsYXNzPSdtYWluLXN1Yic+CiAgICAgIDxsaT48c3Bhbj48YSBocmVmPSJo
336
+ dHRwOi8vd3d3LmNhZmVwcmVzcy5jb20vcnVieXN0dWZmL3NfX3Qtc2hpcnRz
337
+ Ij5TaGlydHM8L2E+PC9zcGFuPjwvbGk+CiAgICAgIDxsaT48c3Bhbj48YSBo
338
+ cmVmPSJodHRwOi8vd3d3LmNhZmVwcmVzcy5jb20vcnVieXN0dWZmL3NfX211
339
+ Z3MiPkNvZmZlZSBtdWdzPC9hPjwvc3Bhbj48L2xpPgogICAgICA8bGk+PHNw
340
+ YW4+PGEgaHJlZj0iaHR0cDovL3d3dy5jYWZlcHJlc3MuY29tL3J1YnlzdHVm
341
+ Zi9zX19tb3VzZXBhZHMiPk1vdXNlIHBhZHM8L2E+PC9zcGFuPjwvbGk+CiAg
342
+ ICAgIDxsaT48c3Bhbj48YSBocmVmPSJodHRwOi8vd3d3LmNhZmVwcmVzcy5j
343
+ b20vcnVieXN0dWZmL3NfX3VuZGVyd2Vhci1wYW50aWVzIj5UaG9uZ3MgYW5k
344
+ IGJveGVyczwvYT48L3NwYW4+PC9saT4KICAgICAgPGxpPjxzcGFuPjxhIGhy
345
+ ZWY9Imh0dHA6Ly93d3cuY2FmZXByZXNzLmNvbS9ydWJ5c3R1ZmYiPlNlZSBh
346
+ bGwgb2YgdGhlIGF2YWlsYWJsZSBkZXNpZ25zPC9hPjwvc3Bhbj48L2xpPgog
347
+ ICAgPC91bD4KICA8L2xpPgogIDxkaXYgY2xhc3M9J2dyaWQtMic+PC9kaXY+
348
+ CiAgPGxpIGlkPSdzdHVmZicgY2xhc3M9ImdyaWQtNyI+CgoKICAgIDxoMj48
349
+ YSBocmVmPScjJz5Nb3JlIFJ1YnktRG9jPC9hPjwvaDI+CiAgPHVsPgogICAg
350
+ PCEtLSBsaT48c3Bhbj48YSBocmVmPSIvYXJ0aWNsZXMvIj5Bc3NvcnRlZCBM
351
+ aW5rcyBhbmQgQXJ0aWNsZXM8L2E+PC9zcGFuPjwvbGkgLS0+CiAgICA8bGk+
352
+ PHNwYW4+PGEgaHJlZj0iL2RvY2Jhci8iPlJ1YnktRG9jIERvY2JhcjwvYT48
353
+ L3NwYW4+PC9saT4KICAgIDxsaT48c3Bhbj48YSBocmVmPSIvZG93bmxvYWRz
354
+ Ij5Eb3dubG9hZHM8L2E+PC9zcGFuPjwvbGk+CiAgICA8bGk+PGEgaHJlZj0n
355
+ aHR0cDovL3J1YnlzcGVjLm9yZyc+VGhlIFJ1YnkgU3BlY2lmaWNhdGlvbiBQ
356
+ cm9qZWN0PC9hPjwvbGk+CiAgPC91bD4KCjwvbGk+CjwvdWw+CgoKCjwhLS0g
357
+ RU5EIElOREVYIC0tPgogCiAgPC9kaXY+CiAgCjwvZGl2PgoKCjxkaXYgY2xh
358
+ c3M9J2dyaWRzIGczJz4KICA8ZGl2IGNsYXNzPSdncmlkLTE2Jz4KICAgIAo8
359
+ IS0tIFNJREVCQVIgLS0+CiAgPGRpdiBpZD0nYWJvdXQnIGNsYXNzPSdncmlk
360
+ LTE2Jz4KCiAgPGgzPk1vcmUgUnVieS1Eb2M8L2gzPgogIDx1bD4KICAgIDwh
361
+ LS0gbGk+PHNwYW4+PGEgaHJlZj0iL2FydGljbGVzLyI+QXNzb3J0ZWQgTGlu
362
+ a3MgYW5kIEFydGljbGVzPC9hPjwvc3Bhbj48L2xpIC0tPgogICAgPGxpPjxz
363
+ cGFuPjxhIGhyZWY9Ii9kb2NiYXIvIj5SdWJ5LURvYyBEb2NiYXI8L2E+PC9z
364
+ cGFuPjwvbGk+CiAgICA8bGk+PHNwYW4+PGEgaHJlZj0iL2Rvd25sb2FkcyI+
365
+ RG93bmxvYWRzPC9hPjwvc3Bhbj48L2xpPgogICAgPGxpPjxhIGhyZWY9J2h0
366
+ dHA6Ly9ydWJ5c3BlYy5vcmcnPlRoZSBSdWJ5IFNwZWNpZmljYXRpb24gUHJv
367
+ amVjdDwvYT48L2xpPgogIDwvdWw+CjwvZGl2PgoKICA8IS0tIEVORCBPRiBT
368
+ SURFQkFSIC0tPgoKICA8L2Rpdj4KICAKPC9kaXY+CgoKPHNjcmlwdD4KICAo
369
+ ZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5hbHl0aWNzT2Jq
370
+ ZWN0J109cjtpW3JdPWlbcl18fGZ1bmN0aW9uKCl7CiAgKGlbcl0ucT1pW3Jd
371
+ LnF8fFtdKS5wdXNoKGFyZ3VtZW50cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7
372
+ YT1zLmNyZWF0ZUVsZW1lbnQobyksCiAgbT1zLmdldEVsZW1lbnRzQnlUYWdO
373
+ YW1lKG8pWzBdO2EuYXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNl
374
+ cnRCZWZvcmUoYSxtKQogIH0pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0Jywn
375
+ Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzJywnZ2En
376
+ KTsKCiAgZ2EoJ2NyZWF0ZScsICdVQS0zMzUzMTctMicsICdhdXRvJyk7CiAg
377
+ Z2EoJ3NlbmQnLCAncGFnZXZpZXcnKTsKCjwvc2NyaXB0PgoKCiAgPC9kaXY+
378
+ CiAgPGZvb3RlciBjbGFzcz0nd3JhcHBlcic+CgogICAgPGRpdiBpZD0iY29s
379
+ b3Bob24iIGNsYXNzPSdncmlkcyAgZzMnID4KICA8dWwgY2xhc3M9ImdyaWQt
380
+ NSI+CiAgICA8bGk+VGhlIHJ1YnktZG9jLm9yZyBSdWJ5IGRvY3VtZW50YXRp
381
+ b24gcHJvamVjdCBpcyBhbiBlZmZvcnQgYnkgdGhlIFJ1YnkgY29tbXVuaXR5
382
+ IHRvIHByb3ZpZGUgY29tcGxldGUgYW5kIGFjY3VyYXRlIGRvY3VtZW50YXRp
383
+ b24gZm9yIHRoZSBSdWJ5IHByb2dyYW1taW5nIGxhbmd1YWdlLjwvbGk+Cgog
384
+ IDwvdWw+CiAgPHVsIGNsYXNzPSJncmlkLTYgIj4KICAgIDxsaT5BY3R1YWwg
385
+ ZG9jdW1lbnRhdGlvbiBiZWxvbmdzIHRvIHRoZSByZXNwZWN0aXZlIGF1dGhv
386
+ cnMsIHdobyBkZXNlcnZlIHlvdXIgcmVjb2duaXRpb24gYW5kIHByYWlzZS48
387
+ L2xpPgogICAgPGxpPlNlZSBhIGJ1ZyBvciBvbWlzc2lvbiBpbiB0aGUgQVBJ
388
+ IGRvY3M/ICBWaXNpdCAgPGEgaHJlZj0naHR0cDovL2RvY3VtZW50aW5nLXJ1
389
+ Ynkub3JnJz5Eb2N1bWVudGluZy1ydWJ5Lm9yZzwvYT48L2xpPgogIDwvdWw+
390
+ CgogIDx1bCBjbGFzcz0iZ3JpZC01IHJpZ2h0Ij4KICAgIDxsaT5SdWJ5LWRv
391
+ Yy5vcmcgaXMgaG9zdGVkIGFuZCBtYWludGFpbmVkIGJ5IDxhIGhyZWY9Imh0
392
+ dHA6Ly93d3cuamFtZXNicml0dC5jb20iPkphbWVzIEJyaXR0PC9hPiBhbmQg
393
+ dGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cubmV1cm9nYW1pLmNvbSI+TmV1cm9n
394
+ YW1pPC9hPiBzZWNyZXQgbGFib3JhdG9yeTwvYT4uIDwvbGk+CgogIDwvdWw+
395
+ CgogIDx1bCBjbGFzcz0iZ3JpZC0xNiI+CiAgICA8bGk+UXVlc3Rpb25zPyBQ
396
+ cm9ibGVtcz8gUHJhaXNlPyBTdWdnZXN0aW9ucz8gV3JpdGUgdG8gPGEgaHJl
397
+ Zj0nbWFpbHRvOnN1Z2dlc3Rpb25zQHJ1YnktZG9jLm9yZyc+c3VnZ2VzdGlv
398
+ bnNAcnVieS1kb2Mub3JnPC9hPjwvbGk+IAogICAgPGxpPjxlbT5Vc2UgUnVi
399
+ eS4gQmUgaGFwcHkuPC9lbT48L2xpPgogIDwvdWw+CjwvZGl2PgoKCiAgPC9m
400
+ b290ZXI+CgogIDxzY3JpcHQgIHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAg
401
+ dmFyIGluZGV4X2NvcmUgPSAyOwogICB2YXIgaW5kZXhfc3RkbGliID0gMTsK
402
+ CgpmdW5jdGlvbiBzaG93SXRlbXNDb3JlKCkgewogICAgJCh0aGlzKS50ZXh0
403
+ KCdoaWRlJyk7CiAgICAkKCd1bCNjb3JlLWFwaS1saXN0IGxpOmd0KCcraW5k
404
+ ZXhfY29yZSsnKScpLnNob3coKTsKICAgIH0KCmZ1bmN0aW9uIGhpZGVJdGVt
405
+ c0NvcmUoKSB7CiAgICAkKHRoaXMpLnRleHQoJ21vcmUuLi4nKTsKICAgICQo
406
+ J3VsI2NvcmUtYXBpLWxpc3QgbGk6Z3QoJytpbmRleF9jb3JlKycpOm5vdCgu
407
+ bW9yZSknKS5oaWRlKCk7Cn0KCmZ1bmN0aW9uIHNob3dJdGVtc1N0ZGxpYigp
408
+ IHsKICAgICQodGhpcykudGV4dCgnaGlkZScpOwogICAgJCgndWwjc3RkbGli
409
+ LWFwaS1saXN0IGxpOmd0KCcraW5kZXhfc3RkbGliKycpJykuc2hvdygpOwp9
410
+ CmZ1bmN0aW9uIGhpZGVJdGVtc1N0ZGxpYigpIHsKICAgICQodGhpcykudGV4
411
+ dCgnbW9yZS4uLicpOwogICAgJCgndWwjc3RkbGliLWFwaS1saXN0IGxpOmd0
412
+ KCcraW5kZXhfc3RkbGliKycpOm5vdCgubW9yZSknKS5oaWRlKCk7Cn0KICAg
413
+ ICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgICAkLmFqYXhT
414
+ ZXR1cCh7IGNhY2hlOiBmYWxzZSB9KTsKICAKICAgICAkKCd1bCNjb3JlLWFw
415
+ aS1saXN0IGxpOmd0KCcraW5kZXhfY29yZSsnKScpLmhpZGUoKTsKICAgICAg
416
+ JCgndWwjY29yZS1hcGktbGlzdCcpLmFwcGVuZCgnPGxpIGNsYXNzPSJtb3Jl
417
+ Ij48YSBocmVmPSIjIj5tb3JlLi4uPC9hPjwvbGk+Jyk7CiAgICAgICQoJ3Vs
418
+ I2NvcmUtYXBpLWxpc3QgbGkubW9yZSBhJykudG9nZ2xlKHNob3dJdGVtc0Nv
419
+ cmUsIGhpZGVJdGVtc0NvcmUpOwoKICAgICAkKCd1bCNzdGRsaWItYXBpLWxp
420
+ c3QgbGk6Z3QoJytpbmRleF9zdGRsaWIrJyknKS5oaWRlKCk7CiAgICAgICQo
421
+ J3VsI3N0ZGxpYi1hcGktbGlzdCcpLmFwcGVuZCgnPGxpIGNsYXNzPSJtb3Jl
422
+ Ij48YSBocmVmPSIjIj5tb3JlLi4uPC9hPjwvbGk+Jyk7CiAgICAgICQoJ3Vs
423
+ I3N0ZGxpYi1hcGktbGlzdCBsaS5tb3JlIGEnKS50b2dnbGUoc2hvd0l0ZW1z
424
+ U3RkbGliLCBoaWRlSXRlbXNTdGRsaWIpOwoKICAgICAgJCgiI3Z1bG5zLWFs
425
+ ZXJ0IikubG9hZCgiL2Fzc29jaWF0ZWQvdnVsbnMuaHRtbCIpOwoKCiAgICB9
426
+ KTsKCjwvc2NyaXB0PgoKCiA8L2JvZHk+CjwvaHRtbD4KCgo=
427
+ http_version:
428
+ recorded_at: Fri, 14 Aug 2015 18:05:20 GMT
429
+ - request:
430
+ method: get
431
+ uri: http://ogp.me/
432
+ body:
433
+ encoding: US-ASCII
434
+ string: ''
435
+ headers:
436
+ Accept-Encoding:
437
+ - gzip,deflate,identity
438
+ Accept:
439
+ - "*/*"
440
+ User-Agent:
441
+ - Mechanize/2.7.3 Ruby/2.1.2p95 (http://github.com/sparklemotion/mechanize/)
442
+ Accept-Charset:
443
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
444
+ Accept-Language:
445
+ - en-us,en;q=0.5
446
+ Host:
447
+ - ogp.me
448
+ Connection:
449
+ - keep-alive
450
+ Keep-Alive:
451
+ - 300
452
+ response:
453
+ status:
454
+ code: 200
455
+ message: OK
456
+ headers:
457
+ Connection:
458
+ - keep-alive
459
+ Date:
460
+ - Fri, 14 Aug 2015 19:03:04 GMT
461
+ Server:
462
+ - Apache/2.4.10 (Unix)
463
+ X-Powered-By:
464
+ - PHP/5.6.2
465
+ Transfer-Encoding:
466
+ - chunked
467
+ Content-Type:
468
+ - text/html; charset=UTF-8
469
+ Via:
470
+ - 1.1 vegur
471
+ body:
472
+ encoding: UTF-8
473
+ string: "<!DOCTYPE html>\n<html>\n <head prefix=\"og: http://ogp.me/ns#\">\n
474
+ \ <meta charset=\"utf-8\">\n <title>The Open Graph protocol</title>\n
475
+ \ <meta name=\"description\" content=\"The Open Graph protocol enables any
476
+ web page to become a rich object in a social graph.\">\n <script type=\"text/javascript\">var
477
+ _sf_startpt=(new Date()).getTime()</script>\n <link rel=\"stylesheet\"
478
+ href=\"base.css\" type=\"text/css\">\n <meta property=\"og:title\" content=\"Open
479
+ Graph protocol\">\n <meta property=\"og:type\" content=\"website\">\n <meta
480
+ property=\"og:url\" content=\"http://ogp.me/\">\n <meta property=\"og:image\"
481
+ content=\"http://ogp.me/logo.png\">\n <meta property=\"og:image:type\"
482
+ content=\"image/png\">\n <meta property=\"og:image:width\" content=\"300\">\n
483
+ \ <meta property=\"og:image:height\" content=\"300\">\n <meta property=\"og:description\"
484
+ content=\"The Open Graph protocol enables any web page to become a rich object
485
+ in a social graph.\">\n <meta prefix=\"fb: http://ogp.me/ns/fb#\" property=\"fb:app_id\"
486
+ content=\"115190258555800\">\n <link rel=\"alternate\" type=\"application/rdf+xml\"
487
+ href=\"http://ogp.me/ns/ogp.me.rdf\">\n <link rel=\"alternate\" type=\"text/turtle\"
488
+ href=\"http://ogp.me/ns/ogp.me.ttl\">\n </head>\n <body>\n <div id=\"body\">\n
489
+ \ <div id=\"header\">\n <h1>The Open Graph protocol</h1>\n <img
490
+ alt=\"Open Graph protocol logo\" src=\"http://ogp.me/logo.png\" width=\"300\"
491
+ height=\"300\">\n </div>\n <div id=\"content\">\n <h2><a id=\"intro\"
492
+ href=\"#intro\">Introduction</a></h2>\n\n<p>The <a href=\"http://ogp.me/\">Open
493
+ Graph protocol</a> enables any web page to become a\nrich object in a social
494
+ graph. For instance, this is used on Facebook to allow\nany web page to have
495
+ the same functionality as any other object on Facebook.</p>\n\n<p>While many
496
+ different technologies and schemas exist and could be combined\ntogether,
497
+ there isn't a single technology which provides enough information to\nrichly
498
+ represent any web page within the social graph. The Open Graph protocol\nbuilds
499
+ on these existing technologies and gives developers one thing to\nimplement.
500
+ Developer simplicity is a key goal of the Open Graph protocol which\nhas informed
501
+ many of\n<a href=\"http://www.scribd.com/doc/30715288/The-Open-Graph-Protocol-Design-Decisions\">the
502
+ technical design decisions</a>.</p>\n\n<hr />\n\n<h2><a id=\"metadata\" href=\"#metadata\">Basic
503
+ Metadata</a></h2>\n\n<p>To turn your web pages into graph objects, you need
504
+ to add basic metadata to\nyour page. We've based the initial version of the
505
+ protocol on\n<a href=\"http://en.wikipedia.org/wiki/RDFa\">RDFa</a> which
506
+ means that you'll place\nadditional <code>&lt;meta&gt;</code> tags in the
507
+ <code>&lt;head&gt;</code> of your web page. The four required\nproperties
508
+ for every page are:</p>\n\n<ul>\n<li><code>og:title</code> - The title of
509
+ your object as it should appear within the graph,\ne.g., \"The Rock\".</li>\n<li><code>og:type</code>
510
+ - The <a href=\"#types\">type</a> of your object, e.g., \"video.movie\". Depending
511
+ on\nthe type you specify, other properties may also be required.</li>\n<li><code>og:image</code>
512
+ - An image URL which should represent your object within the\ngraph.</li>\n<li><code>og:url</code>
513
+ - The canonical URL of your object that will be used as its\npermanent ID
514
+ in the graph, e.g., \"http://www.imdb.com/title/tt0117500/\".</li>\n</ul>\n\n<p>As
515
+ an example, the following is the Open Graph protocol markup for <a href=\"http://www.imdb.com/title/tt0117500/\">The
516
+ Rock on\nIMDB</a>:</p>\n\n<pre><code>&lt;html prefix=\"og: http://ogp.me/ns#\"&gt;\n&lt;head&gt;\n&lt;title&gt;The
517
+ Rock (1996)&lt;/title&gt;\n&lt;meta property=\"og:title\" content=\"The Rock\"
518
+ /&gt;\n&lt;meta property=\"og:type\" content=\"video.movie\" /&gt;\n&lt;meta
519
+ property=\"og:url\" content=\"http://www.imdb.com/title/tt0117500/\" /&gt;\n&lt;meta
520
+ property=\"og:image\" content=\"http://ia.media-imdb.com/images/rock.jpg\"
521
+ /&gt;\n...\n&lt;/head&gt;\n...\n&lt;/html&gt;\n</code></pre>\n\n<h3><a id=\"optional\"
522
+ href=\"#optional\">Optional Metadata</a></h3>\n\n<p>The following properties
523
+ are optional for any object and are generally\nrecommended:</p>\n\n<ul>\n<li><code>og:audio</code>
524
+ - A URL to an audio file to accompany this object.</li>\n<li><code>og:description</code>
525
+ - A one to two sentence description of your object.</li>\n<li><code>og:determiner</code>
526
+ - The word that appears before this object's title\nin a sentence. An <a href=\"#enum\">enum</a>
527
+ of (a, an, the, \"\", auto). If <code>auto</code> is \nchosen, the consumer
528
+ of your data should chose between \"a\" or \"an\".\nDefault is \"\" (blank).</li>\n<li><code>og:locale</code>
529
+ - The locale these tags are marked up in.\nOf the format <code>language_TERRITORY</code>.
530
+ Default is <code>en_US</code>.</li>\n<li><code>og:locale:alternate</code>
531
+ - An <a href=\"#array\">array</a> of other locales this page is \navailable
532
+ in.</li>\n<li><code>og:site_name</code> - If your object is part of a larger
533
+ web site, the name which\nshould be displayed for the overall site. e.g.,
534
+ \"IMDb\".</li>\n<li><code>og:video</code> - A URL to a video file that complements
535
+ this object.</li>\n</ul>\n\n<p>For example (line-break solely for display
536
+ purposes):</p>\n\n<pre><code>&lt;meta property=\"og:audio\" content=\"http://example.com/bond/theme.mp3\"
537
+ /&gt;\n&lt;meta property=\"og:description\" \n content=\"Sean Connery found
538
+ fame and fortune as the\n suave, sophisticated British agent, James
539
+ Bond.\" /&gt;\n&lt;meta property=\"og:determiner\" content=\"the\" /&gt;\n&lt;meta
540
+ property=\"og:locale\" content=\"en_GB\" /&gt;\n&lt;meta property=\"og:locale:alternate\"
541
+ content=\"fr_FR\" /&gt;\n&lt;meta property=\"og:locale:alternate\" content=\"es_ES\"
542
+ /&gt;\n&lt;meta property=\"og:site_name\" content=\"IMDb\" /&gt;\n&lt;meta
543
+ property=\"og:video\" content=\"http://example.com/bond/trailer.swf\" /&gt;\n</code></pre>\n\n<p>The
544
+ RDF schema (in <a href=\"http://en.wikipedia.org/wiki/Turtle_(syntax)\">Turtle</a>)
545
+ \ncan be found at <a href=\"http://ogp.me/ns/ogp.me.ttl\">ogp.me/ns</a>.</p>\n\n<hr
546
+ />\n\n<h2><a id=\"structured\" href=\"#structured\">Structured Properties</a></h2>\n\n<p>Some
547
+ properties can have extra metadata attached to them.\nThese are specified
548
+ in the same way as other metadata with <code>property</code> and\n<code>content</code>,
549
+ but the <code>property</code> will have extra <code>:</code>.</p>\n\n<p>The
550
+ <code>og:image</code> property has some optional structured properties:</p>\n\n<ul>\n<li><code>og:image:url</code>
551
+ - Identical to <code>og:image</code>.</li>\n<li><code>og:image:secure_url</code>
552
+ - An alternate url to use if the webpage requires\nHTTPS.</li>\n<li><code>og:image:type</code>
553
+ - A <a href=\"http://en.wikipedia.org/wiki/Internet_media_type\">MIME type</a>
554
+ for this image.</li>\n<li><code>og:image:width</code> - The number of pixels
555
+ wide.</li>\n<li><code>og:image:height</code> - The number of pixels high.</li>\n</ul>\n\n<p>A
556
+ full image example:</p>\n\n<pre><code>&lt;meta property=\"og:image\" content=\"http://example.com/ogp.jpg\"
557
+ /&gt;\n&lt;meta property=\"og:image:secure_url\" content=\"https://secure.example.com/ogp.jpg\"
558
+ /&gt;\n&lt;meta property=\"og:image:type\" content=\"image/jpeg\" /&gt;\n&lt;meta
559
+ property=\"og:image:width\" content=\"400\" /&gt;\n&lt;meta property=\"og:image:height\"
560
+ content=\"300\" /&gt;\n</code></pre>\n\n<p>The <code>og:video</code> tag has
561
+ the identical tags as <code>og:image</code>. Here is an example:</p>\n\n<pre><code>&lt;meta
562
+ property=\"og:video\" content=\"http://example.com/movie.swf\" /&gt;\n&lt;meta
563
+ property=\"og:video:secure_url\" content=\"https://secure.example.com/movie.swf\"
564
+ /&gt;\n&lt;meta property=\"og:video:type\" content=\"application/x-shockwave-flash\"
565
+ /&gt;\n&lt;meta property=\"og:video:width\" content=\"400\" /&gt;\n&lt;meta
566
+ property=\"og:video:height\" content=\"300\" /&gt;\n</code></pre>\n\n<p>The
567
+ <code>og:audio</code> tag only has the first 3 properties available\n(since
568
+ size doesn't make sense for sound):</p>\n\n<pre><code>&lt;meta property=\"og:audio\"
569
+ content=\"http://example.com/sound.mp3\" /&gt;\n&lt;meta property=\"og:audio:secure_url\"
570
+ content=\"https://secure.example.com/sound.mp3\" /&gt;\n&lt;meta property=\"og:audio:type\"
571
+ content=\"audio/mpeg\" /&gt;\n</code></pre>\n\n<hr />\n\n<h2><a id=\"array\"
572
+ href=\"#array\">Arrays</a></h2>\n\n<p>If a tag can have multiple values, just
573
+ put multiple versions of the same\n<code>&lt;meta&gt;</code> tag on your page.
574
+ The first tag (from top to bottom) is given\npreference during conflicts.</p>\n\n<pre><code>&lt;meta
575
+ property=\"og:image\" content=\"http://example.com/rock.jpg\" /&gt;\n&lt;meta
576
+ property=\"og:image\" content=\"http://example.com/rock2.jpg\" /&gt;\n</code></pre>\n\n<p>Put
577
+ structured properties after you declare their root tag. Whenever\nanother
578
+ root element is parsed, that structured property\nis considered to be done
579
+ and another one is started.</p>\n\n<p>For example:</p>\n\n<pre><code>&lt;meta
580
+ property=\"og:image\" content=\"http://example.com/rock.jpg\" /&gt;\n&lt;meta
581
+ property=\"og:image:width\" content=\"300\" /&gt;\n&lt;meta property=\"og:image:height\"
582
+ content=\"300\" /&gt;\n&lt;meta property=\"og:image\" content=\"http://example.com/rock2.jpg\"
583
+ /&gt;\n&lt;meta property=\"og:image\" content=\"http://example.com/rock3.jpg\"
584
+ /&gt;\n&lt;meta property=\"og:image:height\" content=\"1000\" /&gt;\n</code></pre>\n\n<p>means
585
+ there are 3 images on this page, the first image is <code>300x300</code>,
586
+ the middle\none has unspecified dimensions, and the last one is <code>1000</code>px
587
+ tall.</p>\n\n<hr />\n\n<h2><a id=\"types\" href=\"#types\">Object Types</a></h2>\n\n<p>In
588
+ order for your object to be represented within the graph, you need to\nspecify
589
+ its type. This is done using the <code>og:type</code> property:</p>\n\n<pre><code>&lt;meta
590
+ property=\"og:type\" content=\"website\" /&gt;\n</code></pre>\n\n<p>When the
591
+ community agrees on the schema for a type, it is added to the list\nof global
592
+ types. All other objects in the type system are\n<a href=\"http://en.wikipedia.org/wiki/CURIE\">CURIEs</a>
593
+ of the form</p>\n\n<pre><code>&lt;head prefix=\"my_namespace: http://example.com/ns#\"&gt;\n&lt;meta
594
+ property=\"og:type\" content=\"my_namespace:my_type\" /&gt;\n</code></pre>\n\n<p>The
595
+ global types are grouped into verticals. Each vertical has its\nown namespace.
596
+ The <code>og:type</code> values for a namespace are always prefixed with\nthe
597
+ namespace and then a period.\nThis is to reduce confusion with user-defined
598
+ namespaced types which always\nhave colons in them.</p>\n\n<h3><a id=\"type_music\"
599
+ href=\"#type_music\">Music</a></h3>\n\n<ul>\n<li>Namespace URI: <a href=\"http://ogp.me/ns/music\"><code>http://ogp.me/ns/music#</code></a></li>\n</ul>\n\n<p><code>og:type</code>
600
+ values:</p>\n\n<p><a name=\"type_music.song\" href=\"#type_music.song\"><code>music.song</code></a></p>\n\n<ul>\n<li><code>music:duration</code>
601
+ - <a href=\"#integer\">integer</a> &gt;=1 - The song's length in seconds.</li>\n<li><code>music:album</code>
602
+ - <a href=\"#type_music.album\">music.album</a> <a href=\"#array\">array</a>
603
+ -\nThe album this song is from.</li>\n<li><code>music:album:disc</code> -
604
+ <a href=\"#integer\">integer</a> &gt;=1 -\nWhich disc of the album this song
605
+ is on.</li>\n<li><code>music:album:track</code> - <a href=\"#integer\">integer</a>
606
+ &gt;=1 -\nWhich track this song is.</li>\n<li><code>music:musician</code>
607
+ - <a href=\"#type_profile\">profile</a> <a href=\"#array\">array</a> -\nThe
608
+ musician that made this song.</li>\n</ul>\n\n<p><a name=\"type_music.album\"
609
+ href=\"#type_music.album\"><code>music.album</code></a></p>\n\n<ul>\n<li><code>music:song</code>
610
+ - <a href=\"#type_music.song\">music.song</a> - The song on this album.</li>\n<li><code>music:song:disc</code>
611
+ - <a href=\"#integer\">integer</a> &gt;=1 -\nThe same as <code>music:album:disc</code>
612
+ but in reverse.</li>\n<li><code>music:song:track</code> - <a href=\"#integer\">integer</a>
613
+ &gt;=1 -\nThe same as <code>music:album:track</code> but in reverse.</li>\n<li><code>music:musician</code>
614
+ - <a href=\"#type_profile\">profile</a> -\nThe musician that made this song.</li>\n<li><code>music:release_date</code>
615
+ - <a href=\"#datetime\">datetime</a> - \nThe date the album was released.</li>\n</ul>\n\n<p><a
616
+ name=\"type_music.playlist\" href=\"#type_music.playlist\"><code>music.playlist</code></a></p>\n\n<ul>\n<li><code>music:song</code>
617
+ - Identical to the ones on <a href=\"#type_music.album\">music.album</a></li>\n<li><code>music:song:disc</code></li>\n<li><code>music:song:track</code></li>\n<li><code>music:creator</code>
618
+ - <a href=\"#type_profile\">profile</a> - The creator of this playlist.</li>\n</ul>\n\n<p><a
619
+ name=\"type_music.radio_station\" href=\"#type_music.radio_station\"><code>music.radio_station</code></a></p>\n\n<ul>\n<li><code>music:creator</code>
620
+ - <a href=\"#type_profile\">profile</a> - The creator of this station.</li>\n</ul>\n\n<h3><a
621
+ id=\"type_video\" href=\"#type_video\">Video</a></h3>\n\n<ul>\n<li>Namespace
622
+ URI: <a href=\"http://ogp.me/ns/video\"><code>http://ogp.me/ns/video#</code></a></li>\n</ul>\n\n<p><code>og:type</code>
623
+ values:</p>\n\n<p><a name=\"type_video.movie\" href=\"#type_video.movie\"><code>video.movie</code></a></p>\n\n<ul>\n<li><code>video:actor</code>
624
+ - <a href=\"#type_profile\">profile</a> <a href=\"#array\">array</a> -\nActors
625
+ in the movie.</li>\n<li><code>video:actor:role</code> - <a href=\"#string\">string</a>
626
+ - The role they played.</li>\n<li><code>video:director</code> - <a href=\"#type_profile\">profile</a>
627
+ <a href=\"#array\">array</a> -\nDirectors of the movie.</li>\n<li><code>video:writer</code>
628
+ - <a href=\"#type_profile\">profile</a> <a href=\"#array\">array</a> -\nWriters
629
+ of the movie.</li>\n<li><code>video:duration</code> - <a href=\"#integer\">integer</a>
630
+ &gt;=1 - \nThe movie's length in seconds.</li>\n<li><code>video:release_date</code>
631
+ - <a href=\"#datetime\">datetime</a> - \nThe date the movie was released.</li>\n<li><code>video:tag</code>
632
+ - <a href=\"#string\">string</a> <a href=\"#array\">array</a> -\nTag words
633
+ associated with this movie.</li>\n</ul>\n\n<p><a name=\"type_video.episode\"
634
+ href=\"#type_video.episode\"><code>video.episode</code></a></p>\n\n<ul>\n<li><code>video:actor</code>
635
+ - Identical to <a href=\"#type_video.movie\">video.movie</a></li>\n<li><code>video:actor:role</code></li>\n<li><code>video:director</code></li>\n<li><code>video:writer</code></li>\n<li><code>video:duration</code></li>\n<li><code>video:release_date</code></li>\n<li><code>video:tag</code></li>\n<li><code>video:series</code>
636
+ - <a href=\"#type_video.tv_show\">video.tv_show</a> -\nWhich series this episode
637
+ belongs to.</li>\n</ul>\n\n<p><a name=\"type_video.tv_show\" href=\"#type_video.tv_show\"><code>video.tv_show</code></a></p>\n\n<p>A
638
+ multi-episode TV show.\nThe metadata is identical to <a href=\"#type_video.movie\">video.movie</a>.</p>\n\n<p><a
639
+ name=\"type_video.other\" href=\"#type_video.other\"><code>video.other</code></a></p>\n\n<p>A
640
+ video that doesn't belong in any other category.\nThe metadata is identical
641
+ to <a href=\"#type_video.movie\">video.movie</a>.</p>\n\n<h3><a id=\"no_vertical\"
642
+ href=\"#no_vertical\">No Vertical</a></h3>\n\n<p>These are globally defined
643
+ objects that just don't fit into a vertical but\nyet are broadly used and
644
+ agreed upon.</p>\n\n<p><code>og:type</code> values:</p>\n\n<p><a name=\"type_article\"
645
+ href=\"#type_article\"><code>article</code></a> - Namespace URI: <a href=\"http://ogp.me/ns/article\"><code>http://ogp.me/ns/article#</code></a></p>\n\n<ul>\n<li><code>article:published_time</code>
646
+ - <a href=\"#datetime\">datetime</a> - \nWhen the article was first published.</li>\n<li><code>article:modified_time</code>
647
+ - <a href=\"#datetime\">datetime</a> - \nWhen the article was last changed.</li>\n<li><code>article:expiration_time</code>
648
+ - <a href=\"#datetime\">datetime</a> - \nWhen the article is out of date after.</li>\n<li><code>article:author</code>
649
+ - <a href=\"#type_profile\">profile</a> <a href=\"#array\">array</a> -\nWriters
650
+ of the article.</li>\n<li><code>article:section</code> - <a href=\"#string\">string</a>
651
+ - A high-level section name. E.g. Technology</li>\n<li><code>article:tag</code>
652
+ - <a href=\"#string\">string</a> <a href=\"#array\">array</a> -\nTag words
653
+ associated with this article.</li>\n</ul>\n\n<p><a name=\"type_book\" href=\"#type_book\"><code>book</code></a>
654
+ - Namespace URI: <a href=\"http://ogp.me/ns/book\"><code>http://ogp.me/ns/book#</code></a></p>\n\n<ul>\n<li><code>book:author</code>
655
+ - <a href=\"#type_profile\">profile</a> <a href=\"#array\">array</a> - Who
656
+ wrote this book.</li>\n<li><code>book:isbn</code> - <a href=\"#string\">string</a>
657
+ -\nThe <a href=\"http://en.wikipedia.org/wiki/International_Standard_Book_Number\">ISBN</a></li>\n<li><code>book:release_date</code>
658
+ - <a href=\"#datetime\">datetime</a> - The date the book was released.</li>\n<li><code>book:tag</code>
659
+ - <a href=\"#string\">string</a> <a href=\"#array\">array</a> -\nTag words
660
+ associated with this book.</li>\n</ul>\n\n<p><a name=\"type_profile\" href=\"#type_profile\"><code>profile</code></a>
661
+ - Namespace URI: <a href=\"http://ogp.me/ns/profile\"><code>http://ogp.me/ns/profile#</code></a></p>\n\n<ul>\n<li><code>profile:first_name</code>
662
+ - <a href=\"#string\">string</a> - A name normally given to an individual
663
+ by a parent or self-chosen.</li>\n<li><code>profile:last_name</code> - <a
664
+ href=\"#string\">string</a> - A name inherited from a family or marriage and
665
+ by which the individual is commonly known.</li>\n<li><code>profile:username</code>
666
+ - <a href=\"#string\">string</a> - A short unique string to identify them.</li>\n<li><code>profile:gender</code>
667
+ - <a href=\"#enum\">enum</a>(male, female) - Their gender.</li>\n</ul>\n\n<p><a
668
+ name=\"type_website\" href=\"#type_website\"><code>website</code></a> - Namespace
669
+ URI: <a href=\"http://ogp.me/ns/website\"><code>http://ogp.me/ns/website#</code></a></p>\n\n<p>No
670
+ additional properties other than the basic ones.\nAny non-marked up webpage
671
+ should be treated as <code>og:type</code> website.</p>\n\n<hr />\n\n<h2><a
672
+ id=\"data_types\" href=\"#data_types\">Types</a></h2>\n\n<p>The following
673
+ types are used when defining attributes in Open Graph protocol.</p>\n\n<table>\n<tr>\n
674
+ \ <th width=150><b>Type</b></th>\n <th width=300><b>Description</b></th>\n
675
+ \ <th width=200><b>Literals</b></th>\n</tr>\n\n<tr>\n <td><a name=\"bool\"
676
+ href=\"#bool\">Boolean</td>\n <td>A Boolean represents a true or false value</td>\n
677
+ \ <td>true, false, 1, 0</td>\n</tr>\n\n<tr>\n <td><a name=\"datetime\" href=\"#datetime\">DateTime</td>\n
678
+ \ <td>A DateTime represents a temporal value composed of a date\n (year,
679
+ month, day) and an optional time component (hours, minutes)</td>\n <td><a
680
+ href=\"http://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a></td>\n</tr>\n\n<tr>\n
681
+ \ <td><a name=\"enum\" href=\"#enum\">Enum</td>\n <td>A type consisting of
682
+ bounded set of constant string values \n (enumeration members).\n <td>A
683
+ string value that is a member of the enumeration</td>\n</tr>\n\n<tr>\n <td><a
684
+ name=\"float\" href=\"#float\">Float</td>\n <td>A 64-bit signed floating
685
+ point number</td>\n <td>All literals that conform to the following formats:<br><br>\n1.234<br>\n-1.234<br>\n1.2e3<br>\n-1.2e3<br>\n7E-10<br>\n</td>\n</tr>\n\n<tr>\n
686
+ \ <td><a name=\"integer\" href=\"#integer\">Integer</td>\n <td>A 32-bit signed
687
+ integer. In many languages integers over 32-bits become \n floats, so we
688
+ limit Open Graph protocol for easy multi-language use.</td>\n <td>All literals
689
+ that conform to the following formats:<br><br>\n1234<br>\n-123<br>\n</td>\n</tr>\n\n<tr>\n
690
+ \ <td><a name=\"string\" href=\"#string\">String</td>\n <td>A sequence of
691
+ Unicode characters</td>\n <td>All literals composed of Unicode characters
692
+ with no escape characters</td>\n</tr>\n\n<tr>\n <td><a name=\"url\" href=\"#url\">URL</td>\n
693
+ \ <td>A sequence of Unicode characters that identify an Internet resource.\n
694
+ \ <td>All valid URLs that utilize the http:// or https:// protocols</td>\n</tr>\n\n</table>\n\n<hr
695
+ />\n\n<h2><a id='discuss' href=\"#discuss\">Discussion and support</a></h2>\n\n<p>You
696
+ can discuss the Open Graph Protocol in\n<a href=\"https://www.facebook.com/groups/opengraph/\">the
697
+ Facebook group</a> or on \n<a href=\"http://groups.google.com/group/open-graph-protocol\">the
698
+ developer mailing list</a>.\nIt is currently being consumed by Facebook\n(<a
699
+ href=\"http://developers.facebook.com/docs/opengraph/\">see their documentation</a>),
700
+ Google (<a href=\"https://developers.google.com/+/web/+1button/#plus-snippet\">see
701
+ their documentation</a>), and\n<a href=\"http://developer.mixi.co.jp/en/connect/mixi_plugin/mixi_check/spec_mixi_check/\">mixi</a>.\nIt
702
+ is being published by IMDb, Microsoft, NHL, Posterous, Rotten Tomatoes,\nTIME,
703
+ Yelp, and many many others.</p>\n\n<hr />\n\n<h2><a id='implementations' href=\"#implementations\">Implementations</a></h2>\n\n<p>The
704
+ open source community has developed a number of parsers and publishing\ntools.
705
+ Let the Facebook group know if you've built something awesome too!</p>\n\n<ul>\n<li><a
706
+ href=\"http://developers.facebook.com/tools/debug/\">Facebook Object Debugger</a>
707
+ -\nFacebook's official parser and debugger</li>\n<li><a href=\"http://www.google.com/webmasters/tools/richsnippets\">Google
708
+ Rich Snippets Testing Tool</a> - Open Graph protocol support in specific verticals
709
+ and Search Engines.</li>\n<li><a href=\"https://github.com/niallkennedy/open-graph-protocol-tools\">PHP
710
+ Validator and Markup Generator</a> - OGP 2011 input validator and markup
711
+ generator in PHP5 objects</li>\n<li><a href=\"http://github.com/scottmac/opengraph\">PHP
712
+ Consumer</a> -\na small library for accessing of Open Graph Protocol data
713
+ in PHP</li>\n<li><a href=\"http://buzzword.org.uk/2010/opengraph/#php\">OpenGraphNode
714
+ in PHP</a> -\na simple parser for PHP</li>\n<li><a href=\"http://pypi.python.org/pypi/PyOpenGraph\">PyOpenGraph</a>
715
+ -\na library written in Python for parsing Open Graph protocol\ninformation
716
+ from web sites</li>\n<li><a href=\"http://github.com/intridea/opengraph\">OpenGraph
717
+ Ruby</a> -\nRuby Gem which parses web pages and extracts Open Graph protocol
718
+ markup</li>\n<li><a href=\"http://github.com/callumj/opengraph-java\">OpenGraph
719
+ for Java</a> -\nsmall Java class used to represent the Open Graph protocol</li>\n<li><a
720
+ href=\"http://search.cpan.org/~tobyink/RDF-RDFa-Parser/lib/RDF/RDFa/Parser.pm\">RDF::RDFa::Parser</a>
721
+ -\nPerl RDFa parser which understands the Open Graph protocol</li>\n<li><a
722
+ href=\"http://wordpress.org/plugins/facebook/\">WordPress plugin</a> -\nFacebook's
723
+ official WordPress plugin, which adds Open Graph metadata to WordPress powered
724
+ sites. </li>\n<li><a href=\"http://wordpress.org/plugins/wp-facebook-open-graph-protocol/\">Alternate
725
+ WordPress OGP plugin</a> -</li>\n</ul>\n\n<h2> A simple lightweight WordPress
726
+ plugin which adds Open Graph metadata to WordPress powered sites.</h2>\n </div>\n
727
+ \ <div id=\"footer\">\n <iframe src=\"//www.facebook.com/plugins/like.php?href=http%3A%2F%2Fogp.me%2F&send=false&layout=standard&width=450&show_faces=true&action=like&colorscheme=light&height=80&appId=115190258555800\"
728
+ scrolling=\"no\" frameborder=\"0\" style=\"border:none; overflow:hidden; width:450px;
729
+ height:80px;\" allowTransparency=\"true\"></iframe>\n <p>The Open Graph
730
+ protocol was originally created at Facebook and is inspired by <a href=\"http://en.wikipedia.org/wiki/Dublin_Core\">Dublin
731
+ Core</a>, <a href=\"http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html\">link-rel
732
+ canonical</a>, <a href=\"http://microformats.org/\">Microformats</a>, and
733
+ <a href=\"http://en.wikipedia.org/wiki/RDFa\">RDFa</a>. The specification
734
+ described on this page is available under the <a href=\"http://openwebfoundation.org/legal/the-0-9-agreements---necessary-claims\">Open
735
+ Web Foundation Agreement, Version 0.9</a>. This website is <a href=\"https://github.com/facebook/open-graph-protocol\">Open
736
+ Source</a>. Last updated <time pubdate=\"2014-10-20T23:03:05+00:00\">October
737
+ 20th, 2014</time></p>\n </div>\n </div>\n<script type=\"text/javascript\">\nvar
738
+ _sf_async_config={uid:1415,domain:\"ogp.me\"};\n(function(){\n function loadChartbeat()
739
+ {\n window._sf_endpt=(new Date()).getTime();\n var e = document.createElement('script');\n
740
+ \ e.setAttribute('language', 'javascript');\n e.setAttribute('type',
741
+ 'text/javascript');\n e.setAttribute('src',\n ((\"https:\" == document.location.protocol)
742
+ ? \"https://s3.amazonaws.com/\" : \"http://\") +\n \"static.chartbeat.com/js/chartbeat.js\");\n
743
+ \ document.body.appendChild(e);\n }\n var oldonload = window.onload;\n
744
+ \ window.onload = (typeof window.onload != 'function') ?\n loadChartbeat
745
+ : function() { oldonload(); loadChartbeat(); };\n})();\n\n</script>\n </body>\n</html>\n"
746
+ http_version:
747
+ recorded_at: Fri, 14 Aug 2015 19:03:04 GMT
748
+ recorded_with: VCR 2.9.2