tf2r 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/scraper_spec.rb CHANGED
@@ -13,7 +13,9 @@ describe TF2R::Scraper do
13
13
  context 'no options are given' do
14
14
  it 'creates an agent with default user agent if none is specified' do
15
15
  scraper = TF2R::Scraper.new({})
16
- expect(scraper.instance_variable_get(:@mech).agent.user_agent).to eql("TF2R::Scraper #{TF2R::VERSION}")
16
+ expect(
17
+ scraper.instance_variable_get(:@mech).user_agent
18
+ ).to eql("TF2R::Scraper #{TF2R::VERSION}")
17
19
  end
18
20
  end
19
21
 
@@ -21,7 +23,9 @@ describe TF2R::Scraper do
21
23
  it 'creates an agent with the specified user agent' do
22
24
  custom = 'Custom User Agent'
23
25
  scraper = TF2R::Scraper.new({user_agent: custom})
24
- expect(scraper.instance_variable_get(:@mech).agent.user_agent).to eql(custom)
26
+ expect(
27
+ scraper.instance_variable_get(:@mech).user_agent
28
+ ).to eql(custom)
25
29
  end
26
30
  end
27
31
 
@@ -29,14 +33,217 @@ describe TF2R::Scraper do
29
33
  it 'stores the given cookie' do
30
34
  test_filename = File.join(File.dirname(__FILE__), 'test_cookies.txt')
31
35
  scraper = TF2R::Scraper.new({cookies_txt: File.new(test_filename)})
32
- expect(scraper.instance_variable_get(:@mech).cookie_jar.cookies[0].value).to eq("example_value")
36
+ expect(
37
+ scraper.instance_variable_get(:@mech).cookie_jar.cookies[0].value
38
+ ).to eq('example_value')
33
39
  end
34
40
  end
35
41
  end
36
42
 
37
43
  describe '#fetch' do
44
+ before(:each) do
45
+ stub_request(:get, "http://google.com/").
46
+ with(:headers => {'Accept'=>'*/*', 'Host'=>'google.com'}).
47
+ to_return(:status => 200, :body => "",
48
+ :headers => {'content_type' => 'text/html'})
49
+ end
50
+
51
+ it 'makes a request to the specified URL' do
52
+ expect(
53
+ scraper.fetch('http://google.com')
54
+ ).to have_requested(:get, 'google.com')
55
+ end
56
+
38
57
  it 'returns a Mechanize::Page' do
39
58
  expect(scraper.fetch('http://google.com')).to be_a(Mechanize::Page)
40
59
  end
41
60
  end
