bolognese 1.1.16 → 1.1.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 29b48acd62ecd4c04faae025f18f6152f4d09a4e34892756033c502da9acc763
4
- data.tar.gz: a85b153008edf234aa8203015fc3f5727d030416f8aee03a91cd43b75bb4eb9d
3
+ metadata.gz: 22c768dbeab4e5aa663b407e7e61cdff91294828de453edf4338fed31eed438b
4
+ data.tar.gz: 752a2d696388d767eb3c11219a789198168c8904010c71a9d0f474fc3cbf32d9
5
5
  SHA512:
6
- metadata.gz: 53846f9d88a2bafac6b5c8c6066e3ac26872dc5a653ad33795daafb38484a96eea01fd75aafaa5f513f8602adb9ad86bb94038ef2038da4546525cb954c3059b
7
- data.tar.gz: 57f66e003a4c2b069a3533ced8417a96346c5d271f638f3a9f9ff577600207be05b329a2267070b5fc80599e6cc362364bafd781b406d119f36ffe8e25101a01
6
+ metadata.gz: ee1fcf2e10e781c5a40a639870eb03be59fdf54de6708bafd463cc48a7ed24679429c5d54a4f30ffca772b240c01b06c1bbcc7fce78af95ae7edf4022319d7f6
7
+ data.tar.gz: a4fdb03f3a48bb946959cf6194cd2e749cea3a84580de0b5b0f10b9e0173970e68c20fdf5facae6fbc344283764b44ddf8990cce88e0293454f8bc4b8a5ade46
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bolognese (1.1.16)
4
+ bolognese (1.1.17)
5
5
  activesupport (>= 4.2.5, < 6)
6
6
  benchmark_methods (~> 0.7)
7
7
  bibtex-ruby (~> 4.1)
@@ -76,7 +76,7 @@ GEM
76
76
  tilt
77
77
  hamster (3.0.0)
78
78
  concurrent-ruby (~> 1.0)
79
- hashdiff (0.4.0)
79
+ hashdiff (1.0.0.beta1)
80
80
  htmlentities (4.3.4)
81
81
  i18n (1.6.0)
82
82
  concurrent-ruby (~> 1.0)
@@ -150,15 +150,15 @@ GEM
150
150
  rspec-core (~> 3.8.0)
151
151
  rspec-expectations (~> 3.8.0)
152
152
  rspec-mocks (~> 3.8.0)
153
- rspec-core (3.8.0)
153
+ rspec-core (3.8.1)
154
154
  rspec-support (~> 3.8.0)
155
- rspec-expectations (3.8.3)
155
+ rspec-expectations (3.8.4)
156
156
  diff-lcs (>= 1.2.0, < 2.0)
157
157
  rspec-support (~> 3.8.0)
158
- rspec-mocks (3.8.0)
158
+ rspec-mocks (3.8.1)
159
159
  diff-lcs (>= 1.2.0, < 2.0)
160
160
  rspec-support (~> 3.8.0)
161
- rspec-support (3.8.0)
161
+ rspec-support (3.8.2)
162
162
  rspec-xsd (0.1.0)
163
163
  nokogiri (~> 1.6)
164
164
  rspec (~> 3)
@@ -179,10 +179,10 @@ GEM
179
179
  thread_safe (~> 0.1)
180
180
  unicode_utils (1.4.0)
181
181
  vcr (3.0.3)
182
- webmock (3.5.1)
182
+ webmock (3.6.0)
183
183
  addressable (>= 2.3.6)
184
184
  crack (>= 0.3.2)
185
- hashdiff
185
+ hashdiff (>= 0.4.0, < 2.0.0)
186
186
 
187
187
  PLATFORMS
188
188
  ruby
@@ -191,6 +191,7 @@ DEPENDENCIES
191
191
  bolognese!
192
192
  bundler (~> 1.0)
193
193
  codeclimate-test-reporter (~> 1.0, >= 1.0.8)
194
+ hashdiff (>= 1.0.0.beta1, < 2.0.0)
194
195
  rack-test (~> 0)
195
196
  rake (~> 12.0)
196
197
  rspec (~> 3.4)
data/bolognese.gemspec CHANGED
@@ -47,6 +47,7 @@ Gem::Specification.new do |s|
47
47
  s.add_development_dependency 'webmock', '~> 3.0', '>= 3.0.1'
48
48
  s.add_development_dependency 'codeclimate-test-reporter', '~> 1.0', '>= 1.0.8'
49
49
  s.add_development_dependency 'simplecov', '~> 0.1'
50
+ s.add_development_dependency 'hashdiff', ['>= 1.0.0.beta1', '< 2.0.0']
50
51
 
51
52
  s.require_paths = ["lib"]
52
53
  s.files = `git ls-files`.split($/)
