currency-rate 0.1.1 → 0.2.0

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -0
  3. data/VERSION +1 -1
  4. data/currency-rate.gemspec +22 -3
  5. data/lib/adapter.rb +17 -9
  6. data/lib/btc_adapter.rb +4 -6
  7. data/lib/btc_adapters/average_rate_adapter.rb +4 -3
  8. data/lib/btc_adapters/bitfinex_adapter.rb +30 -0
  9. data/lib/btc_adapters/bitpay_adapter.rb +10 -3
  10. data/lib/btc_adapters/bitstamp_adapter.rb +24 -5
  11. data/lib/btc_adapters/btcchina_adapter.rb +13 -0
  12. data/lib/btc_adapters/btce_adapter.rb +26 -5
  13. data/lib/btc_adapters/coinbase_adapter.rb +2 -2
  14. data/lib/btc_adapters/huobi_adapter.rb +30 -0
  15. data/lib/btc_adapters/kraken_adapter.rb +14 -5
  16. data/lib/btc_adapters/localbitcoins_adapter.rb +10 -3
  17. data/lib/btc_adapters/okcoin_adapter.rb +24 -5
  18. data/lib/currency_rate.rb +11 -10
  19. data/lib/fiat_adapter.rb +4 -18
  20. data/lib/fiat_adapters/fixer_adapter.rb +20 -5
  21. data/lib/fiat_adapters/yahoo_adapter.rb +28 -6
  22. data/spec/currency_rate_spec.rb +10 -6
  23. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/average_rate_adapter.yml +423 -0
  24. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitfinex_adapter.yml +125 -0
  25. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitpay_adapter_yml.yml +272 -0
  26. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitstamp_adapter.yml +153 -0
  27. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btcchina_adapter.yml +83 -0
  28. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btce_adapter.yml +223 -0
  29. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/coinbase_adapter.yml +76 -0
  30. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/huobi_adapter.yml +83 -0
  31. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/kraken_adapter.yml +83 -0
  32. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/localbitcoins_adapter.yml +128 -0
  33. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/okcoin_adapter.yml +207 -0
  34. data/spec/fixtures/vcr/exchange_rate_adapters/fiat_adapters/fixer_adapter.yml +81 -0
  35. data/spec/fixtures/vcr/exchange_rate_adapters/fiat_adapters/yahoo_adapter.yml +50 -0
  36. data/spec/lib/btc_adapter_spec.rb +16 -28
  37. data/spec/lib/btc_adapters/average_rate_adapter_spec.rb +4 -4
  38. data/spec/lib/btc_adapters/bitfinex_adapter_spec.rb +38 -0
  39. data/spec/lib/btc_adapters/bitpay_adapter_spec.rb +8 -3
  40. data/spec/lib/btc_adapters/bitstamp_adapter_spec.rb +8 -3
  41. data/spec/lib/btc_adapters/btcchina_adapter_spec.rb +36 -0
  42. data/spec/lib/btc_adapters/btce_adapter_spec.rb +10 -3
  43. data/spec/lib/btc_adapters/coinbase_adapter_spec.rb +5 -3
  44. data/spec/lib/btc_adapters/huobi_adapter_spec.rb +38 -0
  45. data/spec/lib/btc_adapters/kraken_adapter_spec.rb +6 -3
  46. data/spec/lib/btc_adapters/localbitcoins_adapter_spec.rb +4 -3
  47. data/spec/lib/btc_adapters/okcoin_adapter_spec.rb +11 -3
  48. data/spec/lib/fiat_adapters/fixer_adapter_spec.rb +5 -2
  49. data/spec/lib/fiat_adapters/yahoo_adapter_spec.rb +5 -2
  50. metadata +21 -2
@@ -1,13 +1,32 @@
1
1
  module CurrencyRate
2
2
  class OkcoinAdapter < BtcAdapter
3
3
 
4
- FETCH_URL = 'https://www.okcoin.com/api/ticker.do?ok=1'
4
+ FETCH_URL = {
5
+ 'ltc_usd' => 'https://www.okcoin.com/api/v1/ticker.do?symbol=ltc_usd',
6
+ 'btc_usd' => 'https://www.okcoin.com/api/v1/ticker.do?symbol=btc_usd',
7
+ 'ltc_cny' => 'https://www.okcoin.cn/api/ticker.do?symbol=ltc_cny',
8
+ 'btc_cny' => 'https://www.okcoin.cn/api/ticker.do?symbol=btc_cny'
9
+ }
5
10
 
6
- def rate_for(currency_code)
11
+ def rate_for(from,to)
7
12
  super
8
- raise CurrencyNotSupported if currency_code != 'USD'
9
- rate = get_rate_value_from_hash(@rates, 'ticker', 'last')
10
- rate_to_f(rate)
13
+ rate = rate_to_f(currency_pair_rate(to,from))
14
+ invert_rate(from,to,rate)
15
+ end
16
+
17
+ def currency_pair_rate(currency1, currency2)
18
+ rate = @rates["#{currency1.downcase}_#{currency2.downcase}"] || @rates["#{currency2.downcase}_#{currency1.downcase}"]
19
+ raise CurrencyNotSupported unless rate
20
+ rate['ticker']['last']
21
+ end
22
+
23
+ # Because OKCoin has LTC
24
+ def invert_rate(from,to,rate)
25
+ if ['BTC', 'LTC'].include?(to)
26
+ 1/rate.to_f
27
+ else
28
+ rate
29
+ end
11
30
  end
12
31
 
13
32
  end
data/lib/currency_rate.rb CHANGED
@@ -12,11 +12,8 @@ Dir["#{File.expand_path File.dirname(__FILE__)}/**/*.rb"].each { |f| require f }
12
12
 
13
13
  module CurrencyRate
14
14
 
15
- def self.get(adapter_name, currency)
16
- adapter_class(adapter_name).rate_for(currency)
17
- end
15
+ def self.get(adapter_name, from, to, anchor_currency: nil)
18
16
 
19
- def self.convert(adapter_name, amount:, from:, to:, anchor_currency: nil)
20
17
  a = adapter_class(adapter_name)
21
18
 
22
19
  # Setting default values for anchor currency depending on
@@ -26,16 +23,20 @@ module CurrencyRate
26
23
  else
27
24
  'USD' if anchor_currency.nil?
28
25
  end
29
-
26
+
30
27
  # None of the currencies is anchor currency?
31
28
  # No problem, convert the amount given into the anchor currency first.
32
- unless [to, from].include?(anchor_currency)
33
- amount = convert(adapter_name, amount: amount, from: from, to: anchor_currency)
34
- from = anchor_currency
29
+ if [to, from].include?(anchor_currency)
30
+ a.rate_for(from, to)
31
+ else
32
+ rate_from = get(adapter_name, anchor_currency, from)
33
+ rate_to = get(adapter_name, anchor_currency, to )
34
+ rate_to.to_f/rate_from.to_f
35
35
  end
36
+ end
36
37
 
37
- rate = get(a, (from == anchor_currency) ? to : from)
38
- result = from == anchor_currency ? amount.to_f*rate : amount.to_f/rate
38
+ def self.convert(adapter_name, amount:, from:, to:, anchor_currency: nil)
39
+ result = amount*get(adapter_name, from, to, anchor_currency: nil)
39
40
  to == 'BTC' ? result : result.round(2)