61
+
62
+ describe '#scrape_main_page' do
63
+ let(:result) { scraper.scrape_main_page }
64
+
65
+ before(:each) do
66
+ raffles_file = File.new(File.join(File.dirname(__FILE__), 'raffles.html'))
67
+ stub_request(:get, "http://tf2r.com/raffles.html").
68
+ with(:headers => {'Accept'=>'*/*', 'Host'=>'tf2r.com'}).
69
+ to_return(:status => 200, :body => raffles_file,
70
+ :headers => {'content_type' => 'text/html'})
71
+ end
72
+
73
+ it 'returns an Array of Strings' do
74
+ VCR.use_cassette('raffles') do
75
+ expect(result).to be_an(Array)
76
+ expect(result[0]).to be_a(String)
77
+ expect(result[-1]).to be_a(String)
78
+ end
79
+ end
80
+
81
+ it 'returns raffle links in reverse chronological order' do
82
+ # See spec/raffles.html for the hard-coded values.
83
+ expect(result[0]).to eql('http://tf2r.com/kzkp8jo.html')
84
+ expect(result[-1]).to eql('http://tf2r.com/k4jx1hz.html')
85
+ end
86
+ end
87
+
88
+ describe '#scrape_raffle_for_creator' do
89
+ let(:page) {
90
+ VCR.use_cassette('scrape_raffle_for_creator') do
91
+ scraper.fetch('http://tf2r.com/kstzcbd.html')
92
+ end
93
+ }
94
+ let(:result) { scraper.scrape_raffle_for_creator(page) }
95
+
96
+ it 'returns a Hash representation of a user' do
97
+ expect(result).to be_a(Hash)
98
+ end
99
+
100
+ # This is a terrible spec right now. The raffle tested against is one of
101
+ # my own, which is constantly updated as I use the site. If I gain or lose
102
+ # rep, if I use a new Steam Community name or avatar, the test will fail.
103
+ # TODO: Use a stagnant alt account to make a test raffle.
104
+ it 'returns correct values' do
105
+ expect(result[:steam_id]).to eql(76561198061719848)
106
+ expect(result[:colour]).to eql('70b01b')
107
+
108
+ # The following expectations are very brittle. TF2R updates the certain
109
+ # user attributes (such as name and avatar) every time the user logs in
110
+ # with new ones.
111
+ expect(result[:username]).to eql('Yulli')
112
+ expect(result[:avatar_link]).to eql('http://media.steampowered.com/steamcommunity/public/images/avatars/bc/bc9dc4302d23f2e2f37f59c59f29c27dbc8cade6_full.jpg')
113
+
114
+ # Talk about brittle.
115
+ expect(result[:posrep]).to eql(11459)
116
+ expect(result[:negrep]).to eql(0)
117
+ end
118
+ end
119
+
120
+
121
+ describe '#scrape_raffle_for_raffle' do
122
+ let(:page) {
123
+ VCR.use_cassette('scrape_raffle_for_raffle') do
124
+ scraper.fetch('http://tf2r.com/kstzcbd.html')
125
+ end
126
+ }
127
+ let(:result) { scraper.scrape_raffle_for_raffle(page) }
128
+
129
+ it 'returns a Hash representation of a raffle' do
130
+ expect(result).to be_a(Hash)
131
+ end
132
+
133
+ it 'returns correct values' do
134
+ expect(result[:link_snippet]).to eql('kstzcbd')
135
+ expect(result[:title]).to eql('Just one refined [1 hour]')
136
+ expect(result[:description]).to eql('Plain and simple.')
137
+ expect(result[:start_time]).to eql(DateTime.strptime('Mon, 29 Oct 2012 14:51:45 +0100', '%a, %d %b %Y %H:%M:%S %z').to_time)
138
+ expect(result[:end_time]).to eql(DateTime.strptime('Mon, 29 Oct 2012 14:53:01 +0100', '%a, %d %b %Y %H:%M:%S %z').to_time)
139
+ expect(result[:win_chance]).to eql(0.1)
140
+ # TODO: use a raffle where current_entries != max_entries
141
+ expect(result[:current_entries]).to eql(10)
142
+ expect(result[:max_entries]).to eql(10)
143
+ expect(result[:is_done]).to eql(true)
144
+ end
145
+ end
146
+
147
+ describe '#scrape_raffle_for_participants' do
148
+ let(:page) {
149
+ VCR.use_cassette('scrape_raffle_for_participants') do
150
+ scraper.fetch('http://tf2r.com/kstzcbd.html?full')
151
+ end
152
+ }
153
+ let(:result) { scraper.scrape_raffle_for_participants(page) }
154
+
155
+ it 'returns an Array of Hashes' do
156
+ expect(result).to be_an(Array)
157
+ expect(result[0]).to be_a(Hash)
158
+ expect(result[-1]).to be_a(Hash)
159
+ end
160
+
161
+ it 'returns correct values' do
162
+ expect(result[0][:steam_id]).to eql(76561198017461530)
163
+ expect(result[0][:username]).to eql('TheJohn')
164
+ expect(result[0][:colour]).to eql('ebe2ca')
165
+
166
+ expect(result[-1][:steam_id]).to eql(76561198029274581)
167
+ expect(result[-1][:username]).to eql('pony danza (OUT AGAIN DAMN IT)')
168
+ expect(result[-1][:colour]).to eql('cd9b1d')
169
+ end
170
+ end
171
+
172
+ describe '#scrape_user' do
173
+ context 'a real user page is given' do
174
+ let(:page) {
175
+ VCR.use_cassette('scrape_user_real') do
176
+ scraper.fetch('http://tf2r.com/user/76561198061719848.html')
177
+ end
178
+ }
179
+ let(:result) { scraper.scrape_user(page) }
180
+
181
+ it 'returns a Hash' do
182
+ expect(result).to be_a(Hash)
183
+ end
184
+
185
+ # This spec is also brittle. It relies on my user account, which is updated
186
+ # constantly.
187
+ # TODO: use a stagnant alt account
188
+ it 'returns correct values' do
189
+ expect(result[:steam_id]).to eql(76561198061719848)
190
+ expect(result[:username]).to eql('Yulli')
191
+ expect(result[:avatar_link]).to eql('http://media.steampowered.com/steamcommunity/public/images/avatars/bc/bc9dc4302d23f2e2f37f59c59f29c27dbc8cade6_full.jpg')
192
+ expect(result[:posrep]).to eql(11459)
193
+ expect(result[:negrep]).to eql(0)
194
+ expect(result[:colour]).to eql('70b01b')
195
+ end
196
+ end
197
+
198
+ context 'a user page for a non-existent user is given' do
199
+ let(:page) {
200
+ VCR.use_cassette('scrape_user_not_found') do
201
+ scraper.fetch('http://tf2r.com/user/123456.html')
202
+ end
203
+ }
204
+ let(:result) { scraper.scrape_user(page) }
205
+ it 'returns a Hash' do
206
+ expect(result).to be_a(Hash)
207
+ end
208
+
209
+ it 'returns the attempted Steam ID' do
210
+ expect(result[:steam_id]).to eql(123456)
211
+ end
212
+
213
+ it 'returns mostly nil values' do
214
+ expect(result[:username]).to be_nil
215
+ expect(result[:avatar_link]).to be_nil
216
+ expect(result[:posrep]).to be_nil
217
+ expect(result[:negrep]).to be_nil
218
+ expect(result[:colour]).to be_nil
219
+ end
220
+ end
221
+ end
222
+
223
+
224
+ describe '#scrape_ranks' do
225
+ let(:page) {
226
+ VCR.use_cassette('scrape_ranks') do
227
+ scraper.fetch('http://tf2r.com/info.html')
228
+ end
229
+ }
230
+ let(:result) { scraper.scrape_ranks(page) }
231
+
232
+ it 'returns an Array of Hashes' do
233
+ expect(result).to be_an(Array)
234
+ expect(result[0]).to be_a(Hash)
235
+ expect(result[-1]).to be_a(Hash)
236
+ end
237
+
238
+ it 'returns correct values' do
239
+ expect(result[0][:name]).to eql('User')
240
+ expect(result[0][:description]).to eql('Every new or existing user has this rank.')
241
+ expect(result[0][:colour]).to eql('ebe2ca')
242
+
243
+ # This is brittle. Every time a new rank is added, this fails.
244
+ expect(result[-1][:name]).to eql('Lense')
245
+ expect(result[-1][:description]).to eql('[ Custom donator rank ]')
246
+ expect(result[-1][:colour]).to eql('545d6c')
247
+ end
248
+ end
42
249
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,18 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
1
4
  require 'tf2r'