@@ -118,7 +118,7 @@ module Bolognese
118
118
  { "id" => id,
119
119
  "types" => types,
120
120
  "doi" => doi_from_url(doi),
121
- "url" => bibliographic_metadata.dig("doi_data", "resource"),
121
+ "url" => parse_attributes(bibliographic_metadata.dig("doi_data", "resource"), first: true),
122
122
  "titles" => [{ "title" => parse_attributes(bibliographic_metadata.dig("titles", "title")) }],
123
123
  "identifiers" => identifiers,
124
124
  "creators" => crossref_people(bibliographic_metadata, "author"),
@@ -1,3 +1,3 @@
1
1
  module Bolognese
2
- VERSION = "1.1.16"
2
+ VERSION = "1.1.17"
3
3
  end
@@ -0,0 +1,81 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://doi.org/ra/10.1038
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Mozilla/5.0 (compatible; Maremma/4.2.1; +https://github.com/datacite/maremma)
12
+ Accept:
13
+ - text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: ''
18
+ headers:
19
+ Date:
20
+ - Mon, 24 Jun 2019 06:30:54 GMT
21
+ Content-Type:
22
+ - application/json;charset=UTF-8
23
+ Content-Length:
24
+ - '54'
25
+ Connection:
26
+ - keep-alive
27
+ Set-Cookie:
28
+ - __cfduid=dfe4365de50bcf876a61ea63dd7d76a7a1561357854; expires=Tue, 23-Jun-20
29
+ 06:30:54 GMT; path=/; domain=.doi.org; HttpOnly
30
+ Expect-Ct:
31
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
32
+ Server:
33
+ - cloudflare
34
+ Cf-Ray:
35
+ - 4ebca7df2e46c2c2-FRA
36
+ body:
37
+ encoding: ASCII-8BIT
38
+ string: |-
39
+ [
40
+ {
41
+ "DOI": "10.1038",
42
+ "RA": "Crossref"
43
+ }
44
+ ]
45
+ http_version:
46
+ recorded_at: Mon, 24 Jun 2019 06:30:54 GMT
47
+ - request:
48
+ method: get
49
+ uri: http://www.crossref.org/openurl/?format=unixref&id=doi:10.1038/hdy.2013.26&noredirect=true&pid=tech@datacite.org
50
+ body:
51
+ encoding: US-ASCII
52
+ string: ''
53
+ headers:
54
+ User-Agent:
55
+ - Mozilla/5.0 (compatible; Maremma/4.2.1; +https://github.com/datacite/maremma)
56
+ Accept:
57
+ - text/xml
58
+ response:
59
+ status:
60
+ code: 200
61
+ message: OK
62
+ headers:
63
+ Server:
64
+ - Apache-Coyote/1.1
65
+ Crossref-Deployment-Name:
66
+ - qs5-1
67
+ Content-Type:
68
+ - text/xml;charset=UTF-8
69
+ Content-Language:
70
+ - en-US
71
+ Date:
72
+ - Mon, 24 Jun 2019 06:30:54 GMT
73
+ Connection:
74
+ - close
75
+ body:
76
+ encoding: ASCII-8BIT
77
+ string: !binary |-
78
+ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGRvaV9yZWNvcmRzPg0KICA8ZG9pX3JlY29yZCBvd25lcj0iMTAuMTAzOCIgdGltZXN0YW1wPSIyMDE5LTA0LTE2IDEyOjI1OjM2Ij4NCiAgICA8Y3Jvc3NyZWY+DQogICAgICA8am91cm5hbD4NCiAgICAgICAgPGpvdXJuYWxfbWV0YWRhdGEgbGFuZ3VhZ2U9ImVuIj4NCiAgICAgICAgICA8ZnVsbF90aXRsZT5IZXJlZGl0eTwvZnVsbF90aXRsZT4NCiAgICAgICAgICA8YWJicmV2X3RpdGxlPkhlcmVkaXR5PC9hYmJyZXZfdGl0bGU+DQogICAgICAgICAgPGlzc24gbWVkaWFfdHlwZT0icHJpbnQiPjAwMTgtMDY3WDwvaXNzbj4NCiAgICAgICAgICA8aXNzbiBtZWRpYV90eXBlPSJlbGVjdHJvbmljIj4xMzY1LTI1NDA8L2lzc24+DQogICAgICAgIDwvam91cm5hbF9tZXRhZGF0YT4NCiAgICAgICAgPGpvdXJuYWxfaXNzdWU+DQogICAgICAgICAgPHB1YmxpY2F0aW9uX2RhdGUgbWVkaWFfdHlwZT0icHJpbnQiPg0KICAgICAgICAgICAgPG1vbnRoPjg8L21vbnRoPg0KICAgICAgICAgICAgPHllYXI+MjAxMzwveWVhcj4NCiAgICAgICAgICA8L3B1YmxpY2F0aW9uX2RhdGU+DQogICAgICAgICAgPGpvdXJuYWxfdm9sdW1lPg0KICAgICAgICAgICAgPHZvbHVtZT4xMTE8L3ZvbHVtZT4NCiAgICAgICAgICA8L2pvdXJuYWxfdm9sdW1lPg0KICAgICAgICAgIDxpc3N1ZT4yPC9pc3N1ZT4NCiAgICAgICAgPC9qb3VybmFsX2lzc3VlPg0KICAgICAgICA8am91cm5hbF9hcnRpY2xlIHB1YmxpY2F0aW9uX3R5cGU9ImZ1bGxfdGV4dCI+DQogICAgICAgICAgPHRpdGxlcz4NCiAgICAgICAgICAgIDx0aXRsZT5BbGJpbmlzbSBpbiBwaHlsb2dlbmV0aWNhbGx5IGFuZCBnZW9ncmFwaGljYWxseSBkaXN0aW5jdCBwb3B1bGF0aW9ucyBvZiBBc3R5YW5heCBjYXZlZmlzaCBhcmlzZXMgdGhyb3VnaCB0aGUgc2FtZSBsb3NzLW9mLWZ1bmN0aW9uIE9jYTIgYWxsZWxlPC90aXRsZT4NCiAgICAgICAgICA8L3RpdGxlcz4NCiAgICAgICAgICA8Y29udHJpYnV0b3JzPg0KICAgICAgICAgICAgPHBlcnNvbl9uYW1lIGNvbnRyaWJ1dG9yX3JvbGU9ImF1dGhvciIgc2VxdWVuY2U9ImZpcnN0Ij4NCiAgICAgICAgICAgICAgPGdpdmVuX25hbWU+SiBCPC9naXZlbl9uYW1lPg0KICAgICAgICAgICAgICA8c3VybmFtZT5Hcm9zczwvc3VybmFtZT4NCiAgICAgICAgICAgIDwvcGVyc29uX25hbWU+DQogICAgICAgICAgICA8cGVyc29uX25hbWUgY29udHJpYnV0b3Jfcm9sZT0iYXV0aG9yIiBzZXF1ZW5jZT0iYWRkaXRpb25hbCI+DQogICAgICAgICAgICAgIDxnaXZlbl9uYW1lPkg8L2dpdmVuX25hbWU+DQogICAgICAgICAgICAgIDxzdXJuYW1lPldpbGtlbnM8L3N1cm5hbWU+DQogICAgICAgICAgICA8L3BlcnNvbl9uYW1lPg0KICAgICAgICAgIDwvY29udHJpYnV0b3JzPg0KICAgICAgICAgIDxwdWJsaWNhdGlvbl9kYXRlIG1lZGlhX3R5cGU9Im9ubGluZSI+DQogICAgICAgICAgICA8bW9udGg+NDwvbW9udGg+DQogICAgICAgICAgICA8ZGF5PjEwPC9kYXk+DQogICAgICAgICAgICA8eWVhcj4yMDEzPC95ZWFyPg0KICAgICAgICAgIDwvcHVibGljYXRpb25fZGF0ZT4NCiAgICAgICAgICA8cHVibGljYXRpb25fZGF0ZSBtZWRpYV90eXBlPSJwcmludCI+DQogICAgICAgICAgICA8bW9udGg+ODwvbW9udGg+DQogICAgICAgICAgICA8eWVhcj4yMDEzPC95ZWFyPg0KICAgICAgICAgIDwvcHVibGljYXRpb25fZGF0ZT4NCiAgICAgICAgICA8cGFnZXM+DQogICAgICAgICAgICA8Zmlyc3RfcGFnZT4xMjI8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8bGFzdF9wYWdlPjEzMDwvbGFzdF9wYWdlPg0KICAgICAgICAgIDwvcGFnZXM+DQogICAgICAgICAgPHB1Ymxpc2hlcl9pdGVtPg0KICAgICAgICAgICAgPGlkZW50aWZpZXIgaWRfdHlwZT0icGlpIj5CRmhkeTIwMTMyNjwvaWRlbnRpZmllcj4NCiAgICAgICAgICA8L3B1Ymxpc2hlcl9pdGVtPg0KICAgICAgICAgIDxwcm9ncmFtIG5hbWU9IkFjY2Vzc0luZGljYXRvcnMiPg0KICAgICAgICAgICAgPGxpY2Vuc2VfcmVmIGFwcGxpZXNfdG89InRkbSI+aHR0cDovL3d3dy5zcHJpbmdlci5jb20vdGRtPC9saWNlbnNlX3JlZj4NCiAgICAgICAgICA8L3Byb2dyYW0+DQogICAgICAgICAgPGRvaV9kYXRhPg0KICAgICAgICAgICAgPGRvaT4xMC4xMDM4L2hkeS4yMDEzLjI2PC9kb2k+DQogICAgICAgICAgICA8dGltZXN0YW1wPjIwMTkwNDE2MTgwMzIxNDkwPC90aW1lc3RhbXA+DQogICAgICAgICAgICA8cmVzb3VyY2UgY29udGVudF92ZXJzaW9uPSJ2b3IiPmh0dHA6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9oZHkyMDEzMjY8L3Jlc291cmNlPg0KICAgICAgICAgICAgPGNvbGxlY3Rpb24gcHJvcGVydHk9ImNyYXdsZXItYmFzZWQiPg0KICAgICAgICAgICAgICA8aXRlbSBjcmF3bGVyPSJpUGFyYWRpZ21zIj4NCiAgICAgICAgICAgICAgICA8cmVzb3VyY2UgbWltZV90eXBlPSJhcHBsaWNhdGlvbi9wZGYiPmh0dHA6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9oZHkyMDEzMjYucGRmPC9yZXNvdXJjZT4NCiAgICAgICAgICAgICAgPC9pdGVtPg0KICAgICAgICAgICAgPC9jb2xsZWN0aW9uPg0KICAgICAgICAgICAgPGNvbGxlY3Rpb24gcHJvcGVydHk9InRleHQtbWluaW5nIj4NCiAgICAgICAgICAgICAgPGl0ZW0+DQogICAgICAgICAgICAgICAgPHJlc291cmNlIG1pbWVfdHlwZT0iYXBwbGljYXRpb24vcGRmIj5odHRwOi8vd3d3Lm5hdHVyZS5jb20vYXJ0aWNsZXMvaGR5MjAxMzI2LnBkZjwvcmVzb3VyY2U+DQogICAgICAgICAgICAgIDwvaXRlbT4NCiAgICAgICAgICAgICAgPGl0ZW0+DQogICAgICAgICAgICAgICAgPHJlc291cmNlIG1pbWVfdHlwZT0idGV4dC9odG1sIj5odHRwOi8vd3d3Lm5hdHVyZS5jb20vYXJ0aWNsZXMvaGR5MjAxMzI2PC9yZXNvdXJjZT4NCiAgICAgICAgICAgICAgPC9pdGVtPg0KICAgICAgICAgICAgPC9jb2xsZWN0aW9uPg0KICAgICAgICAgIDwvZG9pX2RhdGE+DQogICAgICAgICAgPGNpdGF0aW9uX2xpc3Q+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjEiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5BbiBFc2MgTmFjIENpZW4gQmlvbCBNw6l4aWNvPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkogQWx2YXJlejwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjQ8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjYzPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk0NjwvY1llYXI+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+QWx2YXJleiBKIC4gKDE5NDYpLiBSZXZpc2nDs24gZGVsIGfDqW5lcm8gQW5vcHRpY2h0aHlzIGNvbiBkZXNjaXBjacOzbiBkZSB1bmEgZXNwZWNpZSBudWV2YSAoUGlzY2VzLCBDaGFyYWNpZGFlKS4gQW4gRXNjIE5hYyBDaWVuIEJpb2wgTcOpeGljbyA0OiAyNjPigJMyODIuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IyIj4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+Q3VyciBCaW9sPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPlIgQm9yb3dza3k8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT4xODwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT5SMjM8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDA4PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDE2L2ouY3ViLjIwMDcuMTEuMDIzPC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+Qm9yb3dza3kgUiAuICgyMDA4KS4gUmVzdG9yaW5nIHNpZ2h0IGluIGJsaW5kIGNhdmVmaXNoLiBDdXJyIEJpb2wgMTg6IFIyM+KAk1IyNC48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjMiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5KIEhlcmVkPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPlIgQm9yb3dza3k8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT45Mzwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xOTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDI8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwOTMvamhlcmVkLzkzLjEuMTk8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Cb3Jvd3NreSBSLCBXaWxrZW5zIEggLiAoMjAwMikuIE1hcHBpbmcgYSBjYXZlIGZpc2ggZ2Vub21lOiBQb2x5Z2VuaWMgc3lzdGVtcyBhbmQgcmVncmVzc2l2ZSBldm9sdXRpb24uIEogSGVyZWQgOTM6IDE54oCTMjEuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1I0Ij4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+Qk1DIEV2b2wgQmlvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5NIEJyYWRpYzwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjEyPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjk8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDEyPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMTg2LzE0NzEtMjE0OC0xMi05PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+QnJhZGljIE0sIEJlZXJsaSBQLCBHYXJjw61hLWRlIExlw7NuIEZKLCBFc3F1aXZlbC1Cb2JhZGlsbGEgUywgQm9yb3dza3kgUiAuICgyMDEyKS4gR2VuZSBmbG93IGFuZCBwb3B1bGF0aW9uIHN0cnVjdHVyZSBpbiB0aGUgTWV4aWNhbiBibGluZCBjYXZlZmlzaCBjb21wbGV4IChBc3R5YW5heCBtZXhpY2FudXMpLiBCTUMgRXZvbCBCaW9sIDEyOiA5LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSNSI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkogTWFtbWFsPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkRIIEJyb3duPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+Mzc8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MzExPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk1NjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMjMwNy8xMzc2NzMwPC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+QnJvd24gREgsIE5vcnJpcyBLUyAuICgxOTU2KS4gT2JzZXJ2YXRpb25zIG9mIGNhcHRpdmUgYW5kIHdpbGQgY2V0YWNlYW5zLiBKIE1hbW1hbCAzNzogMzEx4oCTMzI2LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSNiI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlpvbyBCaW9sPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPlMgQ2xhcms8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT4yMTwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT41MTk8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDAyPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDAyL3pvby4xMDA2ODwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPkNsYXJrIFMgLiAoMjAwMikuIEZpcnN0IHJlcG9ydCBvZiBhbGJpbmlzbSBpbiB0aGUgd2hpdGUtc3BvdHRlZCBiYW1ib28gc2hhcmssIENoaWxvc2N5bGxpdW0gcGxhZ2lvc3VtIChPcmVjdG9sb2JpZm9ybWVzOiBIZW1pc2N5bGxpZGFlKSwgd2l0aCBhIHJldmlldyBvZiByZXBvcnRlZCBjb2xvciBhYmVycmF0aW9ucyBpbiBlbGFzbW9icmFuY2hzLiBab28gQmlvbCAyMTogNTE54oCTNTI0LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSNyI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlNjaWVuY2U8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+UEYgQ29sb3NpbW88L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT4zMDc8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTkyODwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjExMjYvc2NpZW5jZS4xMTA3MjM5PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+Q29sb3NpbW8gUEYsIEhvc2VtYW5uIEtFLCBCYWxhYmhhZHJhIFMsIFZpbGxhcnJlYWwgRyBKciwgRGlja3NvbiBNLCBHcmltd29vZCBKIGV0IGFsLiAoMjAwNSkuIFdpZGVzcHJlYWQgcGFyYWxsZWwgZXZvbHV0aW9uIGluIHN0aWNrbGViYWNrcyBieSByZXBlYXRlZCBmaXhhdGlvbiBvZiBFY3RvZHlzcGxhc2luIGFsbGVsZXMuIFNjaWVuY2UgMzA3OiAxOTI44oCTMTkzMy48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjgiPg0KICAgICAgICAgICAgICA8YXV0aG9yPkRDIEN1bHZlcjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk5NTwvY1llYXI+DQogICAgICAgICAgICAgIDx2b2x1bWVfdGl0bGU+QWRhcHRhdGlvbiBhbmQgTmF0dXJhbCBTZWxlY3Rpb24gaW4gQ2F2ZXM6IFRoZSBFdm9sdXRpb24gb2YgR2FtbWFydXMgbWludXM8L3ZvbHVtZV90aXRsZT4NCiAgICAgICAgICAgICAgPGRvaT4xMC40MTU5L2hhcnZhcmQuOTc4MDY3NDQxOTA3MDwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPkN1bHZlciBEQywgS2FuZSBUQywgRm9uZyBEVyAuICgxOTk1KSBBZGFwdGF0aW9uIGFuZCBOYXR1cmFsIFNlbGVjdGlvbiBpbiBDYXZlczogVGhlIEV2b2x1dGlvbiBvZiBHYW1tYXJ1cyBtaW51cy4gSGFydmFyZCBVbml2ZXJzaXR5IFByZXNzOiBDYW1icmlkZ2UsIE1BLCBVU0EuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1I5Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5EQyBDdWx2ZXI8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MzgxPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwMDwvY1llYXI+DQogICAgICAgICAgICAgIDx2b2x1bWVfdGl0bGU+U3VidGVycmFuZWFuIEVjb3N5c3RlbXM8L3ZvbHVtZV90aXRsZT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5DdWx2ZXIgREMsIFdpbGtlbnMgSCAuICgyMDAwKS4gQ3JpdGljYWwgcmV2aWV3IG9mIHRoZSByZWxldmFudCB0aGVvcmllcyBvZiB0aGUgZXZvbHV0aW9uIG9mIHN1YnRlcnJhbmVhbiBhbmltYWxzLiBJbjogV2lsa2VucyBILCBDdWx2ZXIgREMsIEh1bXBocmV5cyBXRiwgKGVkcykuIFN1YnRlcnJhbmVhbiBFY29zeXN0ZW1zLiBFbHNldmllcjogQW1zdGVyZGFtLCB0aGUgTmV0aGVybGFuZHMuIHBwIDM4MeKAkzM5OC48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjEwIj4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+TW9sIEJpb2wgRXZvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5URSBEb3dsaW5nPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTk8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+NDQ2PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwMjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTA5My9veGZvcmRqb3VybmFscy5tb2xiZXYuYTAwNDEwMDwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPkRvd2xpbmcgVEUsIE1hcnRhc2lhbiBEUCwgSmVmZmVyeSBXUiAuICgyMDAyKS4gRXZpZGVuY2UgZm9yIG11bHRpcGxlIGdlbmV0aWMgZm9ybXMgd2l0aCBzaW1pbGFyIGV5ZWxlc3MgcGhlbm90eXBlcyBpbiB0aGUgYmxpbmQgY2F2ZWZpc2gsIEFzdHlhbmF4IG1leGljYW51cy4gTW9sIEJpb2wgRXZvbCAxOTogNDQ24oCTNDU1LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMTEiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Bbm4gUmV2IEVjb2wgU3lzdDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5EVyBGb25nPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjY8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjQ5PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk5NTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTE0Ni9hbm51cmV2LmVzLjI2LjExMDE5NS4wMDEzNDE8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Gb25nIERXLCBLYW5lIFRDLCBDdWx2ZXIgREMgLiAoMTk5NSkuIFZlc3RpZ2lhbGl6YXRpb24gYW5kIGxvc3Mgb2Ygbm9uZnVuY3Rpb25hbCBjaGFyYWN0ZXJzLiBBbm4gUmV2IEVjb2wgU3lzdCAyNjogMjQ54oCTMjY4LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMTIiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5ab28gQmlvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5SIEZyYW5raGFtPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+NTwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xMjc8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4xOTg2PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDAyL3pvby4xNDMwMDUwMjA3PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+RnJhbmtoYW0gUiwgSGVtbWVyIEgsIFJ5ZGVyIE9BLCBDb3RocmFuIEVHLCBTb3Vsw6kgTUUsIE11cnJheSBORCBldCBhbC4gKDE5ODYpLiBTZWxlY3Rpb24gaW4gY2FwdGl2ZSBwb3B1bGF0aW9ucy4gWm9vIEJpb2wgNTogMTI34oCTMTM4LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMTMiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5CTUMgRXZvbCBCaW9sPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkpCIEdyb3NzPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTI8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTA1PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTE4Ni8xNDcxLTIxNDgtMTItMTA1PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+R3Jvc3MgSkIgLiAoMjAxMikuIFRoZSBjb21wbGV4IG9yaWdpbiBvZiBBc3R5YW5heCBjYXZlZmlzaC4gQk1DIEV2b2wgQmlvbCAxMjogMTA1LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMTQiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5QTG9TIEdlbmV0PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkpCIEdyb3NzPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+NTwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT5lMTAwMDMyNjwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDk8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEzNzEvam91cm5hbC5wZ2VuLjEwMDAzMjY8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Hcm9zcyBKQiwgQm9yb3dza3kgUiwgVGFiaW4gQ0ogLiAoMjAwOSkuIEEgbm92ZWwgcm9sZSBmb3IgTWMxciBpbiB0aGUgcGFyYWxsZWwgZXZvbHV0aW9uIG9mIGRlcGlnbWVudGF0aW9uIGluIGluZGVwZW5kZW50IHBvcHVsYXRpb25zIG9mIHRoZSBjYXZlZmlzaCBBc3R5YW5heCBtZXhpY2FudXMuIFBMb1MgR2VuZXQgNTogZTEwMDAzMjYuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IxNSI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk1vbCBQaHlsb2dlbmV0IEV2b2w8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+QiBIYXVzZG9yZjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjYwPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjg5PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAxNi9qLnltcGV2LjIwMTEuMDMuMDA5PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+SGF1c2RvcmYgQiwgV2lsa2VucyBILCBTdHJlY2tlciBVIC4gKDIwMTEpLiBQb3B1bGF0aW9uIGdlbmV0aWMgcGF0dGVybnMgcmV2ZWFsZWQgYnkgbWljcm9zYXRlbGxpdGUgZGF0YSBjaGFsbGVuZ2UgdGhlIG1pdG9jaG9uZHJpYWwgRE5BIGJhc2VkIHRheG9ub215IG9mIEFzdHlhbmF4IGluIE1leGljbyAoQ2hhcmFjaWRhZSwgVGVsZW9zdGVpKS4gTW9sIFBoeWxvZ2VuZXQgRXZvbCA2MDogODnigJM5Ny48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjE2Ij4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+T2NjYXMgUGFwZXJzIE11cyBab29sLCBVbml2IE1pY2hpZ2FuPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkNMIEh1YmJzPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MzQyPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4xOTM2PC9jWWVhcj4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5IdWJicyBDTCwgSW5uZXMgV1QgLiAoMTkzNikuIFRoZSBmaXJzdCBrbm93biBibGluZCBmaXNoIG9mIHRoZSBmYW1pbHkgQ2hhcmFjaWRhZTogQSBuZXcgZ2VudXMgZnJvbSBNZXhpY28uIE9jY2FzIFBhcGVycyBNdXMgWm9vbCwgVW5pdiBNaWNoaWdhbiAzNDI6IDHigJM3LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMTciPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5EZXYgQmlvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5XUiBKZWZmZXJ5PC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjMxPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDAxPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDA2L2RiaW8uMjAwMC4wMTIxPC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+SmVmZmVyeSBXUiAuICgyMDAxKS4gQ2F2ZWZpc2ggYXMgYSBtb2RlbCBzeXN0ZW0gaW4gZXZvbHV0aW9uYXJ5IGRldmVsb3BtZW50YWwgYmlvbG9neS4gRGV2IEJpb2wgMjMxOiAx4oCTMTIuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IxOCI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkogSGVyZWQ8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+V1IgSmVmZmVyeTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjk2PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE4NTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwOTMvamhlcmVkL2VzaTAyODwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPkplZmZlcnkgV1IgLiAoMjAwNSkuIEFkYXB0aXZlIGV2b2x1dGlvbiBvZiBleWUgZGVnZW5lcmF0aW9uIGluIHRoZSBNZXhpY2FuIGJsaW5kIGNhdmVmaXNoLiBKIEhlcmVkIDk2OiAxODXigJMxOTYuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IxOSI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkFubnUgUmV2IEdlbmV0PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPldSIEplZmZlcnk8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT40Mzwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4yNTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDk8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjExNDYvYW5udXJldi1nZW5ldC0xMDIxMDgtMTM0MjE2PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+SmVmZmVyeSBXUiAuICgyMDA5KS4gUmVncmVzc2l2ZSBldm9sdXRpb24gaW4gQXN0eWFuYXggY2F2ZWZpc2guIEFubnUgUmV2IEdlbmV0IDQzOiAyNeKAkzQ3LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjAiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5ab28gQmlvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5MIExhaWtyZTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE4PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjgxPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk5OTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAwMi8oU0lDSSkxMDk4LTIzNjEoMTk5OSkxODoyJmx0OzgxOjpBSUQtWk9PMSZndDszLjAuQ087Mi0yPC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+TGFpa3JlIEwgLiAoMTk5OSkuIEhlcmVkaXRhcnkgZGVmZWN0cyBhbmQgY29uc2VydmF0aW9uIGdlbmV0aWMgbWFuYWdlbWVudCBvZiBjYXB0aXZlIHBvcHVsYXRpb25zLiBab28gQmlvbCAxODogODHigJM5OS48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjIxIj4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+R2Vub21pY3M8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+U1QgTGVlPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjY8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MzU0PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk5NTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAxNi8wODg4LTc1NDMoOTUpODAyMjAtRzwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPkxlZSBTVCwgTmljaG9sbHMgUkQsIEpvbmcgTVQsIEZ1a2FpIEssIFNwcml0eiBSQSAuICgxOTk1KS4gT3JnYW5pemF0aW9uIGFuZCBzZXF1ZW5jZSBvZiB0aGUgaHVtYW4gUCBnZW5lIGFuZCBpZGVudGlmaWNhdGlvbiBvZiBhIG5ldyBmYW1pbHkgb2YgdHJhbnNwb3J0IHByb3RlaW5zLiBHZW5vbWljcyAyNjogMzU04oCTMzYzLjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjIiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5CaW9sIENvbnNlcnY8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+TUUgTWNQaGVlPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTE1PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjcxPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwNDwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAxNi9TMDAwNi0zMjA3KDAzKTAwMDk1LTg8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5NY1BoZWUgTUUgLiAoMjAwNCkuIEdlbmVyYXRpb25zIGluIGNhcHRpdml0eSBpbmNyZWFzZXMgYmVoYXZpb3JhbCB2YXJpYW5jZTogQ29uc2lkZXJhdGlvbnMgZm9yIGNhcHRpdmUgYnJlZWRpbmcgYW5kIHJlaW50cm9kdWN0aW9uIHByb2dyYW1zLiBCaW9sIENvbnNlcnYgMTE1OiA3MeKAkzc3LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjMiPg0KICAgICAgICAgICAgICA8YXV0aG9yPlJXIE1pdGNoZWxsPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4xOTc3PC9jWWVhcj4NCiAgICAgICAgICAgICAgPHZvbHVtZV90aXRsZT5NZXhpY2FuIEV5ZWxlc3MgQ2hhcmFjaW4gRmlzaGVzLCBHZW51cyBBc3R5YW5heDogRW52aXJvbm1lbnQsIERpc3RyaWJ1dGlvbiwgYW5kIEV2b2x1dGlvbjwvdm9sdW1lX3RpdGxlPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPk1pdGNoZWxsIFJXLCBSdXNzZWxsIFdILCBFbGxpb3R0IFdSIC4gKDE5NzcpIE1leGljYW4gRXllbGVzcyBDaGFyYWNpbiBGaXNoZXMsIEdlbnVzIEFzdHlhbmF4OiBFbnZpcm9ubWVudCwgRGlzdHJpYnV0aW9uLCBhbmQgRXZvbHV0aW9uLiBUZXhhcyBUZWNoIFByZXNzOiBMdWJib2NrLCBUWCwgVVNBLjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjQiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5CTUMgRXZvbCBCaW9sPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkNQIE9ybmVsYXMtR2FyY8OtYTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjg8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MzQwPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwODwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTE4Ni8xNDcxLTIxNDgtOC0zNDA8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Pcm5lbGFzLUdhcmPDrWEgQ1AsIERvbcOtbmd1ZXotRG9tw61uZ3VleiBPLCBEb2FkcmlvIEkgLiAoMjAwOCkuIEV2b2x1dGlvbmFyeSBoaXN0b3J5IG9mIHRoZSBmaXNoIGdlbnVzIEFzdHlhbmF4IEJhaXJkICZhbXA7IEdpcmFyZCAoMTg1NCkgKEFjdGlub3B0ZXJ5Z2lpLCBDaGFyYWNpZGFlKSBpbiBNZXNvYW1lcmljYSByZXZlYWxzIG11bHRpcGxlIG1vcnBob2xvZ2ljYWwgaG9tb3BsYXNpZXMuIEJNQyBFdm9sIEJpb2wgODogMzQwLjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjUiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5UcmVuZHMgRWNvbCBFdm9sPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkYgUGVsbGV0aWVyPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjQ8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjYzPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwOTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAxNi9qLnRyZWUuMjAwOC4xMS4wMTM8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5QZWxsZXRpZXIgRiwgUsOpYWxlIEQsIFdhdHRlcnMgSiwgQm9ha2VzIEVILCBHYXJhbnQgRCAuICgyMDA5KS4gVmFsdWUgb2YgY2FwdGl2ZSBwb3B1bGF0aW9ucyBmb3IgcXVhbnRpdGF0aXZlIGdlbmV0aWNzIHJlc2VhcmNoLiBUcmVuZHMgRWNvbCBFdm9sIDI0OiAyNjPigJMyNzAuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IyNiI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkogWm9vbCBTeXN0IEV2b2wgUmVzPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPlZOIFBldGVyczwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjEzPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjExMDwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjE5NzU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjExMTEvai4xNDM5LTA0NjkuMTk3NS50YjAwNTA0Lng8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5QZXRlcnMgVk4sIFNjaG9sbCBBLCBXaWxrZW5zIEggLiAoMTk3NSkuIERlciBNaWNvcy1GaXNjaCwgSMO2aGxlbmZpc2NoIGluIHN0YXR1IG5hc2NlbmRpIG9kZXIgQmFzdGFyZD8gRWluIEJlaXRyYWcgenVyIEV2b2x1dGlvbiBkZXIgSMO2aGxlbnRpZXJlLiBKIFpvb2wgU3lzdCBFdm9sIFJlcyAxMzogMTEw4oCTMTI0LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjciPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5BY3RhIENhcnNvbG9naWNhPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPk1MIFBvcnRlcjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjM2PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE3MzwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDc8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjM5ODYvYWMudjM2aTEuMjE5PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+UG9ydGVyIE1MLCBEaXR0bWFyIEssIFDDqXJlei1Mb3NhZGEgTSAuICgyMDA3KS4gSG93IGxvbmcgZG9lcyBldm9sdXRpb24gb2YgdGhlIHRyb2dsb21vcnBoaWMgZm9ybSB0YWtlPyBFc3RpbWF0aW5nIGRpdmVyZ2VuY2UgdGltZXMgaW4gQXN0eWFuYXggbWV4aWNhbnVzLiBBY3RhIENhcnNvbG9naWNhIDM2OiAxNzPigJMxODIuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IyOCI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkN1cnIgQmlvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5NIFByb3RhczwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE3PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjQ1MjwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDc8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwMTYvai5jdWIuMjAwNy4wMS4wNTE8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Qcm90YXMgTSwgQ29ucmFkIE0sIEdyb3NzIEpCLCBUYWJpbiBDLCBCb3Jvd3NreSBSIC4gKDIwMDcpLiBSZWdyZXNzaXZlIGV2b2x1dGlvbiBpbiB0aGUgTWV4aWNhbiBjYXZlIHRldHJhLCBBc3R5YW5heCBtZXhpY2FudXMuIEN1cnIgQmlvbCAxNzogNDUy4oCTNDU0LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjkiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5OYXQgR2VuZXQ8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+TUUgUHJvdGFzPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+Mzg8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTA3PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwNjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAzOC9uZzE3MDA8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Qcm90YXMgTUUsIEhlcnNleSBDLCBLb2NoYW5layBELCBaaG91IFksIFdpbGtlbnMgSCwgSmVmZmVyeSBXUiBldCBhbC4gKDIwMDYpLiBHZW5ldGljIGFuYWx5c2lzIG9mIGNhdmVmaXNoIHJldmVhbHMgbW9sZWN1bGFyIGNvbnZlcmdlbmNlIGluIHRoZSBldm9sdXRpb24gb2YgYWxiaW5pc20uIE5hdCBHZW5ldCAzODogMTA34oCTMTExLjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMzAiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5FeHBlcmllbnRpYTwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5QIMWeYWRvxJ9sdTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjEzPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjM5NDwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjE5NTU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwMDcvQkYwMjE2MTExMTwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPsWeYWRvxJ9sdSBQIC4gKDE5NTUpLiBBIE1lbmRlbGlhbiBnZW5lIGZvciBhbGJpbmlzbSBpbiBuYXR1cmFsIGNhdmUgZmlzaC4gRXhwZXJpZW50aWEgMTM6IDM5NOKAkzM5NS48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjMxIj4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+VmVyaCBEdHNjaCBab29sIEdlcyBHcmF6PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPlAgxZ5hZG/En2x1PC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTk1Nzwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT40MzI8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4xOTU3PC9jWWVhcj4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj7FnmFkb8SfbHUgUCAuICgxOTU3KS4gTWVuZGVsaWFuIGluaGVyaXRhbmNlIGluIHRoZSBoeWJyaWRzIGJldHdlZW4gdGhlIE1leGljYW4gYmxpbmQgY2F2ZSBmaXNoZXMgYW5kIHRoZWlyIG92ZXJncm91bmQgYW5jZXN0b3IuIFZlcmggRHRzY2ggWm9vbCBHZXMgR3JheiAxOTU3OiA0MzLigJM0MzkuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IzMiI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkogSGVyZWQ8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+UCDFnmFkb8SfbHU8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT42MDwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xMDwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjE5Njk8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwOTMvb3hmb3Jkam91cm5hbHMuamhlcmVkLmExMDc5MTc8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj7FnmFkb8SfbHUgUCwgTWNLZWUgQSAuICgxOTY5KS4gQSBzZWNvbmQgZ2VuZSB0aGF0IGFmZmVjdHMgZXllIGFuZCBib2R5IGNvbG9yIGluIE1leGljYW4gYmxpbmQgY2F2ZSBmaXNoLiBKIEhlcmVkIDYwOiAxMOKAkzE0LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMzMiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5ab29sb2dpY2E8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+U1IgU2NobGFnZWw8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT4zMjwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xNzwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjE5NDc8L2NZZWFyPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPlNjaGxhZ2VsIFNSLCBCcmVkZXIgQ00gLiAoMTk0NykuIEEgc3R1ZHkgb2Ygb3h5Z2VuIGNvbnN1bXB0aW9uIG9mIGJsaW5kIGFuZCBleWVkIGNhdmUgY2hhcmFjaW5zIGluIGxpZ2h0IGFuZCBpbiBkYXJrbmVzcy4gWm9vbG9naWNhIDMyOiAxN+KAkzI4LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMzQiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Nb2wgRWNvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5VIFN0cmVja2VyPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTI8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+Njk5PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwMzwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTA0Ni9qLjEzNjUtMjk0WC4yMDAzLjAxNzUzLng8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5TdHJlY2tlciBVLCBCZXJuYXRjaGV6IEwsIFdpbGtlbnMgSCAuICgyMDAzKS4gR2VuZXRpYyBkaXZlcmdlbmNlIGJldHdlZW4gY2F2ZSBhbmQgc3VyZmFjZSBwb3B1bGF0aW9ucyBvZiBBc3R5YW5heCBpbiBNZXhpY28gKENoYXJhY2lkYWUsIFRlbGVvc3RlaSkuIE1vbCBFY29sIDEyOiA2OTnigJM3MTAuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IzNSI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk1vbCBQaHlsb2dlbmV0IEV2b2w8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+VSBTdHJlY2tlcjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjMzPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjQ2OTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDQ8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwMTYvai55bXBldi4yMDA0LjA3LjAwMTwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPlN0cmVja2VyIFUsIEZhdW5kZXogVkgsIFdpbGtlbnMgSCAuICgyMDA0KS4gUGh5bG9nZW9ncmFwaHkgb2Ygc3VyZmFjZSBhbmQgY2F2ZSBBc3R5YW5heCAoVGVsZW9zdGVpKSBmcm9tIENlbnRyYWwgYW5kIE5vcnRoIEFtZXJpY2EgYmFzZWQgb24gY3l0b2Nocm9tZSBiIHNlcXVlbmNlIGRhdGEuIE1vbCBQaHlsb2dlbmV0IEV2b2wgMzM6IDQ2OeKAkzQ4MS48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjM2Ij4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+TW9sIFBoeWxvZ2VuZXQgRXZvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5VIFN0cmVja2VyPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+NjI8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+NjI8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDEyPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDE2L2oueW1wZXYuMjAxMS4wOS4wMDU8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5TdHJlY2tlciBVLCBIYXVzZG9yZiBCLCBXaWxrZW5zIEggLiAoMjAxMikuIFBhcmFsbGVsIHNwZWNpYXRpb24gaW4gQXN0eWFuYXggY2F2ZSBmaXNoIChUZWxlb3N0ZWkpIGluIE5vcnRoZXJuIE1leGljby4gTW9sIFBoeWxvZ2VuZXQgRXZvbCA2MjogNjLigJM3MC48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjM3Ij4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+RXZvbHV0aW9uPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkggV2lsa2VuczwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjI1PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjUzMDwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjE5NzE8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjIzMDcvMjQwNzM1MjwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPldpbGtlbnMgSCAuICgxOTcxKS4gR2VuZXRpYyBpbnRlcnByZXRhdGlvbiBvZiByZWdyZXNzaXZlIGV2b2x1dGlvbmFyeSBwcm9jZXNzZXM6IFN0dWRpZXMgb24gaHlicmlkIGV5ZXMgb2YgdHdvIEFzdHlhbmF4IHBvcHVsYXRpb25zIChDaGFyYWNpZGFlLCBQaXNjZXMpLiBFdm9sdXRpb24gMjU6IDUzMOKAkzU0NC48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjM4Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5IIFdpbGtlbnM8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjcxPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk4ODwvY1llYXI+DQogICAgICAgICAgICAgIDx2b2x1bWVfdGl0bGU+RXZvbHV0aW9uYXJ5IEJpb2xvZ3k8L3ZvbHVtZV90aXRsZT4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDA3Lzk3OC0xLTQ2MTMtMTA0My0zXzg8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5XaWxrZW5zIEggLiAoMTk4OCkuIEV2b2x1dGlvbiBhbmQgZ2VuZXRpY3Mgb2YgZXBpZ2VhbiBhbmQgY2F2ZSBBc3R5YW5heCBmYXNjaWF0dXMgKENoYXJhY2lkYWUsIFBpc2NlcykuIFN1cHBvcnQgZm9yIHRoZSBuZXV0cmFsIG11dGF0aW9uIHRoZW9yeS4gSW46IEhlY2h0IE1LLCBXYWxsYWNlIEIsIChlZHMpLiBFdm9sdXRpb25hcnkgQmlvbG9neSBWb2wgMjMsIFBsZW51bSBQdWJsaXNoaW5nIENvcnBvcmF0aW9uOiBOZXcgWW9yaywgTlksIFVTQS4gcHAgMjcx4oCTMzY3LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMzkiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5IZXJlZGl0eTwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5IIFdpbGtlbnM8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT4xMDU8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+NDEzPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMDwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAzOC9oZHkuMjAwOS4xODQ8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5XaWxrZW5zIEggLiAoMjAxMCkuIEdlbmVzLCBtb2R1bGVzIGFuZCB0aGUgZXZvbHV0aW9uIG9mIGNhdmUgZmlzaC4gSGVyZWRpdHkgMTA1OiA0MTPigJM0MjIuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1I0MCI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkFubiBTcMOpbMOpb2w8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+SCBXaWxrZW5zPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+Mjc8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjYzPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk3MjwvY1llYXI+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+V2lsa2VucyBILCBCdXJucyBSSiAuICgxOTcyKS4gQSBuZXcgQW5vcHRpY2h0aHlzIGNhdmUgcG9wdWxhdGlvbi4gQW5uIFNww6lsw6lvbCAyNzogMjYz4oCTMjcwLjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSNDEiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5CaW9sIEogTGlubiBTb2M8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+SCBXaWxrZW5zPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+ODA8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+NTQ1PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwMzwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTExMS9qLjEwOTUtODMxMi4yMDAzLjAwMjMwLng8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5XaWxrZW5zIEgsIFN0cmVja2VyIFUgLiAoMjAwMykuIENvbnZlcmdlbnQgZXZvbHV0aW9uIG9mIHRoZSBjYXZlZmlzaCBBc3R5YW5heCAoQ2hhcmFjaWRhZTogVGVsZW9zdGVpKTogR2VuZXRpYyBldmlkZW5jZSBmcm9tIHJlZHVjZWQgZXllLXNpemUgYW5kIHBpZ21lbnRhdGlvbi4gQmlvbCBKIExpbm4gU29jIDgwOiA1NDXigJM1NTQuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgIDwvY2l0YXRpb25fbGlzdD4NCiAgICAgICAgPC9qb3VybmFsX2FydGljbGU+DQogICAgICA8L2pvdXJuYWw+DQogICAgPC9jcm9zc3JlZj4NCiAgPC9kb2lfcmVjb3JkPg0KPC9kb2lfcmVjb3Jkcz4=
79
+ http_version:
80
+ recorded_at: Mon, 24 Jun 2019 06:30:54 GMT
81
+ recorded_with: VCR 3.0.3
@@ -138,6 +138,24 @@ describe Bolognese::Metadata, vcr: true do
138
138
  expect(subject.agency).to eq("Crossref")
139
139
  end
140
140
 
141
+ it "vor with url" do
142
+ input = "https://doi.org/10.1038/hdy.2013.26"
143
+ subject = Bolognese::Metadata.new(input: input)
144
+ expect(subject.valid?).to be true
145
+ expect(subject.identifiers).to eq([{"identifier"=>"https://doi.org/10.1038/hdy.2013.26", "identifierType"=>"DOI"}])
146
+ expect(subject.url).to eq("http://www.nature.com/articles/hdy201326")
147
+ expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"Text", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
148
+ expect(subject.creators.length).to eq(2)
149
+ expect(subject.creators.first).to eq("familyName"=>"Gross", "givenName"=>"J B", "name"=>"Gross, J B", "nameType"=>"Personal")
150
+ expect(subject.titles).to eq([{"title"=>"Albinism in phylogenetically and geographically distinct populations of Astyanax cavefish arises through the same loss-of-function Oca2 allele"}])
151
+ expect(subject.dates).to eq([{"date"=>"2013-04-10", "dateType"=>"Issued"}, {"date"=>"2019-04-16T16:25:36Z", "dateType"=>"Updated"}])
152
+ expect(subject.publication_year).to eq("2013")
153
+ expect(subject.related_identifiers.size).to eq(35)
154
+ expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"0018-067X", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
155
+ expect(subject.container).to eq("firstPage"=>"122", "identifier"=>"0018-067X", "identifierType"=>"ISSN", "issue"=>"2", "lastPage"=>"130", "title"=>"Heredity", "type"=>"Journal", "volume"=>"111")
156
+ expect(subject.agency).to eq("Crossref")
157
+ end
158
+
141
159
  it "dataset" do
142
160
  input = "10.2210/pdb4hhb/pdb"
143
161
  subject = Bolognese::Metadata.new(input: input)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bolognese
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.16
4
+ version: 1.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Fenner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-31 00:00:00.000000000 Z
11
+ date: 2019-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: maremma
@@ -516,6 +516,26 @@ dependencies:
516
516
  - - "~>"
517
517
  - !ruby/object:Gem::Version
518
518
  version: '0.1'
519
+ - !ruby/object:Gem::Dependency
520
+ name: hashdiff
521
+ requirement: !ruby/object:Gem::Requirement
522
+ requirements:
523
+ - - ">="
524
+ - !ruby/object:Gem::Version
525
+ version: 1.0.0.beta1
526
+ - - "<"
527
+ - !ruby/object:Gem::Version
528
+ version: 2.0.0
529
+ type: :development
530
+ prerelease: false
531
+ version_requirements: !ruby/object:Gem::Requirement
532
+ requirements:
533
+ - - ">="
534
+ - !ruby/object:Gem::Version
535
+ version: 1.0.0.beta1
536
+ - - "<"
537
+ - !ruby/object:Gem::Version
538
+ version: 2.0.0
519
539
  description: Ruby gem and command-line utility for conversion of DOI metadata from
520
540
  and to different metadata formats, including schema.org.
521
541
  email: mfenner@datacite.org
@@ -806,6 +826,7 @@ files:
806
826
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with.yml
807
827
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/not_found_error.yml
808
828
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/posted_content.yml
829
+ - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/vor_with_url.yml
809
830
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/BlogPosting.yml
810
831
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_in_test_system.yml
811
832
  - spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_in_test_system_schema_3.yml
@@ -1077,7 +1098,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1077
1098
  - !ruby/object:Gem::Version
1078
1099
  version: '0'
1079
1100
  requirements: []
1080
- rubygems_version: 3.0.3
1101
+ rubygems_version: 3.0.4
1081
1102
  signing_key:
1082
1103
  specification_version: 4
1083
1104
  summary: Ruby client library for conversion of DOI Metadata