40
41
  end
41
42
 
data/lib/fiat_adapter.rb CHANGED
@@ -2,27 +2,13 @@ module CurrencyRate
2
2
 
3
3
  class FiatAdapter < Adapter
4
4
 
5
- CROSS_RATE_CURRENCY = 'USD'
6
- SUPPORTED_CURRENCIES = %w(
7
- AUD BGN BRL CAD CHF CNY CZK DKK GBP HKD HRK HUF IDR ILS INR JPY
8
- KRW MXN MYR NOK NZD PHP PLN RON RUB SEK SGD THB TRY USD ZAR EUR
9
- )
10
- DECIMAL_PRECISION = 2
11
-
12
- # Set half-even rounding mode
13
- # http://apidock.com/ruby/BigDecimal/mode/class
14
5
  BigDecimal.mode BigDecimal::ROUND_MODE, :banker
6
+ DECIMAL_PRECISION = 2
15
7
 
16
- def rate_for(currency_code)
17
- return 1 if currency_code == CROSS_RATE_CURRENCY
18
- raise CurrencyNotSupported unless SUPPORTED_CURRENCIES.include?(currency_code)
8
+ def rate_for(from,to)
19
9
  super
20
- # call 'super' in descendant classes and return real rate
21
- end
22
-
23
- def convert_from_currency(amount_in_currency, currency: CROSS_RATE_CURRENCY)
24
- return amount_in_currency if currency == CROSS_RATE_CURRENCY
25
- amount_in_currency.to_f / rate_for(currency)
10
+ rate = currency_pair_rate(to,from)
11
+ invert_rate(from,to,rate)
26
12
  end
27
13
 
28
14
  end
@@ -1,11 +1,26 @@
1
1
  module CurrencyRate
2
2
  class FixerAdapter < FiatAdapter
3
- FETCH_URL = "http://api.fixer.io/latest?base=#{CROSS_RATE_CURRENCY}"
4
3
 
5
- def rate_for(currency_code)
6
- super
7
- rate = get_rate_value_from_hash(@rates, 'rates', currency_code)
8
- rate_to_f(rate)
4
+ FETCH_URL = {
5
+ "eur" => "http://api.fixer.io/latest?base=eur",
6
+ "usd" => "http://api.fixer.io/latest?base=usd"
7
+ }
8
+
9
+ def currency_pair_rate(currency1, currency2)
10
+ rates = @rates[currency1.downcase] || @rates[currency2.downcase]
11
+ raise CurrencyNotSupported unless rates
12
+ rate = rates["rates"][currency1] || rates["rates"][currency2]
13
+ raise CurrencyNotSupported unless rate
14
+ rate.round(DECIMAL_PRECISION)
15
+ end
16
+
17
+ def invert_rate(from,to,rate)
18
+ if (to == 'USD' || to == 'EUR')
19
+ (1/rate.to_f).round(DECIMAL_PRECISION)
20
+ else
21
+ rate
22
+ end
9
23
  end
24
+
10
25
  end
11
26
  end
@@ -1,22 +1,44 @@
1
1
  require 'uri'
2
2
 
3
3
  module CurrencyRate
4
+
4
5
  class YahooAdapter < FiatAdapter
6
+
7
+ SUPPORTED_CURRENCIES = %w(
8
+ AUD BGN BRL CAD CHF CNY CZK DKK GBP HKD HRK HUF IDR ILS INR JPY
9
+ KRW MXN MYR NOK NZD PHP PLN RON RUB SEK SGD THB TRY USD ZAR EUR
10
+ )
11
+
12
+ CROSS_RATE_CURRENCY = 'USD'
13
+
5
14
  # Example URL (follow to un-shorten): http://goo.gl/62Aedt
6
15
  FETCH_URL = "http://query.yahooapis.com/v1/public/yql?" + URI.encode_www_form(
7
16
  format: 'json',
8
17
  env: "store://datatables.org/alltableswithkeys",
9
18
  q: "SELECT * FROM yahoo.finance.xchange WHERE pair IN" +
10
19
  # The following line is building array string in SQL: '("USDJPY", "USDRUB", ...)'
11
- "(#{SUPPORTED_CURRENCIES.map{|x| '"' + CROSS_RATE_CURRENCY.upcase + x.upcase + '"'}.join(',')})"
20
+ "(#{SUPPORTED_CURRENCIES.map{|x| '"' + CROSS_RATE_CURRENCY + x.upcase + '"'}.join(',')})"
12
21
  )
13
22
 
14
- def rate_for(currency_code)
15
- super
23
+ def invert_rate(from,to,rate)
24
+ if to == 'USD'
25
+ (1/rate.to_f).round(DECIMAL_PRECISION)
26
+ else
27
+ rate
28
+ end
29
+ end
30
+
31
+ def currency_pair_rate(currency1, currency2)
16
32
  rates = @rates.deep_get('query', 'results', 'rate')
17
- rate = rates && rates.find{|x| x['id'] == CROSS_RATE_CURRENCY + currency_code.upcase}
18
- rate = rate && rate['Rate']
19
- rate_to_f(rate)
33
+ rate = if CROSS_RATE_CURRENCY == currency1.upcase
34
+ rates.find { |x| x['id'] == "#{CROSS_RATE_CURRENCY}#{currency2.upcase}" }
35
+ else
36
+ rates.find { |x| x['id'] == "#{CROSS_RATE_CURRENCY}#{currency1.upcase}" }
37
+ end
38
+ raise CurrencyNotSupported unless rate
39
+ rate = rate['Rate'].to_f
40
+ rate.round(DECIMAL_PRECISION)
20
41
  end
42
+
21
43
  end
22
44
  end
@@ -3,20 +3,24 @@ require 'spec_helper'
3
3
  describe CurrencyRate do
4
4
 
5
5
  before :each do
6
- allow(CurrencyRate::BitstampAdapter.instance).to receive('rate_for').with('USD').and_return(550)
7
- allow(CurrencyRate::BitstampAdapter.instance).to receive('rate_for').with('RUB').and_return(33100)
8
- allow(CurrencyRate::YahooAdapter.instance).to receive('rate_for').with('RUB').and_return(65)
6
+ allow(CurrencyRate::BitstampAdapter.instance).to receive('rate_for').with('BTC', 'USD').and_return(550)
7
+ allow(CurrencyRate::BitstampAdapter.instance).to receive('rate_for').with('USD', 'BTC').and_return(1.to_f/550.to_f)
8
+ allow(CurrencyRate::BitstampAdapter.instance).to receive('rate_for').with('BTC', 'RUB').and_return(33100)
9
+ allow(CurrencyRate::YahooAdapter.instance).to receive('rate_for').with('USD', 'RUB').and_return(60)
10
+ allow(CurrencyRate::YahooAdapter.instance).to receive('rate_for').with('RUB', 'USD').and_return(1.to_f/60.to_f)
9
11
  end
10
12
 
11
13
  it "fetches currency rate from a specified exchange" do
12
- expect(CurrencyRate.get('Bitstamp', 'USD')).to eq(550)
14
+ expect(CurrencyRate.get('Bitstamp', 'BTC', 'USD')).to eq(550)
15
+ expect(CurrencyRate.get('Bitstamp', 'USD', 'BTC')).to eq(1.to_f/550.to_f)
16
+ expect(CurrencyRate.get('Bitstamp', 'USD', 'RUB').round(2)).to eq(60.18)
13
17
  end
