LitleOnline 8.13.2 → 8.16.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +17 -0
- data/CONTRIBUTORS +2 -0
- data/DESCRIPTION +1 -1
- data/README.md +2 -1
- data/Rakefile +2 -2
- data/SETUP.md +1 -2
- data/bin/Setup.rb +0 -1
- data/lib/Communications.rb +1 -4
- data/lib/Configuration.rb +5 -0
- data/lib/LitleOnline.rb +0 -1
- data/lib/LitleOnlineRequest.rb +243 -562
- data/lib/LitleXmlMapper.rb +23 -8
- data/lib/XMLFields.rb +18 -2
- data/test/functional/test_auth.rb +16 -0
- data/test/functional/test_token.rb +2 -1
- data/test/functional/test_updateCardValidationNumOnToken.rb +43 -0
- data/test/functional/ts_all.rb +1 -0
- data/test/unit/test_LitleOnlineRequest.rb +93 -1
- data/test/unit/test_auth.rb +14 -0
- data/test/unit/test_authReversal.rb +14 -1
- data/test/unit/test_capture.rb +10 -0
- data/test/unit/test_captureGivenAuth.rb +23 -0
- data/test/unit/test_credit.rb +16 -0
- data/test/unit/test_echeckCredit.rb +14 -0
- data/test/unit/test_echeckRedeposit.rb +27 -0
- data/test/unit/test_echeckSale.rb +13 -0
- data/test/unit/test_echeckVerification.rb +28 -0
- data/test/unit/test_echeckVoid.rb +13 -0
- data/test/unit/test_forceCapture.rb +22 -1
- data/test/unit/test_sale.rb +21 -0
- data/test/unit/test_token.rb +14 -0
- data/test/unit/test_updateCardValidationNumOnToken.rb +80 -0
- data/test/unit/ts_unit.rb +2 -1
- metadata +14 -12
- data/index.html?grep= +0 -18
@@ -41,5 +41,18 @@ module LitleOnline
|
|
41
41
|
assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
|
42
42
|
end
|
43
43
|
|
44
|
+
def test_logged_in_user
|
45
|
+
hash = {
|
46
|
+
'loggedInUser' => 'gdake',
|
47
|
+
'merchantSdk' => 'Ruby;8.14.0',
|
48
|
+
'merchantId' => '101',
|
49
|
+
'version'=>'8.8',
|
50
|
+
'reportGroup'=>'Planets',
|
51
|
+
'litleTxnId'=>'123456',
|
52
|
+
'echeck' => {'accType'=>'Checking','accNum'=>'12345657890','routingNum'=>'123456789','checkNum'=>'123455'}
|
53
|
+
}
|
54
|
+
LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
|
55
|
+
LitleOnlineRequest.new.echeck_sale(hash)
|
56
|
+
end
|
44
57
|
end
|
45
58
|
end
|
@@ -39,5 +39,33 @@ module LitleOnline
|
|
39
39
|
exception = assert_raise(RuntimeError){LitleOnlineRequest.new.echeck_verification(hash)}
|
40
40
|
assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
|
41
41
|
end
|
42
|
+
|
43
|
+
def test_logged_in_user
|
44
|
+
hash = {
|
45
|
+
'loggedInUser' => 'gdake',
|
46
|
+
'merchantSdk' => 'Ruby;8.14.0',
|
47
|
+
'merchantId' => '101',
|
48
|
+
'version'=>'8.8',
|
49
|
+
'reportGroup'=>'Planets',
|
50
|
+
'litleTxnId'=>'123456',
|
51
|
+
'echeck' => {'accType'=>'Checking','accNum'=>'12345657890','routingNum'=>'123456789','checkNum'=>'123455'}
|
52
|
+
}
|
53
|
+
LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
|
54
|
+
LitleOnlineRequest.new.echeck_verification(hash)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_merchant_data
|
58
|
+
hash = {
|
59
|
+
'merchantData' => {'campaign'=>'camping'},
|
60
|
+
'merchantId' => '101',
|
61
|
+
'version'=>'8.8',
|
62
|
+
'reportGroup'=>'Planets',
|
63
|
+
'litleTxnId'=>'123456',
|
64
|
+
'echeck' => {'accType'=>'Checking','accNum'=>'12345657890','routingNum'=>'123456789','checkNum'=>'123455'}
|
65
|
+
}
|
66
|
+
LitleXmlMapper.expects(:request).with(regexp_matches(/.*<\/echeck>.*<merchantData>.*<campaign>camping<\/campaign>.*<\/merchantData>/m), is_a(Hash))
|
67
|
+
LitleOnlineRequest.new.echeck_verification(hash)
|
68
|
+
end
|
69
|
+
|
42
70
|
end
|
43
71
|
end
|
@@ -37,5 +37,18 @@ module LitleOnline
|
|
37
37
|
LitleXmlMapper.expects(:request).with(regexp_matches(/.*<echeckVoid.*<litleTxnId>123456<\/litleTxnId>.*/m), is_a(Hash))
|
38
38
|
LitleOnlineRequest.new.echeck_void(hash)
|
39
39
|
end
|
40
|
+
def test_logged_in_user
|
41
|
+
hash = {
|
42
|
+
'loggedInUser' => 'gdake',
|
43
|
+
'merchantSdk' => 'Ruby;8.14.0',
|
44
|
+
'merchantId' => '101',
|
45
|
+
'version'=>'8.8',
|
46
|
+
'reportGroup'=>'Planets',
|
47
|
+
'litleTxnId'=>'123456',
|
48
|
+
}
|
49
|
+
LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
|
50
|
+
LitleOnlineRequest.new.echeck_void(hash)
|
51
|
+
end
|
52
|
+
|
40
53
|
end
|
41
54
|
end
|
@@ -84,7 +84,28 @@ module LitleOnline
|
|
84
84
|
exception = assert_raise(RuntimeError){LitleOnlineRequest.new.force_capture(hash)}
|
85
85
|
assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
|
86
86
|
end
|
87
|
-
|
87
|
+
|
88
|
+
def test_logged_in_user
|
89
|
+
hash = {
|
90
|
+
'loggedInUser' => 'gdake',
|
91
|
+
'merchantSdk' => 'Ruby;8.14.0',
|
92
|
+
'merchantId' => '101',
|
93
|
+
'version'=>'8.8',
|
94
|
+
'reportGroup'=>'Planets',
|
95
|
+
'litleTxnId'=>'123456',
|
96
|
+
'orderId'=>'12344',
|
97
|
+
'amount'=>'106',
|
98
|
+
'orderSource'=>'ecommerce',
|
99
|
+
'fraudCheck'=>{'authenticationTransactionId'=>'123'},
|
100
|
+
'cardholderAuthentication'=>{'authenticationTransactionId'=>'123'},
|
101
|
+
'card'=>{
|
102
|
+
'type'=>'VI',
|
103
|
+
'number' =>'4100000000000001',
|
104
|
+
'expDate' =>'1210'
|
105
|
+
}}
|
106
|
+
LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
|
107
|
+
LitleOnlineRequest.new.force_capture(hash)
|
108
|
+
end
|
88
109
|
end
|
89
110
|
|
90
111
|
end
|
data/test/unit/test_sale.rb
CHANGED
@@ -267,6 +267,27 @@ module LitleOnline
|
|
267
267
|
exception = assert_raise(RuntimeError){LitleOnlineRequest.new.sale(hash)}
|
268
268
|
assert_match /If card type is specified, it must be in /, exception.message
|
269
269
|
end
|
270
|
+
|
271
|
+
def test_logged_in_user
|
272
|
+
hash = {
|
273
|
+
'loggedInUser' => 'gdake',
|
274
|
+
'merchantSdk' => 'Ruby;8.14.0',
|
275
|
+
'merchantId' => '101',
|
276
|
+
'version'=>'8.8',
|
277
|
+
'reportGroup'=>'Planets',
|
278
|
+
'litleTxnId'=>'123456',
|
279
|
+
'orderId'=>'12344',
|
280
|
+
'amount'=>'106',
|
281
|
+
'orderSource'=>'ecommerce',
|
282
|
+
'card'=>{
|
283
|
+
'type'=>'VI',
|
284
|
+
'number' =>'4100000000000002',
|
285
|
+
'expDate' =>'1210'
|
286
|
+
}}
|
287
|
+
|
288
|
+
LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
|
289
|
+
LitleOnlineRequest.new.sale(hash)
|
290
|
+
end
|
270
291
|
|
271
292
|
end
|
272
293
|
end
|
data/test/unit/test_token.rb
CHANGED
@@ -79,6 +79,20 @@ module LitleOnline
|
|
79
79
|
assert_match /If echeckForToken is specified, it must have a accNum/, exception.message
|
80
80
|
end
|
81
81
|
|
82
|
+
def test_logged_in_user
|
83
|
+
hash = {
|
84
|
+
'loggedInUser'=>'gdake',
|
85
|
+
'merchantSdk' => 'Ruby;8.14.0',
|
86
|
+
'merchantId' => '101',
|
87
|
+
'version'=>'8.8',
|
88
|
+
'reportGroup'=>'Planets',
|
89
|
+
'orderId'=>'12344',
|
90
|
+
'echeckForToken'=>{'accNum'=>'12344565','routingNum'=>'123476545'}
|
91
|
+
}
|
92
|
+
LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
|
93
|
+
LitleOnlineRequest.new.register_token_request(hash)
|
94
|
+
end
|
95
|
+
|
82
96
|
end
|
83
97
|
|
84
98
|
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (c) 2012 Litle & Co.
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person
|
5
|
+
obtaining a copy of this software and associated documentation
|
6
|
+
files (the "Software"), to deal in the Software without
|
7
|
+
restriction, including without limitation the rights to use,
|
8
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the
|
10
|
+
Software is furnished to do so, subject to the following
|
11
|
+
conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
18
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
20
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
21
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
22
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
23
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
24
|
+
=end
|
25
|
+
require 'lib/LitleOnline'
|
26
|
+
require 'test/unit'
|
27
|
+
|
28
|
+
module LitleOnline
|
29
|
+
class TestUpdateCardValidationNumOnToken < Test::Unit::TestCase
|
30
|
+
def test_simple
|
31
|
+
hash = {
|
32
|
+
'orderId'=>'12344',
|
33
|
+
'litleToken'=>'1233456789101112',
|
34
|
+
'cardValidationNum'=>'123'
|
35
|
+
}
|
36
|
+
LitleXmlMapper.expects(:request).with(regexp_matches(/.*<orderId>1.*<litleToken>1233456789101112.*<cardValidationNum>123.*/m), is_a(Hash))
|
37
|
+
LitleOnlineRequest.new.update_card_validation_num_on_token(hash)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_order_id_is_optional
|
41
|
+
hash = {
|
42
|
+
'litleToken'=>'1233456789101112',
|
43
|
+
'cardValidationNum'=>'123'
|
44
|
+
}
|
45
|
+
LitleXmlMapper.expects(:request).with(regexp_matches(/.*<litleToken>1233456789101112.*<cardValidationNum>123.*/m), is_a(Hash))
|
46
|
+
LitleOnlineRequest.new.update_card_validation_num_on_token(hash)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_litle_token_is_required
|
50
|
+
hash = {
|
51
|
+
'orderId'=>'12344',
|
52
|
+
'cardValidationNum'=>'123'
|
53
|
+
}
|
54
|
+
exception = assert_raise(RuntimeError){LitleOnlineRequest.new.update_card_validation_num_on_token(hash)}
|
55
|
+
assert_match /If updateCardValidationNumOnToken is specified, it must have a litleToken/, exception.message
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_card_validation_num_is_required
|
59
|
+
hash = {
|
60
|
+
'orderId'=>'12344',
|
61
|
+
'litleToken'=>'1233456789101112'
|
62
|
+
}
|
63
|
+
exception = assert_raise(RuntimeError){LitleOnlineRequest.new.update_card_validation_num_on_token(hash)}
|
64
|
+
assert_match /If updateCardValidationNumOnToken is specified, it must have a cardValidationNum/, exception.message
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_logged_in_user
|
68
|
+
hash = {
|
69
|
+
'loggedInUser' => 'gdake',
|
70
|
+
'merchantSdk' => 'Ruby;8.14.0',
|
71
|
+
'orderId'=>'12344',
|
72
|
+
'litleToken'=>'1233456789101112',
|
73
|
+
'cardValidationNum'=>'123'
|
74
|
+
}
|
75
|
+
LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
|
76
|
+
LitleOnlineRequest.new.update_card_validation_num_on_token(hash)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
data/test/unit/ts_unit.rb
CHANGED
@@ -39,4 +39,5 @@ require_relative 'test_echeckRedeposit'
|
|
39
39
|
require_relative 'test_echeckSale'
|
40
40
|
require_relative 'test_echeckCredit'
|
41
41
|
require_relative 'test_echeckVerification'
|
42
|
-
require_relative 'test_echeckVoid'
|
42
|
+
require_relative 'test_echeckVoid'
|
43
|
+
require_relative 'test_updateCardValidationNumOnToken'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: LitleOnline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.
|
4
|
+
version: 8.16.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-29 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: xml-object
|
16
|
-
requirement: &
|
16
|
+
requirement: &54838500 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *54838500
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: xml-mapping
|
27
|
-
requirement: &
|
27
|
+
requirement: &54836740 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *54836740
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mocha
|
38
|
-
requirement: &
|
38
|
+
requirement: &54404280 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,8 +43,8 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
47
|
-
description: ! 'Litle Online Ruby SDK created for version 8.
|
46
|
+
version_requirements: *54404280
|
47
|
+
description: ! 'Litle Online Ruby SDK created for version 8.16 of Litle XML online
|
48
48
|
format, see the XSD schema for specific fields that are supported by this format.
|
49
49
|
|
50
50
|
|
@@ -62,6 +62,7 @@ extensions: []
|
|
62
62
|
extra_rdoc_files: []
|
63
63
|
files:
|
64
64
|
- README.md
|
65
|
+
- CONTRIBUTORS
|
65
66
|
- Rakefile
|
66
67
|
- lib/LitleOnlineRequest.rb
|
67
68
|
- lib/LitleXmlMapper.rb
|
@@ -70,7 +71,6 @@ files:
|
|
70
71
|
- lib/cacert.pem
|
71
72
|
- lib/Communications.rb
|
72
73
|
- lib/Configuration.rb
|
73
|
-
- index.html?grep=
|
74
74
|
- bin/Setup.rb
|
75
75
|
- bin/sample_driver.rb
|
76
76
|
- SETUP.md
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- test/unit/test_capture.rb
|
83
83
|
- test/unit/test_xmlfields.rb
|
84
84
|
- test/unit/test_auth.rb
|
85
|
+
- test/unit/test_updateCardValidationNumOnToken.rb
|
85
86
|
- test/unit/ts_unit.rb
|
86
87
|
- test/unit/test_echeckRedeposit.rb
|
87
88
|
- test/unit/test_echeckSale.rb
|
@@ -99,6 +100,7 @@ files:
|
|
99
100
|
- test/functional/ts_all.rb
|
100
101
|
- test/functional/test_xmlfields.rb
|
101
102
|
- test/functional/test_auth.rb
|
103
|
+
- test/functional/test_updateCardValidationNumOnToken.rb
|
102
104
|
- test/functional/test_echeckRedeposit.rb
|
103
105
|
- test/functional/test_echeckSale.rb
|
104
106
|
- test/functional/test_captureGivenAuth.rb
|
@@ -135,10 +137,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
137
|
requirements:
|
136
138
|
- Contact sdksupport@litle.com for more information
|
137
139
|
rubyforge_project:
|
138
|
-
rubygems_version: 1.8.
|
140
|
+
rubygems_version: 1.8.17
|
139
141
|
signing_key:
|
140
142
|
specification_version: 3
|
141
143
|
summary: Ruby SDK produced by Litle & Co. for online transaction processing using
|
142
|
-
Litle XML format v8.
|
144
|
+
Litle XML format v8.16
|
143
145
|
test_files:
|
144
146
|
- test/unit/ts_unit.rb
|
data/index.html?grep=
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
<!doctype html><html itemscope itemtype="http://schema.org/WebPage"><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><meta name="description" content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for."><meta name="robots" content="noodp"><meta itemprop="image" content="/images/google_favicon_128.png"><title>Google</title><script>window.google={kEI:"caDoT43yLcrj0QHFrPmgCg",getEI:function(a){var b;while(a&&!(a.getAttribute&&(b=a.getAttribute("eid"))))a=a.parentNode;return b||google.kEI},https:function(){return window.location.protocol=="https:"},kEXPI:"17259,24472,35702,37607,37864,38252,38816,39366,39370,39410,39423,39537,39730,39737",kCSI:{e:"17259,24472,35702,37607,37864,38252,38816,39366,39370,39410,39423,39537,39730,39737",ei:"caDoT43yLcrj0QHFrPmgCg"},authuser:0,ml:function(){},kHL:"en",time:function(){return(new Date).getTime()},log:function(a,
|
2
|
-
b,c,e){var d=new Image,h=google,i=h.lc,f=h.li,j="";d.onerror=(d.onload=(d.onabort=function(){delete i[f]}));i[f]=d;if(!c&&b.search("&ei=")==-1)j="&ei="+google.getEI(e);var g=c||"/gen_204?atyp=i&ct="+a+"&cad="+b+j+"&zx="+google.time();var k=/^http:/i;if(k.test(g)&&google.https()){google.ml(new Error("GLMM"),false,{src:g});delete i[f];return}d.src=g;h.li=f+1},lc:[],li:0,Toolbelt:{},y:{},x:function(a,b){google.y[a.id]=[a,b];return false}};
|
3
|
-
window.google.sn="webhp";window.google.timers={};window.google.startTick=function(a,b){window.google.timers[a]={t:{start:(new Date).getTime()},bfr:!(!b)}};window.google.tick=function(a,b,c){if(!window.google.timers[a])google.startTick(a);window.google.timers[a].t[b]=c||(new Date).getTime()};google.startTick("load",true);try{}catch(u){}
|
4
|
-
var _gjwl=location;function _gjuc(){var e=_gjwl.href.indexOf("#");if(e>=0){var a=_gjwl.href.substring(e);if(a.indexOf("&q=")>0||a.indexOf("#q=")>=0){a=a.substring(1);if(a.indexOf("#")==-1){for(var c=0;c<a.length;){var d=c;if(a.charAt(d)=="&")++d;var b=a.indexOf("&",d);if(b==-1)b=a.length;var f=a.substring(d,b);if(f.indexOf("fp=")==0){a=a.substring(0,c)+a.substring(b,a.length);b=c}else if(f=="cad=h")return 0;c=b}_gjwl.href="/search?"+a+"&cad=h";return 1}}}return 0}function _gjp(){!(window._gjwl.hash&&
|
5
|
-
window._gjuc())&&setTimeout(_gjp,500)};
|
6
|
-
window._gjp && _gjp()</script><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}</style><style id=gstyle>body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}body,td,a,p,.h{font-family:arial,sans-serif}.h{color:#36c;font-size:20px}.q{color:#00c}.ts td{padding:0}.ts{border-collapse:collapse}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:-moz-inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}a.gb1,a.gb2,a.gb3,a.gb4{color:#11c !important}body{background:#fff;color:black}a{color:#11c;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#36c}a:visited{color:#551a8b}a.gb1,a.gb4{text-decoration:underline}a.gb3:hover{text-decoration:none}#ghead a.gb2:hover{color:#fff!important}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px;}.lsbb{background:#eee;border:solid 1px;border-color:#ccc #999 #999 #ccc;height:30px;display:block}.ftl,#fll a{display:inline-block;margin:0 12px}.lsb{background:url(/images/srpr/nav_logo80.png) 0 -258px repeat-x;border:none;color:#000;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#ccc}.lst:focus{outline:none}#addlang a{padding:0 3px}.gac_v div{display:none}.gac_v .gac_v2,.gac_bt{display:block!important}table.gssb_c{z-index:986 }.nbcl{background:url(/images/srpr/nav_logo80.png) no-repeat ;height:px;width:px}</style><script>window.rwt=function(a,f,g,l,m,h,c,n,i){try{if(a===window){a=window.event.srcElement;while(a){if(a.href)break;a=a.parentNode}}var b=encodeURIComponent||escape,d;d=a.getAttribute("href");if(c&&c.substring(0,6)!="&sig2=")c="&sig2="+c;var o=["/url?sa=t","","&cd=",b(m),i?"&authuser="+b(i):"",google.j&&google.j.pf?"&sqi=2":"","&ved=",b(n),"&url=",b(d).replace(/\+/g,"%2B"),"&ei=","caDoT43yLcrj0QHFrPmgCg",h?"&usg="+h:"",c].join("");a.href=o;a.onmousedown=""}catch(p){}return true};
|
7
|
-
</script></head><body bgcolor=#ffffff text=#000000 link=#0000cc vlink=#551a8b alink=#ff0000 onload="document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();if(document.images)new Image().src='/images/srpr/nav_logo80.png'" ><textarea id=csi style=display:none></textarea><div id=mngb><div id=gbar><nobr><b class=gb1>Search</b> <a class=gb1 href="http://www.google.com/imghp?hl=en&tab=wi">Images</a> <a class=gb1 href="http://video.google.com/?hl=en&tab=wv">Videos</a> <a class=gb1 href="http://maps.google.com/maps?hl=en&tab=wl">Maps</a> <a class=gb1 href="http://news.google.com/nwshp?hl=en&tab=wn">News</a> <a class=gb1 href="http://www.google.com/shopping?hl=en&tab=wf">Shopping</a> <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1 style="text-decoration:none" href="http://www.google.com/intl/en/options/"><u>More</u> »</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe><a href="/url?sa=p&pref=ig&pval=3&q=http://www.google.com/ig%3Fgrep%3D%26hl%3Den%26source%3Diglk&usg=AFQjCNH79yl80yOtNV3l-pB6DxUyFBANTA" class=gb4>iGoogle</a> | </span><a href="http://www.google.com/history/optout?hl=en" class=gb4>Web History</a> | <a href="/preferences?hl=en" class=gb4>Settings</a> | <a target=_top id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=en&continue=http://www.google.com/%3Fgrep%3D" class=gb4>Sign in</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div></div><iframe name=wgjf style=display:none></iframe><center><br clear=all id=lgpd><div id=lga><img alt="Google" height=95 id=hplogo src="/intl/en_ALL/images/srpr/logo1w.png" width=275 style="padding:28px 0 14px" onload="window.lol&&lol()"><br><br></div><form action="/search" name=f><table cellpadding=0 cellspacing=0><tr valign=top><td width=25%> </td><td align=center nowrap><input type=hidden name=ie value="ISO-8859-1"><input name=hl type=hidden value=en><input name=source type=hidden value=hp><div class=ds style="height:32px;margin:4px 0"><input autocomplete=off maxlength=2048 name=q class="lst" title="Google Search" value="" size=57 style="color:#000;margin:0;padding:5px 8px 0 6px;vertical-align:top"></div><br style="line-height:0"><span class=ds ><span class=lsbb><input name=btnG type=submit value="Google Search" class=lsb></span></span><span class=ds><span class=lsbb><input name=btnI type=submit class=lsb value="I'm Feeling Lucky" onclick="if(this.form.q.value)this.checked=1;else top.location='/doodles/'"></span></span></td><td nowrap width=25% align=left class="fl sblc"><a href="/advanced_search?hl=en">Advanced search</a><a href="/language_tools?hl=en">Language tools</a></td></tr></table><input type=hidden id=gbv name=gbv value="1"></form><div style="font-size:83%;min-height:3.5em"><br></div><span id=footer><center id=fctr><div style="font-size:10pt"><div id=fll style="margin:19px auto;text-align:center"><a href="/intl/en/ads/">Advertising Programs</a><a href="/services/">Business Solutions</a><a href="https://plus.google.com/116899029375914044550" rel="publisher">+Google</a><a href="/intl/en/about.html">About Google</a></div></div><p style="color:#767676;font-size:8pt">© 2012 - <a href="/intl/en/policies/">Privacy & Terms</a></p></center></span> </center><div id=xjsd></div><div id=xjsi><script>if(google.y)google.y.first=[];google.dlj=function(b){window.setTimeout(function(){var a=document.createElement("script");a.src=b;document.getElementById("xjsd").appendChild(a)},0)};
|
8
|
-
(function(){
|
9
|
-
var c,d,e=false;function f(a){var b={_sn:a?"FAILURE":"FALLBACK",_pu:c,_fu:d},h=google.ml(new Error("pml"),false,b,true);google.log(0,"",h)}function g(){if(!google.pml)f(true)}function i(a){var b=document.createElement("script");b.src=a;document.getElementById("xjsd").appendChild(b)}function j(){if(!e&&!google.pml){e=true;f();i(d,g)}}google.dljp=
|
10
|
-
function(a,b){c=a;google.xjsu=a;d=b;if(!google.xjsi)window.setTimeout(function(){i(c,j)},0)};
|
11
|
-
})();
|
12
|
-
(function(){google.xjsol=function(a){if(google.sc&&(a=google.sc[a])){for(var b=0;b<a.cb.length;b++)a.cb[b]();a.cb=[];a.lc=!0}};google.xjsl=function(a,b){var c=google.sc[a];c&&(b&&(c.lc?b():c.cb.push(b)),!c.ls&&!c.lc&&(google.dlj(c.u),c.ls=!0))};google.register=google.register||function(a,b){google.y.first.push(function(){google.register(a,b)})};})();
|
13
|
-
google.y.first=[];if(!google.xjs){google.dstr=[];google.rein=[];window._=window._||{};window._._DumpException=function(e){throw e};if(google.timers&&google.timers.load.t){google.timers.load.t.xjsls=new Date().getTime();}google.xjsuo='/xjs/_/js/s/s,st,anim,bbd,sb_he,hv,pj,tbpr,tbui,spp,rsn,ob,mb,lc,du,ada,lu,pcc,csitl/rt\x3dj/ver\x3dcQPWT20rjmA.en_US./d\x3d1/rs\x3dAItRSTMrrebjXekqCRh-6t6eA1DHRj0V7g';if(google.xjsuop)google.xjsuo=google.xjsuo.replace(/xjs\/_\/js/,google.xjsuop);google.dljp(google.xjsuo,'/xjs/_/js/s/s,st,anim,bbd,sb_he,hv,pj,tbpr,tbui,spp,rsn,ob,mb,lc,du,ada,lu,pcc,csitl/rt\x3dj/ver\x3dVhqBgPa68yo.en_US./d\x3d1/rs\x3dAItRSTNVtd_7RGA-1diChwBGjIknyJlDUQ');google.xjs=1}google.pmc={14:{},263:{},60:{},81:{},10:{"client":"hp","dh":true,"ds":"","fl":true,"host":"google.com","jsonp":true,"msgs":{"lcky":"I\u0026#39;m Feeling Lucky","lml":"Learn more","psrc":"This search was removed from your \u003Ca href=\"/history\"\u003EWeb History\u003C/a\u003E","psrl":"Remove","srch":"Google Search"},"ovr":{"l":1,"ms":1,"p":1},"pq":"","rgen":true,"scd":10,"sce":5,"stok":"GeMuz8exdG27fwjKX7r7Pm-tkTc"},152:{},213:{"pberr":"\u003Cfont color=red\u003EError:\u003C/font\u003E The server could not complete your request. Try again in 30 seconds."},114:{"rvu_report_msg":"Report","rvu_reported_msg":"Reported"},78:{},25:{"g":8,"k":false,"m":{"app":true,"bks":true,"blg":true,"dsc":true,"evn":true,"fin":true,"flm":true,"frm":true,"isch":true,"klg":true,"mbl":true,"nws":true,"plcs":true,"ppl":true,"prc":true,"pts":true,"rcp":true,"shop":true,"vid":true},"t":null},216:{},105:{},22:{"db":false,"m_errors":{"32":"Sorry, no more results to show.","default":"\u003Cfont color=red\u003EError:\u003C/font\u003E The server could not complete your request. Try again in 30 seconds."},"m_tip":"Click for more information","nlpm":"-153px -84px","nlpp":"-153px -70px","utp":false},77:{},254:{},146:{},144:{},121:{},63:{"cnfrm":"Reported","prmpt":"Report"},84:{"tt_kft":true},97:{},24:{},38:{}};google.y.first.push(function(){if(google.med){google.med('init');google.initHistory();google.med('history');}google.History&&google.History.initialize('/?grep\x3d')});if(google.j&&google.j.en&&google.j.xi){window.setTimeout(google.j.xi,0);}</script></div><script>(function(){
|
14
|
-
var b,d,e,f;function g(a,c){if(a.removeEventListener){a.removeEventListener("load",c,false);a.removeEventListener("error",c,false)}else{a.detachEvent("onload",c);a.detachEvent("onerror",c)}}function h(a){f=(new Date).getTime();++d;a=a||window.event;var c=a.target||a.srcElement;g(c,h)}var i=document.getElementsByTagName("img");b=i.length;d=0;for(var j=0,k;j<b;++j){k=i[j];if(k.complete||typeof k.src!="string"||!k.src)++d;else if(k.addEventListener){k.addEventListener("load",h,false);k.addEventListener("error",
|
15
|
-
h,false)}else{k.attachEvent("onload",h);k.attachEvent("onerror",h)}}e=b-d;function l(){if(!google.timers.load.t)return;google.timers.load.t.ol=(new Date).getTime();google.timers.load.t.iml=f;google.kCSI.imc=d;google.kCSI.imn=b;google.kCSI.imp=e;if(google.stt!==undefined)google.kCSI.stt=google.stt;google.timers.load.t.xjs&&google.report&&google.report(google.timers.load,google.kCSI)}if(window.addEventListener)window.addEventListener("load",
|
16
|
-
l,false);else if(window.attachEvent)window.attachEvent("onload",l);google.timers.load.t.prt=(f=(new Date).getTime());
|
17
|
-
})();
|
18
|
-
</script>
|