5
+ require 'vcr'
6
+ require 'webmock/rspec'
2
7
 
3
8
  RSpec.configure do |config|
4
9
  config.order = 'random'
5
- end
10
+ end
11
+
12
+ VCR.configure do |c|
13
+ c.cassette_library_dir = 'spec/vcr/cassettes'
14
+ c.hook_into :webmock
15
+ c.ignore_localhost = true
16
+ end
17
+
18
+ WebMock.disable_net_connect!(allow_localhost: true)
@@ -0,0 +1,243 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://tf2r.com/raffles.html
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip,deflate,identity
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - TF2R::Scraper 0.0.1
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
+ - tf2r.com
22
+ Connection:
23
+ - keep-alive
24
+ Keep-Alive:
25
+ - 300
26
+ response:
27
+ status:
28
+ code: 200
29
+ message: OK
30
+ headers:
31
+ Server:
32
+ - nginx/1.7.0
33
+ Date:
34
+ - Mon, 04 Aug 2014 20:26:00 GMT
35
+ Content-Type:
36
+ - text/html; charset=utf-8
37
+ Transfer-Encoding:
38
+ - chunked
39
+ Connection:
40
+ - keep-alive
41
+ Set-Cookie:
42
+ - session=kEpKJAKyNkpmUS-ZCwwc-1ILFg6; expires=Tue, 04-Aug-2015 20:26:00 GMT;
43
+ Max-Age=31536000; path=/
44
+ Expires:
45
+ - Thu, 19 Nov 1981 08:52:00 GMT
46
+ Cache-Control:
47
+ - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
48
+ Pragma:
49
+ - no-cache
50
+ Content-Encoding:
51
+ - gzip
52
+ Vary:
53
+ - Accept-Encoding
54
+ body:
55
+ encoding: ASCII-8BIT
56
+ string: !binary |-
57
+ H4sIAAAAAAAAA+x9W2/cyLbes/wryvScLWns7ua9SMmSoautsWV7LHm8Z3sM
58
+ o1hV7KaaTbZ5Uas9YyDIPnnNQ94OkDycADlAgCRAkocgAZID5CGP3r8heyPI
59
+ 38iqItk3SW6fvTkxZRyDbpFVxbqs9dWqr1YVyfu395/tnf74/AD1skGInr/c
60
+ fXK0h5RWp/PK2Ot09k/30W8fnR4/QVpbRacJidIgC+KIhJ3OwVMFKb0sG250
61
+ OqPRqD0y2nHS7Zy+6FyIvDRxc3naymbubLOMKdvo1v3brRY67QUpghiOSMRQ
62
+ kKVoFCd9BIHDJM44zThDecR4grIeR3sJJ1lwDifxYBBHKdrJsiTwcpFx62kc
63
+ iWCe0ICEcLXPk+A8RTpU/OXjDXQQdUNRxm/QKxLyFK3t7aHdH1tP91pP90Wi
64
+ dRQGlEcpv4f8OEF+HoYoiPx4QETuaBhyknKICsN4JCsTBlF/A5UCoGXNaFEx
65
+ KYkyv7TjjVsRbUWsA8V08n4n5F0S0phx1GoJQUjRXwzCKN26QqCa67qFHBWR
66
+ aANa0d1SeKSgydn2rZX7PU4YZLaycj8LspBvnx7qL9BRxgfoBfF90eIWep57
67
+ UCmUFAH3O0VKcY9oDOol3J/UIPP1pA3N6UBbB9CIAQmiU3HaSbNxyNs0TR9Y
68
+ loISHm4pMijtcZ4pKBsP+ZaS8YusA2kU1JEFpDQJhtls5Bk5J0WogtKEXi74
69
+ LO2cvct5Mm5pbbOttwdB1D5LHxjK9v1OceNfnDNchXFSX649DvC4KrsBz4jE
70
+ Sou/y4PzLWUvjjIeZa1TKEBBtLgqSxK63kS0R5KUZ1t55reczxKjSIHQOUnQ
71
+ 2y55h7aKP7/8gl6/2ZRR4ro9zNPe2uvVt5D3DqVxHmWr99Dqy52WbhqajXXc
72
+ 0lbfrF99w34sYPCUDLi4p2r5tcl3RGd5AtDiCaTPkpxfmRKsA+0/J11+HvCR
73
+ zEymWfPziIrOt7aOfoaQFdGyLoF2sZjmA5BXW3Y7fhBycbW2WshhdX0TkrWF
74
+ jCDt6oKUVmUkSccRhVhRJ1GjFQgDpULI2qpQU7qxirZmCgpjKu1AW5ilGFCD
75
+ HqAyYaezijaKC3G+ju6i1TQjWdrutlkMPY5T6HT9dsSzDqMAjtXNqjHpbFu6
76
+ PCsbku6OT0lXSHnapNfqm02UtockgQRPwXa0A7AtSbbLwVrxtS65h9JSth/W
77
+ 1+TZLAAldkQnXeyeInLljgcK6CaABYZ+RtOLDZQn4ZrCSEY2ggEoqDOMupse
78
+ GELbvBf8sPvsxUh9/LAb78C/pycvewcvu+JU/hzt7RzBn90n3klERcDzfnjw
79
+ /Q/fHw1eHR87PrPunn8/3Bn9rmvlfhgOyavO+Xvr2IoPDkbH+yP3WXRqvwqH
80
+ 3uHRj9/9cNZNnn9vfRd8/8PJoyfxy253bB8+GT17ufPs6Oh3O8/x0WlP1mHn
81
+ 5OUPz148tvZ+PDr6K2NfWQfrNASEbKJhXAw/G8gPLjjbRCH3sw2k8sEmyuLh
82
+ hjx53wpgqLnYQC1Nrf5tolHAst4GgqC/2kQ9HnR7WXX1QQgPYOwlwvqC6KbF
83
+ gFmUA8JCoiSbS0W8NA7zjFf1aTnG8KKoEWpZqjivSrRlTFkZR0YtKmp10SJJ
84
+ nQmrBOW2QXUAzihuVTKZVsxL4j7/UrWbFn5NFe9E5PxtaSE/IeP7xcC0Dcbj
85
+ fkeOhnDixWyM4iiMCdtSgijI1tYVkWJFso/dfHwCFnuHAZNgQCqKEfmz7OzK
86
+ jHWSxqkwvF76WfZJ3LAiEl9vpaZJLtmqIrgwV5VUU6Pt5eMUWkNYKsVLaEck
87
+ q+wN2NMlpkbITBqaX35ZklJIVaZcb5PhkEdsrxeEbA2KK5p2lQWSAj8AA3Ot
88
+ 0MtE91lwjgJQ1xRAYjCF0O1SOSIBDUmaCpX6QB4HMCIL3W8pLEiHIRlvRHHE
89
+ N+G2+aQR1F7ZFm0o8luIZjylyvY+/JbR8rcqUVRJiIgniuRZi6FvRSepoqo7
90
+ P5Vo5T65hnJVCVbuB4Pu1WSj7Dxh3I3fMtFxFERCIBBPIGAijau6ctl7RQ8t
91
+ beBsP9ZUEVOyDdEOsqxBibhRMtAqYsAHHkT04lDIalIXwlgQdWV5yBA/1Yns
92
+ TyCLMiFQUd4q6+OqsjalikYcWPOAv/XBFijXiI7BFCPjbUmXt/flhWiEKEHc
93
+ 9g8sZBtI8/2OOP1L6nhHARMkSQDEwxATjyZ8YuuSVQSNBtGqwO6i7tOMk4GY
94
+ YORgx8Yy8VAS+goMadCNgijrQZ/p9mRqCMrSt2LeA6KfQYmMRLKoiYLOgU0E
95
+ FKZOJIR8NgYBYyGXUCgEWEJgAQllsxfBcHU0YWXcxMAWtk22stMZQisI09vd
96
+ OO7CdGIMtS5Zl2yrjBUsGyycNy4SgXmbZ9orpaXBunPhqqVlkT0JpotlbWbu
97
+ V4rYlUX7EURSxR7oqb9ZDGuQIyh6RumTewU/ahHWAhVLEk9JCxTTsjRs666t
98
+ 6bqtG9iwL6VPwxhSu6Zj6xY2XE20BKo5L6Lyam2m0mD2SxjNBkqev16Q6p8/
99
+ lGPMyrxsZpQ3sW3VyYJlJUwAIp3AY4YGodvBYBgnGYmyTWUKhfmELp4zLLKX
100
+ oAFJAHJgjvIsrq5aXpxl8WADSctT1vPXg4dExxMomaPDOM54MsHIpyHyGQgp
101
+ mnwZIf9AgCziw3F0TXNMTZ/Dxxw8/kx0zEnmSkQsgGJwklMUed1yZC1FIrhL
102
+ aTUQhQbyBPR4GiNyHgcMpUMygKl7F5EogsGcFmwCBZH0ohSWSAzzQ7Q4Hl5h
103
+ 8GTCtCOcG639O3M5dhjMsYOwo6u6ix1sYxdjCzqtbivbLzjpjlGPpKgLxED6
104
+ mgZgkRApSxYeH6hNAFOyDChbWV2GusAuyYiM07awgbOs4M+SChKjQmtUdgkP
105
+ Bkhh52tptWYZum250GrVsBxXd02sbB/mWZ5wFPtIeoNEi+I8Ad7sJeIccByl
106
+ 7XbRtl5SW000C2NDxbbpYluzLAeAuxOmMRLsVEg2j/I0JyFgwIc6jYVGYNhK
107
+ OJTH2gvUawaDgluMEkE4k8JMzNERMUmoKEepF6mSW/NJynmEskgkRVwx5N/6
108
+ FDOL+CgtyAWSzrMt5VEsOKX4lWTpF7Ts/oT48zk85aPSJQfcdHL+ObmVjrz5
109
+ 7OadfMr2otOPzPXxq2TwNl0iBeEXnS/0RLhwRbCyfQS/n1X5/FLVZS4yHLps
110
+ Xtb2mnyWgRMamNI8TWF8SDtqZ1LGXnWL6PT5AEo6FH8/p8az3LLKTlJMUUbJ
111
+ NsVpkdcnsyJUTFwXWh9DX0RneZqhUS8WPnBBmYUL/AF0IHkDylOefEoq0DtC
112
+ 3kp7MHWSzuNJ5g9h0pM+QK8gYzF8gSEUAfdglt5rK9vP8qQI4AmM+untz5EG
113
+ 7ZFsvgF7EHJb2RZ/pEkRI+2STAqWEaQLotipgoE/JBzynASIjMtpYAnhq3mp
114
+ 6O9VX1+wBwvcdJ7wXzUxZNJgLPMJ3Op8G/hrIjb21wBlQ7BrYBbX0e2tLaSI
115
+ RQwfCANT1m+tXJWuHYghwieUX3nLsnva3cHRw0SsUQziqM9hip2cB5RfmdXK
116
+ wiQEGIPS8XPaB+Nc3F1oY/PbjjS/wrERDhNIZpuGrltAHm6VwX4MfYyzqXei
117
+ 8oogMMTDQxFb+EcuJfywkHY3zJPFpD4MEmVaITS09k3bS+IRoLQ9SAMObRHp
118
+ v5k4NtbbHrRsDcKkS0ZmJOjmtDL3JuFxDkNwVfAt4bMoCuJQZJVvIaerct1Y
119
+ yNKDTMpy5vMTNZ+0k/Y47ZeGeE3WvlBs2eLCkfRNm5yRizV5viJUvoHERD5T
120
+ ZEEreRJuoMtrD7HXHvaGZRpBIE+LO8/SOJoJ3Sg86SsriqxLMX+shgpILpRT
121
+ Jl9RAP/ZsByZNgQCZPiHIjrNKcAOBDHxg4n818vsoVHisi0c4XkqXOmKD+Sg
122
+ gB/8IyF05yIJWJ0UuHs1YRHyR1fcHverm8siJmWUGbTLsTXkUTfroe0tpFWl
123
+ VXeA7pI1oKTAPa+4s0o9TS4hLryOW1elfx2wN5tzSYUrKgxSkV5RplFzaWCq
124
+ IDuSOY2XtSqqJXxuIpd0UpmZ2hTVKeozSfg6mKvGtDAhnzVRWmsLrYm72uLi
125
+ Lszg1teFdNRpEZC2qvndLdTlmVg3lPesT3P+cLk9UIKwC/eL2rD10koUV9M7
126
+ v1lTxMJFFtBgCHPGVIF5iPDwQqdSZiztT0rlSf+pmnX+NO/Q+2nOozdN35Jc
127
+ W7izfpry6Z8U5a5cugmi/l1lJku55reB7hTR8uquIvIuAoST8K4yw/evL1G6
128
+ O64oMqnKLLNMPi9PkoBxg+lwAmbkpyuGosWk0zRXpxTj31UiqwS1GE7OPyG+
129
+ qT+qioHBLyOJFK2c/0KEbQ4v4LKYAk+utz/RcNGQZe2oxKzcrWAqZHnNDTTk
130
+ ZCo9ZQrgCr/V38qK9NaqNEXMh8KDLcI+FLOPlGenwYDDiLE2a8HvIUtV1fVq
131
+ fJpY+Un/ge5TjCQJh3lYhObBLtqCCkm+k0IMQn7Ow6ngxVURkWuTUDgvwgSk
132
+ JqEFvmYwXjgkikg4v6tMHRNFIFzIwAlGw6ifglgXlSxdi3M6nsl0VtUz2f4k
133
+ nIaTXHmlLOWSpITsq7FWkeYMTEMeyeFWGcQwJsp582IgaPicS83O39mLgSQu
134
+ rssImxkPwSp9s5b1gmKNdKWKgHFVxsTD9Xbs+6DoEgwismjaJL64nImXAplE
135
+ y6u1afayXuWSw7rkU5CsTbIsWVOCIrRIXCaUiw9lQuWJ0D0Mx3ent0g4KOt3
136
+ 12ayyTVFEDwYbNbRA4CXl4Dg78zeJVNsiATTmoHVvpRtkQv6zW/Q1VFqOfiW
137
+ lS0Fnvbi0eUml5E0Tdd+Ropc8NhAayDqtjhHLWSKNfK1QnwdpK9D0Nq8FEph
138
+ FrF3gf9cKPeAnMTDKic4hfBSQ3eLHEUq9GFSnQ/3FpAwX71ewHhR9w/XduG0
139
+ gqdkwMXADmM/2kkSMi5uFpkWe0nkaNwlWU8ClhPam0JRrivfQ7F3xmlW1EZk
140
+ 91qGvykwVMSVwk/eyeyUaQWLDQNlJcSf9lkcRGvKZpGmOGa54yXq+BnM8Uri
141
+ OMsbFZBMUbN5sqiIGkGYrKA0oDL8kyRxCUe8liIuZYgLHLRibbLeV9DDimB9
142
+ nirjgElFXuKWV5O7axjnPMdbSjhLpjdL9GZJmOQYMG0TYijN3CKORNeessFP
143
+ ksEqh4qjzY5nVwyn86NnWa/pqFoMp1d3szTcj0dR1cmgIYtMEU02V2xAf4V5
144
+ OKhjUYFL79kQ8xhhrULo8rJA3VInZmJmcC+qI4f1SV1nJ5cwvWbjhfGlaoLI
145
+ bmo1Nj+HNUxGr4lNKoegn4tFWvVetUJbWDXxM/XY35r1Ucyx68rlWcWV0phf
146
+ Db9MnS97oic2QnidOti2bE1zHdV2dNu2NKd02ZTu7opVO7al7uxtKtvHgMAe
147
+ GMsnQtMP0R//5m9R+237Sip4Fa3+RHX6aapenCXlIq8+4ryfIpp2Y5QlRKx0
148
+ Lilklmdf5fGZT3gtOZ1w7MuSLeW5EErO/0wZX14LHnAWCOPHyWAYj3jCmcxk
149
+ 3im6sDxc8PW0o1E4dMwci2HqmMy3mAE/HnVcx8IOoR62xEoC05y3opx80D4b
150
+ disCKDn9hPcVV1cT/Am//7QEpbbRZcOLStu1pRTqvj4XSfk/pcjaoK9rhq6a
151
+ lns19A92D/S9HYD+//0f//z//Jd/9ad/+u//9Pt/+6ff/y2c1AL7PMhjxygh
152
+ cZhwjnaDjMZyJQ1QP775sJ+Xb72w5xocqmFSbBjY4z71NBjZCQPgU9vgDjM8
153
+ 4hGN6araDNgX6m4C7F3VcEysGUtgz8hIMzSjFqyP6TszeV/i4EwsDQ5gthaS
154
+ fsAHNx/n8wKtF+fEhUPXbZVoKiPccyzimZRww9dUjxJP822KPcPWsNEMnBeq
155
+ bgLODRe4mYWtJTg/Qs8TsYBHOToGAdIg4rVgXjMj//ysxMQjMhyO0U7ezdPs
156
+ 9s1H/Lxo60W8pcFhuNxkquti3eSORw2dY0KwxjTCiMMZ0B1NdXAzEF8ouhmI
157
+ dwzVxerViIeB0VZVQPzzOM6CFJ32uHyOKkh7aD8h3Tj641//61qgz1ifDd9P
158
+ oH8uton0SCC8Ln0u6E36NXSBWVnX2wUYg8P3HdMmzCdUd1XfwzZc6JruupZu
159
+ O5ajOZblOFYzukCh8AZ0AU3TDNvBjr3E6AP2d7J4ENDDIKnH3GOOzTws0SA2
160
+ pYtHvqIuRzce6gsyrRfqugEHdYlDDNdWHY5d1bMx9XWQp22quuH6nDLNch3S
161
+ DKgXem4A1GFmZRm6ZeAlUD8JkvZ33PfLrUZ/MdBHQd+MLkos9Ph5tRNTbuO9
162
+ 8WBfkGrNvhoHDpWa2AXLTXVqU2raMJSYDrV81ySWiQ2bu0DvWTPAXui6CWC3
163
+ VDjF5jK7vhsPo4AktQDdPLvQehWLOeEgEBTybpDdfIzPC7NmjGM4OHc04hNL
164
+ NQ3s2hZhNjaYY5i6b2CNUJX6QGS8ZmC8UHMTMG5oqqna7jX0fYLxYwqtid7X
165
+ Q1vC7iAIKyCcyO3YKWI8zZJ4zNnNh/q8TGv2zTA4MFh0HZsUa76p6zA3tTzq
166
+ mZqtO7qrGw5zfc9UG+J6L5T95aGOXVe3TRhn9SVQT/Mo7dXlkOkHhmONSiCE
167
+ cdxHWVw8tdKLl04CGg/1RZnWC3WqwqF5MN91fcx14roO5jahnNgaMQyCfYfZ
168
+ umG6WGsG1Atlf3moA6EEqcC/ZVA/CboRCY+DNF2+5Pl5eA8oG/WrddXHfJwi
169
+ knAg6sIbw+JRdNMRvyjaehHvcjg4zD6xpZsaBUvOXcOysOHoXPU1BxOdmtRm
170
+ Pm3IxLRQdxMQr1tYxYZ6DeLNfQxzLMHVjx4+OtjZrwXrJBuG55U7+o6pu+gH
171
+ Uj4O8TyJva9gXjov1JoXUzEcBrUdYuvE5jD9dYWxp4ZFNVPFOuWYU5VTx7ab
172
+ gfVC3U3AOkAZRl7jmsXUKdaDMERPx1w63U9owCPK0cN82SL/54E/O4/ssF9x
173
+ +Fy8Ne3m431esPXi3fPhoCqBeSjxmO8Sjh1H00zLd3Vucs9WHYdzQ2dWQzYP
174
+ FBpuAt5BUNixrltiOjzcx8USU9AntJfXAm+H49AJShy8iAlDevXQ8c2H+bw8
175
+ a56fGnAw3fFcw1ZNz+KYOi4DS2/YPrEszhlYeUPTPK8h89NC002AuY11G5vO
176
+ Mt/6o6O6lkx7mZdGFVm30OGLgwP0cOf44OT2V7BdYF6a9YLcseHQNICzZVrY
177
+ djzdpCa3qA+/puF4hk+YrdkYuw3h6YWmvzzIYXRVsanjpSB/HET9MXoecHTn
178
+ hCZkeHpYk1kfnVFWQmKX9NDuzqObDvVFmdYLdVOHw/N8bmHimJxRQjxVN02m
179
+ Wlz3dNtSgbGrrqE6DdkLVqj4y0PdUR3NtQ1Lu2ZKurfv7mr7APV9kvTr8TVi
180
+ /n48nLjVGWJkjAYk43PvnrmRGF8UZs3UXIXDBIJiarb0sgDYMfM8mHz6zHGJ
181
+ 7WrE1X1iNGXrS6HpBmBcM03VAqKnLTHnfX4eUEprgbnu+0mYlzg45kkyRqck
182
+ jzLhYtzrJUGaDUh68wnMgmhrdr54cAAvB2vODJ1S3fYMj9vcNjSMfeLDRNWm
183
+ pmv6jt4MxBdKbwDiVdsyHNu1zSWI3yfoOPf9IELHJBJPLt3p87EXk4Qh+bra
184
+ WrrCIKAGqxZSWYwC1CPn4p1kv3mXx9kmSJ4XZ+Jd+D7yiffgxveLBQXUzHYI
185
+ HL5DfYtaDrVUlUOHAKLvWKZt6R7XNMN1HKKrvCH9okBAI/qF45qqubRfbJ0+
186
+ Ot1CT/Kl23E/rwcMEyu0q4d9dsdyaVVqXbyy7mFCxmk/D8ObPxosiLfm0YDB
187
+ wXVKfA5dS3cdrPvcgSHAglksECCD+o6nMsvzGrJFrNB6E1Cv6aaNwTpcw/Et
188
+ 1z3UAfXf8Syrye/uqj3anWxzD4D93Hxwz0uxXnDbKhyWTrjHdAdzqhvYJmDZ
189
+ PY9wbhowiWWmozLuubQZ4C403ARwg8mxXANf85j2xKSP4lE9ex/9d+xd+eK4
190
+ 7b1ETlzFvyPUzXn6VUxi5wRa8/MbDhy66VHfVg3suSrzbY9aJrcsmL961KaC
191
+ 2rseBDYD54W6m4BzGyTmuHjZw6m/I9GyfbifB/T4glDt3cRRM8gTEtx8cM9L
192
+ seYNviYclPueAX1I9XWqcZiicmDpXNe5Zmoa1h2OdTDuzQB3oeIGgFsDY2Dp
193
+ ztKtYN3kPU+DWNXUWiDuv2ehV76lePsuDLfiOzo3HuMLwqz5qSQbDoJ119Vc
194
+ TzOITTRTZ8SwMSaqo7ou90zVV1W7KS/VKHTcBIwbpq1blrHMC/m//sX//E/o
195
+ F3SQ8Kiex+/e9c2LanPvCSViEww6fXt683E+L9Cave0mHMTUODOpbTqe53uE
196
+ WNyzDAOrPsOuqXNONeY1ZSNMoeYm4PzL2HIrvYjzyst4SLxEfDQjTlK0sexF
197
+ HTcA6f9o0WeQXmi6AUhXTUvXgOld85qkyRbHw3AcRN0XxAvYyyigcRI9D7p1
198
+ bY9Jz3SHVk9X2+toLy5WmW486Bek+yvMQx3DVz1KuY2Z5zKq+lwVH6HVTcs2
199
+ LM/CVDzGYTYD9IWamwB6GHFtmEUtc6G3ht0WOqFxnBGPAEJqAbs99M2AzTpf
200
+ Ws9axyQKiHjb4N2bj/l54daMeQyHb8F0lLq2w2zf0rhlWyajYjcx0xxHxRqx
201
+ qeb7zcB8oe0mYB6rDqjFWEZpjkkSxOnjJ7to7ePfffz7j//943/9+N8+/gf0
202
+ 8V/+4Z98/Ps//LOP//njv/vDX//h9x//43pN29vxu7giBd/nPBWPddz8TjAv
203
+ 7Zod7T4cLidQAOZcw5hhVTMYGH4MYwEzNdv1OceebzSkExQ6bkInMHUgoaqz
204
+ 7K1hr49Odt6gb9/+lu/Hv337bS1AN96dOX5U4uHg6T56sXN4+OQAuD06ePrd
205
+ sx9RNx8D01/2xNQNwP68kGt+cM+Aw+QMazrzYCTgVNW46vi26aq+5XJdE9+R
206
+ czEwo2Zgv1B7E7CvaaZt6+qyl2zsQ+67eRTVs4oa+efm2XmJhIhzhoDpDPhq
207
+ Kh7PHpGM9m4+3ucFW7M/3oPDYC7VCGfUNn0YV4juG+LFMp7u+57jmIxQS9cb
208
+ YusLhTcA75oOkyDDspe9cOP16auTN69fPt54tfPiDTp9dIB2n7x88eJgH+0/
209
+ e3hQz96ZARsl1UZKdHD8/PQIsj/+Ee3u7D1+Dv9v/raZBWn/Cu4dF6y9r6o+
210
+ tXyxMQxrrm5wz/a5ybFqExd7noMbMtMtFN6ATqAahmY6unXNiuvkib7jnDFy
211
+ mHe7pBbAu8zshZXT40ngc/GFxG4cM/RtP4ppH43g/MZjfkG4NTvvGRwq1g0C
212
+ VN5hrmdRSrHOLM2kwPGhbAwDAhAgoyFb5QudNwHzFtY01bKuIfkTzJ8Qb+mj
213
+ 1J/5miXyfuBVcD/tkQzxqBsA2/kKntSeF2a9GPcdODysmsx1fc1hFmE6M3yd
214
+ Ys3UuEZM3cLMxg71GoLxQtFNwLjtiB3S1z3yNLNAxbuuG6T1bKc5C3r9vFct
215
+ w8YDLr9lgB4Kwy7egc0jzh7cfnDz2cyCeH+FLTaeJ779bfkaZsQ1GKZE+DWJ
216
+ 6Wk+5a7nGLrJ3YZsfS/U3gzUw0TLuu59HNO3LUXxyCNhiP74N/+mnqdZzTEP
217
+ K5/9j3GOUs5RFEv4fw1gn5Vqzf4aHQ4GfN2kjotVqrq2RjWuu6rqGSp1fUun
218
+ wByA0jdk/lqouglg1zRLdzR3GY35jnO/X8/+gyEHtVf2fTdIsp54sPWF/BjW
219
+ V2DU5wX6K7xQzNaJ7nmG7mmqodlYLL1q3LZdywDzrllUZapquc3AeaHrJuDc
220
+ MWzbwHjZiwqeDXiX9KOc9kOeGuj1/tMXD9/UQ9/93oXNK/qeBF6eceGePCZp
221
+ HmsWIhFD0MuWdrIb0AXmZV3zjJXDYWGOVd22wN4zk5kmJj5jYOZ1DVsGtN01
222
+ VNtvyLs6Cr03oAtoqqnBMKwv+1bZMYmikF/oWj2bKvPAdqtVel0zNL08bjzM
223
+ F+RZL8wNEw7xcjHbs3xHx8x3DW5x37B9R/VsR6fcgF+d4IasQBV6bgDMxc4Q
224
+ 4SZeZulbb48JIwl526rn7ZGapqWV912QmRx9BWRmXpY1vw/YggNMNsemSyxX
225
+ xxYA3rGoR8UWSsoMYqjMhwkrbcj7gAsVf3mIY9e1XGF4lj3J94j7JEizuJ5n
226
+ szWeWP204u3xBXrmo71eDKWKR/tuOtYXhVov1rEDh6+6lBjcdU1XxT4hmHm2
227
+ b2CT65rGxPYybvqsIWtLhbK/PNYd1TRN2zWu21E2ee3SozHhUcAI/9+//7t6
228
+ tsmfjbteZfge8gz5SfA1fM1gXp6/woeEic3FB3A49lzbMw0MAdT2NCy/aeCr
229
+ lkNcRhvydrFCyQ2AuabqWLec65aTpiY9jzKePA7CkCf7SVzTZw381DCD6gnW
230
+ o9UBeh7HCUpjOJKv4Y0EC9KteX2JwqEZnqf5lms4DqO2ilWimb4L3AlMvO1i
231
+ rjrEZA0BfaHtBoD+//sr9QbjRB16JQhe9ch7lA/bNx7d//gyvblXKEkdf3l0
232
+ C0KpG5brLtsK+V3ci6IxOo6h9fV8tGOk53lF1I9QP4pHaBznqwlHYrmql0fd
233
+ ZHzjYb8o35rfHObAYWHD1n2OqSYe8DNcohmcucTzLPFGDkYZEJymvDmsUPpn
234
+ wv7WbKpbK/BPJi0ROiBJN4g2kDW8QCTP4k0kcUfCoAuhlAsGIr9/GqQoheIR
235
+ qCWVr+o6EaJFr7iHdp4foRbQCCl25AGHKHW6ikrtLOpldVveLaXkJagzQcHq
236
+ IgqSPOQFvFe3T5+dSM/5i7z8ciSUeu2NwyQ4J3Rc3vq8uIJKgv5n9iELeRRn
237
+ 6FZ1Bie3SiGV8iTsnCcZCFzGzMlPYmADYUsdXmyWINhArryqZCvlqpSyv91q
238
+ od18fMLDcIel6HdA69BezDhqtWa0E7AtxUvJ8K2mOzbGtlJVBQKTmPZTJGMd
239
+ z8O24anMdpmmG74pXv5lmsSDQcLXvckXL6ZFH4D8PlX8JP2lk/tezMYCTUKi
240
+ 2/8PAAD//wMAtAk2lDuwAAA=
241
+ http_version:
242
+ recorded_at: Mon, 04 Aug 2014 20:24:20 GMT
243
+ recorded_with: VCR 2.9.2