14
18
 
15
19
  it "converts one currency into another" do
16
20
  expect(CurrencyRate.convert('Bitstamp', amount: 5, from: 'BTC', to: 'USD')).to eq(2750)
17
21
  expect(CurrencyRate.convert('Bitstamp', amount: 2750, from: 'USD', to: 'BTC')).to eq(5)
18
- expect(CurrencyRate.convert('Yahoo', amount: 300, from: 'USD', to: 'RUB')).to eq(19500)
19
- expect(CurrencyRate.convert('Yahoo', amount: 19500, from: 'RUB', to: 'USD')).to eq(300)
22
+ expect(CurrencyRate.convert('Yahoo', amount: 300, from: 'USD', to: 'RUB')).to eq(18000)
23
+ expect(CurrencyRate.convert('Yahoo', amount: 19500, from: 'RUB', to: 'USD')).to eq(325)
20
24
  end
21
25
 
22
26
  it "converts non-anchor currencies" do
@@ -0,0 +1,423 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://www.bitstamp.net/api/v2/ticker/btcusd/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Etag:
22
+ - '"6294c-c6-5358c763fe1e1"'
23
+ Last-Modified:
24
+ - Sat, 18 Jun 2016 12:17:59 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Content-Length:
28
+ - '142'
29
+ Connection:
30
+ - keep-alive
31
+ Cache-Control:
32
+ - max-age=10, public
33
+ Expires:
34
+ - Sat, 18 Jun 2016 12:18:22 GMT
35
+ Date:
36
+ - Sat, 18 Jun 2016 12:18:12 GMT
37
+ Set-Cookie:
38
+ - incap_ses_220_99025=wQfzfpFG+Eq6yG7FOqINAwQ8ZVcAAAAA2IIq95EXi1XBrD3laKUZ+A==;
39
+ path=/; Domain=.bitstamp.net
40
+ - visid_incap_99025=wweiKoT2RWWFdobKK3cf4wQ8ZVcAAAAAQUIPAAAAAADnH3BD8BCXGU0F8hWrQTXg;
41
+ expires=Sun, 18 Jun 2017 07:26:36 GMT; path=/; Domain=.bitstamp.net
42
+ X-Iinfo:
43
+ - 9-56714738-0 0CNN RT(1466252292066 592) q(0 -1 -1 -1) r(0 -1)
44
+ X-Cdn:
45
+ - Incapsula
46
+ body:
47
+ encoding: ASCII-8BIT
48
+ string: '{"high": "757.96000", "last": "751.97000", "timestamp": "1466252278",
49
+ "bid": "751.47000", "vwap": "745.36091", "volume": "6901.58275229", "low":
50
+ "723.02000", "ask": "751.97000", "open": "745.00000"}'
51
+ http_version:
52
+ recorded_at: Sat, 18 Jun 2016 12:18:13 GMT
53
+ - request:
54
+ method: get
55
+ uri: https://www.bitstamp.net/api/v2/ticker/btceur/
56
+ body:
57
+ encoding: US-ASCII
58
+ string: ''
59
+ headers:
60
+ Accept-Encoding:
61
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
62
+ Accept:
63
+ - "*/*"
64
+ User-Agent:
65
+ - Ruby
66
+ response:
67
+ status:
68
+ code: 200
69
+ message: OK
70
+ headers:
71
+ Etag:
72
+ - '"62428-c6-5358c76731722"'
73
+ Last-Modified:
74
+ - Sat, 18 Jun 2016 12:18:02 GMT
75
+ Content-Type:
76
+ - application/json
77
+ Content-Length:
78
+ - '144'
79
+ Connection:
80
+ - keep-alive
81
+ Cache-Control:
82
+ - max-age=10, public
83
+ Expires:
84
+ - Sat, 18 Jun 2016 12:18:24 GMT
85
+ Date:
86
+ - Sat, 18 Jun 2016 12:18:14 GMT
87
+ Set-Cookie:
88
+ - incap_ses_220_99025=X4gkKY1GaAzZzG7FOqINAwY8ZVcAAAAA7sir6DswX0eW+RHQAZ3P2w==;
89
+ path=/; Domain=.bitstamp.net
90
+ - visid_incap_99025=1xi3KqDBRaC9elEeju7YyQY8ZVcAAAAAQUIPAAAAAAD5Hd7wQZNNpNjBCz4yMhvE;
91
+ expires=Sun, 18 Jun 2017 07:26:36 GMT; path=/; Domain=.bitstamp.net
92
+ X-Iinfo:
93
+ - 9-56715209-0 0CNN RT(1466252293557 573) q(0 -1 -1 -1) r(0 -1)
94
+ X-Cdn:
95
+ - Incapsula
96
+ body:
97
+ encoding: ASCII-8BIT
98
+ string: '{"high": "679.08000", "last": "674.50000", "timestamp": "1466252282",
99
+ "bid": "670.67000", "vwap": "668.63961", "volume": "1356.06136004", "low":
100
+ "659.34000", "ask": "674.50000", "open": "672.15000"}'
101
+ http_version:
102
+ recorded_at: Sat, 18 Jun 2016 12:18:15 GMT
103
+ - request:
104
+ method: get
105
+ uri: https://www.bitstamp.net/api/v2/ticker/eurusd/
106
+ body:
107
+ encoding: US-ASCII
108
+ string: ''
109
+ headers:
110
+ Accept-Encoding:
111
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
112
+ Accept:
113
+ - "*/*"
114
+ User-Agent:
115
+ - Ruby
116
+ response:
117
+ status:
118
+ code: 200
119
+ message: OK
120
+ headers:
121
+ Etag:
122
+ - '"62a85-b6-5358c76799efe"'
123
+ Last-Modified:
124
+ - Sat, 18 Jun 2016 12:18:02 GMT
125
+ Content-Type:
126
+ - application/json
127
+ Content-Length:
128
+ - '135'
129
+ Connection:
130
+ - keep-alive
131
+ Cache-Control:
132
+ - max-age=10, public
133
+ Expires:
134
+ - Sat, 18 Jun 2016 12:18:25 GMT
135
+ Date:
136
+ - Sat, 18 Jun 2016 12:18:15 GMT
137
+ Set-Cookie:
138
+ - incap_ses_220_99025=wERdE34q4y7x0G7FOqINAwc8ZVcAAAAAPxSkhEAtIJ28pp8s9oRuiQ==;
139
+ path=/; Domain=.bitstamp.net
140
+ - visid_incap_99025=3suN8VjZRqKmkj5hkjOFVwc8ZVcAAAAAQUIPAAAAAAD6yyMULIf23R9y57+RIwUr;
141
+ expires=Sun, 18 Jun 2017 07:26:36 GMT; path=/; Domain=.bitstamp.net
142
+ X-Iinfo:
143
+ - 9-56715632-0 0CNN RT(1466252295021 664) q(0 -1 -1 -1) r(0 -1)
144
+ X-Cdn:
145
+ - Incapsula
146
+ body:
147
+ encoding: ASCII-8BIT
148
+ string: '{"high": "1.12350", "last": "1.11002", "timestamp": "1466252282", "bid":
149
+ "1.11003", "vwap": "1.11349", "volume": "55451.55469", "low": "1.09500", "ask":
150
+ "1.12496", "open": "1.11002"}'
151
+ http_version:
152
+ recorded_at: Sat, 18 Jun 2016 12:18:16 GMT
153
+ - request:
154
+ method: get
155
+ uri: https://bitpay.com/api/rates
156
+ body:
157
+ encoding: US-ASCII
158
+ string: ''
159
+ headers:
160
+ Accept-Encoding:
161
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
162
+ Accept:
163
+ - "*/*"
164
+ User-Agent:
165
+ - Ruby
166
+ response:
167
+ status:
168
+ code: 200
169
+ message: OK
170
+ headers:
171
+ Date:
172
+ - Sat, 18 Jun 2016 13:51:33 GMT
173
+ Content-Type:
174
+ - application/json
175
+ Transfer-Encoding:
176
+ - chunked
177
+ Connection:
178
+ - keep-alive
179
+ Set-Cookie:
180
+ - __cfduid=dfebcb13e4bfa0f072ba22bf6c1c908ec1466257893; expires=Sun, 18-Jun-17
181
+ 13:51:33 GMT; path=/; domain=.bitpay.com; HttpOnly
182
+ Strict-Transport-Security:
183
+ - max-age=31536000
184
+ X-Download-Options:
185
+ - noopen
186
+ X-Content-Type-Options:
187
+ - nosniff
188
+ Access-Control-Allow-Origin:
189
+ - "*"
190
+ Cache-Control:
191
+ - public, max-age=1800
192
+ Expires:
193
+ - Sat, 18 Jun 2016 14:21:33 GMT
194
+ Cf-Cache-Status:
195
+ - HIT
196
+ Vary:
197
+ - Accept-Encoding
198
+ Server:
199
+ - cloudflare-nginx
200
+ Cf-Ray:
201
+ - 2b4f37794bd91141-SIN
202
+ body:
203
+ encoding: ASCII-8BIT
204
+ string: !binary |-
205
+ W3siY29kZSI6IkJUQyIsIm5hbWUiOiJCaXRjb2luIiwicmF0ZSI6MX0seyJj
206
+ b2RlIjoiVVNEIiwibmFtZSI6IlVTIERvbGxhciIsInJhdGUiOjc0OC4wMn0s
207
+ eyJjb2RlIjoiRVVSIiwibmFtZSI6IkV1cm96b25lIEV1cm8iLCJyYXRlIjo2
208
+ NjMuMzU5MDk2fSx7ImNvZGUiOiJHQlAiLCJuYW1lIjoiUG91bmQgU3Rlcmxp
209
+ bmciLCJyYXRlIjo1MjAuOTQ1MDY1fSx7ImNvZGUiOiJKUFkiLCJuYW1lIjoi
210
+ SmFwYW5lc2UgWWVuIiwicmF0ZSI6Nzc5NDguMDIyNTE2fSx7ImNvZGUiOiJD
211
+ QUQiLCJuYW1lIjoiQ2FuYWRpYW4gRG9sbGFyIiwicmF0ZSI6OTY0Ljc5ODQ0
212
+ fSx7ImNvZGUiOiJBVUQiLCJuYW1lIjoiQXVzdHJhbGlhbiBEb2xsYXIiLCJy
213
+ YXRlIjoxMDExLjU4NjM0M30seyJjb2RlIjoiQ05ZIiwibmFtZSI6IkNoaW5l
214
+ c2UgWXVhbiIsInJhdGUiOjQ5MjUuNTExMjMxfSx7ImNvZGUiOiJDSEYiLCJu
215
+ YW1lIjoiU3dpc3MgRnJhbmMiLCJyYXRlIjo3MTguODM2NzQ4fSx7ImNvZGUi
216
+ OiJTRUsiLCJuYW1lIjoiU3dlZGlzaCBLcm9uYSIsInJhdGUiOjYyMzEuNTYy
217
+ Mzc5fSx7ImNvZGUiOiJOWkQiLCJuYW1lIjoiTmV3IFplYWxhbmQgRG9sbGFy
218
+ IiwicmF0ZSI6MTA2MC40OTU2MzF9LHsiY29kZSI6IktSVyIsIm5hbWUiOiJT
219
+ b3V0aCBLb3JlYW4gV29uIiwicmF0ZSI6ODc2NTI0Ljg2MDE3MX0seyJjb2Rl
220
+ IjoiQUVEIiwibmFtZSI6IlVBRSBEaXJoYW0iLCJyYXRlIjoyNzQ3LjUzNzMw
221
+ Mn0seyJjb2RlIjoiQUZOIiwibmFtZSI6IkFmZ2hhbiBBZmdoYW5pIiwicmF0
222
+ ZSI6NTE5NjQuOTUwMTQ4fSx7ImNvZGUiOiJBTEwiLCJuYW1lIjoiQWxiYW5p
223
+ YW4gTGVrIiwicmF0ZSI6OTE2OTMuNjM4MDM2fSx7ImNvZGUiOiJBTUQiLCJu
224
+ YW1lIjoiQXJtZW5pYW4gRHJhbSIsInJhdGUiOjM1NzMxNC4xOTA2MDh9LHsi
225
+ Y29kZSI6IkFORyIsIm5hbWUiOiJOZXRoZXJsYW5kcyBBbnRpbGxlYW4gR3Vp
226
+ bGRlciIsInJhdGUiOjEzMzguMDc2ODc3fSx7ImNvZGUiOiJBT0EiLCJuYW1l
227
+ IjoiQW5nb2xhbiBLd2FuemEiLCJyYXRlIjoxMjQwMTYuMzUzNDQ1fSx7ImNv
228
+ ZGUiOiJBUlMiLCJuYW1lIjoiQXJnZW50aW5lIFBlc28iLCJyYXRlIjoxMDcx
229
+ NC4xMTQ4NjZ9LHsiY29kZSI6IkFXRyIsIm5hbWUiOiJBcnViYW4gRmxvcmlu
230
+ IiwicmF0ZSI6MTM0MS40NDg5NTF9LHsiY29kZSI6IkFaTiIsIm5hbWUiOiJB
231
+ emVyYmFpamFuaSBNYW5hdCIsInJhdGUiOjExMzkuMTQwOTU4fSx7ImNvZGUi
232
+ OiJCQU0iLCJuYW1lIjoiQm9zbmlhLUhlcnplZ292aW5hIENvbnZlcnRpYmxl
233
+ IE1hcmsiLCJyYXRlIjoxMjk3LjgzNzg4OX0seyJjb2RlIjoiQkJEIiwibmFt
234
+ ZSI6IkJhcmJhZGlhbiBEb2xsYXIiLCJyYXRlIjoxNDk2LjA0fSx7ImNvZGUi
235
+ OiJCRFQiLCJuYW1lIjoiQmFuZ2xhZGVzaGkgVGFrYSIsInJhdGUiOjU4Njk5
236
+ LjE3ODIyN30seyJjb2RlIjoiQkdOIiwibmFtZSI6IkJ1bGdhcmlhbiBMZXYi
237
+ LCJyYXRlIjoxMjk3Ljc3MjgxMX0seyJjb2RlIjoiQkhEIiwibmFtZSI6IkJh
238
+ aHJhaW5pIERpbmFyIiwicmF0ZSI6MjgxLjk4MDM1MX0seyJjb2RlIjoiQklG
239
+ IiwibmFtZSI6IkJ1cnVuZGlhbiBGcmFuYyIsInJhdGUiOjExNzU4MDMuMDQz
240
+ MTQ3fSx7ImNvZGUiOiJCTUQiLCJuYW1lIjoiQmVybXVkYW4gRG9sbGFyIiwi
241
+ cmF0ZSI6NzQ4LjAyfSx7ImNvZGUiOiJCTkQiLCJuYW1lIjoiQnJ1bmVpIERv
242
+ bGxhciIsInJhdGUiOjEwMDguOTI3ODh9LHsiY29kZSI6IkJPQiIsIm5hbWUi
243
+ OiJCb2xpdmlhbiBCb2xpdmlhbm8iLCJyYXRlIjo1MTUyLjUxMDYxNn0seyJj
244
+ b2RlIjoiQlJMIiwibmFtZSI6IkJyYXppbGlhbiBSZWFsIiwicmF0ZSI6MjU2
245
+ MS4xNjgxMTl9LHsiY29kZSI6IkJTRCIsIm5hbWUiOiJCYWhhbWlhbiBEb2xs
246
+ YXIiLCJyYXRlIjo3NDguMDJ9LHsiY29kZSI6IkJUTiIsIm5hbWUiOiJCaHV0
247
+ YW5lc2UgTmd1bHRydW0iLCJyYXRlIjo1MDIwMS4xOTIyOTR9LHsiY29kZSI6
248
+ IkJXUCIsIm5hbWUiOiJCb3Rzd2FuYW4gUHVsYSIsInJhdGUiOjgyMjEuNjI4
249
+ NDQ4fSx7ImNvZGUiOiJCWVIiLCJuYW1lIjoiQmVsYXJ1c2lhbiBSdWJsZSIs
250
+ InJhdGUiOjE0OTI2NDk1Ljk5MzV9LHsiY29kZSI6IkJaRCIsIm5hbWUiOiJC
251
+ ZWxpemUgRG9sbGFyIiwicmF0ZSI6MTQ5Ny4wNDA4NTF9LHsiY29kZSI6IkNE
252
+ RiIsIm5hbWUiOiJDb25nb2xlc2UgRnJhbmMiLCJyYXRlIjo3MDUzOTUuMjAy
253
+ MzN9LHsiY29kZSI6IkNMRiIsIm5hbWUiOiJDaGlsZWFuIFVuaXQgb2YgQWNj
254
+ b3VudCAoVUYpIiwicmF0ZSI6MTguNDAyNzg4fSx7ImNvZGUiOiJDTFAiLCJu
255
+ YW1lIjoiQ2hpbGVhbiBQZXNvIiwicmF0ZSI6NTEyNTg1LjE5NjExMn0seyJj
256
+ b2RlIjoiQ09QIiwibmFtZSI6IkNvbG9tYmlhbiBQZXNvIiwicmF0ZSI6MjI0
257
+ NzE4MS43Mjk4MTh9LHsiY29kZSI6IkNSQyIsIm5hbWUiOiJDb3N0YSBSaWNh
258
+ biBDb2zDs24iLCJyYXRlIjo0MDYxMTUuODQzNDY2fSx7ImNvZGUiOiJDVVAi
259
+ LCJuYW1lIjoiQ3ViYW4gUGVzbyIsInJhdGUiOjE4NDk3LjMyNTA1Mn0seyJj
260
+ b2RlIjoiQ1ZFIiwibmFtZSI6IkNhcGUgVmVyZGVhbiBFc2N1ZG8iLCJyYXRl
261
+ Ijo3Mzc2NS41NTYyMDR9LHsiY29kZSI6IkNaSyIsIm5hbWUiOiJDemVjaCBL
262
+ b3J1bmEiLCJyYXRlIjoxNzk2MC4wNjQ5MjN9LHsiY29kZSI6IkRKRiIsIm5h
263
+ bWUiOiJEamlib3V0aWFuIEZyYW5jIiwicmF0ZSI6MTMzMDA2LjY1MDk4NH0s
264
+ eyJjb2RlIjoiREtLIiwibmFtZSI6IkRhbmlzaCBLcm9uZSIsInJhdGUiOjQ5
265
+ MzQuMTkyMDAzfSx7ImNvZGUiOiJET1AiLCJuYW1lIjoiRG9taW5pY2FuIFBl
266
+ c28iLCJyYXRlIjozNDM1Ny43MTgwMzF9LHsiY29kZSI6IkRaRCIsIm5hbWUi
267
+ OiJBbGdlcmlhbiBEaW5hciIsInJhdGUiOjgyMjk4LjI4MzE3OH0seyJjb2Rl
268
+ IjoiRUVLIiwibmFtZSI6IkVzdG9uaWFuIEtyb29uIiwicmF0ZSI6MTAzODcu
269
+ MDA1NzJ9LHsiY29kZSI6IkVHUCIsIm5hbWUiOiJFZ3lwdGlhbiBQb3VuZCIs
270
+ InJhdGUiOjY2NDEuMzU5OX0seyJjb2RlIjoiRVRCIiwibmFtZSI6IkV0aGlv
271
+ cGlhbiBCaXJyIiwicmF0ZSI6MTYzMTcuODAxOTczfSx7ImNvZGUiOiJGSkQi
272
+ LCJuYW1lIjoiRmlqaWFuIERvbGxhciIsInJhdGUiOjE1NTYuMDE4NDg4fSx7
273
+ ImNvZGUiOiJGS1AiLCJuYW1lIjoiRmFsa2xhbmQgSXNsYW5kcyBQb3VuZCIs
274
+ InJhdGUiOjUyMC45NDUwNjV9LHsiY29kZSI6IkdFTCIsIm5hbWUiOiJHZW9y
275
+ Z2lhbiBMYXJpIiwicmF0ZSI6MTYzMC4xNDUwMjZ9LHsiY29kZSI6IkdIUyIs
276
+ Im5hbWUiOiJHaGFuYWlhbiBDZWRpIiwicmF0ZSI6MjkzMy44ODcwMzZ9LHsi
277
+ Y29kZSI6IkdJUCIsIm5hbWUiOiJHaWJyYWx0YXIgUG91bmQiLCJyYXRlIjo1
278
+ MjAuOTQ1MDY1fSx7ImNvZGUiOiJHTUQiLCJuYW1lIjoiR2FtYmlhbiBEYWxh
279
+ c2kiLCJyYXRlIjozMTgyOS44OTY2NDR9LHsiY29kZSI6IkdORiIsIm5hbWUi
280
+ OiJHdWluZWFuIEZyYW5jIiwicmF0ZSI6NTQ4Njg2MS40MTY5MDZ9LHsiY29k
281
+ ZSI6IkdUUSIsIm5hbWUiOiJHdWF0ZW1hbGFuIFF1ZXR6YWwiLCJyYXRlIjo1
282
+ NzE0LjU3NTA4OH0seyJjb2RlIjoiR1lEIiwibmFtZSI6Ikd1eWFuYWVzZSBE
283
+ b2xsYXIiLCJyYXRlIjoxNTM2NDIuMDQ3NTg2fSx7ImNvZGUiOiJIS0QiLCJu
284
+ YW1lIjoiSG9uZyBLb25nIERvbGxhciIsInJhdGUiOjU4MDUuMjEyNjcxfSx7
285
+ ImNvZGUiOiJITkwiLCJuYW1lIjoiSG9uZHVyYW4gTGVtcGlyYSIsInJhdGUi
286
+ OjE2OTg4LjAwNTQ1M30seyJjb2RlIjoiSFJLIiwibmFtZSI6IkNyb2F0aWFu
287
+ IEt1bmEiLCJyYXRlIjo0OTkwLjg5NDkxMX0seyJjb2RlIjoiSFRHIiwibmFt
288
+ ZSI6IkhhaXRpYW4gR291cmRlIiwicmF0ZSI6NDcwNzUuMjczNTY0fSx7ImNv
289
+ ZGUiOiJIVUYiLCJuYW1lIjoiSHVuZ2FyaWFuIEZvcmludCIsInJhdGUiOjIw
290
+ ODQ4MS41NTMzMn0seyJjb2RlIjoiSURSIiwibmFtZSI6IkluZG9uZXNpYW4g
291
+ UnVwaWFoIiwicmF0ZSI6OTk4MDM2OS41ODA3NTF9LHsiY29kZSI6IklMUyIs
292
+ Im5hbWUiOiJJc3JhZWxpIFNoZWtlbCIsInJhdGUiOjI4OTMuMjM1MTQxfSx7
293
+ ImNvZGUiOiJJTlIiLCJuYW1lIjoiSW5kaWFuIFJ1cGVlIiwicmF0ZSI6NTAx
294
+ OTIuNzU1Mzc2fSx7ImNvZGUiOiJJUUQiLCJuYW1lIjoiSXJhcWkgRGluYXIi
295
+ LCJyYXRlIjo4NzE2NDIuNTg1MjQ0fSx7ImNvZGUiOiJJUlIiLCJuYW1lIjoi
296
+ SXJhbmlhbiBSaWFsIiwicmF0ZSI6MjI2ODg5NDIuNjR9LHsiY29kZSI6IklT
297
+ SyIsIm5hbWUiOiJJY2VsYW5kaWMgS3LDs25hIiwicmF0ZSI6OTIxODguMjI4
298
+ ODZ9LHsiY29kZSI6IkpFUCIsIm5hbWUiOiJKZXJzZXkgUG91bmQiLCJyYXRl
299
+ Ijo1MjAuOTQ1MDY1fSx7ImNvZGUiOiJKTUQiLCJuYW1lIjoiSmFtYWljYW4g
300
+ RG9sbGFyIiwicmF0ZSI6OTM4NTAuNDcxNDI0fSx7ImNvZGUiOiJKT0QiLCJu
301
+ YW1lIjoiSm9yZGFuaWFuIERpbmFyIiwicmF0ZSI6NTI5LjY5OTg5MX0seyJj
302
+ b2RlIjoiS0VTIiwibmFtZSI6IktlbnlhbiBTaGlsbGluZyIsInJhdGUiOjc1
303
+ NjcxLjE5OTI0fSx7ImNvZGUiOiJLR1MiLCJuYW1lIjoiS3lyZ3lzdGFuaSBT
304
+ b20iLCJyYXRlIjo1MDcxNi4xNjY2NjN9LHsiY29kZSI6IktIUiIsIm5hbWUi
305
+ OiJDYW1ib2RpYW4gUmllbCIsInJhdGUiOjMwNTgwNDQuMTYyNDAxfSx7ImNv
306
+ ZGUiOiJLTUYiLCJuYW1lIjoiQ29tb3JpYW4gRnJhbmMiLCJyYXRlIjozMjQ2
307
+ NDAuNjY2NTM2fSx7ImNvZGUiOiJLUFciLCJuYW1lIjoiTm9ydGggS29yZWFu
308
+ IFdvbiIsInJhdGUiOjY3MzE1MC42NzgyfSx7ImNvZGUiOiJLV0QiLCJuYW1l
309
+ IjoiS3V3YWl0aSBEaW5hciIsInJhdGUiOjIyNS40OTEzNzd9LHsiY29kZSI6
310
+ IktZRCIsIm5hbWUiOiJDYXltYW4gSXNsYW5kcyBEb2xsYXIiLCJyYXRlIjo2
311
+ MTYuMjYyMjYxfSx7ImNvZGUiOiJLWlQiLCJuYW1lIjoiS2F6YWtoc3Rhbmkg
312
+ VGVuZ2UiLCJyYXRlIjoyNTMzMzAuOTU1NzM4fSx7ImNvZGUiOiJMQUsiLCJu
313
+ YW1lIjoiTGFvdGlhbiBLaXAiLCJyYXRlIjo2MDU2NDAzLjg0NDkwNn0seyJj
314
+ b2RlIjoiTEJQIiwibmFtZSI6IkxlYmFuZXNlIFBvdW5kIiwicmF0ZSI6MTEy
315
+ OTM4NS41MTc3ODJ9LHsiY29kZSI6IkxLUiIsIm5hbWUiOiJTcmkgTGFua2Fu
316
+ IFJ1cGVlIiwicmF0ZSI6MTA4NDQ1LjM5NjMzMn0seyJjb2RlIjoiTFJEIiwi
317
+ bmFtZSI6IkxpYmVyaWFuIERvbGxhciIsInJhdGUiOjY3Njg5LjA0MDQxOX0s
318
+ eyJjb2RlIjoiTFNMIiwibmFtZSI6Ikxlc290aG8gTG90aSIsInJhdGUiOjEx
319
+ MzU0LjUxNzIyOX0seyJjb2RlIjoiTFRMIiwibmFtZSI6IkxpdGh1YW5pYW4g
320
+ TGl0YXMiLCJyYXRlIjoyMjY3Ljc5OTkxMX0seyJjb2RlIjoiTFZMIiwibmFt
321
+ ZSI6IkxhdHZpYW4gTGF0cyIsInJhdGUiOjQ2NS43NjUxMjV9LHsiY29kZSI6
322
+ IkxZRCIsIm5hbWUiOiJMaWJ5YW4gRGluYXIiLCJyYXRlIjoxMDE5LjQzMDgy
323
+ OX0seyJjb2RlIjoiTUFEIiwibmFtZSI6Ik1vcm9jY2FuIERpcmhhbSIsInJh
324
+ dGUiOjcyNTQuMTk4NDczfSx7ImNvZGUiOiJNREwiLCJuYW1lIjoiTW9sZG92
325
+ YW4gTGV1IiwicmF0ZSI6MTQ3NzcuOTI4MDAxfSx7ImNvZGUiOiJNR0EiLCJu
326
+ YW1lIjoiTWFsYWdhc3kgQXJpYXJ5IiwicmF0ZSI6MjQ0NDU5Ny45MTYwMzN9
327
+ LHsiY29kZSI6Ik1LRCIsIm5hbWUiOiJNYWNlZG9uaWFuIERlbmFyIiwicmF0
328
+ ZSI6NDA4NDQuMzMwNTQ1fSx7ImNvZGUiOiJNTUsiLCJuYW1lIjoiTXlhbm1h
329
+ IEt5YXQiLCJyYXRlIjo4ODU5NDMuNjQwNzcxfSx7ImNvZGUiOiJNTlQiLCJu
330
+ YW1lIjoiTW9uZ29saWFuIFR1Z3JpayIsInJhdGUiOjE0NjI1NjYuMTA1fSx7
331
+ ImNvZGUiOiJNT1AiLCJuYW1lIjoiTWFjYW5lc2UgUGF0YWNhIiwicmF0ZSI6
332
+ NTk3Ni43NTE2MX0seyJjb2RlIjoiTVJPIiwibmFtZSI6Ik1hdXJpdGFuaWFu
333
+ IE91Z3VpeWEiLCJyYXRlIjoyNjU5MzEuNTc5Mjg4fSx7ImNvZGUiOiJNVVIi
334
+ LCJuYW1lIjoiTWF1cml0aWFuIFJ1cGVlIiwicmF0ZSI6MjY1MzkuNTcyMzE5
335
+ fSx7ImNvZGUiOiJNVlIiLCJuYW1lIjoiTWFsZGl2aWFuIFJ1Zml5YWEiLCJy
336
+ YXRlIjoxMTQ2Ny4xNDY2fSx7ImNvZGUiOiJNV0siLCJuYW1lIjoiTWFsYXdp
337
+ YW4gS3dhY2hhIiwicmF0ZSI6NTI3NzMzLjUzMDE1M30seyJjb2RlIjoiTVhO
338
+ IiwibmFtZSI6Ik1leGljYW4gUGVzbyIsInJhdGUiOjE0MDk3LjEzMjU1OX0s
339
+ eyJjb2RlIjoiTVlSIiwibmFtZSI6Ik1hbGF5c2lhbiBSaW5nZ2l0IiwicmF0
340
+ ZSI6MzA2MC40NTU3Nn0seyJjb2RlIjoiTVpOIiwibmFtZSI6Ik1vemFtYmlj
341
+ YW4gTWV0aWNhbCIsInJhdGUiOjQ1NjQ5Ljc5MTI5OH0seyJjb2RlIjoiTkFE
342
+ IiwibmFtZSI6Ik5hbWliaWFuIERvbGxhciIsInJhdGUiOjExMzUxLjY3NDc1
343
+ M30seyJjb2RlIjoiTkdOIiwibmFtZSI6Ik5pZ2VyaWFuIE5haXJhIiwicmF0
344
+ ZSI6MTQ4ODUyLjMxNDcwMn0seyJjb2RlIjoiTklPIiwibmFtZSI6Ik5pY2Fy
345
+ YWd1YW4gQ8OzcmRvYmEiLCJyYXRlIjoyMTM2Ni4yNzEyMzV9LHsiY29kZSI6
346
+ Ik5PSyIsIm5hbWUiOiJOb3J3ZWdpYW4gS3JvbmUiLCJyYXRlIjo2MjU0LjY0
347
+ NzAyNH0seyJjb2RlIjoiTlBSIiwibmFtZSI6Ik5lcGFsZXNlIFJ1cGVlIiwi
348
+ cmF0ZSI6ODAyODAuNzk3Njg4fSx7ImNvZGUiOiJPTVIiLCJuYW1lIjoiT21h
349
+ bmkgUmlhbCIsInJhdGUiOjI4OC4wNTUwMjJ9LHsiY29kZSI6IlBBQiIsIm5h
350
+ bWUiOiJQYW5hbWFuaWFuIEJhbGJvYSIsInJhdGUiOjc0OC4wMn0seyJjb2Rl
351
+ IjoiUEVOIiwibmFtZSI6IlBlcnV2aWFuIE51ZXZvIFNvbCIsInJhdGUiOjI0
352
+ NzkuMTgzNjMxfSx7ImNvZGUiOiJQR0siLCJuYW1lIjoiUGFwdWEgTmV3IEd1
353
+ aW5lYW4gS2luYSIsInJhdGUiOjIzNjMuMTI2MDg0fSx7ImNvZGUiOiJQSFAi
354
+ LCJuYW1lIjoiUGhpbGlwcGluZSBQZXNvIiwicmF0ZSI6MzQ3MzUuNjYyNjE2
355
+ fSx7ImNvZGUiOiJQS1IiLCJuYW1lIjoiUGFraXN0YW5pIFJ1cGVlIiwicmF0
356
+ ZSI6NzgzMDAuODY0Mjk4fSx7ImNvZGUiOiJQTE4iLCJuYW1lIjoiUG9saXNo
357
+ IFpsb3R5IiwicmF0ZSI6MjkzMC42NDM2MjF9LHsiY29kZSI6IlBZRyIsIm5h
358
+ bWUiOiJQYXJhZ3VheWFuIEd1YXJhbmkiLCJyYXRlIjo0MjMyODQwLjcyMTQ0
359
+ OX0seyJjb2RlIjoiUUFSIiwibmFtZSI6IlFhdGFyaSBSaWFsIiwicmF0ZSI6
360
+ MjcyMi45OTg1MDZ9LHsiY29kZSI6IlJPTiIsIm5hbWUiOiJSb21hbmlhbiBM
361
+ ZXUiLCJyYXRlIjozMDEyLjQzOTYwOH0seyJjb2RlIjoiUlNEIiwibmFtZSI6
362
+ IlNlcmJpYW4gRGluYXIiLCJyYXRlIjo4MTgwMC4xNDU5OTF9LHsiY29kZSI6
363
+ IlJVQiIsIm5hbWUiOiJSdXNzaWFuIFJ1YmxlIiwicmF0ZSI6NDg0OTcuODk5
364
+ ODg5fSx7ImNvZGUiOiJSV0YiLCJuYW1lIjoiUndhbmRhbiBGcmFuYyIsInJh
365
+ dGUiOjU2NDc4OC43NjAxNTJ9LHsiY29kZSI6IlNBUiIsIm5hbWUiOiJTYXVk
366
+ aSBSaXlhbCIsInJhdGUiOjI4MDUuMzY4MjI0fSx7ImNvZGUiOiJTQkQiLCJu
367
+ YW1lIjoiU29sb21vbiBJc2xhbmRzIERvbGxhciIsInJhdGUiOjU4MzQuNjUz
368
+ MjQzfSx7ImNvZGUiOiJTQ1IiLCJuYW1lIjoiU2V5Y2hlbGxvaXMgUnVwZWUi
369
+ LCJyYXRlIjo5ODI0Ljg4MzY1fSx7ImNvZGUiOiJTREciLCJuYW1lIjoiU3Vk
370
+ YW5lc2UgUG91bmQiLCJyYXRlIjo0NTQ5LjUwMTc3M30seyJjb2RlIjoiU0dE
371
+ IiwibmFtZSI6IlNpbmdhcG9yZSBEb2xsYXIiLCJyYXRlIjoxMDA5LjMyNTgy
372
+ N30seyJjb2RlIjoiU0hQIiwibmFtZSI6IlNhaW50IEhlbGVuYSBQb3VuZCIs
373
+ InJhdGUiOjUyMC45NDUwNjV9LHsiY29kZSI6IlNMTCIsIm5hbWUiOiJTaWVy
374
+ cmEgTGVvbmVhbiBMZW9uZSIsInJhdGUiOjI5NTA5MzguOX0seyJjb2RlIjoi
375
+ U09TIiwibmFtZSI6IlNvbWFsaSBTaGlsbGluZyIsInJhdGUiOjQzODE0MS4y
376
+ MTY0Mzd9LHsiY29kZSI6IlNSRCIsIm5hbWUiOiJTdXJpbmFtZXNlIERvbGxh
377
+ ciIsInJhdGUiOjUyMzIuNzczOTF9LHsiY29kZSI6IlNURCIsIm5hbWUiOiJT
378
+ w6NvIFRvbcOpIGFuZCBQcsOtbmNpcGUgRG9icmEiLCJyYXRlIjoxNjI4MjYx
379
+ OC44NTI1fSx7ImNvZGUiOiJTVkMiLCJuYW1lIjoiU2FsdmFkb3JhbiBDb2zD
380
+ s24iLCJyYXRlIjo2NTM4Ljk3NjE1OH0seyJjb2RlIjoiU1lQIiwibmFtZSI6
381
+ IlN5cmlhbiBQb3VuZCIsInJhdGUiOjE2Mzc5My4xODk4ODR9LHsiY29kZSI6
382
+ IlNaTCIsIm5hbWUiOiJTd2F6aSBMaWxhbmdlbmkiLCJyYXRlIjoxMTM1OS44
383
+ MzU2NTF9LHsiY29kZSI6IlRIQiIsIm5hbWUiOiJUaGFpIEJhaHQiLCJyYXRl
384
+ IjoyNjM2OC42MjUwNjV9LHsiY29kZSI6IlRKUyIsIm5hbWUiOiJUYWppa2lz
385
+ dGFuaSBTb21vbmkiLCJyYXRlIjo1ODg1Ljc5NTM3fSx7ImNvZGUiOiJUTVQi
386
+ LCJuYW1lIjoiVHVya21lbmlzdGFuaSBNYW5hdCIsInJhdGUiOjI2MjEuNzk3
387
+ Mzg0fSx7ImNvZGUiOiJUTkQiLCJuYW1lIjoiVHVuaXNpYW4gRGluYXIiLCJy
388
+ YXRlIjoxNjE1LjE2OTY2NX0seyJjb2RlIjoiVE9QIiwibmFtZSI6IlRvbmdh
389
+ biBQYcq7YW5nYSIsInJhdGUiOjE2NzYuNTM0OTgyfSx7ImNvZGUiOiJUUlki
390
+ LCJuYW1lIjoiVHVya2lzaCBMaXJhIiwicmF0ZSI6MjE4OS45Mjk1MzN9LHsi
391
+ Y29kZSI6IlRURCIsIm5hbWUiOiJUcmluaWRhZCBhbmQgVG9iYWdvIERvbGxh
392
+ ciIsInJhdGUiOjQ5NjIuMDQ2NzcyfSx7ImNvZGUiOiJUV0QiLCJuYW1lIjoi
393
+ TmV3IFRhaXdhbiBEb2xsYXIiLCJyYXRlIjoyNDIxMy4zMDI2Nzd9LHsiY29k
394
+ ZSI6IlRaUyIsIm5hbWUiOiJUYW56YW5pYW4gU2hpbGxpbmciLCJyYXRlIjox
395
+ NjM4MzY1Ljc0MDcxNX0seyJjb2RlIjoiVUFIIiwibmFtZSI6IlVrcmFpbmlh
396
+ biBIcnl2bmlhIiwicmF0ZSI6MTg2MDguOTc5NzUzfSx7ImNvZGUiOiJVR1gi
397
+ LCJuYW1lIjoiVWdhbmRhbiBTaGlsbGluZyIsInJhdGUiOjI1MDQ2OTMuODMw
398
+ ODY1fSx7ImNvZGUiOiJVWVUiLCJuYW1lIjoiVXJ1Z3VheWFuIFBlc28iLCJy
399
+ YXRlIjoyMjg4Ny43MzY0MzV9LHsiY29kZSI6IlVaUyIsIm5hbWUiOiJVemJl
400
+ a2lzdGFuIFNvbSIsInJhdGUiOjIyMDMyODkuMTY2MTZ9LHsiY29kZSI6IlZF
401
+ RiIsIm5hbWUiOiJWZW5lenVlbGFuIEJvbMOtdmFyIEZ1ZXJ0ZSIsInJhdGUi
402
+ Ojc0NTkuOTk0NDg0fSx7ImNvZGUiOiJWTkQiLCJuYW1lIjoiVmlldG5hbWVz
403
+ ZSBEb25nIiwicmF0ZSI6MTY2ODI2NTMuNzE1MjQ5fSx7ImNvZGUiOiJWVVYi
404
+ LCJuYW1lIjoiVmFudWF0dSBWYXR1IiwicmF0ZSI6ODM3NjMuMjgwMzQ4fSx7
405
+ ImNvZGUiOiJXU1QiLCJuYW1lIjoiU2Ftb2FuIFRhbGEiLCJyYXRlIjoxODk1
406
+ Ljc1NDk1OX0seyJjb2RlIjoiWEFGIiwibmFtZSI6IkNGQSBGcmFuYyBCRUFD
407
+ IiwicmF0ZSI6NDM2NDkzLjg0MTUxOH0seyJjb2RlIjoiWEFHIiwibmFtZSI6
408
+ IlNpbHZlciAodHJveSBvdW5jZSkiLCJyYXRlIjo0Mi44MTcwMzl9LHsiY29k
409
+ ZSI6IlhBVSIsIm5hbWUiOiJHb2xkICh0cm95IG91bmNlKSIsInJhdGUiOjAu
410
+ NTc1OTc1fSx7ImNvZGUiOiJYQ0QiLCJuYW1lIjoiRWFzdCBDYXJpYmJlYW4g
411
+ RG9sbGFyIiwicmF0ZSI6MjAyMS45MTMwMn0seyJjb2RlIjoiWE9GIiwibmFt
412
+ ZSI6IkNGQSBGcmFuYyBCQ0VBTyIsInJhdGUiOjQzODYwNC4xNTU1NDJ9LHsi
413
+ Y29kZSI6IlhQRiIsIm5hbWUiOiJDRlAgRnJhbmMiLCJyYXRlIjo3OTMyNC41
414
+ NzUyOTd9LHsiY29kZSI6IllFUiIsIm5hbWUiOiJZZW1lbmkgUmlhbCIsInJh
415
+ dGUiOjE4NjkyOC43MDI3MDh9LHsiY29kZSI6IlpBUiIsIm5hbWUiOiJTb3V0
416
+ aCBBZnJpY2FuIFJhbmQiLCJyYXRlIjoxMTM0Mi41MTE1MDh9LHsiY29kZSI6
417
+ IlpNVyIsIm5hbWUiOiJaYW1iaWFuIEt3YWNoYSIsInJhdGUiOjgxNzIuNjE0
418
+ NDM3fSx7ImNvZGUiOiJaV0wiLCJuYW1lIjoiWmltYmFid2VhbiBEb2xsYXIi
419
+ LCJyYXRlIjoyNDExNTIuMTA4NTAxfV0=
420
+ http_version:
421
+ recorded_at: Sat, 18 Jun 2016 13:51:33 GMT
422
+ recorded_with: VCR 3.0.3
423
+