one_password 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. data/.gitignore +17 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +29 -0
  6. data/Rakefile +21 -0
  7. data/lib/one_password.rb +19 -0
  8. data/lib/one_password/encryption.rb +74 -0
  9. data/lib/one_password/encryption_key.rb +34 -0
  10. data/lib/one_password/errors.rb +13 -0
  11. data/lib/one_password/item.rb +156 -0
  12. data/lib/one_password/keychain.rb +47 -0
  13. data/lib/one_password/profile.rb +94 -0
  14. data/lib/one_password/version.rb +3 -0
  15. data/one_password.gemspec +27 -0
  16. data/spec/fixtures/1Password.agilekeychain/1Password.html +3870 -0
  17. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/0EDE2B13D7AC4E2C9105842682ACB187 +0 -0
  18. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/0EDE2B13D7AC4E2C9105842682ACB187.def +1 -0
  19. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/13C8E12AC8E54B1F873BAB0824E521BC +0 -0
  20. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/13C8E12AC8E54B1F873BAB0824E521BC.def +1 -0
  21. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/2A632FDD32F5445E91EB5636C7580447 +0 -0
  22. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/2A632FDD32F5445E91EB5636C7580447.def +1 -0
  23. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/358B7411EB8B45CD9CE592ED16F3E9DE +0 -0
  24. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/358B7411EB8B45CD9CE592ED16F3E9DE.def +1 -0
  25. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/468B1E24F93B413DAD57ABE6F1C01DF6 +0 -0
  26. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/468B1E24F93B413DAD57ABE6F1C01DF6.def +1 -0
  27. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/5ADFF73C09004C448D45565BC4750DE2 +0 -0
  28. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/5ADFF73C09004C448D45565BC4750DE2.def +1 -0
  29. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/72366D161D9E43D98E58EB801DAD1EF8 +0 -0
  30. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/72366D161D9E43D98E58EB801DAD1EF8.def +1 -0
  31. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/D8F79F17D6384808848B213EB4946ECA +0 -0
  32. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/D8F79F17D6384808848B213EB4946ECA.def +1 -0
  33. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/EC0A40400ABB4B16926B7417E95C9669 +0 -0
  34. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/EC0A40400ABB4B16926B7417E95C9669.def +1 -0
  35. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/F3707FA58EA7480884BC6A662658E039 +0 -0
  36. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/F3707FA58EA7480884BC6A662658E039.def +1 -0
  37. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/F5F099B210F248348E22934DDC3338B2 +0 -0
  38. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/F5F099B210F248348E22934DDC3338B2.def +1 -0
  39. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/F78CEC04078743B6975511A6FDDBED7E +0 -0
  40. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/l/F78CEC04078743B6975511A6FDDBED7E.def +1 -0
  41. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/0EDE2B13D7AC4E2C9105842682ACB187 +0 -0
  42. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/0EDE2B13D7AC4E2C9105842682ACB187.def +1 -0
  43. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/13C8E12AC8E54B1F873BAB0824E521BC +0 -0
  44. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/13C8E12AC8E54B1F873BAB0824E521BC.def +1 -0
  45. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/2A632FDD32F5445E91EB5636C7580447 +0 -0
  46. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/2A632FDD32F5445E91EB5636C7580447.def +1 -0
  47. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/358B7411EB8B45CD9CE592ED16F3E9DE +0 -0
  48. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/358B7411EB8B45CD9CE592ED16F3E9DE.def +1 -0
  49. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/468B1E24F93B413DAD57ABE6F1C01DF6 +0 -0
  50. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/468B1E24F93B413DAD57ABE6F1C01DF6.def +1 -0
  51. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/5ADFF73C09004C448D45565BC4750DE2 +0 -0
  52. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/5ADFF73C09004C448D45565BC4750DE2.def +1 -0
  53. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/72366D161D9E43D98E58EB801DAD1EF8 +0 -0
  54. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/72366D161D9E43D98E58EB801DAD1EF8.def +1 -0
  55. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/D8F79F17D6384808848B213EB4946ECA +0 -0
  56. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/D8F79F17D6384808848B213EB4946ECA.def +1 -0
  57. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/EC0A40400ABB4B16926B7417E95C9669 +0 -0
  58. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/EC0A40400ABB4B16926B7417E95C9669.def +1 -0
  59. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/F3707FA58EA7480884BC6A662658E039 +0 -0
  60. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/F3707FA58EA7480884BC6A662658E039.def +1 -0
  61. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/F5F099B210F248348E22934DDC3338B2 +0 -0
  62. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/F5F099B210F248348E22934DDC3338B2.def +1 -0
  63. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/F78CEC04078743B6975511A6FDDBED7E +0 -0
  64. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/m/F78CEC04078743B6975511A6FDDBED7E.def +1 -0
  65. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/0EDE2B13D7AC4E2C9105842682ACB187 +0 -0
  66. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/0EDE2B13D7AC4E2C9105842682ACB187.def +1 -0
  67. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/13C8E12AC8E54B1F873BAB0824E521BC +0 -0
  68. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/13C8E12AC8E54B1F873BAB0824E521BC.def +1 -0
  69. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/2A632FDD32F5445E91EB5636C7580447 +0 -0
  70. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/2A632FDD32F5445E91EB5636C7580447.def +1 -0
  71. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/358B7411EB8B45CD9CE592ED16F3E9DE +0 -0
  72. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/358B7411EB8B45CD9CE592ED16F3E9DE.def +1 -0
  73. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/468B1E24F93B413DAD57ABE6F1C01DF6 +0 -0
  74. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/468B1E24F93B413DAD57ABE6F1C01DF6.def +1 -0
  75. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/5ADFF73C09004C448D45565BC4750DE2 +0 -0
  76. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/5ADFF73C09004C448D45565BC4750DE2.def +1 -0
  77. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/72366D161D9E43D98E58EB801DAD1EF8 +0 -0
  78. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/72366D161D9E43D98E58EB801DAD1EF8.def +1 -0
  79. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/D8F79F17D6384808848B213EB4946ECA +0 -0
  80. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/D8F79F17D6384808848B213EB4946ECA.def +1 -0
  81. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/EC0A40400ABB4B16926B7417E95C9669 +0 -0
  82. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/EC0A40400ABB4B16926B7417E95C9669.def +1 -0
  83. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/F3707FA58EA7480884BC6A662658E039 +0 -0
  84. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/F3707FA58EA7480884BC6A662658E039.def +1 -0
  85. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/F5F099B210F248348E22934DDC3338B2 +0 -0
  86. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/F5F099B210F248348E22934DDC3338B2.def +1 -0
  87. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/F78CEC04078743B6975511A6FDDBED7E +0 -0
  88. data/spec/fixtures/1Password.agilekeychain/a/default/thumb/s/F78CEC04078743B6975511A6FDDBED7E.def +1 -0
  89. data/spec/fixtures/1Password.agilekeychain/config/buildnum +1 -0
  90. data/spec/fixtures/1Password.agilekeychain/config/use-thumbnails +1 -0
  91. data/spec/fixtures/1Password.agilekeychain/data/default/.1password.keys +0 -0
  92. data/spec/fixtures/1Password.agilekeychain/data/default/.password.hint +1 -0
  93. data/spec/fixtures/1Password.agilekeychain/data/default/0EDE2B13D7AC4E2C9105842682ACB187.1password +1 -0
  94. data/spec/fixtures/1Password.agilekeychain/data/default/13C8E12AC8E54B1F873BAB0824E521BC.1password +1 -0
  95. data/spec/fixtures/1Password.agilekeychain/data/default/1password.keys +0 -0
  96. data/spec/fixtures/1Password.agilekeychain/data/default/27DCFA2810B24083A3ECC7CEABC7C0A9.1password +1 -0
  97. data/spec/fixtures/1Password.agilekeychain/data/default/2A632FDD32F5445E91EB5636C7580447.1password +1 -0
  98. data/spec/fixtures/1Password.agilekeychain/data/default/358B7411EB8B45CD9CE592ED16F3E9DE.1password +1 -0
  99. data/spec/fixtures/1Password.agilekeychain/data/default/3A47A0E3FEE948ADA9028FF0DA053CDB.1password +1 -0
  100. data/spec/fixtures/1Password.agilekeychain/data/default/468B1E24F93B413DAD57ABE6F1C01DF6.1password +1 -0
  101. data/spec/fixtures/1Password.agilekeychain/data/default/4E36C011EE8348B1B24418218B04018C.1password +1 -0
  102. data/spec/fixtures/1Password.agilekeychain/data/default/5ADFF73C09004C448D45565BC4750DE2.1password +1 -0
  103. data/spec/fixtures/1Password.agilekeychain/data/default/72366D161D9E43D98E58EB801DAD1EF8.1password +1 -0
  104. data/spec/fixtures/1Password.agilekeychain/data/default/D06307ADA44C4031BA2FF4B174DE79CB.1password +1 -0
  105. data/spec/fixtures/1Password.agilekeychain/data/default/D1820AA8CB534AC6A4B5A2C0263FD3B2.1password +1 -0
  106. data/spec/fixtures/1Password.agilekeychain/data/default/D8F79F17D6384808848B213EB4946ECA.1password +1 -0
  107. data/spec/fixtures/1Password.agilekeychain/data/default/E482B70C038D4DD78A0940728FA737BF.1password +1 -0
  108. data/spec/fixtures/1Password.agilekeychain/data/default/EC0A40400ABB4B16926B7417E95C9669.1password +1 -0
  109. data/spec/fixtures/1Password.agilekeychain/data/default/F3707FA58EA7480884BC6A662658E039.1password +1 -0
  110. data/spec/fixtures/1Password.agilekeychain/data/default/F5F099B210F248348E22934DDC3338B2.1password +1 -0
  111. data/spec/fixtures/1Password.agilekeychain/data/default/F7883ADDE5944B349ABB5CBEC20F39BE.1password +1 -0
  112. data/spec/fixtures/1Password.agilekeychain/data/default/F78CEC04078743B6975511A6FDDBED7E.1password +1 -0
  113. data/spec/fixtures/1Password.agilekeychain/data/default/contents.js +1 -0
  114. data/spec/fixtures/1Password.agilekeychain/data/default/encryptionKeys.js +1 -0
  115. data/spec/fixtures/1Password.tsv +20 -0
  116. data/spec/fixtures/config.ru +1 -0
  117. data/spec/one_password/keychain_spec.rb +78 -0
  118. data/spec/spec_helper.rb +15 -0
  119. metadata +370 -0
@@ -0,0 +1,94 @@
1
+ require 'one_password/encryption_key'
2
+ require 'one_password/item'
3
+
4
+ module OnePassword
5
+ class Profile
6
+ # @param [OnePassword::Keychain] keychain
7
+ # @param [String, Pathname] directory
8
+ def initialize(keychain, directory)
9
+ @keychain = keychain
10
+ @name = File.basename(directory)
11
+ @directory = Pathname(directory)
12
+ end
13
+
14
+ attr_reader :name, :encryption_keys, :directory
15
+
16
+ def contents
17
+ load_contents unless @contents
18
+ @contents
19
+ end
20
+
21
+ def all
22
+ load_contents unless @all
23
+ @all
24
+ end
25
+
26
+ def encryption_keys
27
+ load_encryption_keys unless @encryption_keys
28
+ @encryption_keys
29
+ end
30
+
31
+ def all_encryption_keys
32
+ load_encryption_keys unless @all_encryption_keys
33
+ @all_encryption_keys
34
+ end
35
+
36
+ def encryption_keys_loaded?
37
+ !!@encryption_keys
38
+ end
39
+
40
+ def password
41
+ raise NoPassword unless @password
42
+ @password
43
+ end
44
+
45
+ def password=(password)
46
+ @password = password
47
+ end
48
+
49
+ protected
50
+
51
+ def contents_file
52
+ @directory.join('contents.js')
53
+ end
54
+
55
+ def encryption_keys_file
56
+ @directory.join('encryptionKeys.js')
57
+ end
58
+
59
+ def load_encryption_keys
60
+ self.encryption_keys = JSON.parse(File.read(encryption_keys_file))
61
+ end
62
+
63
+ def load_contents
64
+ self.contents = JSON.parse(File.read(contents_file)) unless @contents
65
+ end
66
+
67
+ # @param [Array] new_contents
68
+ def contents=(new_contents)
69
+ @all = {}
70
+ @contents = CATEGORIES.inject({}) do |result, type|
71
+ result[type] = []
72
+ result
73
+ end
74
+
75
+ new_contents.each do |item_array|
76
+ item = Item.new(self, item_array)
77
+ next if item.system?
78
+
79
+ @all[item.uuid] = item
80
+ @contents[item.category] << item
81
+ end
82
+
83
+ @contents
84
+ end
85
+
86
+ def encryption_keys=(keys)
87
+ @all_encryption_keys = keys.delete('list').map { |data| EncryptionKey.new(self, data) }
88
+ @encryption_keys = keys.inject({}) do |result, (type, identifier)|
89
+ result[type] = @all_encryption_keys.find { |key| key.identifier == identifier }
90
+ result
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,3 @@
1
+ module OnePassword
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'one_password/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'one_password'
8
+ spec.version = OnePassword::VERSION
9
+ spec.authors = ['Alexander Semyonov']
10
+ spec.email = %w(al@semyonov.us)
11
+ spec.description = %q{File to operate with 1Password's Agile Keychain}
12
+ spec.summary = %q{1Password Agile Keychain support for Ruby}
13
+ spec.homepage = ''
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = %w(lib)
20
+
21
+ spec.add_runtime_dependency 'activesupport'
22
+ spec.add_runtime_dependency 'pbkdf2'
23
+ spec.add_development_dependency 'bundler', '~> 1.3'
24
+ spec.add_development_dependency 'rake'
25
+ spec.add_development_dependency 'rspec'
26
+ spec.add_development_dependency 'yard'
27
+ end
@@ -0,0 +1,3870 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml">
4
+ <head>
5
+ <title>1Password</title>
6
+ <meta name="com.agilewebsolutions.1Password.autosave" value="no">
7
+
8
+ <!-- Embedded base64 images - thanks to http://www.greywyvern.com/code/php/binary2base64 -->
9
+ <style>
10
+ /* @group Reset */
11
+
12
+ /* http://meyerweb.com/eric/tools/css/reset/ */
13
+ /* v1.0 | 20080212 */
14
+
15
+ html, body, div, span, applet, object, iframe,
16
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
17
+ a, abbr, acronym, address, big, cite, code,
18
+ del, dfn, em, font, img, ins, kbd, q, s, samp,
19
+ small, strike, strong, sub, sup, tt, var,
20
+ b, u, i, center,
21
+ dl, dt, dd, ol, ul, li,
22
+ fieldset, form, label, legend,
23
+ table, caption, tbody, tfoot, thead, tr, th, td {
24
+ margin: 0;
25
+ padding: 0;
26
+ border: 0;
27
+ outline: 0;
28
+ font-size: 100%;
29
+ vertical-align: baseline;
30
+ background: transparent;
31
+ }
32
+ body {
33
+ line-height: 1;
34
+ }
35
+ ol, ul {
36
+ list-style: none;
37
+ }
38
+ blockquote, q {
39
+ quotes: none;
40
+ }
41
+ blockquote:before, blockquote:after,
42
+ q:before, q:after {
43
+ content: '';
44
+ content: none;
45
+ }
46
+
47
+ /* remember to define focus styles! */
48
+ :focus {
49
+ outline: 0;
50
+ }
51
+
52
+ /* remember to highlight inserts somehow! */
53
+ ins {
54
+ text-decoration: none;
55
+ }
56
+ del {
57
+ text-decoration: line-through;
58
+ }
59
+
60
+ /* tables still need 'cellspacing="0"' in the markup */
61
+ table {
62
+ border-collapse: collapse;
63
+ border-spacing: 0;
64
+ }
65
+
66
+ /* @end */
67
+
68
+ /* @group Login */
69
+
70
+ a, a:active, a:focus {
71
+ border-style: none;
72
+ outline: 0;
73
+ }
74
+
75
+ img {
76
+ border-style: none;
77
+ outline: 0;
78
+ }
79
+
80
+ img#background {
81
+ position: absolute;
82
+ width: 100%;
83
+ height: 100%;
84
+ }
85
+
86
+ img#left {
87
+ width: 20px;
88
+ position: absolute;
89
+ height: 100%;
90
+ }
91
+
92
+ img#top {
93
+ height: 20px;
94
+ position: absolute;
95
+ top: 0;
96
+ width: 100%;
97
+ border-bottom: 1px solid #4c4c4c;
98
+ }
99
+
100
+ img#right {
101
+ width: 20px;
102
+ position: absolute;
103
+ height: 100%;
104
+ right: 0;
105
+ }
106
+
107
+ img#bottom {
108
+ height: 20px;
109
+ position: absolute;
110
+ bottom: 0;
111
+ border-top: 1px solid rgba(255,255,255,0.3);
112
+ width: 100%;
113
+ }
114
+
115
+ img#doors {
116
+ width: 40px;
117
+ position: absolute;
118
+ left: 50%;
119
+ margin-left: -187px;
120
+ height: 100%;
121
+ }
122
+
123
+ img#branding {
124
+ position: absolute;
125
+ right: 0;
126
+ bottom: 0;
127
+ }
128
+
129
+ form#login {
130
+ position: absolute;
131
+ left: 50%;
132
+ top: 50%;
133
+ margin: -145px 0 0 -282px;
134
+ padding: 0;
135
+ width: 471px;
136
+ height: 267px;
137
+ }
138
+
139
+ button, button:active, button:focus {
140
+ margin: 0;
141
+ padding: 0;
142
+ background-color: transparent;
143
+ border-style: none;
144
+ display: block;
145
+ }
146
+
147
+ #keyhole {
148
+ width: 195px;
149
+ height: 267px;
150
+ background-image: url(data:image/png;base64,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%3D);
151
+ position: absolute;
152
+ }
153
+
154
+ #passwordLabel {
155
+ background-image: url(data:image/png;base64,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%3D);
156
+ width: 180px;
157
+ height: 16px;
158
+ position: absolute;
159
+ margin: 84px 0 0 208px;
160
+ padding: 0;
161
+ }
162
+
163
+ #passwordLabel.error {
164
+ background-position: 0 -16px !important;
165
+ }
166
+
167
+ #masterPassword {
168
+ border-style: none;
169
+ font-size: 26px;
170
+ color: white;
171
+ background-color: transparent;
172
+ padding: 6px 16px 9px 28px;
173
+ vertical-align: top;
174
+ margin: 111px 0 0 179px;
175
+ position: absolute;
176
+ width: 248px;
177
+ height: 31px;
178
+ text-shadow: #000 0 2px 5px;
179
+ background-image: url(data:image/png;base64,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%3D);
180
+ }
181
+
182
+ #masterPassword:focus {
183
+ background-position: 0 -46px;
184
+ }
185
+
186
+ #masterPassword.error:focus {
187
+ background-position: 0 -92px;
188
+ }
189
+
190
+ #unlock {
191
+ width: 87px;
192
+ height: 48px;
193
+ background: transparent url(data:image/png;base64,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%3D%3D) no-repeat;
194
+ visibility: visible;
195
+ position: absolute;
196
+ margin: 109px 0 0 479px;
197
+ }
198
+
199
+ #unlock:hover {
200
+ background-position: 0 -48px;
201
+ }
202
+
203
+ #unlock:active {
204
+ background-position: 0 -96px;
205
+ }
206
+
207
+ #unlock:focus {
208
+ background-position: 0 -144px;
209
+ }
210
+
211
+ div#wrapper {
212
+ min-height: 400px;
213
+ min-width: 650px;
214
+ position: absolute;
215
+ width: 100%;
216
+ height: 100%;
217
+ }
218
+
219
+ img#rivetTL {
220
+ position: absolute;
221
+ top: 0;
222
+ left: 0;
223
+ }
224
+
225
+ img#rivetTR {
226
+ position: absolute;
227
+ top: 0;
228
+ right: 0;
229
+ }
230
+
231
+ img#rivetBL {
232
+ position: absolute;
233
+ left: 0;
234
+ bottom: 0;
235
+ }
236
+
237
+ img#rivetsDoorsTop {
238
+ position: absolute;
239
+ top: 0;
240
+ left: 50%;
241
+ margin-left: -189px;
242
+ }
243
+
244
+ img#rivetsDoorsBottom {
245
+ position: absolute;
246
+ left: 50%;
247
+ margin-left: -189px;
248
+ bottom: 0;
249
+ }
250
+
251
+ a#help {
252
+ position: absolute;
253
+ left: 35px;
254
+ bottom: 35px;
255
+ background-image: url(data:image/png;base64,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);
256
+ width: 34px;
257
+ height: 34px;
258
+ }
259
+
260
+ a#help:hover {
261
+ background-position: 0 -34px;
262
+ }
263
+
264
+ a#help:active {
265
+ background-position: 0 -68px;
266
+ }
267
+
268
+ #passwordError {
269
+ position: absolute;
270
+ left: 50%;
271
+ top: 50%;
272
+ margin-left: -74px;
273
+ margin-top: 45px;
274
+ width: 50%;
275
+ text-shadow: #000 0 -1px 0;
276
+ color: #d8d8d8;
277
+ font-size: 14px;
278
+ }
279
+
280
+ #passwordError h3 {
281
+ margin-bottom: 10px;
282
+ color: #191919;
283
+ text-shadow: #7f7f7f 0 1px 0;
284
+ }
285
+
286
+ /* @end */
287
+
288
+ body {
289
+ font: 14px "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
290
+ }
291
+
292
+ #headerBar {
293
+ position: fixed;
294
+ top: 0;
295
+ right: 0;
296
+ left: 0;
297
+ height: 26px;
298
+ border-bottom: 1px solid #222;
299
+ padding: 8px 10px 10px;
300
+ text-shadow: #cbcbcb 0 1px 0;
301
+ text-align: right;
302
+ background-color: #999;
303
+ background: -webkit-gradient(linear, left top, left bottom, from(#aaa), to(#555));
304
+ }
305
+
306
+ #headerBar img {
307
+ float: left;
308
+ margin-right: 5px;
309
+ margin-top: -3px;
310
+ margin-left: -1px;
311
+ }
312
+
313
+ #headerBar h1 {
314
+ font-size: 20px;
315
+ float: left;
316
+ }
317
+
318
+ #headerBar a {
319
+ text-decoration: none;
320
+ }
321
+
322
+ input[type="search"] {
323
+ margin-right: 40px;
324
+ width: 200px;
325
+ }
326
+
327
+ #headerBar button#lock {
328
+ height: 21px;
329
+ width: 21px;
330
+ background-image: url(data:image/png;base64,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);
331
+ position: absolute;
332
+ right: 12px;
333
+ top: 9px;
334
+ }
335
+
336
+ #headerBar button#lock:hover {
337
+ background-position: 0 -21px;
338
+ }
339
+
340
+ #headerBar button#lock:active {
341
+ background-position: 0 -42px;
342
+ }
343
+
344
+ /* @group Sources Pane */
345
+
346
+ #sourcesPane {
347
+ background-color: #dadee5;
348
+ width: 175px;
349
+ position: fixed;
350
+ top: 45px;
351
+ bottom: 0;
352
+ color: #333;
353
+ text-shadow: #e5eeff 0 1px 0;
354
+ font-size: 12px;
355
+ border-right: 1px solid #7f7f7f;
356
+ font-weight: bold;
357
+ }
358
+
359
+ #sourcesPane li {
360
+ border-style: solid;
361
+ border-top-width: 1px;
362
+ border-top-color: #e8ecf4;
363
+ border-bottom-width: 1px;
364
+ border-bottom-color: #b7bfcb;
365
+ padding: 10px 10px 10px 15px;
366
+ }
367
+
368
+ #sourcesPane li.selected {
369
+ border-bottom-color: #4c5d7f;
370
+ background: #8594b2;
371
+ background: -webkit-gradient(linear, left top, left bottom, from(#acbfe5), to(#4c6698));
372
+ color: #fff;
373
+ text-shadow: #000 0 1px 2px;
374
+ border-top-color: #c3cee5;
375
+ }
376
+
377
+ #sourcesPane li img {
378
+ float: left;
379
+ margin-right: 7px;
380
+ margin-top: -3px;
381
+ }
382
+
383
+ #sourcesPane li.subFolder {
384
+ padding: 0;
385
+ border-style: none;
386
+ }
387
+
388
+ #sourcesPane ul li {
389
+ padding-left: 35px;
390
+ }
391
+
392
+ /* @end */
393
+
394
+ /* @group List Pane */
395
+
396
+ #listPane {
397
+ width: 280px;
398
+ position: fixed;
399
+ left: 176px;
400
+ border-right: 1px solid #7f7f7f;
401
+ background-color: #f2f2f2;
402
+ top: 45px;
403
+ bottom: 0;
404
+ overflow-x: hidden;
405
+ overflow-y: auto;
406
+ }
407
+
408
+ #listPane li {
409
+ background: -webkit-gradient(linear, left top, left bottom, from(#f2f2f2), to(#ddd));
410
+ padding: 10px;
411
+ border-top: 1px solid #fff;
412
+ border-bottom: 1px solid #b2b2b2;
413
+ text-shadow: #fff 0 1px 0;
414
+ text-overflow: ellipsis;
415
+ overflow: hidden;
416
+ white-space: nowrap;
417
+ font-size: 12px;
418
+ color: #656565;
419
+ line-height: 16px;
420
+ }
421
+
422
+ #listPane li strong {
423
+ color: #000;
424
+ font-size: 16px;
425
+ }
426
+
427
+ #listPane li.selected {
428
+ border-bottom-color: #4c5d7f;
429
+ color: #dae1f2;
430
+ text-shadow: #000 0 1px 1px;
431
+ border-top-color: #c3cee5;
432
+ box-shadow: -10px 10px 0px #888;
433
+ font-weight: bold;
434
+ background-color: #7485a6;
435
+ background: -webkit-gradient(linear, left top, left bottom, from(#acbfe5), to(#334e80));
436
+ }
437
+
438
+ #listPane li.selected strong {
439
+ color: #fff;
440
+ text-shadow: #000000 0 1px 2px;
441
+ }
442
+
443
+ /* @end */
444
+
445
+ /* @group Details Pane */
446
+
447
+ #detailsPane {
448
+ position: fixed;
449
+ right: 0;
450
+ top: 45px;
451
+ left: 457px;
452
+ padding: 25px 25px 25px 10px;
453
+ overflow-x: hidden;
454
+ overflow-y: auto;
455
+ bottom: 0;
456
+ }
457
+
458
+ #detailsPane td {
459
+ padding-left: 10px;
460
+ padding-bottom: 5px;
461
+ }
462
+
463
+ #detailsPane .label {
464
+ color: #989898;
465
+ font-size: 12px;
466
+ font-weight: bold;
467
+ text-align: right;
468
+ width: 130px;
469
+ text-overflow: ellipsis;
470
+ overflow: hidden;
471
+ white-space: nowrap;
472
+ display: block;
473
+ }
474
+
475
+ th {
476
+ vertical-align: middle;
477
+ text-align: left;
478
+ padding-right: 5px;
479
+ padding-left: 5px;
480
+ font-size: 14px;
481
+ padding-bottom: 25px;
482
+ font-weight: normal;
483
+ font-style: normal;
484
+ color: #7f7f7f;
485
+ }
486
+
487
+ th h1 {
488
+ font-size: 20px;
489
+ margin-bottom: 3px;
490
+ color: #000;
491
+ }
492
+
493
+ th img {
494
+ width: 50px;
495
+ height: 50px;
496
+ float: right;
497
+ }
498
+
499
+ td.spacer {
500
+ height: 10px;
501
+ }
502
+
503
+
504
+ /* crap of Dave's that Dan will want to clean up */
505
+
506
+ #emptyDetailsPane {
507
+ position: fixed;
508
+ right: 0;
509
+ top: 45px;
510
+ left: 457px;
511
+ padding: 25px 25px 25px 10px;
512
+ overflow-x: hidden;
513
+ overflow-y: yes;
514
+ }
515
+
516
+ .selected .sectionCount {
517
+ color:white;
518
+ }
519
+ .sectionCount {
520
+ font-size: 80%;
521
+ color: #777;
522
+ float:right;
523
+ }
524
+
525
+ /* @group Copy and Show Fields */
526
+
527
+ a.copy {
528
+ color: black;
529
+ text-decoration: none;
530
+ font-weight: bold;
531
+ }
532
+
533
+ span.copyButton {
534
+ -webkit-border-radius: 4px;
535
+ -moz-border-radius: 4px;
536
+ border-radius: 4px;
537
+ border: 1px solid #c8c8c8;
538
+ color: #c8c8c8;
539
+ margin-left: 5px;
540
+ visibility: hidden;
541
+ font-size: 9px;
542
+ padding-left: 3px;
543
+ padding-right: 2px;
544
+ padding-bottom: 1px;
545
+ }
546
+
547
+ a.copy:hover span.copyButton {
548
+ visibility: visible;
549
+ color: #1464ff;
550
+ border-color: #78aaff;
551
+ }
552
+
553
+ a.copy:active span.copyButton {
554
+ color: #000;
555
+ border-color: #000;
556
+ }
557
+
558
+ .hideRevealButton {
559
+ color: #1464ff;
560
+ text-decoration: none;
561
+ font-weight: bold;
562
+ text-align: left;
563
+ }
564
+ #detailsPane table.hideRevealButton td {
565
+ padding-left:0px !important;
566
+ padding-bottom:0px !important;
567
+ }
568
+
569
+ a.revealButton {
570
+ -webkit-border-radius: 4px;
571
+ -moz-border-radius: 4px;
572
+ border-radius: 4px;
573
+ border: 1px solid #c8c8c8;
574
+ color: #c8c8c8;
575
+ margin-left: 5px;
576
+ visibility: hidden;
577
+ font-size: 9px;
578
+ padding: 0 2px 1px 3px;
579
+ }
580
+
581
+ .hideRevealButton:hover a.revealButton, span.hideRevealButton:hover span.copyButton {
582
+ visibility: visible;
583
+ }
584
+
585
+ a.revealButton:hover {
586
+ color: #1464ff;
587
+ border-color: #78aaff;
588
+ }
589
+
590
+ a.revealButton:active {
591
+ color: #000;
592
+ border-color: #000;
593
+ }
594
+
595
+ /* @end */
596
+ /* @end */
597
+
598
+ /* @group Message Box styles */
599
+ #messageBox_wrapper {
600
+ position:absolute;
601
+ top:0;
602
+ left:0;
603
+ width:100%;
604
+ height:100%;
605
+ background:rgba(0,0,0,.5);
606
+ }
607
+ #messageBox {
608
+ position:relative;
609
+ top: 50%;
610
+ margin-right:auto;
611
+ margin-left:auto;
612
+ background-color:#aaa;
613
+ background: -webkit-gradient(linear, left top, left bottom, from(#aaa), to(#555));
614
+ -webkit-border-radius:6px;
615
+ -moz-border-radius:6px;
616
+ border-radius:6px;
617
+ -webkit-box-shadow:0px 5px 20px rgba(0,0,0,.6);
618
+ box-shadow:0px 3px 10px #000000;
619
+ width: 460px;
620
+ padding: 20px 25px 16px;
621
+ font-size: 16px;
622
+ line-height: 25px;
623
+ text-align: center;
624
+ margin-top: -105px;
625
+ }
626
+
627
+ #messageBox h1{
628
+ font-size: 22px;
629
+ text-shadow: #ccc 0 1px 0;
630
+ line-height: 22px;
631
+ color: #7e0000;
632
+ margin-bottom: 15px;
633
+ }
634
+
635
+ #messageBox p {
636
+ margin-bottom: 10px;
637
+ }
638
+
639
+ #messageBox a {
640
+ color: #650000;
641
+ font-weight: bold;
642
+ text-shadow: #848484 0 1px 0;
643
+ }
644
+
645
+ #messageBox a:hover {
646
+ text-shadow: #999 0 1px 0;
647
+ }
648
+
649
+ a#messageBox_help {
650
+ background-image: url(data:image/png;base64,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);
651
+ width: 34px;
652
+ height: 34px;
653
+ display: inline-block;
654
+ }
655
+
656
+ a#messageBox_help:hover {
657
+ background-position: 0 -34px;
658
+ }
659
+
660
+ a#messageBox_help:active {
661
+ background-position: 0 -68px;
662
+ }
663
+
664
+ a#messageBox_dismiss {
665
+ background-image: url(data:image/png;base64,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);
666
+ width: 97px;
667
+ height: 34px;
668
+ cursor:pointer;
669
+ text-indent: -9999px;
670
+ display: inline-block;
671
+ margin-left: 30px;
672
+ }
673
+
674
+ a#messageBox_dismiss:hover {
675
+ background-position: 0 -34px;
676
+ }
677
+
678
+ a#messageBox_dismiss:active {
679
+ background-position: 0 -68px;
680
+ }
681
+
682
+ table.hideRevealButton tr td a.revealButton {
683
+ visibility: visible;
684
+ }
685
+
686
+ #listPane {
687
+ margin-left: 176px;
688
+ position: relative;
689
+ left: auto;
690
+ }
691
+
692
+ </style>
693
+
694
+ <script type="text/javascript">
695
+ /*!
696
+ * jQuery JavaScript Library v1.4.2
697
+ * http://jquery.com/
698
+ *
699
+ * Copyright 2010, John Resig
700
+ * Dual licensed under the MIT or GPL Version 2 licenses.
701
+ * http://jquery.org/license
702
+ *
703
+ * Includes Sizzle.js
704
+ * http://sizzlejs.com/
705
+ * Copyright 2010, The Dojo Foundation
706
+ * Released under the MIT, BSD, and GPL Licenses.
707
+ *
708
+ * Date: Sat Feb 13 22:33:48 2010 -0500
709
+ */
710
+ (function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
711
+ e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
712
+ j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
713
+ "&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
714
+ true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
715
+ Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
716
+ (d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
717
+ a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
718
+ "find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
719
+ function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
720
+ c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
721
+ L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
722
+ "isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
723
+ a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
724
+ d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
725
+ a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
726
+ !c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
727
+ true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
728
+ var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
729
+ parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
730
+ false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
731
+ s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
732
+ applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
733
+ else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
734
+ a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
735
+ w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
736
+ cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
737
+ i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
738
+ " ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
739
+ this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
740
+ e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
741
+ c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
742
+ a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
743
+ function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
744
+ k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
745
+ C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
746
+ null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
747
+ e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
748
+ f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
749
+ if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
750
+ fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
751
+ d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
752
+ "events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
753
+ a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
754
+ isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
755
+ {setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
756
+ if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
757
+ e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
758
+ "_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
759
+ d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
760
+ !a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
761
+ toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
762
+ u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
763
+ function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
764
+ if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
765
+ e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
766
+ t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
767
+ g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
768
+ for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
769
+ 1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
770
+ CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
771
+ relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
772
+ l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
773
+ h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
774
+ CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
775
+ g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
776
+ text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
777
+ setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
778
+ h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
779
+ m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
780
+ "="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
781
+ h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
782
+ !h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
783
+ h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
784
+ q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
785
+ if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
786
+ (function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
787
+ function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
788
+ gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
789
+ c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
790
+ {},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
791
+ "string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
792
+ d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
793
+ a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
794
+ 1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
795
+ a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
796
+ c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
797
+ wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
798
+ prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
799
+ this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
800
+ return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
801
+ ""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
802
+ this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
803
+ u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
804
+ 1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
805
+ return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
806
+ ""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
807
+ c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
808
+ c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
809
+ function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
810
+ Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
811
+ "border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
812
+ a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
813
+ a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
814
+ "string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
815
+ serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
816
+ function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
817
+ global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
818
+ e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
819
+ "&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
820
+ false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
821
+ false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
822
+ c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
823
+ d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
824
+ g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
825
+ 1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
826
+ "json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
827
+ if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
828
+ this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
829
+ "olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
830
+ animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
831
+ j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
832
+ this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
833
+ "number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
834
+ c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
835
+ this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
836
+ this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
837
+ e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
838
+ c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
839
+ function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
840
+ this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
841
+ k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
842
+ f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
843
+ a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
844
+ c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
845
+ d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
846
+ f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
847
+ "pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
848
+ e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
849
+ </script>
850
+
851
+
852
+ <script type="text/javascript"> <!-- sha256.js -->
853
+ // A JavaScript implementation of the Secure Hash Standard
854
+ // Version 0.3 Copyright Angel Marin 2003-2004 - http://anmar.eu.org/
855
+ // Distributed under the BSD License
856
+ // Some bits taken from Paul Johnston's SHA-1 implementation
857
+ //
858
+
859
+ // bits per input character. 8 - ASCII; 16 - Unicode
860
+ var chrsz = 8;
861
+
862
+ // hex output format. 0 - lowercase; 1 - uppercase
863
+ var hexcase = 0;
864
+
865
+ function safe_add (x, y) {
866
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF);
867
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
868
+ return (msw << 16) | (lsw & 0xFFFF);
869
+ }
870
+
871
+ function S (X, n) {return ( X >>> n ) | (X << (32 - n));}
872
+
873
+ function R (X, n) {return ( X >>> n );}
874
+
875
+ function Ch(x, y, z) {return ((x & y) ^ ((~x) & z));}
876
+
877
+ function Maj(x, y, z) {return ((x & y) ^ (x & z) ^ (y & z));}
878
+
879
+ function Sigma0256(x) {return (S(x, 2) ^ S(x, 13) ^ S(x, 22));}
880
+
881
+ function Sigma1256(x) {return (S(x, 6) ^ S(x, 11) ^ S(x, 25));}
882
+
883
+ function Gamma0256(x) {return (S(x, 7) ^ S(x, 18) ^ R(x, 3));}
884
+
885
+ function Gamma1256(x) {return (S(x, 17) ^ S(x, 19) ^ R(x, 10));}
886
+
887
+ function Sigma0512(x) {return (S(x, 28) ^ S(x, 34) ^ S(x, 39));}
888
+
889
+ function Sigma1512(x) {return (S(x, 14) ^ S(x, 18) ^ S(x, 41));}
890
+
891
+ function Gamma0512(x) {return (S(x, 1) ^ S(x, 8) ^ R(x, 7));}
892
+
893
+ function Gamma1512(x) {return (S(x, 19) ^ S(x, 61) ^ R(x, 6));}
894
+
895
+ function core_sha256 (m, l) {
896
+ var K = new Array(0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0xFC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x6CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2);
897
+ var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);
898
+ var W = new Array(64);
899
+ var a, b, c, d, e, f, g, h, i, j;
900
+ var T1, T2;
901
+
902
+ // append padding
903
+ m[l >> 5] |= 0x80 << (24 - l % 32);
904
+ m[((l + 64 >> 9) << 4) + 15] = l;
905
+
906
+ for ( var i = 0; i<m.length; i+=16 ) {
907
+ a = HASH[0];
908
+ b = HASH[1];
909
+ c = HASH[2];
910
+ d = HASH[3];
911
+ e = HASH[4];
912
+ f = HASH[5];
913
+ g = HASH[6];
914
+ h = HASH[7];
915
+
916
+ for ( var j = 0; j<64; j++) {
917
+ if (j < 16) W[j] = m[j + i];
918
+ else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]);
919
+
920
+ T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);
921
+ T2 = safe_add(Sigma0256(a), Maj(a, b, c));
922
+
923
+ h = g;
924
+ g = f;
925
+ f = e;
926
+ e = safe_add(d, T1);
927
+ d = c;
928
+ c = b;
929
+ b = a;
930
+ a = safe_add(T1, T2);
931
+ }
932
+
933
+ HASH[0] = safe_add(a, HASH[0]);
934
+ HASH[1] = safe_add(b, HASH[1]);
935
+ HASH[2] = safe_add(c, HASH[2]);
936
+ HASH[3] = safe_add(d, HASH[3]);
937
+ HASH[4] = safe_add(e, HASH[4]);
938
+ HASH[5] = safe_add(f, HASH[5]);
939
+ HASH[6] = safe_add(g, HASH[6]);
940
+ HASH[7] = safe_add(h, HASH[7]);
941
+ }
942
+ return HASH;
943
+ }
944
+
945
+ function core_sha512 (m, l) {
946
+ var K = new Array(0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817);
947
+ var HASH = new Array(0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179);
948
+ var W = new Array(80);
949
+ var a, b, c, d, e, f, g, h, i, j;
950
+ var T1, T2;
951
+
952
+ }
953
+
954
+ function str2binb (str) {
955
+ var bin = Array();
956
+ var mask = (1 << chrsz) - 1;
957
+ for(var i = 0; i < str.length * chrsz; i += chrsz)
958
+ bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
959
+ return bin;
960
+ }
961
+
962
+ function binb2str (bin) {
963
+ var str = "";
964
+ var mask = (1 << chrsz) - 1;
965
+ for(var i = 0; i < bin.length * 32; i += chrsz)
966
+ str += String.fromCharCode((bin[i>>5] >>> (24 - i%32)) & mask);
967
+ return str;
968
+ }
969
+
970
+ function binb2hex (binarray) {
971
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
972
+ var str = "";
973
+ for(var i = 0; i < binarray.length * 4; i++)
974
+ {
975
+ str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
976
+ hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
977
+ }
978
+ return str;
979
+ }
980
+
981
+ function binb2b64 (binarray) {
982
+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
983
+ var str = "";
984
+ for(var i = 0; i < binarray.length * 4; i += 3)
985
+ {
986
+ var triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16)
987
+ | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
988
+ | ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
989
+ for(var j = 0; j < 4; j++)
990
+ {
991
+ if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
992
+ else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
993
+ }
994
+ }
995
+ return str;
996
+ }
997
+
998
+ function hex_sha256(s){return binb2hex(core_sha256(str2binb(s),s.length * chrsz));}
999
+ function b64_sha256(s){return binb2b64(core_sha256(str2binb(s),s.length * chrsz));}
1000
+ function str_sha256(s){return binb2str(core_sha256(str2binb(s),s.length * chrsz));}
1001
+ </script>
1002
+
1003
+ <script type="text/javascript"> <!-- sha1.js -->
1004
+ //
1005
+ // A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
1006
+ // in FIPS PUB 180-1
1007
+ // Version 2.1a Copyright Paul Johnston 2000 - 2002.
1008
+ // Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
1009
+ // Distributed under the BSD License
1010
+ // See http://pajhome.org.uk/crypt/md5 for details.
1011
+ //
1012
+
1013
+ //
1014
+ // Configurable variables. You may need to tweak these to be compatible with
1015
+ // the server-side, but the defaults work in most cases.
1016
+ //
1017
+
1018
+ // hex output format. 0 - lowercase; 1 - uppercase
1019
+ var hexcase = 0;
1020
+
1021
+ // base-64 pad character. "=" for strict RFC compliance
1022
+ var b64pad = "";
1023
+
1024
+ // bits per input character. 8 - ASCII; 16 - Unicode
1025
+ var chrsz = 8;
1026
+
1027
+ // These are the functions you'll usually want to call
1028
+ // They take string arguments and return either hex or base-64 encoded strings
1029
+ function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
1030
+ function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
1031
+ function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
1032
+ function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
1033
+ function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
1034
+ function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}
1035
+
1036
+ //Perform a simple self-test to see if the VM is working
1037
+ function sha1_vm_test()
1038
+ {
1039
+ return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
1040
+ }
1041
+
1042
+ // Calculate the SHA-1 of an array of big-endian words, and a bit length
1043
+ function core_sha1(x, len)
1044
+ {
1045
+ // append padding
1046
+ x[len >> 5] |= 0x80 << (24 - len % 32);
1047
+ x[((len + 64 >> 9) << 4) + 15] = len;
1048
+
1049
+ var w = Array(80);
1050
+ var a = 1732584193;
1051
+ var b = -271733879;
1052
+ var c = -1732584194;
1053
+ var d = 271733878;
1054
+ var e = -1009589776;
1055
+
1056
+ for(var i = 0; i < x.length; i += 16)
1057
+ {
1058
+ var olda = a;
1059
+ var oldb = b;
1060
+ var oldc = c;
1061
+ var oldd = d;
1062
+ var olde = e;
1063
+
1064
+ for(var j = 0; j < 80; j++)
1065
+ {
1066
+ if(j < 16) w[j] = x[i + j];
1067
+ else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
1068
+ var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
1069
+ safe_add(safe_add(e, w[j]), sha1_kt(j)));
1070
+ e = d;
1071
+ d = c;
1072
+ c = rol(b, 30);
1073
+ b = a;
1074
+ a = t;
1075
+ }
1076
+
1077
+ a = safe_add(a, olda);
1078
+ b = safe_add(b, oldb);
1079
+ c = safe_add(c, oldc);
1080
+ d = safe_add(d, oldd);
1081
+ e = safe_add(e, olde);
1082
+ }
1083
+ return Array(a, b, c, d, e);
1084
+
1085
+ }
1086
+
1087
+ // Perform the appropriate triplet combination function for the current
1088
+ // iteration
1089
+ function sha1_ft(t, b, c, d)
1090
+ {
1091
+ if(t < 20) return (b & c) | ((~b) & d);
1092
+ if(t < 40) return b ^ c ^ d;
1093
+ if(t < 60) return (b & c) | (b & d) | (c & d);
1094
+ return b ^ c ^ d;
1095
+ }
1096
+
1097
+ // Determine the appropriate additive constant for the current iteration
1098
+ function sha1_kt(t)
1099
+ {
1100
+ return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
1101
+ (t < 60) ? -1894007588 : -899497514;
1102
+ }
1103
+
1104
+ // Calculate the HMAC-SHA1 of a key and some data
1105
+ function core_hmac_sha1(key, data)
1106
+ {
1107
+ var bkey = str2binb(key);
1108
+ if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);
1109
+
1110
+ var ipad = Array(16), opad = Array(16);
1111
+ for(var i = 0; i < 16; i++)
1112
+ {
1113
+ ipad[i] = bkey[i] ^ 0x36363636;
1114
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
1115
+ }
1116
+
1117
+ var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
1118
+ return core_sha1(opad.concat(hash), 512 + 160);
1119
+ }
1120
+
1121
+ // Add integers, wrapping at 2^32. This uses 16-bit operations internally
1122
+ // to work around bugs in some JS interpreters.
1123
+ function safe_add(x, y)
1124
+ {
1125
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF);
1126
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
1127
+ return (msw << 16) | (lsw & 0xFFFF);
1128
+ }
1129
+
1130
+ // Bitwise rotate a 32-bit number to the left.
1131
+ function rol(num, cnt)
1132
+ {
1133
+ return (num << cnt) | (num >>> (32 - cnt));
1134
+ }
1135
+
1136
+ // Convert an 8-bit or 16-bit string to an array of big-endian words
1137
+ // In 8-bit function, characters >255 have their hi-byte silently ignored.
1138
+ function str2binb(str)
1139
+ {
1140
+ var bin = Array();
1141
+ var mask = (1 << chrsz) - 1;
1142
+ for(var i = 0; i < str.length * chrsz; i += chrsz)
1143
+ bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
1144
+ return bin;
1145
+ }
1146
+
1147
+ // Convert an array of big-endian words to a string
1148
+ function binb2str(bin)
1149
+ {
1150
+ var str = "";
1151
+ var mask = (1 << chrsz) - 1;
1152
+ for(var i = 0; i < bin.length * 32; i += chrsz)
1153
+ str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
1154
+ return str;
1155
+ }
1156
+
1157
+ // Convert an array of big-endian words to a hex string.
1158
+ function binb2hex(binarray)
1159
+ {
1160
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
1161
+ var str = "";
1162
+ for(var i = 0; i < binarray.length * 4; i++)
1163
+ {
1164
+ str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
1165
+ hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
1166
+ }
1167
+ return str;
1168
+ }
1169
+
1170
+ function hex2bin(hex_str)
1171
+ {
1172
+ var char_str = "";
1173
+ var num_str = "";
1174
+ var i;
1175
+ for(i=0; i < hex_str.length; i+=2) {
1176
+ char_str += String.fromCharCode(parseInt(hex_str.substring(i, i+2), 16));
1177
+ }
1178
+ return char_str;
1179
+ }
1180
+
1181
+
1182
+ // Convert an array of big-endian words to a base-64 string
1183
+ function binb2b64(binarray)
1184
+ {
1185
+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
1186
+ var str = "";
1187
+ for(var i = 0; i < binarray.length * 4; i += 3)
1188
+ {
1189
+ var triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16)
1190
+ | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
1191
+ | ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
1192
+ for(var j = 0; j < 4; j++)
1193
+ {
1194
+ if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
1195
+ else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
1196
+ }
1197
+ }
1198
+ return str;
1199
+ }
1200
+ </script>
1201
+
1202
+ <script type="text/javascript"> <!-- gibberish-aes.js -->
1203
+ // Gibberish-AES
1204
+ // A lightweight Javascript Libray for OpenSSL compatible AES CBC encryption.
1205
+ //
1206
+ // Author: Mark Percival
1207
+ // Email: mark@mpercival.com
1208
+ // Copyright: Mark Percival - http://mpercival.com 2008
1209
+ // Josh Davis - http://www.josh-davis.org/ecmaScrypt 2007
1210
+ // Chris Veness - http://www.movable-type.co.uk/scripts/aes.html 2007
1211
+ // Michel I. Gallant - http://www.jensign.com/
1212
+ //
1213
+ // License: MIT
1214
+ // Usage: Gibberish.encrypt("secret", "password", 256)
1215
+ // Outputs: AES Encrypted text encoded in Base64
1216
+
1217
+ var GibberishAES = {
1218
+ // Spells out 'Salted__'
1219
+ SALTED_PREFIX: [83, 97, 108, 116, 101, 100, 95, 95],
1220
+ ZERO_IV: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
1221
+
1222
+ Nr: 14,
1223
+ // Default to 256 Bit Encryption
1224
+ Nb: 4,
1225
+ Nk: 8,
1226
+ Decrypt: false,
1227
+
1228
+ enc_utf8: function(s)
1229
+ {
1230
+ try {
1231
+ return unescape(encodeURIComponent(s));
1232
+ }
1233
+ catch(e) {
1234
+ throw 'Error on UTF-8 encode';
1235
+ }
1236
+ },
1237
+
1238
+ dec_utf8: function(s)
1239
+ {
1240
+ try {
1241
+ return decodeURIComponent(escape(s));
1242
+ }
1243
+ catch(e) {
1244
+ throw ('Bad Key');
1245
+ }
1246
+ },
1247
+
1248
+ padBlock: function(byteArr)
1249
+ {
1250
+ var array = [];
1251
+ if (byteArr.length < 16) {
1252
+ var cpad = 16 - byteArr.length;
1253
+ var array = [cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad, cpad];
1254
+ }
1255
+ for (var i = 0; i < byteArr.length; i++)
1256
+ {
1257
+ array[i] = byteArr[i]
1258
+ }
1259
+ return array;
1260
+ },
1261
+
1262
+ block2s: function(block, lastBlock)
1263
+ {
1264
+ var string = '';
1265
+ if (lastBlock) {
1266
+ var padding = block[15];
1267
+ if (padding > 16) {
1268
+ throw ('Decryption error: Maybe bad key');
1269
+ }
1270
+ if (padding == 16) {
1271
+ return '';
1272
+ }
1273
+ for (var i = 0; i < 16 - padding; i++) {
1274
+ string += String.fromCharCode(block[i]);
1275
+ }
1276
+ } else {
1277
+ for (i = 0; i < 16; i++) {
1278
+ string += String.fromCharCode(block[i]);
1279
+ }
1280
+ }
1281
+ return string;
1282
+ },
1283
+
1284
+ a2h: function(numArr)
1285
+ {
1286
+ var string = '';
1287
+ for (var i = 0; i < numArr.length; i++) {
1288
+ string += (numArr[i] < 16 ? '0': '') + numArr[i].toString(16);
1289
+ }
1290
+ return string;
1291
+ },
1292
+
1293
+ h2a: function(s)
1294
+ {
1295
+ var ret = [];
1296
+ s.replace(/(..)/g,
1297
+ function(s) {
1298
+ ret.push(parseInt(s, 16));
1299
+ });
1300
+ return ret;
1301
+ },
1302
+
1303
+ s2a: function(string) {
1304
+ var array = [];
1305
+
1306
+ for (var i = 0; i < string.length; i++)
1307
+ {
1308
+ array[i] = string.charCodeAt(i);
1309
+ }
1310
+ return array;
1311
+ },
1312
+
1313
+ a2s: function(inArray) {
1314
+ var result = "";
1315
+
1316
+ for (var i = 0; i < inArray.length; i++)
1317
+ {
1318
+ result += String.fromCharCode(inArray[i]);
1319
+ }
1320
+ return result;
1321
+ },
1322
+
1323
+ size: function(newsize)
1324
+ {
1325
+ switch (newsize)
1326
+ {
1327
+ case 128:
1328
+ this.Nr = 10;
1329
+ this.Nk = 4;
1330
+ break;
1331
+ case 192:
1332
+ this.Nr = 12;
1333
+ this.Nk = 6;
1334
+ break;
1335
+ case 256:
1336
+ this.Nr = 14;
1337
+ this.Nk = 8;
1338
+ break;
1339
+ default:
1340
+ throw ('Invalid Key Size Specified:' + newsize);
1341
+ }
1342
+ },
1343
+
1344
+ randArr: function(num) {
1345
+ var result = []
1346
+ for (var i = 0; i < num; i++) {
1347
+ result = result.concat(Math.floor(Math.random() * 256));
1348
+ }
1349
+ return result;
1350
+ },
1351
+
1352
+ openSSLKey: function(passwordArr, saltArr) {
1353
+ // Number of rounds depends on the size of the AES in use
1354
+ // 3 rounds for 256
1355
+ // 2 rounds for the key, 1 for the IV
1356
+ // 2 rounds for 128
1357
+ // 1 round for the key, 1 round for the IV
1358
+ // 3 rounds for 192 since it's not evenly divided by 128 bits
1359
+ var rounds = this.Nr >= 12 ? 3: 2;
1360
+ var key = [];
1361
+ var iv = [];
1362
+ var md5_hash = [];
1363
+ var result = [];
1364
+ data00 = passwordArr.concat(saltArr);
1365
+ md5_hash[0] = GibberishAES.Hash.MD5(data00);
1366
+ result = md5_hash[0];
1367
+ for (var i = 1; i < rounds; i++) {
1368
+ md5_hash[i] = GibberishAES.Hash.MD5(md5_hash[i - 1].concat(data00));
1369
+ result = result.concat(md5_hash[i]);
1370
+ }
1371
+ key = result.slice(0, 4 * this.Nk);
1372
+ iv = result.slice(4 * this.Nk, 4 * this.Nk + 16);
1373
+ return {
1374
+ key: key,
1375
+ iv: iv
1376
+ };
1377
+ },
1378
+
1379
+ rawEncrypt: function(plaintext, key, iv) {
1380
+ // plaintext, key and iv as byte arrays
1381
+ key = this.expandKey(key);
1382
+ var numBlocks = Math.ceil(plaintext.length / 16);
1383
+ var blocks = [];
1384
+ for (var i = 0; i < numBlocks; i++) {
1385
+ blocks[i] = this.padBlock(plaintext.slice(i * 16, i * 16 + 16));
1386
+ }
1387
+ if (plaintext.length % 16 === 0) {
1388
+ blocks.push([16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16]);
1389
+ // CBC OpenSSL padding scheme
1390
+ numBlocks++;
1391
+ }
1392
+ var cipherBlocks = [];
1393
+ for (var i = 0; i < blocks.length; i++) {
1394
+ blocks[i] = (i === 0) ? this.xorBlocks(blocks[i], iv) : this.xorBlocks(blocks[i], cipherBlocks[i - 1]);
1395
+ cipherBlocks[i] = this.encryptBlock(blocks[i], key);
1396
+ }
1397
+ return cipherBlocks;
1398
+ },
1399
+
1400
+ decryptBinaryUsingKeyAndIvec: function(cryptArr, key, iv) {
1401
+
1402
+ // cryptArr, key and iv as byte arrays
1403
+ key = this.expandKey(key);
1404
+ var numBlocks = cryptArr.length / 16;
1405
+ var cipherBlocks = [];
1406
+ for (var i = 0; i < numBlocks; i++) {
1407
+ cipherBlocks.push(cryptArr.slice(i * 16, (i + 1) * 16));
1408
+ }
1409
+ var plainBlocks = [];
1410
+
1411
+ for (var i = cipherBlocks.length - 1; i >= 0; i--) {
1412
+ plainBlocks[i] = this.decryptBlock(cipherBlocks[i], key);
1413
+ plainBlocks[i] = (i === 0) ? this.xorBlocks(plainBlocks[i], iv) : this.xorBlocks(plainBlocks[i], cipherBlocks[i - 1]);
1414
+ }
1415
+ var string = '';
1416
+ for (var i = 0; i < numBlocks - 1; i++) {
1417
+ string += this.block2s(plainBlocks[i]);
1418
+ }
1419
+ string += this.block2s(plainBlocks[i], true);
1420
+ return string;
1421
+ },
1422
+
1423
+ encryptBlock: function(block, words) {
1424
+ this.Decrypt = false;
1425
+ var state = this.addRoundKey(block, words, 0);
1426
+ for (var round = 1; round < (this.Nr + 1); round++) {
1427
+ state = this.subBytes(state);
1428
+ state = this.shiftRows(state);
1429
+ if (round < this.Nr) {
1430
+ state = this.mixColumns(state);
1431
+ }
1432
+ //last round? don't mixColumns
1433
+ state = this.addRoundKey(state, words, round);
1434
+ }
1435
+
1436
+ return state;
1437
+ },
1438
+
1439
+ decryptBlock: function(block, words) {
1440
+ this.Decrypt = true;
1441
+ var state = this.addRoundKey(block, words, this.Nr);
1442
+ for (var round = this.Nr - 1; round > -1; round--) {
1443
+ state = this.shiftRows(state);
1444
+ state = this.subBytes(state);
1445
+ state = this.addRoundKey(state, words, round);
1446
+ if (round > 0) {
1447
+ state = this.mixColumns(state);
1448
+ }
1449
+ //last round? don't mixColumns
1450
+ }
1451
+
1452
+ return state;
1453
+ },
1454
+
1455
+ subBytes: function(state) {
1456
+ var S = this.Decrypt ? this.SBoxInv: this.SBox;
1457
+ var temp = [];
1458
+ for (var i = 0; i < 16; i++) {
1459
+ temp[i] = S[state[i]];
1460
+ }
1461
+ return temp;
1462
+ },
1463
+
1464
+ shiftRows: function(state) {
1465
+ var temp = [];
1466
+ var shiftBy = this.Decrypt ? [0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3] : [0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11];
1467
+ for (var i = 0; i < 16; i++) {
1468
+ temp[i] = state[shiftBy[i]];
1469
+ }
1470
+ return temp;
1471
+ },
1472
+
1473
+ mixColumns: function(state) {
1474
+ var t = [];
1475
+ if (!this.Decrypt) {
1476
+ for (var c = 0; c < 4; c++) {
1477
+ t[c * 4] = this.G2X[state[c * 4]] ^ this.G3X[state[1 + c * 4]] ^ state[2 + c * 4] ^ state[3 + c * 4];
1478
+ t[1 + c * 4] = state[c * 4] ^ this.G2X[state[1 + c * 4]] ^ this.G3X[state[2 + c * 4]] ^ state[3 + c * 4];
1479
+ t[2 + c * 4] = state[c * 4] ^ state[1 + c * 4] ^ this.G2X[state[2 + c * 4]] ^ this.G3X[state[3 + c * 4]];
1480
+ t[3 + c * 4] = this.G3X[state[c * 4]] ^ state[1 + c * 4] ^ state[2 + c * 4] ^ this.G2X[state[3 + c * 4]];
1481
+ }
1482
+ }else {
1483
+ for (var c = 0; c < 4; c++) {
1484
+ t[c*4] = this.GEX[state[c*4]] ^ this.GBX[state[1+c*4]] ^ this.GDX[state[2+c*4]] ^ this.G9X[state[3+c*4]];
1485
+ t[1+c*4] = this.G9X[state[c*4]] ^ this.GEX[state[1+c*4]] ^ this.GBX[state[2+c*4]] ^ this.GDX[state[3+c*4]];
1486
+ t[2+c*4] = this.GDX[state[c*4]] ^ this.G9X[state[1+c*4]] ^ this.GEX[state[2+c*4]] ^ this.GBX[state[3+c*4]];
1487
+ t[3+c*4] = this.GBX[state[c*4]] ^ this.GDX[state[1+c*4]] ^ this.G9X[state[2+c*4]] ^ this.GEX[state[3+c*4]];
1488
+ }
1489
+ }
1490
+
1491
+ return t;
1492
+ },
1493
+
1494
+ addRoundKey: function(state, words, round) {
1495
+ var temp = [];
1496
+ for (var i = 0; i < 16; i++) {
1497
+ temp[i] = state[i] ^ words[round][i];
1498
+ }
1499
+ return temp;
1500
+ },
1501
+
1502
+ xorBlocks: function(block1, block2) {
1503
+ var temp = [];
1504
+ for (var i = 0; i < 16; i++) {
1505
+ temp[i] = block1[i] ^ block2[i];
1506
+ }
1507
+ return temp;
1508
+ },
1509
+
1510
+ expandKey: function(key) {
1511
+ // Expects a 1d number array
1512
+ var Nb = this.Nb;
1513
+ var Nr = this.Nr;
1514
+ var Nk = this.Nk;
1515
+
1516
+ var w = [];
1517
+ var temp = [];
1518
+
1519
+ for (var i = 0; i < Nk; i++) {
1520
+ var r = [key[4 * i], key[4 * i + 1], key[4 * i + 2], key[4 * i + 3]];
1521
+ w[i] = r;
1522
+ }
1523
+
1524
+ for (var i = Nk; i < (4 * (Nr + 1)); i++) {
1525
+ w[i] = [];
1526
+ for (var t = 0; t < 4; t++) {
1527
+ temp[t] = w[i - 1][t];
1528
+ }
1529
+ if (i % Nk === 0) {
1530
+ temp = this.subWord(this.rotWord(temp));
1531
+ temp[0] ^= this.Rcon[i / Nk - 1];
1532
+ } else if (Nk > 6 && i % Nk == 4) {
1533
+ temp = this.subWord(temp);
1534
+ }
1535
+ for (var t = 0; t < 4; t++) {
1536
+ w[i][t] = w[i - Nk][t] ^ temp[t];
1537
+ }
1538
+ }
1539
+ var flat = [];
1540
+ for (var i = 0; i < (Nr + 1); i++) {
1541
+ flat[i] = [];
1542
+ for (var j = 0; j < 4; j++) {
1543
+ flat[i].push(w[i * 4 + j][0], w[i * 4 + j][1], w[i * 4 + j][2], w[i * 4 + j][3]);
1544
+ }
1545
+ }
1546
+ return flat;
1547
+ },
1548
+
1549
+ subWord: function(w) {
1550
+ // apply SBox to 4-byte word w
1551
+ for (var i = 0; i < 4; i++) {
1552
+ w[i] = this.SBox[w[i]];
1553
+ }
1554
+ return w;
1555
+ },
1556
+
1557
+ rotWord: function(w) {
1558
+ // rotate 4-byte word w left by one byte
1559
+ var tmp = w[0];
1560
+ for (var i = 0; i < 4; i++) {
1561
+ w[i] = w[i + 1];
1562
+ }
1563
+ w[3] = tmp;
1564
+ return w;
1565
+ },
1566
+
1567
+
1568
+ // S-box
1569
+ SBox: [
1570
+ 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171,
1571
+ 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164,
1572
+ 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113,
1573
+ 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226,
1574
+ 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214,
1575
+ 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203,
1576
+ 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69,
1577
+ 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245,
1578
+ 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68,
1579
+ 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42,
1580
+ 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73,
1581
+ 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109,
1582
+ 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37,
1583
+ 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62,
1584
+ 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225,
1585
+ 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223,
1586
+ 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187,
1587
+ 22],
1588
+
1589
+ // Precomputed lookup table for the inverse SBox
1590
+ SBoxInv: [
1591
+ 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215,
1592
+ 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222,
1593
+ 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66,
1594
+ 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73,
1595
+ 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92,
1596
+ 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21,
1597
+ 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247,
1598
+ 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2,
1599
+ 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220,
1600
+ 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173,
1601
+ 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29,
1602
+ 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75,
1603
+ 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168,
1604
+ 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81,
1605
+ 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160,
1606
+ 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97,
1607
+ 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12,
1608
+ 125],
1609
+ // Rijndael Rcon
1610
+ Rcon: [1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94,
1611
+ 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145],
1612
+
1613
+ G2X: [
1614
+ 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16,
1615
+ 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e,
1616
+ 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46,
1617
+ 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
1618
+ 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76,
1619
+ 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e,
1620
+ 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xa6,
1621
+ 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe,
1622
+ 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6,
1623
+ 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee,
1624
+ 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, 0x1b, 0x19, 0x1f, 0x1d,
1625
+ 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05,
1626
+ 0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d,
1627
+ 0x23, 0x21, 0x27, 0x25, 0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55,
1628
+ 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, 0x7b, 0x79, 0x7f, 0x7d,
1629
+ 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65,
1630
+ 0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d,
1631
+ 0x83, 0x81, 0x87, 0x85, 0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5,
1632
+ 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, 0xdb, 0xd9, 0xdf, 0xdd,
1633
+ 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
1634
+ 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed,
1635
+ 0xe3, 0xe1, 0xe7, 0xe5
1636
+ ],
1637
+
1638
+ G3X: [
1639
+ 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d,
1640
+ 0x14, 0x17, 0x12, 0x11, 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39,
1641
+ 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, 0x60, 0x63, 0x66, 0x65,
1642
+ 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71,
1643
+ 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d,
1644
+ 0x44, 0x47, 0x42, 0x41, 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9,
1645
+ 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, 0xf0, 0xf3, 0xf6, 0xf5,
1646
+ 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1,
1647
+ 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd,
1648
+ 0xb4, 0xb7, 0xb2, 0xb1, 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99,
1649
+ 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, 0x9b, 0x98, 0x9d, 0x9e,
1650
+ 0x97, 0x94, 0x91, 0x92, 0x83, 0x80, 0x85, 0x86, 0x8f, 0x8c, 0x89, 0x8a,
1651
+ 0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2, 0xb3, 0xb0, 0xb5, 0xb6,
1652
+ 0xbf, 0xbc, 0xb9, 0xba, 0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2,
1653
+ 0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, 0xea, 0xcb, 0xc8, 0xcd, 0xce,
1654
+ 0xc7, 0xc4, 0xc1, 0xc2, 0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda,
1655
+ 0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46,
1656
+ 0x4f, 0x4c, 0x49, 0x4a, 0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62,
1657
+ 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a, 0x3b, 0x38, 0x3d, 0x3e,
1658
+ 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a,
1659
+ 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16,
1660
+ 0x1f, 0x1c, 0x19, 0x1a
1661
+ ],
1662
+
1663
+ G9X: [
1664
+ 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53,
1665
+ 0x6c, 0x65, 0x7e, 0x77, 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf,
1666
+ 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x3b, 0x32, 0x29, 0x20,
1667
+ 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c,
1668
+ 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8,
1669
+ 0xc7, 0xce, 0xd5, 0xdc, 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49,
1670
+ 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, 0xe6, 0xef, 0xf4, 0xfd,
1671
+ 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91,
1672
+ 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e,
1673
+ 0x21, 0x28, 0x33, 0x3a, 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2,
1674
+ 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, 0xec, 0xe5, 0xfe, 0xf7,
1675
+ 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b,
1676
+ 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f,
1677
+ 0x10, 0x19, 0x02, 0x0b, 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8,
1678
+ 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, 0x47, 0x4e, 0x55, 0x5c,
1679
+ 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30,
1680
+ 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9,
1681
+ 0xf6, 0xff, 0xe4, 0xed, 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35,
1682
+ 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, 0xa1, 0xa8, 0xb3, 0xba,
1683
+ 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6,
1684
+ 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62,
1685
+ 0x5d, 0x54, 0x4f, 0x46
1686
+ ],
1687
+
1688
+ GBX: [
1689
+ 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45,
1690
+ 0x74, 0x7f, 0x62, 0x69, 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81,
1691
+ 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0x7b, 0x70, 0x6d, 0x66,
1692
+ 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12,
1693
+ 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e,
1694
+ 0xbf, 0xb4, 0xa9, 0xa2, 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7,
1695
+ 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, 0x46, 0x4d, 0x50, 0x5b,
1696
+ 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f,
1697
+ 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8,
1698
+ 0xf9, 0xf2, 0xef, 0xe4, 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c,
1699
+ 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, 0xf7, 0xfc, 0xe1, 0xea,
1700
+ 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e,
1701
+ 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02,
1702
+ 0x33, 0x38, 0x25, 0x2e, 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd,
1703
+ 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, 0x3c, 0x37, 0x2a, 0x21,
1704
+ 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55,
1705
+ 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44,
1706
+ 0x75, 0x7e, 0x63, 0x68, 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80,
1707
+ 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, 0x7a, 0x71, 0x6c, 0x67,
1708
+ 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13,
1709
+ 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f,
1710
+ 0xbe, 0xb5, 0xa8, 0xa3
1711
+ ],
1712
+
1713
+ GDX: [
1714
+ 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f,
1715
+ 0x5c, 0x51, 0x46, 0x4b, 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3,
1716
+ 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, 0xbb, 0xb6, 0xa1, 0xac,
1717
+ 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0,
1718
+ 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14,
1719
+ 0x37, 0x3a, 0x2d, 0x20, 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e,
1720
+ 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, 0xbd, 0xb0, 0xa7, 0xaa,
1721
+ 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6,
1722
+ 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9,
1723
+ 0x8a, 0x87, 0x90, 0x9d, 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25,
1724
+ 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, 0xda, 0xd7, 0xc0, 0xcd,
1725
+ 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91,
1726
+ 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75,
1727
+ 0x56, 0x5b, 0x4c, 0x41, 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42,
1728
+ 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, 0xb1, 0xbc, 0xab, 0xa6,
1729
+ 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa,
1730
+ 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8,
1731
+ 0xeb, 0xe6, 0xf1, 0xfc, 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44,
1732
+ 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, 0x0c, 0x01, 0x16, 0x1b,
1733
+ 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47,
1734
+ 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3,
1735
+ 0x80, 0x8d, 0x9a, 0x97
1736
+ ],
1737
+
1738
+ GEX: [
1739
+ 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62,
1740
+ 0x48, 0x46, 0x54, 0x5a, 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca,
1741
+ 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, 0xdb, 0xd5, 0xc7, 0xc9,
1742
+ 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81,
1743
+ 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59,
1744
+ 0x73, 0x7d, 0x6f, 0x61, 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87,
1745
+ 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, 0x4d, 0x43, 0x51, 0x5f,
1746
+ 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17,
1747
+ 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14,
1748
+ 0x3e, 0x30, 0x22, 0x2c, 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc,
1749
+ 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, 0x41, 0x4f, 0x5d, 0x53,
1750
+ 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b,
1751
+ 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3,
1752
+ 0xe9, 0xe7, 0xf5, 0xfb, 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0,
1753
+ 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, 0x7a, 0x74, 0x66, 0x68,
1754
+ 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20,
1755
+ 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e,
1756
+ 0xa4, 0xaa, 0xb8, 0xb6, 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26,
1757
+ 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, 0x37, 0x39, 0x2b, 0x25,
1758
+ 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d,
1759
+ 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5,
1760
+ 0x9f, 0x91, 0x83, 0x8d
1761
+ ],
1762
+
1763
+ enc: function(string, pass) {
1764
+ // string, password in plaintext
1765
+ return this.encryptUsingPassword(string, pass, true);
1766
+ },
1767
+
1768
+ encryptUsingPassword: function(string, password, salted) {
1769
+ var key = GibberishAES.Hash.MD5(this.s2a(password));
1770
+ return this.encryptUsingKey(string, key, salted);
1771
+ },
1772
+
1773
+ encryptUsingKey: function(string, inKeyArray, salted) {
1774
+ var key, iv;
1775
+
1776
+ if (salted) {
1777
+ var salt = this.randArr(8);
1778
+ var pbe = this.openSSLKey(inKeyArray, salt);
1779
+ key = pbe.key;
1780
+ iv = pbe.iv;
1781
+ }
1782
+ else {
1783
+ key = inKeyArray;
1784
+ iv = this.ZERO_IV;
1785
+ }
1786
+
1787
+ string = this.s2a(string);
1788
+ var cipherBlocks = this.rawEncrypt(string, key, iv);
1789
+
1790
+ if (salted) {
1791
+ var saltBlock = [this.SALTED_PREFIX.concat(salt)];
1792
+ cipherBlocks = saltBlock.concat(cipherBlocks);
1793
+ }
1794
+
1795
+ return this.Base64.encode(cipherBlocks);
1796
+ },
1797
+
1798
+ dec: function(string, pass) {
1799
+ // string, password in plaintext
1800
+ return this.decryptBase64UsingKey(string, this.s2a(pass));
1801
+ },
1802
+
1803
+ decryptUsingPBKDF2: function(data, password, iterations) {
1804
+ var binaryArr = GibberishAES.Base64.decode(data);
1805
+
1806
+ var saltArr = this.ZERO_IV;
1807
+ if (this.isSalted(binaryArr)) {
1808
+ saltArr = binaryArr.slice(8, 16);
1809
+ binaryArr = binaryArr.slice(16);
1810
+ }
1811
+
1812
+ var t0 = new Date();
1813
+ var mypbkdf2 = new PBKDF2(password, this.a2s(saltArr), iterations, 32); // key is 16bytes; ivec is 16bytes
1814
+ var derivedKey = mypbkdf2.deriveKey();
1815
+
1816
+ var t1 = new Date();
1817
+ // alert ("Key generation time: " + (t1.getTime() - t0.getTime()));
1818
+
1819
+ var key = derivedKey.slice(0, 16);
1820
+ var iv = derivedKey.slice(16);
1821
+ try {
1822
+ return this.decryptBinaryUsingKeyAndIvec(binaryArr, key, iv);
1823
+ }catch(e) {
1824
+ return null;
1825
+ }
1826
+ },
1827
+
1828
+ decryptBase64UsingKey: function(string, inKeyArray) {
1829
+ var binaryArr = this.Base64.decode(string);
1830
+ return this.decryptBinaryUsingKey(binaryArr, inKeyArray);
1831
+ },
1832
+
1833
+ decryptBinaryUsingKey: function(binaryArr, inKeyArray) {
1834
+ var salted = this.isSalted(binaryArr);
1835
+ var key, iv;
1836
+
1837
+ if (salted) {
1838
+ var salt = binaryArr.slice(8, 16);
1839
+
1840
+ var pbe = this.openSSLKey(inKeyArray, salt);
1841
+ key = pbe.key;
1842
+ iv = pbe.iv;
1843
+ binaryArr = binaryArr.slice(16, binaryArr.length);
1844
+ }
1845
+ else {
1846
+ key = GibberishAES.Hash.MD5(inKeyArray);
1847
+ iv = this.ZERO_IV;
1848
+ }
1849
+
1850
+ try {
1851
+ return this.decryptBinaryUsingKeyAndIvec(binaryArr, key, iv);
1852
+ }
1853
+ catch (e) {
1854
+ // alert('Caught error ' + e);
1855
+ return null;
1856
+ }
1857
+ },
1858
+
1859
+ isSalted: function(cryptArr) {
1860
+ for (var i=0; i < 8; i++) {
1861
+ if (this.SALTED_PREFIX[i] != cryptArr[i]) {
1862
+ return false;
1863
+ }
1864
+ }
1865
+ return true;
1866
+ }
1867
+ };
1868
+
1869
+ GibberishAES.Hash = {
1870
+
1871
+ MD5: function(numArr) {
1872
+
1873
+ function RotateLeft(lValue, iShiftBits) {
1874
+ return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
1875
+ }
1876
+
1877
+ function AddUnsigned(lX, lY) {
1878
+ var lX4,
1879
+ lY4,
1880
+ lX8,
1881
+ lY8,
1882
+ lResult;
1883
+ lX8 = (lX & 0x80000000);
1884
+ lY8 = (lY & 0x80000000);
1885
+ lX4 = (lX & 0x40000000);
1886
+ lY4 = (lY & 0x40000000);
1887
+ lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
1888
+ if (lX4 & lY4) {
1889
+ return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
1890
+ }
1891
+ if (lX4 | lY4) {
1892
+ if (lResult & 0x40000000) {
1893
+ return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
1894
+ } else {
1895
+ return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
1896
+ }
1897
+ } else {
1898
+ return (lResult ^ lX8 ^ lY8);
1899
+ }
1900
+ }
1901
+
1902
+ function F(x, y, z) {
1903
+ return (x & y) | ((~x) & z);
1904
+ }
1905
+ function G(x, y, z) {
1906
+ return (x & z) | (y & (~z));
1907
+ }
1908
+ function H(x, y, z) {
1909
+ return (x ^ y ^ z);
1910
+ }
1911
+ function I(x, y, z) {
1912
+ return (y ^ (x | (~z)));
1913
+ }
1914
+
1915
+ function FF(a, b, c, d, x, s, ac) {
1916
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
1917
+ return AddUnsigned(RotateLeft(a, s), b);
1918
+ };
1919
+
1920
+ function GG(a, b, c, d, x, s, ac) {
1921
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
1922
+ return AddUnsigned(RotateLeft(a, s), b);
1923
+ };
1924
+
1925
+ function HH(a, b, c, d, x, s, ac) {
1926
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
1927
+ return AddUnsigned(RotateLeft(a, s), b);
1928
+ };
1929
+
1930
+ function II(a, b, c, d, x, s, ac) {
1931
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
1932
+ return AddUnsigned(RotateLeft(a, s), b);
1933
+ };
1934
+
1935
+ function ConvertToWordArray(numArr) {
1936
+ var lWordCount;
1937
+ var lMessageLength = numArr.length;
1938
+ var lNumberOfWords_temp1 = lMessageLength + 8;
1939
+ var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
1940
+ var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
1941
+ var lWordArray = Array(lNumberOfWords - 1);
1942
+ var lBytePosition = 0;
1943
+ var lByteCount = 0;
1944
+ while (lByteCount < lMessageLength) {
1945
+ lWordCount = (lByteCount - (lByteCount % 4)) / 4;
1946
+ lBytePosition = (lByteCount % 4) * 8;
1947
+ lWordArray[lWordCount] = (lWordArray[lWordCount] | (numArr[lByteCount] << lBytePosition));
1948
+ lByteCount++;
1949
+ }
1950
+ lWordCount = (lByteCount - (lByteCount % 4)) / 4;
1951
+ lBytePosition = (lByteCount % 4) * 8;
1952
+ lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
1953
+ lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
1954
+ lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
1955
+ return lWordArray;
1956
+ };
1957
+
1958
+ function WordToHex(lValue) {
1959
+ var WordToHexValue = "",
1960
+ WordToHexValue_temp = "",
1961
+ lByte,
1962
+ lCount;
1963
+ var WordToHexArr = []
1964
+ for (lCount = 0; lCount <= 3; lCount++) {
1965
+ lByte = (lValue >>> (lCount * 8)) & 255;
1966
+ WordToHexArr = WordToHexArr.concat(lByte)
1967
+ }
1968
+ return WordToHexArr;
1969
+ };
1970
+
1971
+ function Utf8Encode(string) {
1972
+ string = string.replace(/\r\n/g, "\n");
1973
+ var utftext = "";
1974
+
1975
+ for (var n = 0; n < string.length; n++) {
1976
+
1977
+ var c = string.charCodeAt(n);
1978
+
1979
+ if (c < 128) {
1980
+ utftext += String.fromCharCode(c);
1981
+ }
1982
+ else if ((c > 127) && (c < 2048)) {
1983
+ utftext += String.fromCharCode((c >> 6) | 192);
1984
+ utftext += String.fromCharCode((c & 63) | 128);
1985
+ }
1986
+ else {
1987
+ utftext += String.fromCharCode((c >> 12) | 224);
1988
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
1989
+ utftext += String.fromCharCode((c & 63) | 128);
1990
+ }
1991
+
1992
+ }
1993
+
1994
+ return utftext;
1995
+ };
1996
+
1997
+ var x = Array();
1998
+ var k,
1999
+ AA,
2000
+ BB,
2001
+ CC,
2002
+ DD,
2003
+ a,
2004
+ b,
2005
+ c,
2006
+ d;
2007
+ var S11 = 7,
2008
+ S12 = 12,
2009
+ S13 = 17,
2010
+ S14 = 22;
2011
+ var S21 = 5,
2012
+ S22 = 9,
2013
+ S23 = 14,
2014
+ S24 = 20;
2015
+ var S31 = 4,
2016
+ S32 = 11,
2017
+ S33 = 16,
2018
+ S34 = 23;
2019
+ var S41 = 6,
2020
+ S42 = 10,
2021
+ S43 = 15,
2022
+ S44 = 21;
2023
+
2024
+ x = ConvertToWordArray(numArr);
2025
+
2026
+ a = 0x67452301;
2027
+ b = 0xEFCDAB89;
2028
+ c = 0x98BADCFE;
2029
+ d = 0x10325476;
2030
+
2031
+ for (k = 0; k < x.length; k += 16) {
2032
+ AA = a;
2033
+ BB = b;
2034
+ CC = c;
2035
+ DD = d;
2036
+ a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
2037
+ d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
2038
+ c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
2039
+ b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
2040
+ a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
2041
+ d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
2042
+ c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
2043
+ b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
2044
+ a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
2045
+ d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
2046
+ c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
2047
+ b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
2048
+ a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
2049
+ d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
2050
+ c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
2051
+ b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
2052
+ a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
2053
+ d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
2054
+ c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
2055
+ b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
2056
+ a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
2057
+ d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);
2058
+ c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
2059
+ b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
2060
+ a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
2061
+ d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
2062
+ c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
2063
+ b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
2064
+ a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
2065
+ d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
2066
+ c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
2067
+ b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
2068
+ a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
2069
+ d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
2070
+ c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
2071
+ b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
2072
+ a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
2073
+ d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
2074
+ c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
2075
+ b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
2076
+ a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
2077
+ d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
2078
+ c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
2079
+ b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
2080
+ a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
2081
+ d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
2082
+ c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
2083
+ b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
2084
+ a = II(a, b, c, d, x[k + 0], S41, 0xF4292244);
2085
+ d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
2086
+ c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
2087
+ b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
2088
+ a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
2089
+ d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
2090
+ c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
2091
+ b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
2092
+ a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
2093
+ d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
2094
+ c = II(c, d, a, b, x[k + 6], S43, 0xA3014314);
2095
+ b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
2096
+ a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
2097
+ d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
2098
+ c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
2099
+ b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
2100
+ a = AddUnsigned(a, AA);
2101
+ b = AddUnsigned(b, BB);
2102
+ c = AddUnsigned(c, CC);
2103
+ d = AddUnsigned(d, DD);
2104
+ }
2105
+
2106
+ var temp = WordToHex(a).concat(WordToHex(b), WordToHex(c), WordToHex(d));
2107
+ return temp;
2108
+ }
2109
+ };
2110
+
2111
+ GibberishAES.Base64 = {
2112
+ // Takes a Nx16x1 byte array and converts it to Base64
2113
+ chars: [
2114
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
2115
+ 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
2116
+ 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
2117
+ 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
2118
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
2119
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
2120
+ 'w', 'x', 'y', 'z', '0', '1', '2', '3',
2121
+ '4', '5', '6', '7', '8', '9', '+', '/'],
2122
+
2123
+ encode: function(b, withBreaks) {
2124
+ var flatArr = [];
2125
+ var b64 = '';
2126
+ totalChunks = Math.floor(b.length * 16 / 3)
2127
+ for (var i = 0; i < b.length * 16; i++) {
2128
+ flatArr.push(b[Math.floor(i / 16)][i % 16]);
2129
+ }
2130
+ for (var i = 0; i < flatArr.length; i = i + 3) {
2131
+ b64 += this.chars[flatArr[i] >> 2];
2132
+ b64 += this.chars[((flatArr[i] & 3) << 4) | (flatArr[i + 1] >> 4)];
2133
+ if (! (flatArr[i + 1] == null)) {
2134
+ b64 += this.chars[((flatArr[i + 1] & 15) << 2) | (flatArr[i + 2] >> 6)];
2135
+ } else {
2136
+ b64 += '='
2137
+ }
2138
+ if (! (flatArr[i + 2] == null)) {
2139
+ b64 += this.chars[flatArr[i + 2] & 63];
2140
+ } else {
2141
+ b64 += '='
2142
+ }
2143
+ }
2144
+ // OpenSSL is super particular about line breaks
2145
+ var broken_b64 = b64.slice(0, 64) + '\n';
2146
+ for (var i = 1; i < (Math.ceil(b64.length / 64)); i++) {
2147
+ broken_b64 += b64.slice(i * 64, i * 64 + 64) + (Math.ceil(b64.length / 64) == i + 1 ? '': '\n');
2148
+ }
2149
+ return broken_b64
2150
+ },
2151
+
2152
+ decode: function(string) {
2153
+ string = string.replace(/\n/g, '');
2154
+ var flatArr = [];
2155
+ var c = [];
2156
+ var b = [];
2157
+ for (var i = 0; i < string.length; i = i + 4) {
2158
+ c[0] = this.chars.indexOf(string.charAt(i));
2159
+ c[1] = this.chars.indexOf(string.charAt(i + 1));
2160
+ c[2] = this.chars.indexOf(string.charAt(i + 2));
2161
+ c[3] = this.chars.indexOf(string.charAt(i + 3));
2162
+
2163
+ b[0] = (c[0] << 2) | (c[1] >> 4);
2164
+ b[1] = ((c[1] & 15) << 4) | (c[2] >> 2);
2165
+ b[2] = ((c[2] & 3) << 6) | c[3];
2166
+ flatArr.push(b[0], b[1], b[2]);
2167
+ }
2168
+ flatArr = flatArr.slice(0, flatArr.length - (flatArr.length % 16));
2169
+ return flatArr;
2170
+ },
2171
+
2172
+ };
2173
+
2174
+
2175
+
2176
+
2177
+ //
2178
+ // JavaScript implementation of Password-Based Key Derivation Function 2
2179
+ // (PBKDF2) as defined in RFC 2898.
2180
+ // Version 1.1
2181
+ // Copyright (c) 2007, Parvez Anandam
2182
+ // parvez.anandam@cern.ch
2183
+ // http://anandam.name/pbkdf2
2184
+ //
2185
+ // Distributed under the BSD license
2186
+ //
2187
+ // (Uses Paul Johnston's excellent SHA-1 JavaScript library sha1.js)
2188
+ // Thanks to Felix Gartsman for pointing out a bug in version 1.0
2189
+ //
2190
+
2191
+ // The four arguments to the constructor of the PBKDF2 object are
2192
+ // the password, salt, number of iterations and number of bytes in
2193
+ // generated key. This follows the RFC 2898 definition: PBKDF2 (P, S, c, dkLen)
2194
+ //
2195
+ // The method deriveKey takes two parameters, both callback functions:
2196
+ // the first is used to provide status on the computation, the second
2197
+ // is called with the result of the computation (the generated key in hex).
2198
+ //
2199
+ function PBKDF2(password, salt, num_iterations, num_bytes)
2200
+ {
2201
+ // Remember the password and salt
2202
+ var m_bpassword = str2binb(password);
2203
+ var m_salt = salt;
2204
+
2205
+ // Total number of iterations
2206
+ var m_total_iterations = num_iterations;
2207
+
2208
+ // Run iterations in chunks instead of all at once, so as to not block.
2209
+ // Define size of chunk here; adjust for slower or faster machines if necessary.
2210
+ var m_iterations_in_chunk = 100;
2211
+
2212
+ // Iteration counter
2213
+ var m_iterations_done = 0;
2214
+
2215
+ // Key length, as number of bytes
2216
+ var m_key_length = num_bytes;
2217
+
2218
+ // The length (number of bytes) of the output of the pseudo-random function.
2219
+ // Since HMAC-SHA1 is the standard, and what is used here, it's 20 bytes.
2220
+ var m_hash_length = 20;
2221
+
2222
+ // Number of hash-sized blocks in the derived key (called 'l' in RFC2898)
2223
+ var m_total_blocks = Math.ceil(m_key_length/m_hash_length);
2224
+
2225
+ // Start computation with the first block
2226
+ var m_current_block = 1;
2227
+
2228
+ // Used in the HMAC-SHA1 computations
2229
+ var m_ipad = new Array(16);
2230
+ var m_opad = new Array(16);
2231
+
2232
+ // This is where the result of the iterations gets sotred
2233
+ var m_buffer = new Array(0x0,0x0,0x0,0x0,0x0);
2234
+
2235
+ // The result
2236
+ var m_key = "";
2237
+
2238
+ // The function to call with the result
2239
+ var m_result_func;
2240
+
2241
+ // The function to call with status after computing every chunk
2242
+ var m_status_func;
2243
+
2244
+ // Set up the HMAC-SHA1 computations
2245
+ if (m_bpassword.length > 16) m_bpassword = core_sha1(m_bpassword, password.length * chrsz);
2246
+ for(var i = 0; i < 16; ++i)
2247
+ {
2248
+ m_ipad[i] = m_bpassword[i] ^ 0x36363636;
2249
+ m_opad[i] = m_bpassword[i] ^ 0x5C5C5C5C;
2250
+ }
2251
+
2252
+ // Starts the computation
2253
+ this.deriveKey = function()
2254
+ {
2255
+ return this.do_PBKDF2_iterations();
2256
+ }
2257
+
2258
+
2259
+ // The workhorse
2260
+ this.do_PBKDF2_iterations = function()
2261
+ {
2262
+ while(1) {
2263
+ var iterations = m_total_iterations;
2264
+
2265
+ for(var i=0; i<iterations; ++i) {
2266
+ if (m_iterations_done == 0) {
2267
+ var salt_block = m_salt +
2268
+ String.fromCharCode(m_current_block >> 24 & 0xF) +
2269
+ String.fromCharCode(m_current_block >> 16 & 0xF) +
2270
+ String.fromCharCode(m_current_block >> 8 & 0xF) +
2271
+ String.fromCharCode(m_current_block & 0xF);
2272
+
2273
+ m_hash = core_sha1(m_ipad.concat(str2binb(salt_block)), 512 + salt_block.length * 8);
2274
+ m_hash = core_sha1(m_opad.concat(m_hash), 512 + 160);
2275
+ }
2276
+ else {
2277
+ m_hash = core_sha1(m_ipad.concat(m_hash), 512 + m_hash.length * 32);
2278
+ m_hash = core_sha1(m_opad.concat(m_hash), 512 + 160);
2279
+ }
2280
+
2281
+ for(var j=0; j<m_hash.length; ++j)
2282
+ m_buffer[j] ^= m_hash[j];
2283
+
2284
+ m_iterations_done++;
2285
+ }
2286
+
2287
+ if (m_current_block < m_total_blocks) {
2288
+ m_key += binb2hex(m_buffer);
2289
+
2290
+ m_current_block++;
2291
+ m_buffer = new Array(0x0,0x0,0x0,0x0,0x0);
2292
+ m_iterations_done = 0;
2293
+ }
2294
+ else {
2295
+ var tmp = binb2hex(m_buffer);
2296
+ m_key += tmp.substr(0, (m_key_length - (m_total_blocks - 1) * m_hash_length) * 2 );
2297
+
2298
+ // Original PBKDF2 code returned a string of hex characters (i.e. string of nibbles).
2299
+ // Gibberish likes to use a Byte Array, so we convert accordingly.
2300
+ return GibberishAES.s2a(hex2bin(m_key));
2301
+ }
2302
+ }
2303
+ }
2304
+ }
2305
+ </script>
2306
+
2307
+ <script type="text/javascript"> <!-- date_format.js -->
2308
+ // Date Format 1.2.2
2309
+ // (c) 2007-2008 Steven Levithan <stevenlevithan.com>
2310
+ // MIT license
2311
+ // Includes enhancements by Scott Trenda <scott.trenda.net> and Kris Kowal <cixar.com/~kris.kowal/>
2312
+ //
2313
+ // Accepts a date, a mask, or a date and a mask.
2314
+ // Returns a formatted version of the given date.
2315
+ // The date defaults to the current date/time.
2316
+ // The mask defaults to dateFormat.masks.default.
2317
+ //
2318
+ var dateFormat = function () {
2319
+ var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
2320
+ timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
2321
+ timezoneClip = /[^-+\dA-Z]/g,
2322
+ pad = function (val, len) {
2323
+ val = String(val);
2324
+ len = len || 2;
2325
+ while (val.length < len) val = "0" + val;
2326
+ return val;
2327
+ };
2328
+
2329
+ // Regexes and supporting functions are cached through closure
2330
+ return function (date, mask, utc) {
2331
+ var dF = dateFormat;
2332
+
2333
+ // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
2334
+ if (arguments.length == 1 && (typeof date == "string" || date instanceof String) && !/\d/.test(date)) {
2335
+ mask = date;
2336
+ date = undefined;
2337
+ }
2338
+
2339
+ // Passing date through Date applies Date.parse, if necessary
2340
+ date = date ? new Date(date) : new Date();
2341
+ if (isNaN(date)) throw new SyntaxError("invalid date");
2342
+
2343
+ mask = String(dF.masks[mask] || mask || dF.masks["default"]);
2344
+
2345
+ // Allow setting the utc argument via the mask
2346
+ if (mask.slice(0, 4) == "UTC:") {
2347
+ mask = mask.slice(4);
2348
+ utc = true;
2349
+ }
2350
+
2351
+ var _ = utc ? "getUTC" : "get",
2352
+ d = date[_ + "Date"](),
2353
+ D = date[_ + "Day"](),
2354
+ m = date[_ + "Month"](),
2355
+ y = date[_ + "FullYear"](),
2356
+ H = date[_ + "Hours"](),
2357
+ M = date[_ + "Minutes"](),
2358
+ s = date[_ + "Seconds"](),
2359
+ L = date[_ + "Milliseconds"](),
2360
+ o = utc ? 0 : date.getTimezoneOffset(),
2361
+ flags = {
2362
+ d: d,
2363
+ dd: pad(d),
2364
+ ddd: dF.i18n.dayNames[D],
2365
+ dddd: dF.i18n.dayNames[D + 7],
2366
+ m: m + 1,
2367
+ mm: pad(m + 1),
2368
+ mmm: dF.i18n.monthNames[m],
2369
+ mmmm: dF.i18n.monthNames[m + 12],
2370
+ yy: String(y).slice(2),
2371
+ yyyy: y,
2372
+ h: H % 12 || 12,
2373
+ hh: pad(H % 12 || 12),
2374
+ H: H,
2375
+ HH: pad(H),
2376
+ M: M,
2377
+ MM: pad(M),
2378
+ s: s,
2379
+ ss: pad(s),
2380
+ l: pad(L, 3),
2381
+ L: pad(L > 99 ? Math.round(L / 10) : L),
2382
+ t: H < 12 ? "a" : "p",
2383
+ tt: H < 12 ? "am" : "pm",
2384
+ T: H < 12 ? "A" : "P",
2385
+ TT: H < 12 ? "AM" : "PM",
2386
+ Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
2387
+ o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
2388
+ S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
2389
+ };
2390
+
2391
+ return mask.replace(token, function ($0) {
2392
+ return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
2393
+ });
2394
+ };
2395
+ }();
2396
+
2397
+ // Some common format strings
2398
+ dateFormat.masks = {
2399
+ "default": "ddd mmm dd yyyy HH:MM:ss",
2400
+ shortDate: "m/d/yy",
2401
+ mediumDate: "mmm d, yyyy",
2402
+ longDate: "mmmm d, yyyy",
2403
+ fullDate: "dddd, mmmm d, yyyy",
2404
+ shortTime: "h:MM TT",
2405
+ mediumTime: "h:MM:ss TT",
2406
+ longTime: "h:MM:ss TT Z",
2407
+ isoDate: "yyyy-mm-dd",
2408
+ isoTime: "HH:MM:ss",
2409
+ isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
2410
+ isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
2411
+ };
2412
+
2413
+ // Internationalization strings
2414
+ dateFormat.i18n = {
2415
+ dayNames: [
2416
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
2417
+ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
2418
+ ],
2419
+ monthNames: [
2420
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
2421
+ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
2422
+ ]
2423
+ };
2424
+
2425
+ // For convenience...
2426
+ Date.prototype.format = function (mask, utc) {
2427
+ return dateFormat(this, mask, utc);
2428
+ };
2429
+ </script>
2430
+
2431
+ <script type="text/javascript"> <!-- ZeroClipboard.js -->
2432
+ // Simple Set Clipboard System
2433
+ // Author: Joseph Huckaby
2434
+
2435
+ var ZeroClipboard = {
2436
+
2437
+ version: "1.0.7",
2438
+ clients: {}, // registered upload clients on page, indexed by id
2439
+ moviePath: 'http://aws.cachefly.net/anywhere/001/images/ZeroClipboard.swf', // URL to movie
2440
+ nextId: 1, // ID of next movie
2441
+
2442
+ $: function(thingy) {
2443
+ // simple DOM lookup utility function
2444
+ if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
2445
+ if (!thingy.addClass) {
2446
+ // extend element with a few useful methods
2447
+ thingy.hide = function() { this.style.display = 'none'; };
2448
+ thingy.show = function() { this.style.display = ''; };
2449
+ thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
2450
+ thingy.removeClass = function(name) {
2451
+ var classes = this.className.split(/\s+/);
2452
+ var idx = -1;
2453
+ for (var k = 0; k < classes.length; k++) {
2454
+ if (classes[k] == name) { idx = k; k = classes.length; }
2455
+ }
2456
+ if (idx > -1) {
2457
+ classes.splice( idx, 1 );
2458
+ this.className = classes.join(' ');
2459
+ }
2460
+ return this;
2461
+ };
2462
+ thingy.hasClass = function(name) {
2463
+ return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
2464
+ };
2465
+ }
2466
+ return thingy;
2467
+ },
2468
+
2469
+ setMoviePath: function(path) {
2470
+ // set path to ZeroClipboard.swf
2471
+ this.moviePath = path;
2472
+ },
2473
+
2474
+ dispatch: function(id, eventName, args) {
2475
+ // receive event from flash movie, send to client
2476
+ var client = this.clients[id];
2477
+ if (client) {
2478
+ client.receiveEvent(eventName, args);
2479
+ }
2480
+ },
2481
+
2482
+ register: function(id, client) {
2483
+ // register new client to receive events
2484
+ this.clients[id] = client;
2485
+ },
2486
+
2487
+ getDOMObjectPosition: function(obj, stopObj) {
2488
+ // get absolute coordinates for dom element
2489
+ var info = {
2490
+ left: 0,
2491
+ top: 0,
2492
+ width: obj.width ? obj.width : obj.offsetWidth,
2493
+ height: obj.height ? obj.height : obj.offsetHeight
2494
+ };
2495
+
2496
+ while (obj && (obj != stopObj)) {
2497
+ info.left += obj.offsetLeft;
2498
+ info.top += obj.offsetTop;
2499
+ obj = obj.offsetParent;
2500
+ }
2501
+
2502
+ return info;
2503
+ },
2504
+
2505
+ Client: function(elem) {
2506
+ // constructor for new simple upload client
2507
+ this.handlers = {};
2508
+
2509
+ // unique ID
2510
+ this.id = ZeroClipboard.nextId++;
2511
+ this.movieId = 'ZeroClipboardMovie_' + this.id;
2512
+
2513
+ // register client with singleton to receive flash events
2514
+ ZeroClipboard.register(this.id, this);
2515
+
2516
+ // create movie
2517
+ if (elem) this.glue(elem);
2518
+ }
2519
+ };
2520
+
2521
+ ZeroClipboard.Client.prototype = {
2522
+
2523
+ id: 0, // unique ID for us
2524
+ ready: false, // whether movie is ready to receive events or not
2525
+ movie: null, // reference to movie object
2526
+ clipText: '', // text to copy to clipboard
2527
+ handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
2528
+ cssEffects: true, // enable CSS mouse effects on dom container
2529
+ handlers: null, // user event handlers
2530
+
2531
+ glue: function(elem, appendElem, stylesToAdd) {
2532
+ // glue to DOM element
2533
+ // elem can be ID or actual DOM element object
2534
+ this.domElement = ZeroClipboard.$(elem);
2535
+
2536
+ // float just above object, or zIndex 99 if dom element isn't set
2537
+ var zIndex = 99;
2538
+ if (this.domElement.style.zIndex) {
2539
+ zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
2540
+ }
2541
+
2542
+ if (typeof(appendElem) == 'string') {
2543
+ appendElem = ZeroClipboard.$(appendElem);
2544
+ }
2545
+ else if (typeof(appendElem) == 'undefined') {
2546
+ appendElem = document.getElementsByTagName('body')[0];
2547
+ }
2548
+
2549
+ // find X/Y position of domElement
2550
+ var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
2551
+
2552
+ // create floating DIV above element
2553
+ this.div = document.createElement('div');
2554
+ var style = this.div.style;
2555
+ style.position = 'absolute';
2556
+ style.left = '' + box.left + 'px';
2557
+ style.top = '' + box.top + 'px';
2558
+ style.width = '' + box.width + 'px';
2559
+ style.height = '' + box.height + 'px';
2560
+ style.zIndex = zIndex;
2561
+
2562
+ if (typeof(stylesToAdd) == 'object') {
2563
+ for (addedStyle in stylesToAdd) {
2564
+ style[addedStyle] = stylesToAdd[addedStyle];
2565
+ }
2566
+ }
2567
+
2568
+ // style.backgroundColor = '#f00'; // debug
2569
+
2570
+ appendElem.appendChild(this.div);
2571
+
2572
+ this.div.innerHTML = this.getHTML( box.width, box.height );
2573
+ },
2574
+
2575
+ getHTML: function(width, height) {
2576
+ // return HTML for movie
2577
+ var html = '';
2578
+ var flashvars = 'id=' + this.id +
2579
+ '&width=' + width +
2580
+ '&height=' + height;
2581
+
2582
+ if (navigator.userAgent.match(/MSIE/)) {
2583
+ // IE gets an OBJECT tag
2584
+ var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
2585
+ html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
2586
+ }
2587
+ else {
2588
+ // all other browsers get an EMBED tag
2589
+ html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
2590
+ }
2591
+ return html;
2592
+ },
2593
+
2594
+ hide: function() {
2595
+ // temporarily hide floater offscreen
2596
+ if (this.div) {
2597
+ this.div.style.left = '-2000px';
2598
+ }
2599
+ },
2600
+
2601
+ show: function() {
2602
+ // show ourselves after a call to hide()
2603
+ this.reposition();
2604
+ },
2605
+
2606
+ destroy: function() {
2607
+ // destroy control and floater
2608
+ if (this.domElement && this.div) {
2609
+ this.hide();
2610
+ this.div.innerHTML = '';
2611
+
2612
+ var body = document.getElementsByTagName('body')[0];
2613
+ try { body.removeChild( this.div ); } catch(e) {;}
2614
+
2615
+ this.domElement = null;
2616
+ this.div = null;
2617
+ }
2618
+ },
2619
+
2620
+ reposition: function(elem) {
2621
+ // reposition our floating div, optionally to new container
2622
+ // warning: container CANNOT change size, only position
2623
+ if (elem) {
2624
+ this.domElement = ZeroClipboard.$(elem);
2625
+ if (!this.domElement) this.hide();
2626
+ }
2627
+
2628
+ if (this.domElement && this.div) {
2629
+ var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
2630
+ var style = this.div.style;
2631
+ style.left = '' + box.left + 'px';
2632
+ style.top = '' + box.top + 'px';
2633
+ }
2634
+ },
2635
+
2636
+ setText: function(newText) {
2637
+ // set text to be copied to clipboard
2638
+ this.clipText = newText;
2639
+ if (this.ready) this.movie.setText(newText);
2640
+ },
2641
+
2642
+ addEventListener: function(eventName, func) {
2643
+ // add user event listener for event
2644
+ // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
2645
+ eventName = eventName.toString().toLowerCase().replace(/^on/, '');
2646
+ if (!this.handlers[eventName]) this.handlers[eventName] = [];
2647
+ this.handlers[eventName].push(func);
2648
+ },
2649
+
2650
+ setHandCursor: function(enabled) {
2651
+ // enable hand cursor (true), or default arrow cursor (false)
2652
+ this.handCursorEnabled = enabled;
2653
+ if (this.ready) this.movie.setHandCursor(enabled);
2654
+ },
2655
+
2656
+ setCSSEffects: function(enabled) {
2657
+ // enable or disable CSS effects on DOM container
2658
+ this.cssEffects = !!enabled;
2659
+ },
2660
+
2661
+ receiveEvent: function(eventName, args) {
2662
+ // receive event from flash
2663
+ eventName = eventName.toString().toLowerCase().replace(/^on/, '');
2664
+
2665
+ // special behavior for certain events
2666
+ switch (eventName) {
2667
+ case 'load':
2668
+ // movie claims it is ready, but in IE this isn't always the case...
2669
+ // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
2670
+ this.movie = document.getElementById(this.movieId);
2671
+ if (!this.movie) {
2672
+ var self = this;
2673
+ setTimeout( function() { self.receiveEvent('load', null); }, 1 );
2674
+ return;
2675
+ }
2676
+
2677
+ // firefox on pc needs a "kick" in order to set these in certain cases
2678
+ if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
2679
+ var self = this;
2680
+ setTimeout( function() { self.receiveEvent('load', null); }, 100 );
2681
+ this.ready = true;
2682
+ return;
2683
+ }
2684
+
2685
+ this.ready = true;
2686
+ this.movie.setText( this.clipText );
2687
+ this.movie.setHandCursor( this.handCursorEnabled );
2688
+ break;
2689
+
2690
+ case 'mouseover':
2691
+ if (this.domElement && this.cssEffects) {
2692
+ this.domElement.addClass('hover');
2693
+ if (this.recoverActive) this.domElement.addClass('active');
2694
+ }
2695
+ break;
2696
+
2697
+ case 'mouseout':
2698
+ if (this.domElement && this.cssEffects) {
2699
+ this.recoverActive = false;
2700
+ if (this.domElement.hasClass('active')) {
2701
+ this.domElement.removeClass('active');
2702
+ this.recoverActive = true;
2703
+ }
2704
+ this.domElement.removeClass('hover');
2705
+ }
2706
+ break;
2707
+
2708
+ case 'mousedown':
2709
+ if (this.domElement && this.cssEffects) {
2710
+ this.domElement.addClass('active');
2711
+ }
2712
+ break;
2713
+
2714
+ case 'mouseup':
2715
+ if (this.domElement && this.cssEffects) {
2716
+ this.domElement.removeClass('active');
2717
+ this.recoverActive = false;
2718
+ }
2719
+ break;
2720
+ } // switch eventName
2721
+
2722
+ if (this.handlers[eventName]) {
2723
+ for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
2724
+ var func = this.handlers[eventName][idx];
2725
+
2726
+ if (typeof(func) == 'function') {
2727
+ // actual function reference
2728
+ func(this, args);
2729
+ }
2730
+ else if ((typeof(func) == 'object') && (func.length == 2)) {
2731
+ // PHP style object + method, i.e. [myObject, 'myMethod']
2732
+ func[0][ func[1] ](this, args);
2733
+ }
2734
+ else if (typeof(func) == 'string') {
2735
+ // name of function
2736
+ window[func](this, args);
2737
+ }
2738
+ } // foreach event handler defined
2739
+ } // user defined handler for event
2740
+ }
2741
+
2742
+ };
2743
+ </script>
2744
+
2745
+ <script type="text/javascript">
2746
+
2747
+ var keychain;
2748
+ var baseUrl;
2749
+ var keychainFolder, dataFolder, styleFolder;
2750
+ var current_profile = null;
2751
+ var devmode;
2752
+
2753
+ var OPANYWHERE_VERSION = "001";
2754
+
2755
+ function mainPageDidFinishLoading() {
2756
+ try {
2757
+ setup();
2758
+ keychain = new Keychain();
2759
+ showLockedScreen();
2760
+ } catch(e) {
2761
+ showFatalException(e);
2762
+ }
2763
+ }
2764
+
2765
+ function showLockedScreen() {
2766
+ try {
2767
+ $("#mainBody").html($("#login-html").html());
2768
+
2769
+ // Todo: allProfiles should be dynamically loaded
2770
+ var allProfiles = ["default"];
2771
+ selectProfile(allProfiles[0]);
2772
+ $("#masterPassword").focus();
2773
+ }
2774
+ catch(e) {
2775
+ showFatalException(e);
2776
+ }
2777
+ }
2778
+
2779
+ function verifyPassword(password) {
2780
+ try {
2781
+ if (!keychain.encryptionKeysLoaded) {
2782
+ encryptionKeysCouldNotLoad();
2783
+ return;
2784
+ }
2785
+
2786
+ if (keychain.verifyPassword(password)) {
2787
+ $("#mainBody").html($("#main-html").html());
2788
+ loadFile(fullKeychainFilePath('contents.js'), profileContentsDidFinishLoading);
2789
+ }
2790
+ else {
2791
+ login_failed();
2792
+ }
2793
+ } catch(e) {
2794
+ showFatalException(e);
2795
+ }
2796
+ }
2797
+
2798
+
2799
+ function encryptionKeysCouldNotLoad() {
2800
+ if (document.location.href.match(/file:.*var\/mobile.*\/Dropbox/i)) {
2801
+ showFatalMessage("1PasswordAnywhere cannot run in the Dropbox app", "<p>To access your data on iOS, please use Mobile Safari or <a href='itms-apps://itunes.apple.com/us/app/1password-pro/id319898689'>1Password app from the App Store</a>.</p>");
2802
+ }
2803
+ else if (document.location.href.match(/file:.*mnt.*\/dropbox/i)) {
2804
+ showFatalMessage("1PasswordAnywhere cannot run in the Dropbox app", "<p>To access your data in Android OS, please visit dropbox.com in your web browser or use <a href='https://market.android.com/details?id=com.onepassword.passwordmanager'>1Password for Android</a>.</p>");
2805
+ }
2806
+ else {
2807
+ var keysFilePath = fullKeychainFilePath('encryptionKeys.js');
2808
+ showFatalMessage("Problem loading 1Password data file", "<p>A <a target='_blank' href='" + keysFilePath + "'>key data file</a> could not be loaded and 1PasswordAnywhere cannot continue without it.</p><p>Please see <a target='_blank' href='http://help.agilebits.com/1Password3/1passwordanywhere_troubleshooting.html'>this help guide</a> for troubleshooting tips.</p>");
2809
+ }
2810
+ }
2811
+
2812
+ function encryptionKeysDidFinishLoading(json) {
2813
+ if (!json || json == "") {
2814
+ encryptionKeysCouldNotLoad();
2815
+ return;
2816
+ }
2817
+
2818
+ try {
2819
+ var keys;
2820
+ try {
2821
+ json = "(" + json + ")";
2822
+ keys = eval(json);
2823
+ }
2824
+ catch(e) {
2825
+ showFatalMessage("Problem parsing 1Password data file", "<p>There was a problem parsing the data contained in encryptionKeys.js.</p><p>Please <a href='mailto:1PAnywhere@agilebits.com?subject=1PasswordAnywhere%20problem%20parsing%20encryptionKeys.js&body=Please let us know what you were doing when this problem occurred.'>report this problem</a> to the Agile team.</p>")
2826
+ }
2827
+
2828
+ keychain.setEncryptionKeys(keys);
2829
+ } catch(e) {
2830
+ showFatalException(e);
2831
+ }
2832
+ }
2833
+
2834
+ function selectProfile(profile_name) {
2835
+ try {
2836
+ top.current_profile = profile_name;
2837
+ loadFile(fullKeychainFilePath('encryptionKeys.js'), encryptionKeysDidFinishLoading);
2838
+ } catch(e) {
2839
+ showFatalException(e);
2840
+ }
2841
+ }
2842
+
2843
+ function setup() {
2844
+ try {
2845
+ _setup();
2846
+ } catch(e) {
2847
+ showFatalException(e);
2848
+ }
2849
+ }
2850
+
2851
+ function _setup() {
2852
+ baseUrl = window.location.href.substring(0, window.location.href.indexOf("1Password.html"));
2853
+ keychainFolder = baseUrl;
2854
+
2855
+ var parameters = window.location.search.substring(1).split("&");
2856
+
2857
+ for (var i=0; i < parameters.length; i++) {
2858
+ var nvp = parameters[i].split("=");
2859
+ var name = nvp[0], value = nvp[1];
2860
+
2861
+ if (name == "keychainFolder") {
2862
+ keychainFolder = value;
2863
+ if (keychainFolder[keychainFolder.length-1] != "/") keychainFolder += "/";
2864
+ }
2865
+ if (name == "keychainFolder" && navigator && navigator.userAgent.match("Firefox") ) {
2866
+ alert("FATAL: The keychainFolder parameter is NOT supported in Firefox. Accessing files from outside the folder that opens you is against the mozilla security model unless you set security.fileuri.strict_origin_policy to false.");
2867
+ }
2868
+ if (name == "devmode") {
2869
+ devmode = true;
2870
+ }
2871
+ }
2872
+
2873
+ if (devmode) {
2874
+ styleFolder = "./style";
2875
+ }
2876
+ else {
2877
+ styleFolder = keychainFolder + "/style";
2878
+ }
2879
+ dataFolder = keychainFolder + "/data";
2880
+ }
2881
+
2882
+ function logout(autologout) {
2883
+ try {
2884
+ // Not really needed but want to be 100% sure decrypted data is cleared
2885
+ clearEntryDetails();
2886
+ keychain.lock();
2887
+
2888
+ // TODO -- would be nice to show autologout message to user
2889
+ showLockedScreen();
2890
+ } catch(e) {
2891
+ showFatalException(e);
2892
+ }
2893
+ }
2894
+
2895
+ function setFocus()
2896
+ {
2897
+ $('#password').focus();
2898
+ }
2899
+
2900
+ function fullKeychainFilePath(filename) {
2901
+ return top.keychainFolder + "data/" + top.current_profile + "/" + filename;
2902
+ }
2903
+
2904
+ function loadFile(file, onSuccess) {
2905
+ enableFirefoxPrivileges();
2906
+
2907
+ $.ajax({
2908
+ url: file,
2909
+ success: function(data, textStatus, request){ onSuccess(request.responseText);},
2910
+ error: function() { alert('A problem occurred when loading the "' + file + '" file.'); },
2911
+ });
2912
+ }
2913
+
2914
+ function enableFirefoxPrivileges() {
2915
+ // request local file read permission in Firefox
2916
+ try {
2917
+ try {
2918
+ // Make Safari bomb out
2919
+ netscape;
2920
+ netscape.security.PrivilegeManager.enablePrivilege("UniversalFileRead");
2921
+ }
2922
+ catch(e) {}
2923
+ } catch (e) {
2924
+ alert("Permission to read file was denied. If in Firefox you must allow this script to load local files.");
2925
+ }
2926
+ }
2927
+
2928
+ function showFatalException(exc) {
2929
+ try {
2930
+ window.console && console.log && console.log("Exception: " + exc ? exc : "N/A");
2931
+
2932
+ var error_desc = "EXCEPTION WAS NIL."
2933
+ if (exc) {
2934
+ var file = exc.sourceURL;
2935
+ if (!file) file = exc.fileName;
2936
+ if (file && file.match(/^.*\/(.*)\?ts=.*$/)) {
2937
+ file = RegExp.$1;
2938
+ }
2939
+ error_desc = exc.name + " occurred in " + file + " on line #" + exc.line + ":\n" + exc.message;
2940
+ }
2941
+
2942
+ if (OPANYWHERE_VERSION) error_desc += "\nYou are running 1PasswordAnywhere version #" + OPANYWHERE_VERSION;
2943
+
2944
+ var html_msg = "<p>" + error_desc.replace(/\n/g, "<br/>") + "</p><p>Please <a href='mailto:1PAnywhere@agilebits.com?subject=1PasswordAnywhere%20Problem&body=Please let us know what you were doing when this problem occurred.%0A%0AError details:%0A" + escape(error_desc) + "'>report this error</a> so Agile can investigate.</p>";
2945
+ _showMessageBox("1PasswordAnywhere experienced an error", html_msg, 'messageBox_error', {'fatal':true});
2946
+ }
2947
+ catch(e) {
2948
+ window.console && console.log && console.log("Exception during error processing: " + e ? e : "N/A");
2949
+
2950
+ var msg = 'An exception occurred during error processing! Please report this issue to Agile at 1PAnywhere@agilebits.com along with a description of what you were doing when this error happened.';
2951
+ if (OPANYWHERE_VERSION) msg += ' You are running version #' + OPANYWHERE_VERSION;
2952
+ alert(msg);
2953
+ }
2954
+ }
2955
+
2956
+ function showMessage(title, message) {
2957
+ _showMessageBox(title, message, 'messageBox_error', {});
2958
+ }
2959
+
2960
+ function showFatalMessage(title, message) {
2961
+ _showMessageBox(title, message, 'messageBox_error', { 'fatal' : true });
2962
+ }
2963
+
2964
+ function showFatalMessageWithEmailSupportLink(title, message) {
2965
+ if (OPANYWHERE_VERSION) message += "\nYou are running 1PasswordAnywhere version #" + OPANYWHERE_VERSION;
2966
+
2967
+ var html_msg = "<p>" + message.gsub(/\n/, "<br/>") + "</p><p>Please <a href='mailto:1PAnywhere@agilebits.com?subject=1PasswordAnywhere%20Problem&body=Please let us know what you were doing when this problem occurred.%0A%0AError details:%0A" + escape(message) + "'>report this error</a> so Agile can investigate.</p>";
2968
+
2969
+ _showMessageBox("1PasswordAnywhere experienced an error", html_msg, 'messageBox_error', {'fatal':true});
2970
+ }
2971
+
2972
+ function _showMessageBox (title, message, cssClass, options) {
2973
+ var help_url = options['help_url'];
2974
+ if (help_url) {
2975
+ $("#messageBox_help").attr('href', help_url);
2976
+ }
2977
+ else {
2978
+ $("#messageBox_help").hide();
2979
+ }
2980
+
2981
+ $('#messageBox').addClass(cssClass);
2982
+ $('#messageBox_title').html(title);
2983
+ $('#messageBox_message').html(message);
2984
+
2985
+ // Effect.Appear
2986
+ $('#messageBox_wrapper').show();
2987
+ $('#messageBox').fadeIn();
2988
+
2989
+ var fatal = options['fatal'];
2990
+ if (fatal) {
2991
+ $("#messageBox_dismiss").hide();
2992
+ }
2993
+ else {
2994
+ $('#messageBox_dismiss').click(function(){
2995
+ //Dismiss message box.
2996
+ $('#messageBox_wrapper').fadeOut();
2997
+ $('#messageBox').fadeOut();
2998
+
2999
+ $('messageBox_dismiss').unbind('click');
3000
+ });
3001
+
3002
+ $('#messageBox_wrapper').click(function(){
3003
+ //Dismiss message box.
3004
+ $('#messageBox_wrapper').fadeOut();
3005
+ $('#messageBox').fadeOut();
3006
+
3007
+ $('#messageBox_dismiss').unbind('click');
3008
+ });
3009
+ }
3010
+ }
3011
+
3012
+ function login_failed()
3013
+ {
3014
+ try {
3015
+ $('#passwordLabel').addClass('error');
3016
+ $('#masterPassword').addClass('error');
3017
+ $('#masterPassword').val("");
3018
+
3019
+ var hint = fullKeychainFilePath(".password.hint");
3020
+ $.ajax({
3021
+ url: hint,
3022
+ success: function(data, textStatus, request) {showPasswordHintIfAvailable(data)}
3023
+ });
3024
+
3025
+ // TODO
3026
+ // Effect.Shake('passwordLabel');
3027
+ }
3028
+ catch(e) {
3029
+ showFatalException(e);
3030
+ }
3031
+ }
3032
+
3033
+ function showPasswordHintIfAvailable(hint) {
3034
+ $('#passwordError').css('display', '');
3035
+ // if (transport.status != 404 && transport.responseText.length != 0) {
3036
+ if (hint) {
3037
+ $('#masterPasswordHint').html(hint);
3038
+ }
3039
+ }
3040
+ </script>
3041
+
3042
+ <script type="text/javascript"> <!-- keychain.js -->
3043
+ var INDEX_UUID=0, INDEX_TYPE=1, INDEX_NAME=2, INDEX_URL=3, INDEX_DATE=4, INDEX_FOLDER=5, INDEX_PASSWORD_STRENGTH=6, INDEX_TRASHED=7;
3044
+ var TYPE_WEBFORMS='webforms.WebForm', TYPE_FOLDERS='system.folder.Regular', TYPE_NOTES='securenotes.SecureNote', TYPE_IDENTITIES='identities.Identity', TYPE_PASSWORDS='passwords.Password', TYPE_WALLET='wallet', TYPE_SOFTWARE_LICENSES='wallet.computer.License', TYPE_TRASHED='trashed', TYPE_ACCOUNT='account', TYPE_ACCOUNT_ONLINESERVICE='wallet.onlineservices.', TYPE_ACCOUNT_COMPUTER='wallet.computer.';
3045
+ var ERROR_BAD_DECRYPT = "Decryption failed", ERROR_INVALID_JSON = "Decryption passed but JSON was invalid", ERROR_OK = "OK";
3046
+
3047
+ String.prototype.startsWith = function(str) {
3048
+ return (this.match("^"+str) == str);
3049
+ }
3050
+
3051
+ String.prototype.escapeHTML = function() {
3052
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
3053
+ }
3054
+
3055
+ function Keychain() {
3056
+ this.AUTOLOCK_LENGTH = 1 * 60 * 1000;
3057
+ this.autoLogoutTime = null;
3058
+ this.contents = { webforms:[], wallet:[], notes:[], identities:[], passwords:[], folders:[] };
3059
+ this.encryptionKeys = null;
3060
+ this._all = null;
3061
+ this.masterPassword = null;
3062
+ this.encryptionKeysLoaded = false;
3063
+ }
3064
+
3065
+ Keychain.prototype.setEncryptionKeys = function(keys) {
3066
+ this.encryptionKeys = keys;
3067
+ this.encryptionKeysLoaded = true;
3068
+ }
3069
+
3070
+ Keychain.prototype.verifyPassword = function(password) {
3071
+ GibberishAES.size(128);
3072
+ this.encryptionKeys.decryptedKeys = {};
3073
+
3074
+ var key = this.decryptEncryptionKey("SL5", password);
3075
+ if (!key) return false;
3076
+
3077
+ this.masterPassword = password;
3078
+ return true;
3079
+ }
3080
+
3081
+ Keychain.prototype.decryptEncryptionKey = function(sl, password) {
3082
+ for (var i=0; i < this.encryptionKeys["list"].length; i++) {
3083
+ var item = this.encryptionKeys["list"][i];
3084
+
3085
+ if (item['identifier'] == this.encryptionKeys[sl]) {
3086
+ var iterations = parseInt(item['iterations'] || "0", 10);
3087
+ if (iterations < 1000) iterations = 1000;
3088
+
3089
+ var decryptedKey = GibberishAES.decryptUsingPBKDF2(item["data"], password, iterations);
3090
+ if (!decryptedKey) return null;
3091
+
3092
+ var verification = GibberishAES.decryptBase64UsingKey(item["validation"],GibberishAES.s2a(decryptedKey));
3093
+ if (verification != decryptedKey) return null;
3094
+
3095
+ this.encryptionKeys.decryptedKeys[sl] = decryptedKey;
3096
+ return decryptedKey;
3097
+ }
3098
+ }
3099
+
3100
+ return null;
3101
+ }
3102
+
3103
+ Keychain.prototype.keyForItem = function(item) {
3104
+ if (item.securityLevel == null) {
3105
+ return this.encryptionKeys.decryptedKeys["SL5"]
3106
+ }
3107
+
3108
+ var key = this.encryptionKeys.decryptedKeys[item.securityLevel];
3109
+ if (!key) {
3110
+ key = this.decryptEncryptionKey(item.securityLevel, this.masterPassword);
3111
+ }
3112
+ return key;
3113
+ }
3114
+
3115
+ Keychain.prototype.rescheduleAutoLogout = function () {
3116
+ this.autoLogoutTime = new Date().getTime() + this.AUTOLOCK_LENGTH;
3117
+ }
3118
+
3119
+ Keychain.prototype.setContents = function(itemArray) {
3120
+ this._all = [];
3121
+
3122
+ this.contents[TYPE_WEBFORMS] = [];
3123
+ this.contents[TYPE_NOTES] = [];
3124
+ this.contents[TYPE_WALLET] = [];
3125
+ this.contents[TYPE_PASSWORDS] = [];
3126
+ this.contents[TYPE_IDENTITIES] = [];
3127
+ this.contents[TYPE_SOFTWARE_LICENSES] = [];
3128
+ this.contents['folders'] = [];
3129
+ this.contents[TYPE_ACCOUNT] = [];
3130
+ this.contents[TYPE_TRASHED] = [];
3131
+
3132
+ for (itemIndex in itemArray) {
3133
+ var item = new KeychainItemOverview(itemArray[itemIndex]);
3134
+ if (item.type.startsWith("system.")) continue;
3135
+
3136
+ this._all[item.uuid] = item;
3137
+
3138
+ var category = null;
3139
+ if (item.trashed == "Y") {
3140
+ category = TYPE_TRASHED;
3141
+ }
3142
+ else {
3143
+ if (item.type == TYPE_SOFTWARE_LICENSES) category = TYPE_SOFTWARE_LICENSES;
3144
+ else if (item.type == TYPE_WEBFORMS) category = TYPE_WEBFORMS;
3145
+ else if (item.type == TYPE_NOTES) category = TYPE_NOTES;
3146
+ else if (item.type == TYPE_IDENTITIES) category = TYPE_IDENTITIES;
3147
+ else if (item.type == TYPE_IDENTITIES) category = TYPE_IDENTITIES;
3148
+ else if (item.type == TYPE_PASSWORDS) category = TYPE_PASSWORDS;
3149
+ else if (item.type.startsWith(TYPE_FOLDERS)) category = 'folders';
3150
+ else if (item.type.startsWith("wallet.membership")) category = TYPE_WALLET;
3151
+ else if (item.type.startsWith("wallet.financial")) category = TYPE_WALLET;
3152
+ else if (item.type.startsWith("wallet.government")) category = TYPE_WALLET;
3153
+ }
3154
+
3155
+ if (category == null) category = TYPE_ACCOUNT;
3156
+
3157
+ var itemsByType = this.contents[category];
3158
+ if (!itemsByType) {
3159
+ alert(category);
3160
+ }
3161
+
3162
+ itemsByType.push(item);
3163
+ }
3164
+
3165
+ this.rescheduleAutoLogout();
3166
+
3167
+ window.setTimeout(this._autoLogout, 1000);
3168
+ }
3169
+
3170
+ Keychain.prototype.itemsOfType = function(name) {
3171
+ return this.contents[name];
3172
+ }
3173
+
3174
+ Keychain.prototype.itemWithUuid = function(uuid) {
3175
+ return this._all[uuid];
3176
+ }
3177
+
3178
+ Keychain.prototype._autoLogout = function() {
3179
+ var now = new Date();
3180
+
3181
+ if (now.getTime() < keychain.autoLogoutTime) {
3182
+ window.setTimeout(keychain._autoLogout, 1000);
3183
+ return;
3184
+ }
3185
+ logout(true);
3186
+ }
3187
+
3188
+ Keychain.prototype.lock = function() {
3189
+ if (this.encryptionKeys) {
3190
+ this.encryptionKeys.decryptedKeys = null;
3191
+ }
3192
+ this.masterPassword = null;
3193
+ this.encryptionKeysLoaded = false;
3194
+ }
3195
+
3196
+
3197
+
3198
+ function KeychainItemOverview(data) {
3199
+ this.uuid = data[INDEX_UUID];
3200
+ this.type = data[INDEX_TYPE];
3201
+ this.title = data[INDEX_NAME];
3202
+ this.domain = data[INDEX_URL];
3203
+ this.updatedAtMs = data[INDEX_DATE] * 1000;
3204
+ this.trashed = data[INDEX_TRASHED];
3205
+
3206
+ var date = new Date();
3207
+ date.setTime(this.updatedAtMs);
3208
+ this.updatedAt = date.format("mmm d, yyyy, h:MM:ss TT");
3209
+ }
3210
+
3211
+ KeychainItemOverview.prototype.matches = function(s) {
3212
+ if (this.title.toLowerCase().indexOf(s) >= 0) return true;
3213
+ if (this.domain.toLowerCase().indexOf(s) >= 0) return true;
3214
+ return false;
3215
+ }
3216
+
3217
+
3218
+ function KeychainItem(data) {
3219
+ this.updatedAt = null; // TODO -- confirm that it can be deleted
3220
+
3221
+ this.data = data;
3222
+ this.folderUuid = data.folderUuid;
3223
+ this.encrypted_contents = data.encrypted;
3224
+ this.decrypted = false;
3225
+ this.decrypted_secure_contents = null;
3226
+
3227
+ this.uuid = data.uuid;
3228
+ this.type = data.typeName;
3229
+ this.title = data.title;
3230
+ this.domain = data.location;
3231
+
3232
+ this.securityLevel = data.securityLevel;
3233
+ if (!data.securityLevel && data.openContents) {
3234
+ this.securityLevel = data.openContents.securityLevel;
3235
+ }
3236
+
3237
+ if (!this.securityLevel) {
3238
+ this.securityLevel = "SL5";
3239
+ }
3240
+
3241
+ this.updatedAtMs = data.updatedAt * 1000;
3242
+
3243
+ folderName = keychain.itemWithUuid(this.folderUuid);
3244
+ if (!folderName) folderName = "None";
3245
+ }
3246
+
3247
+ KeychainItem.prototype.decrypt = function() {
3248
+ GibberishAES.size(128);
3249
+ var plainText = null;
3250
+ var key = keychain.keyForItem(this);
3251
+ plainText = GibberishAES.decryptBase64UsingKey(this.encrypted_contents, GibberishAES.s2a(key));
3252
+
3253
+ if (!plainText) {
3254
+ return ERROR_BAD_DECRYPT;
3255
+ }
3256
+
3257
+ // Decode UTF encoding that OpenSSL uses.
3258
+ plainText = decodeURIComponent(escape(plainText));
3259
+
3260
+ var pt = '(' + plainText + ');';
3261
+ try { this.decrypted_secure_contents = eval(pt); }
3262
+ catch (e) { return ERROR_INVALID_JSON; }
3263
+
3264
+ return ERROR_OK;
3265
+ },
3266
+
3267
+ KeychainItem.prototype.isWebForm = function() {
3268
+ return this.data.typeName.indexOf(TYPE_WEBFORMS) == 0;
3269
+ }
3270
+
3271
+ KeychainItem.prototype.asHTML = function() {
3272
+ switch(this.type) {
3273
+ case TYPE_WEBFORMS: return this.webformHTML(); break;
3274
+ case TYPE_NOTES: return this.secureNoteHTML(); break;
3275
+ case TYPE_SOFTWARE_LICENSES: return this.walletHTML(); break;
3276
+ case TYPE_IDENTITIES: return this.identityHTML(); break;
3277
+ case TYPE_PASSWORDS: return this.passwordHTML();
3278
+ }
3279
+
3280
+ if (this.type.startsWith(TYPE_WALLET)) {
3281
+ return this.walletHTML();
3282
+ }
3283
+
3284
+ return "No asHTML defined for " + this.type+ " uuid:" + this.uuid;
3285
+ }
3286
+
3287
+ KeychainItem.prototype.passwordHTML = function() {
3288
+ var r = "<table><tr><th></th>";
3289
+ r += "<th><h1>" + this.title + "</h1></th></tr>";
3290
+ r += this.spacerTR();
3291
+ r += this.notesTR();
3292
+ r += this.spacerTR();
3293
+ r += "<tr><td class='label'>password</td><td>" + showAndHideConcealedField(this.uuid, this.decrypted_secure_contents.password, true) + "</td></tr></table>";
3294
+ return r;
3295
+ }
3296
+
3297
+ KeychainItem.prototype.identityHTML = function() {
3298
+ var r = "<table><tr><th></th>";
3299
+ r += "<th><h1>" + this.title + "</h1></th></tr>";
3300
+ r += this.spacerTR();
3301
+ r += this.notesTR();
3302
+ r += this.spacerTR();
3303
+ r += this.walletFields();
3304
+ r += "</table>";
3305
+ return r;
3306
+ }
3307
+
3308
+ KeychainItem.prototype.walletHTML = function() {
3309
+ var r = "<table><tr><th></th>";
3310
+ r += "<th><h1>" + this.title + "</h1></th></tr>";
3311
+ r += this.spacerTR();
3312
+ r += this.notesTR();
3313
+ r += this.spacerTR();
3314
+ r += this.walletFields();
3315
+ r += "</table>";
3316
+ return r;
3317
+ }
3318
+
3319
+ KeychainItem.prototype.walletFields = function() {
3320
+ var entryValues = "";
3321
+ for (var key in this.decrypted_secure_contents)
3322
+ {
3323
+ if (key == 'notesPlain') continue;
3324
+ var v = this.decrypted_secure_contents[key];
3325
+ entryValues += "<tr><td class='label'>" + key.escapeHTML() + "</td><td>";
3326
+
3327
+ try {entryValues += v.escapeHTML();}
3328
+ catch(e) {entryValues += v;}
3329
+ entryValues += "</td></tr>";
3330
+ }
3331
+ return entryValues;
3332
+ }
3333
+
3334
+ KeychainItem.prototype.secureNoteHTML = function() {
3335
+ var r = "<table><tr colspan='2'>";
3336
+ r += "<th><h1>" + this.title + "</h1></th></tr>";
3337
+
3338
+ var secure = this.decrypted_secure_contents;
3339
+ if (!secure.notesPlain || secure.notesPlain.length == 0) return "";
3340
+
3341
+ return r + "<tr><td colspan='2'>" + convertNewLines(secure.notesPlain.escapeHTML()) + "</td></tr></table>";
3342
+ }
3343
+
3344
+ KeychainItem.prototype.webformHTML = function() {
3345
+ var r = "<table><tr><th></th>";
3346
+ r += "<th><h1>" + this.title + "</h1>" + this.domain + "</th></tr>";
3347
+
3348
+ r += "<tr><td class='label'>Username</td><td>" + this.loginUsername() + "</td></tr>";
3349
+ r += "<tr><td class='label'>Password</td><td>" + showAndHideConcealedField(this.uuid+'-password', this.loginPassword(), true) + "</td></tr>";
3350
+
3351
+ r += this.spacerTR();
3352
+ if (devmode) {
3353
+ r += "<tr><td class='label'>UUID</td><td>" + this.uuid + "</td></tr>";
3354
+ }
3355
+ r += this.notesTR();
3356
+ r += this.spacerTR();
3357
+ r += this.loginFields();
3358
+ r += "</table>";
3359
+ return r;
3360
+ }
3361
+
3362
+ KeychainItem.prototype.findFieldWithDesignation = function(designation) {
3363
+ var count = this.decrypted_secure_contents.fields.length;
3364
+ for (var i = 0; i < count; ++i) {
3365
+ v = this.decrypted_secure_contents.fields[i];
3366
+ if (v.designation == designation) {
3367
+ return v.value;
3368
+ }
3369
+ }
3370
+ return null;
3371
+ }
3372
+
3373
+ KeychainItem.prototype.loginUsername = function() {
3374
+ var r = this.findFieldWithDesignation('username');
3375
+ return r ? r : "no field was designated as username";
3376
+ }
3377
+
3378
+ KeychainItem.prototype.loginPassword = function() {
3379
+ var r = this.findFieldWithDesignation('password');
3380
+ return r ? r : "no field was designated as password";
3381
+ }
3382
+
3383
+ KeychainItem.prototype.loginFields = function() {
3384
+ var entryValues = "";
3385
+ var count = this.decrypted_secure_contents.fields.length;
3386
+ for (var i = 0; i < count; ++i)
3387
+ {
3388
+ v = this.decrypted_secure_contents.fields[i];
3389
+ if (v.name == undefined || v.value == undefined) continue;
3390
+ entryValues += "<tr><td class='label'>" + v.name.escapeHTML() + "</td><td>";
3391
+
3392
+ if (v.type == 'P' || v.designation == 'password') {
3393
+ var id = "concealedField-" + this.uuid + "-" + i;
3394
+ entryValues += showAndHideConcealedField(id, v.value, true);
3395
+ }
3396
+ else {
3397
+ entryValues += v.value.escapeHTML();
3398
+ }
3399
+ entryValues += "</td></tr>";
3400
+ }
3401
+ return entryValues;
3402
+ }
3403
+
3404
+ KeychainItem.prototype.spacerTR = function() {
3405
+ return "<tr><td class='spacer'></td></tr>";
3406
+ }
3407
+
3408
+ KeychainItem.prototype.notesTR = function() {
3409
+ var secure = this.decrypted_secure_contents;
3410
+ if (!secure.notesPlain || secure.notesPlain.length == 0) return "";
3411
+
3412
+ return "<tr><td class='label'>Notes</td><td>" + convertNewLines(secure.notesPlain.escapeHTML()) + "</td></tr>";
3413
+ }
3414
+
3415
+ function encodeToHex(str){
3416
+ var r="";
3417
+ var e=str.length;
3418
+ var c=0;
3419
+ var h;
3420
+ while(c<e){
3421
+ h=str.charCodeAt(c++).toString(16);
3422
+ while(h.length<2) h="0"+h;
3423
+ r+=h;
3424
+ }
3425
+ return r.toUpperCase();
3426
+ }
3427
+ </script>
3428
+
3429
+ <script type="text/javascript">
3430
+ var selectedSection = "webforms";
3431
+ var selectedEntry = null;
3432
+ var selectedFolder = "";
3433
+ var total_items = 0;
3434
+ var current_sort_criteria = "Name";
3435
+ var current_sort_ascending = true;
3436
+ var entries = [];
3437
+ var currentEntry = null;
3438
+ var concealedFieldCount = 0;
3439
+ var copyableEntries = {};
3440
+ var lastSearchString = null;
3441
+
3442
+ function profileContentsDidFinishLoading(json) {
3443
+ if (!json || json == "") {
3444
+ var file = dataFolder + "/contents.js";
3445
+ showFatalMessage("Problem loading 1Password data file", "<p>A <a href='" + file + "'>key data file</a> could not be loaded and 1PasswordAnywhere cannot continue without it.</p><p>Please see <a href='http://help.agilebits.com/1Password3/1passwordanywhere_troubleshooting.html'>this help guide</a> for troubleshooting tips.</p>");
3446
+ }
3447
+ var allItems = null;
3448
+
3449
+ try {
3450
+ allItems = eval(json);
3451
+ }
3452
+ catch(exc) {
3453
+ var error_desc = exc.name + " occurred when parsing contents.js on line #" + exc.line + ":" + exc.message;
3454
+ showFatalMessageWithEmailSupportLink("1PasswordAnywhere experienced an error", error_desc);
3455
+ }
3456
+
3457
+ keychain.setContents(allItems);
3458
+
3459
+ renderSectionList();
3460
+ selectSection(TYPE_WEBFORMS);
3461
+
3462
+ $("#search").val(""); // Sometimes reload does not clear the search criteria
3463
+ lastSearchString = "";
3464
+ keychain.rescheduleAutoLogout();
3465
+ }
3466
+
3467
+
3468
+ var logins_png = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY0RUI5RTU3RDU0MTFERkFEOTdDRUMzQ0I1QThDM0QiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY0RUI5RTY3RDU0MTFERkFEOTdDRUMzQ0I1QThDM0QiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjRFQjlFMzdENTQxMURGQUQ5N0NFQzNDQjVBOEMzRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjRFQjlFNDdENTQxMURGQUQ5N0NFQzNDQjVBOEMzRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhYo1MgAAAQ1SURBVHjajJRLbFRlFMd/d+bO3E7n3Q6dtkAJpdUCQUARebnQiBtITIg2XbjwEY0L1+pCXcCClY+dS3aSYAxKgoayICpvgSLaDW0ptEM70+k87rx7H3M9d1qEaIjc5CQ39/u+3znn+//PhSd7vCvxv4/y2JWXv9nGuq6Dr6yP7+3vbFuDA39lqvMX7xUvkKmc5szb154MuO1oD0N9Rw482zfy5r6B4Nb1MeIhX2sppy9xbbrIsV8n67+Mz3+HXv6M0+/NPB44dHjThoM7Try+c3DznoEoXTENRVHQVAWPV8E0HWqGTVrAx6/c5+Slidv4fCMcOzT2X+D7p1dv742OfnBgy6ZVfgsMg+cG4vg9Ckt2k1TRpLpko9ctilWDjN7g1K00qqJO3syWXq1/uX/axXge8AZ7Ykde2j20KRHxkewIUjIcbqfKdEf8BH0e0mWLdMUSqMVCyeDeYoU9/R28sL1/oDccPOrhsId/lHv3x20b+5Nfb+yLqoVcCce0mJcKIgFfq8XfZ2rMlg3ifi87+qMEND+qT6WnO07VdsiW6kOza0NnufFtSm0Bo6HXwtFIW7lhk9A0/JF28nNlTo4vEhRoSMLvOOxaE6bR9OALaCSTKindwD0TisVUgtlDQrqkrrhsX9PjoSJ3pHm9jI7NMZOvkrWadAUd7FyD4c0Jah6VQtkmV7PICShbM9HlCgxJhl/d7WqitnB373ePysvO7kgLlK7UIdROuF3jjogQl7XpwhKmWqFuywG/Rl6+FwSsC7TUEBFt4grDHjHEME4+r9AZ52qlKkclW3sAmra0Y7QaeDrSRiAY4Pj5ac7PFRl+Zi2JZJzFiimVWmSMpux3T2YV1eGEjbMrTUHfTCwkmWSlJhXafvBJOZbN6v4Elt/H81vWsbq3g6biZa7YICuwyzMLUpzbaFOHc/aybZr2eRqNVnGRDevAFFBVoG7r8gRjUe5k68yL0obXR0Es5QpyYWIO+/qfch8pScxlt71lUQzlFOXKJ3R3aaVAEHqSMCU+9cnIGSa37mblSjXMpoIlSYuSMCONkM2BKoiFtKiU/f6hD2dH0/Ttf4ola6srBh0ig9iHQrEFzMxmmJ1KMSfVZdsC5AVmliownxGgJNVLP3Dmw6/cCh9MiiNtfkqtOkFKNsm4kVwlvbYvV+mKFJTKE3FsMbRHk28VAUZicjXVu+RKH+Pq/OjocfGjGRrGGyxkJlwhxJCuP8Q+YQEKOBwmJNWvCrXRbCXshrI+TTo1wh+fTz7643z4zJ7NUO38mXBsLeHIALbIGXaBUl00QrI3gS6jZo5PWVy/8RNjV99h/Iubj/t9uXDpgYREkq1v7SXe9yLxnkGCYSE6okijSmpqkskrv5E+d0H2Lbi/SYm8hPlvoPsuPSKX1xoObSXEnKgre2QkcN3fcL0hobtaS9SXJwL+FmAAySfOymJyzIkAAAAASUVORK5CYII%3D";
3469
+
3470
+ var accounts_png = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArJJREFUeNqsVN9rUnEUP07daps/mJCaWntZQSiFIsZS7Ic4Ah+2YLn3oH+gh94i6CF66GFQT71UD+EKgspBM3oqAnNCaTlmG67uhjlUUmfkr2vnfMmbd9eFDx34XM8538/38z3n+r1H1m634X+ajARlMhkEg0ETxrcRboSpz/1biLeIKwsLC1tMix4odhST7wKBwJjL5QKNRtOXWqlUgmg0CuFwuIihB0VTA7RQr9dvTk9Pj9ntdshkMpDP54Hn+X+COMSlPTMzM2OkQVoKemCVPofDAfF4nJ1cLBbB7XYz/+s3DkJPnjJ/bvYCHD5kYX4ikRC4TqcTQqGQj2JWIZ6oUiqVYDAYIJvNst9mswn3Hz4Cj/sU3J2fZyCfcrTWzZXL5aQxLFTYarUYyWw2M5AVCkW4dv0GGCZcoFAOsVyzUWO581M+EZf2koZQYUewG89eLIJ+/BgMDg3DiErLQD7laG03vyOo6JzQaDRE/yC1otIeAIPlCAwoGA145H3n0mxtN580JC132+RJJ3zMVGB1IyfkSNjrPQ1ezyTdDBFf1HKnwm7QhkuzZ2Bi3ChsIv/y3DmoVqsSvqjCXi2zRUUbqj+2hZh8vlmTdNOz5V6Cq+l1WNvIwjC+SzLyv6ytg9l0UMKVtNwLS69ew8Dg/r/vEP3niy/35EsqrFQqeP8KoNPpQKVSwaeVVRgxHhcEeeR9Xkn35IquDRJ20EZTqRRL5nI5oE/xwb07oFarRa2Vy2X2hXRzrVYrVfizW/D98vLyWaPRCMlkEmw2Gztxc3Nzz0mj1WoFbiwWg1qtFhXmIVYxpdfrH/v9fjVVRi30Y9Q2DZRIJFLGSi9i9UudAbuP5pnFYrmKQ+IExrp+BHFvAbv7wHHcLQzfYPxLmNhoSgTNptE/fj9Gd20HwZFPWr8FGAB4nuKFfCoviQAAAABJRU5ErkJggg%3D%3D";
3471
+
3472
+ var identities_png = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoFJREFUeNqslFlu01AUhk/stBk8xGpMa1CFAlJ5i5oqFY8UifAM7CCFFbCCqCuougKygqqsoX0AXkib2RCpAlo1btMYZ/Bsc68VTJvBEIlfurKS3PvlP+ee3yHXdQErFArBuAgynHmeyxVWBOGlqmogtdsHR0eHO7Ztlcb3+pwAYGr79ZvP2WyWa4pfQZIksEwTWq0WnJyUNpwx6G9OGGZodfV+gSRIbn//ACzL+uOaICCZXCpcStKraedmAh3XTX34+AmmlRYCgpt1jpj1A2pABh8eX1jRWDyDWzKPwwxFsxzuKy6RJEnfnW3bwDAMNwKe/qvDktztnEajUaAZBhiWBRYtBIJYnALTNORpsMCSNU3boygKaJr2QBhI0QzQVByUnlKcG6goclHTVJlGUIZhkVPkkKa8si/Oz/bmvhQkWRSbO7FYHARhBe7dFQA7LpeP385yFzg2WN3rDlerVcAu297g9/t9uLqUuKAz40nBm/FIZCKR+PqzXC6v67qXEsdxvH2macEXsVF0XfsYX95oyRPRW0ry+a0nW+/WHq15o0KgP1B6PahUatCVZbBHaQmHw/DwQQoSiQQMh0MoV6tQr5a3Ead4q4fpdHo3s7EOLEN7N7mwEIZO5xpMBLqZchzDb99/QH8wAJ7n4fHmJiwvC7sTPcS5JUYvCMMw4Oz8wgM6tuMn5MZIQb3egGZT9FqlGwY3AVQ1HQZDFXT0bEtXXpkYbFmm37+JvE/53gf2ego0GqLXdAzBMA3B8XPcYZB8oCS1Szx/x3shWCivJgLhG8bZ/Zt+ynJp2tjgPuRpJvFicTHy1HHsQGeoXFlT1ZJp6u/RRzRGrnwL+L/0S4ABAO24Wb68BmVxAAAAAElFTkSuQmCC";
3473
+
3474
+ var secure_notes_png = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjhJREFUeNqslN1qE0EUx/8zu5tEa2uNFzWJSbQppQgqpdeCb+IL+AL6BN74ToIXXhWkglBoaI1ISorNJptkN7vz4ZndjdkmzULEgWG+zvlx/jPnDNNa4382ezZhjL36VwgF9XkJSI1r/fPTujDG6q9vjTCZ+zR8WwP3fJFxY2EBY0BNcHx8jkplGzs793F62oXvh0uoo6OnpGmc+t0OdAAPkCO0ntzDxgYnywkatRKmUxtKadg2N3edWJMduJf6rZQ8JEPqyoc30JAygWxvFmFZHKNRACFlCowINcyV7GjtgokRzs8u4w2VZlS9toXygzvoXPyGH4h47/DFI7CimxshHQyAyMXLg2KaDhSIVHCcEEyH2G9atMeTs7APZuzzgFqTkRji4kd8Nyg4Fh5X72LoRrjs+SSbYXaFu81Nypl8YEEpFzwaQoXjVDJ5RwJcUldTiChTVfE8llxYGaFSfYAi3K3OHaNggBIlRqs2jy5uwjxIP1+yiRDCw8n3ybys0rFYYGg1Suj2IrieiA/KKOVLlpKAkYdKWcDijO4sU5cUnq0EztoSX74G4HT+LPoVV9/KPNSaZIgJqEAo34CJrzI1S11yBD7Hu49tys+ZK0OOZJPYyYP0rhS6V3OgkbxX59DC/gujqnljbnNlhFKa0gviRbWc9MX2cEvPYG9TWDdHMj3GobMEub7WcS2bqjtoKgN7nz6xgXVufGezH5uMPqzxb51kYO3sr58FtmhorAHtkG97cfOPAAMAWjLzjVHmAXoAAAAASUVORK5CYII%3D";
3475
+
3476
+ var software_png = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAotJREFUeNpi/P//PwM1ARMhBYyMjAxPGxtdgXgCiI0NowCQC/FhEOBnY9M5b27++UlDQyw2S1HU4zIE3SedbGynrwUEfAQaKorPQCaYt7B54UwQAw8QxwIx+3xW1invdu7k/P7p01Syw/DPP4ZeILXo33+GqTe+fl2z7ffv09937w4FutKGZAOBrmJ+/YPBHMRecJPhLZD6uoyNrefl5ctfP92/PwtoKDNyxMF9hyvZAIUPHDrEcNhPjWEbkKsNFWZPY2fffFZC4v/D2tosrKniza2DGCYysR1gEJSvZ7h0mJnh3es2Bl1dC7jcuUvXGb5mVDGo2doxiDXnMDCysaLoZXl7+yCacX8ZpK0nMPz6zsCwcaUYg4vVOwZkNfKcDAxrHXUYpLbuYmC112T4r8qJPwz55I4ycPN/ZDi2jYVBWNCaQViAG8NbVt6mDGcl+Bmun73E8I+RBbeBjMyfGITVDjC8e8HAsGeHHIONsSbW8JUU5Wf4HW7HcF/HlOEVoxJqGALxTBhn3z4GF0dHBqVZbQw/smoZ9vz9x/AMX7Ly9fX1cHR0lJ4xY8aqW7dufYanchDYOofB8sMrhv/3LjH8tzNimE1MPufl5fXR01LdumNB3Wx4pMAYe/Zxqdy+/u39m88Mbw+dY+gECv1Dz17I6Q4EPn/+vMPBwFiQ8e2lRZe3T7iu61nQxwhS2JjqKASkH5y5/vTg6Rt3dr56xzAFW35FNxAKFHriZI4bWTiJiCoa6YC99fHrT9Mfv/4wfPjyax3QsLmEvIpWiDw4fPvf5pe3j7G8e/OiGiwR5KAZIsDL0Q+UlCZkCI5SSdPTkG8nDydrAkxCAYi5iS0jcRRzhqA4YaR2FQAQYACebWDqB8uk6gAAAABJRU5ErkJggg%3D%3D";
3477
+
3478
+ var wallet_png = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoFJREFUeNqclM9rE0EUx7+7m6Uhpmnrr9YkrWBCU63aSi3RBnr3ooIoEvTQFo/toYjQW8GTV2/iSSo9+EeIB1EJSsBgaDVBYk2ztrtJmmy62eyP+DYmkQZtmzz4MjNv5n32zZuZZarVKvYzhmFYasKkMdIzWp/YN8AC/k9kFmxu/Ob426n5qW/Uf0ry7xfDHpDZTPB2cCZ4Kxhyn3P7A7OBa+RboDk/aZDU3xrHHgSbvjMdsnxKUbH8fnaYvUvDVwjgObVL5OP3xLbWsAGbuDExN3Jl5KrwXcBGYgM6r8M16oJjzAEjYFQlu8QkFhNv8BoLxIg14m0tsB5qHrs8ruuyLJ9OZVIYCA5g+MEwnP1OFPQCJF2CoAkMNFoZwhABz1IvtifDcDgMXdcnbTZbBJ3ZZdKn1dXVPxmqqjrJ83zEc6SEi+cv4IR7CA5nDzgbh6phwjANaKqCXbkAXdOgaRUYuoa89AtFtYpoMv+xAa0BOY6LHOdEOHk7smIGuqGhy+6wLhVMnWA6ASxQpYxKRSW41ZZprNIHVJzkGQhqrwWtHYC1XThYFZ2ag6vUGM1DMQyjLcCPzS3E1lMolUowqRymaWJb6bIOdbltYL4gQ8gqePhoCW6PF/JOFjt5EdvCBmYXn7SfoZQrwjvohaEWsf75A+RCDnIxjxKp+VI0TTs08GivE+l0GqKY/ed8LUNBEIBTfYcC9vV041i3hBcrL6EoSrOGXzd3/wItRzt2ZnAA3v7e5rWxdliObCEejy+zjRoK+c6vTSZXbp4DW89w/v1aDj9FuW3YpqjgXVyqMZpv2efzXaL+KGmlwyTvk74kk8lo428TrWd7r0PgWp2B3wIMABWfXvvkzOF0AAAAAElFTkSuQmCC";
3479
+
3480
+ var passwords_png = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApFJREFUeNqslc1OGlEUx/9DxrAgoBFFSNwQWFSUokhotRaTwgOQsDF0DwsegE2XdGGfoETdNixswgO0aUxsTF0ImNDEFWyIgUr4ijLD1/SeixAoLNR6kpM7M/ee/z2/c8/MCIqi4DlNCIVCBjb6mO8+MvaE+bd4PF4afSi22+13fr8/urGx8fIxaqlU6nUymeyxy8SYoCzLu/Pz8/br62sw8QeJzczMgGIodkKw2WyqAEVotWRcXKRwdHQEs9mM1VUbtre3MTs7OyFIa6lc3W53NxwOB0fRVUwQnU6H+9XVFXw+H2q1Go6PvyIW+zicm+ZOp3MlEAhEqWzDDO/u7iC3WvxGpVLBbrejWCyiUCigXC4jFApPZLi1tYXg+yAajQaWl5fH0MXb21vIcl+w2+uhzha12e491k60gdVqRb1eR6lUgsFgQKVSgcfj4TGS1ASVaxT9XlDuC3a7+Hl6inw+D4WJLxmN+LS/D6V/qnA4HLwsc3NzvCySJPMYQl9fX48mEokeR27dC7o2N3FwcACLxYK9vT243W5kMhkIgoAFvR6/s1lotVr8KfVbL51Oc5pRdDrlHrtQWJCgZ0GHh4egrKvVKnK53LCVqK5kkiTxkd6whcVFNt8ZolPHkOBJKpXeYYexdnNTBvlDjDZ7w9qKNhygU8dQY/+Ixz+r1Gr1B6/Xu0KLaSLL8HQ6HT8II6slZUbooijylnG5XLw0HSY4QKfy0atHLF9Yod9GIpEXhK7RaGAymbgI4dMpUwbTrMVaboBOa8XBBKGfnZ3tuN2v1mq1OsgfYpeXl0P0MUFCj8ViT0K32WwcnSMPBP8XncUr1DHivxNPRT8//5WlWGHKp2mJDd4nfnC/C8/9C/grwACwjsxQZSZRuQAAAABJRU5ErkJggg%3D%3D";
3481
+
3482
+ var trash_png = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABElJREFUeNqsVGtMm2UUfr7eaPmAUigbC1AQBg0sETJ1jAwhEwxzY5jgJQs6/OGMZMjgx/zHn8WM32SQGf95C+xiok7n9kMyopTKLgVqyGZm7y3dei+9tx/9PO1glrj98/1y8uWc7/2e9znnPO9heJ4HwzDYXmNjo7sikUhdMpluAvgKnufOgRGDdizT3ocMk34TEH4okQiNLMsaJicnXdv/ZrG2AcfHx9udj5wfxONcN7k1YrEYGRNJJKjcUwGegrFYBK7Hj5FMJpEgQxpmlpX+KpNJv5qamlrIYIkyyLOXLvN1dbVYXl6B0WiE2+NFPBpFIpGCKC8FfzCQPTQWiyFKcW5zE/lSKYqKCmtqa2tPHTjwyim1ujEDxWQZHn2jzzfw3glFe0c7SosVSHFppHkO4VAYPNEQCARgZSwixFCSZZ4HgVCAQrYQoUgY13/+CdPTF71LS1pllmE8EdHrV/WdQpEQhzs7Ub6nPFsTZWkporE48mXSJz49/kAQimL505qb9CY8ePAXHcr/maW4VcPjjY3q6YIihWp3WRmampoQ3NhAa2srOl5tp9QT2ZjZbIZOp0MwuIEIMTMaDVi6fRfBgN+8trY2Rlg/MjldPtnV/frXL9TUwGy14tOzZ8HmS3H9lxtwu93QLi6isEiO473HoFAo8NvvC/Q9P1vT2dmZgUwrMlgC/Lu+ETBMwmazYZdSiXg8jkOH2qFS1WDqwgV89PFplJQo0dPTg4aGBiqDDByXQiAQ4DJg2yC5gPD6fd5EIo6DbW2Qy+U4PXwG7w+cwIJGi5LiIux/aT8ufv4FtH8soZeYplIcXC6in7N2AKZSqfv19WoY/jbAYjZBra6Hz+/HjZs3qfObKCXmBawMxfJiaBY1aGs7SJlEjM8FFAmEtxxORyYNPCTQ0TMjqKysxPnPzpFkopibm8Pg4CBEpAaPx4c71BBVlWphB0auU15eUS8mzTU3N1O9FLh85Sql5CLzYt++RnR3deHK1e9IVrtxpOcIVlZ1MFgssucytFiMnEgswbpzHbfm53Gs9yhGPhnG6OgwHOtOLOuW8e47b+P20h3Y7RZEIzHYLebEcwFtNstiKBRCJBxGX18fnARyl0AKWBYbwSBk+bLs1Xyrvx8Gown37ulIUq7VZwJSrUQkIyvVKq0sU1JX5dQYK7TaRXz/wzW0tLyI+r17YbPbwQgYtFBZSL8JknCwqqqqgiCEOwBJoDISZtButdzn04Cquhrd3a9hZHiYuloEl9uDAA2Jzo4O8jNXj4HJZFijN0eafRLIBfT5fHEaV06HwzExM/PtqkajeZoGl+YpNS/S6XTW1+v1/MTE+TWPx/OlUCh0h8PhRxTezL3L2/9Ktg45TBtPVldX1w4NDbXK6IpZLTYkucSmfmVVOD8/f4km0LW8vDwNZRag/WGy9I4B+4xVSvYyWX9OjNuS2jhZaMvn/jOx/8/1jwADAGAcA5mh2ubaAAAAAElFTkSuQmCC";
3483
+
3484
+ function renderSectionList() {
3485
+ var h = "";
3486
+ h += renderSectionListItem(TYPE_WEBFORMS, "Logins", logins_png);
3487
+ h += renderSectionListItem(TYPE_ACCOUNT, "Accounts", accounts_png);
3488
+ h += renderSectionListItem(TYPE_IDENTITIES, "Identities", identities_png);
3489
+ h += renderSectionListItem(TYPE_NOTES, "Secure Notes", secure_notes_png);
3490
+ h += renderSectionListItem(TYPE_SOFTWARE_LICENSES, "Software", software_png);
3491
+ h += renderSectionListItem(TYPE_WALLET, "Wallet", wallet_png);
3492
+ h += renderSectionListItem(TYPE_PASSWORDS, "Passwords", passwords_png);
3493
+ h += renderSectionListItem(TYPE_TRASHED, "Trash", trash_png);
3494
+ $('#sourcesPane').html(h);
3495
+ }
3496
+
3497
+ function renderSectionListItem(name, displayName, img) {
3498
+
3499
+
3500
+ var r = "<li " + sectionOptions(name) + ">";
3501
+ r += "<img src='" + img + "' alt='' />" + displayName;
3502
+ r += sectionCount(name, displayName);
3503
+ r += "</li>";
3504
+ return r;
3505
+ }
3506
+
3507
+ function sectionOptions(name) {
3508
+ var opts = "id='" + name + "' onclick='selectSection(\"" + name + "\")'"
3509
+
3510
+ if (selectedSection == name) {
3511
+ opts += " class='selected' "
3512
+ }
3513
+ return opts;
3514
+ }
3515
+
3516
+ function sectionCount(name, display_name) {
3517
+ var result = " <span class='sectionCount'>(" + keychain.itemsOfType(name).length + ")</span>";
3518
+ return result;
3519
+ }
3520
+
3521
+ function showAndHideConcealedField(id, clearText, concealed) {
3522
+ var revealHide = concealed ? "Reveal" : "Hide";
3523
+
3524
+ // IMPL NOTE: Normally you need not escape HTML values in JS, but innerHTML assignment interprets the JS for some reason.
3525
+ // Note the use &apos instead of '. This is important as the interpreter gets confused when evaling innerHTML.
3526
+ var htmlValue = clearText.escapeHTML();
3527
+ var jsValue = htmlValue.replace(/\\/g, "\\\\");
3528
+ jsValue = jsValue.replace(/"/g, "\\\"").replace(/'/g, "&apos;");
3529
+
3530
+ var r = "<table class='hideRevealButton' id='" + id + "'><tr><td><a class='copy'>";
3531
+
3532
+ var copyImageId = "copyImage-" + id;
3533
+ r += copyableHiddenElement(copyImageId);
3534
+ r += "</a></td>";
3535
+
3536
+ r += "<td><a class='revealButton' href='#' style='text-decoration:none' onclick='toggleVisibilityOfConcealedField(\"#" + copyImageId + "\", \"" + jsValue + "\", " + !concealed + ")'>" + revealHide + "</a></td>";
3537
+
3538
+ r += "</tr>";
3539
+ r += "</table>";
3540
+
3541
+ id = "#" + id;
3542
+ $(id).html(r);
3543
+
3544
+ copyableEntries[copyImageId] = clearText;
3545
+
3546
+ return r;
3547
+ }
3548
+
3549
+ // TODO: Do not bother adding elements when running from file:// b/c of stupid default Flash security preference
3550
+ function copyableHiddenElement(id) {
3551
+ return "<div style='position:relative'><div class='copy' id='" + id + "'>&bull;&bull;&bull;&bull;&bull;&bull;&bull;&bull;&bull;&bull;</div></div>";
3552
+ }
3553
+
3554
+ function toggleVisibilityOfConcealedField(id, clearText) {
3555
+ if ($(id).text() == clearText) {
3556
+ $(id).html("&bull;&bull;&bull;&bull;&bull;&bull;&bull;&bull;&bull;&bull;");
3557
+ }
3558
+ else {
3559
+ $(id).text(clearText);
3560
+ }
3561
+ }
3562
+
3563
+ function enableCopyableEntries() {
3564
+ for (copyable in copyableEntries) {
3565
+ var clip = new ZeroClipboard.Client();
3566
+ clip.setHandCursor( true );
3567
+ clip.setText(copyableEntries[copyable]);
3568
+
3569
+ var button = $(copyable);
3570
+ var container = button.parentNode;
3571
+
3572
+ clip.glue( button, container );
3573
+ }
3574
+ }
3575
+
3576
+ /*
3577
+ function showPassword(data)
3578
+ {
3579
+ if (data.notesPlain && data.notesPlain.length > 0) {
3580
+
3581
+ $('#entryNotesDecryptedValue').parent().css('display', "");
3582
+ }
3583
+
3584
+ var passwd = "<tr><td class='fieldName'>Password</td><td class='fieldValue'>" + data.password.escapeHTML() + "</td></tr>";
3585
+ $('#dynamicFields').html(passwd);
3586
+ }
3587
+ */
3588
+
3589
+ function convertNewLines(txt) {
3590
+ return txt.replace(/\n\r/g, "\n").replace(/\r\n/g, "\n").replace(/\r/g, "\n").replace(/\n/g, "<br />");
3591
+ }
3592
+
3593
+ function sortCompareFunction(a, b) {
3594
+ if (current_sort_criteria == "Domain") {
3595
+ a = a.domain;
3596
+ b = b.domain;
3597
+ }
3598
+ else if (current_sort_criteria == "Modified") {
3599
+ a = a.updatedAtMs + "";
3600
+ b = b.updatedAtMs + "";
3601
+ }
3602
+ else {
3603
+ a = a.title;
3604
+ b = b.title;
3605
+ }
3606
+
3607
+ var result = 0;
3608
+ if ( a.toLowerCase() < b.toLowerCase() ) {
3609
+ result = -1;
3610
+ }
3611
+ else if ( a.toLowerCase() > b.toLowerCase() ) {
3612
+ result = 1;
3613
+ }
3614
+
3615
+ if (!current_sort_ascending) result = result * -1;
3616
+
3617
+ return result;
3618
+ }
3619
+
3620
+ function selectSection(section_id)
3621
+ {
3622
+ if (selectedFolder != "") {
3623
+ $("#" + selectedFolder).attr('class', '');
3624
+ }
3625
+
3626
+ keychain.rescheduleAutoLogout();
3627
+
3628
+ if (selectedSection != section_id)
3629
+ {
3630
+ selectedSection = section_id;
3631
+ renderSectionList();
3632
+ displayEntries({'select_first':true});
3633
+ }
3634
+ }
3635
+
3636
+ function selectEntry(entry_id)
3637
+ {
3638
+ keychain.rescheduleAutoLogout();
3639
+ selectedEntryId = entry_id;
3640
+
3641
+ // Deselect the currently highlighted entry
3642
+ $('#listPane .selected').removeClass('selected')
3643
+
3644
+ $('#entry_' + entry_id).addClass('selected');
3645
+ var file = fullKeychainFilePath(entry_id + ".1password");
3646
+ loadFile(file, entryDidFinishLoading);
3647
+ }
3648
+
3649
+ function entryDidFinishLoading(json) {
3650
+ if (!json || json == "") {
3651
+ alert("The data file for this entry could not be loaded.")
3652
+ return;
3653
+ }
3654
+
3655
+ var entry;
3656
+ try {
3657
+ var json = "(" + json + ")";
3658
+ entry = eval(json);
3659
+ }
3660
+ catch (e) {alert('Error evaluating data for this entry! Error: ' + e);}
3661
+
3662
+ selectedEntry = new KeychainItem(entry);
3663
+ showEntryDetails();
3664
+ }
3665
+
3666
+ function displayEntries(opts)
3667
+ {
3668
+ var select_first = false;
3669
+ if (opts) {
3670
+ select_first = opts['select_first']
3671
+ }
3672
+
3673
+ var all = keychain.itemsOfType(selectedSection);
3674
+ var entries = [];
3675
+
3676
+ var s = $("#search").val().toLowerCase();
3677
+
3678
+ for (var i=0; i<all.length; ++i) {
3679
+ var e = all[i];
3680
+ if (e.matches(s)) entries.push(e);
3681
+ }
3682
+
3683
+ entries.sort(sortCompareFunction);
3684
+ var i, len = entries.length;
3685
+ var displayCount = 0;
3686
+ var html = ""
3687
+ for (i = 0; i < len; ++i) {
3688
+ e = entries[i];
3689
+
3690
+ displayCount++;
3691
+ var title = e.title;
3692
+ var domain = e.domain;
3693
+ var date = e.updatedAt;
3694
+ var uuid = e.uuid;
3695
+ var clazz = "";
3696
+
3697
+ html += '<li id="entry_' + uuid + '" onclick="selectEntry(\''+uuid+'\')"><strong>'+title.escapeHTML()+'</strong><br/>'+domain+'</li>';
3698
+ }
3699
+ $('#listPane').html(html);
3700
+
3701
+ if (entries.length == 0) $('#detailsPane').html("");
3702
+ else if (select_first) selectEntry(entries[0].uuid);
3703
+
3704
+ keychain.rescheduleAutoLogout();
3705
+ }
3706
+
3707
+ function showEntryDetails() {
3708
+ keychain.rescheduleAutoLogout();
3709
+ $('#emptyDetailsPane').css("display", "none");
3710
+ $('#detailsPane').css("display", "");
3711
+ copyableEntries = {};
3712
+
3713
+ concealedFieldCount = 0;
3714
+
3715
+ var decryption_status;
3716
+ try { decryption_status = selectedEntry.decrypt() }
3717
+ catch (e) {alert("error " + e);}
3718
+
3719
+ if (decryption_status != ERROR_OK) {
3720
+ alert("An error occurred while processing item '" + selectedEntry.uuid + "'.\n\n" + decryption_status );
3721
+ return;
3722
+ }
3723
+
3724
+ $('#detailsPane').html("");
3725
+ $('#detailsPane').html(selectedEntry.asHTML());
3726
+ enableCopyableEntries();
3727
+ }
3728
+
3729
+ function clearEntryDetails() {
3730
+ $('#listPane').html("");
3731
+ $('#sourcesPane').html("");
3732
+ $('#detailsPane').html("");
3733
+ }
3734
+
3735
+ function searchEntries()
3736
+ {
3737
+ if (lastSearchString == $('#search').val()) return;
3738
+
3739
+ displayEntries({'select_first':true});
3740
+ lastSearchString = $('#search').val();
3741
+ }
3742
+ </script>
3743
+
3744
+ <script>
3745
+ $(document).ready(mainPageDidFinishLoading);
3746
+ </script>
3747
+
3748
+ </head>
3749
+
3750
+ <body>
3751
+ <div id="mainBody">
3752
+ <div id="messageBox_wrapper" style="display:none;">
3753
+ <div id="messageBox" style="display:none;">
3754
+ <div>
3755
+ <h1 id="messageBox_title"></h1>
3756
+ <p id="messageBox_message"></p>
3757
+ <a id="messageBox_help" href="#"></a>
3758
+ <span id="messageBox_dismiss">OK</span>
3759
+ </div>
3760
+ </div>
3761
+ </div>
3762
+ </div>
3763
+
3764
+ <div id="login-html" style="display:none">
3765
+
3766
+ <!--[if lte IE 9]><style type="text/css">
3767
+ div.unsupported_browser { position:fixed; z-index: 100; top:0; left:0; right:0; bottom:0; width: 100%; background-color: #C00; color: white;}
3768
+ div.unsupported_browser div {padding: 1em 4em;}
3769
+ div.unsupported_browser h3 { font-size:1.5em; margin-bottom:.5em;}
3770
+ div.unsupported_browser a { color: #CCC;}
3771
+ </style>
3772
+ <div class="unsupported_browser"><div><h3>Unsupported Browser</h3><p>Internet Explorer is currently not supported by 1PasswordAnywhere. We eventually want to support Internet Explorer, but until then, please use <a href="http://www.getfirefox.com">Firefox</a>, <a href="http://www.apple.com/safari">Safari</a>, or <a href="http://chrome.google.com">Chrome</a>.<![if lt IE 9]> Please note that when we do support Internet Explorer, it will most likely be the latest release only. Right now, the latest release is Internet Explorer 9.<![endif]><![if lte IE 8]>You are using Internet Explorer <![endif]><![if IE 6]>6<![endif]><![if IE 7]>7<![endif]><![if IE 8]>8<![endif]><![if lte IE 8]>, so you would need to upgrade your browser as well.<![endif]></p></div></div>
3773
+ <![endif]-->
3774
+
3775
+ <div id="wrapper">
3776
+ <img id="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAdXCAIAAACPB4a6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAM5JREFUeNrsWNEOgCAIVD/e37bZk2Nqhlig9+Ai2yC524GEGGNIKQXvfXDO3XZ+5ndq1/ayXa7SV22ffi/9teI/Lfr/nPitM3Piz+RvJAbdn82fVfyof4kzn4qfJP97ds+/Bvx20a8/8seJf6J+1eJZ4f8K/LTV71H9ksBvJH8n4jfD/9ZZZuq3NH6W67fW+gP+v8MP/ZdN/CTvH1z8oF/73B+t9l8S9Rv6Bf5r1a8d518r+I/5F/RLO/8x/8L8y2L/pWH+K3n/+BC/S4ABAFMgv7GXrGWPAAAAAElFTkSuQmCC" alt="" />
3777
+ <img id="top" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUeNpiYmBgMAYIMAAAQgA2ye6eBQAAAABJRU5ErkJggg%3D%3D" alt="" />
3778
+ <img id="bottom" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUeNpiYmBgMAYIMAAAQgA2ye6eBQAAAABJRU5ErkJggg%3D%3D" alt="" />
3779
+ <img id="left" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAdXCAIAAACPB4a6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANpJREFUeNrsWEkOgCAMBHwu/z9jMDExBKk2pQv0YKxLwHbGDsyRc06llBRjTCGEK67net3GvXs1lj7a77/j3jvt82cO2Pw46jfK6x7vbX5sLf/Uj2p+DfzZET9K/o/i0fgaOCPB/xn9S4L/mPlX7B8Qfr18NeD35ftn4Cet39Lcgeq3I34U/5+V9as1/daqP1L816o/EH5U6y9O/FZcf0n2FSx+3r949487+SfY/aOG/b/7J+6fcOmPRv8EynE2/3f0v1x/7NbP/Xtb+r2i/0Xln1jw7xnxOwUYAMcxzHw1xGeqAAAAAElFTkSuQmCC" alt="" />
3780
+ <img id="right" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAdXCAIAAACPB4a6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANpJREFUeNrsWEkOgCAMBHwu/z9jMDExBKk2pQv0YKxLwHbGDsyRc06llBRjTCGEK67net3GvXs1lj7a77/j3jvt82cO2Pw46jfK6x7vbX5sLf/Uj2p+DfzZET9K/o/i0fgaOCPB/xn9S4L/mPlX7B8Qfr18NeD35ftn4Cet39Lcgeq3I34U/5+V9as1/daqP1L816o/EH5U6y9O/FZcf0n2FSx+3r949487+SfY/aOG/b/7J+6fcOmPRv8EynE2/3f0v1x/7NbP/Xtb+r2i/0Xln1jw7xnxOwUYAMcxzHw1xGeqAAAAAElFTkSuQmCC" alt="" />
3781
+ <img id="doors" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAdXCAIAAAA8T66gAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB+xJREFUeNrs3T1P5FgQhWGzmoiIlN/IDyclImVXMxJq2d2axd3369TjqBN45VOnbpXt8vXT29vb9sPj4+Pj8/Pz/f39v9+vr6/Pz88vLy8//Se/vr6+tp8f33/158eJf/Lr6enpBPj7r/78OPFP/tkGHcOkHnfGo2JM6nypmYu58qQG7ufq087a+asHeJdC5xKSubg6z9XymKubxXipM17bXGKcv2RqBICBgc8vmSfWna/fx+XvTrebnn4fl7/T71eTWh5z9Vyulsdc3SzGBaUul8eklk7AwMCZjcDVtazHWn119SZ1VD1+SIxJnS81czFXntTAwMDAXbvMy9sPA+7efo8ouHsLPJmrF7yXuWo6iXG3GNeTGhgYGBi4Q5E4FoxOZfFYIsUYuLir5TFXN4txvVkfMc6PsXkuYGBgYGBgYGBgYGBgYGBgYGDgFcEehuRL7X41qfOkZi7mypMaGBgYeECX6X0nYK5ev+fyvpMYkxoYGBgYuGc9vlo2epTFq4VSjIG5Wh5zdbMY2786P49JLZ2AgYEzGwHzXKQmNamLSm2ei9Q6EOZiLmBgYODk6nTibx7y5fZh36qvJ/VSZ/yQGJM6X2rmYq48qYH7ufqcNXbO6jcHssslcyDAXC2PubpljFeb9VnYXGKcv2RqBICBgbsWCZMvpJZOwEVdLY+5ulmMzXPl57HqBAwMDBzbCNyqGc3L4q0qSeqc1uf+GJM6X2rmYq48qV0fMxdzAQMDA9+1Vl+uz5VmfS6nfGrMc4kxqYGBgYGBR4KP18edwMc7AmIMzNXOmKtni/GwM65nLjHOXzI1AsDAwL8Pw/ukzpMamKubudr+1dbqvBh730mMgYGBgYEfUCTu/HL7sG/V15N6wdbnzhiTOl9q5mKuPKmBp67HV+3WI52uJpgYA3M1c3F1M1fX+1a9GOfHuJ7UwMDANRsBQ0aklk7ARV0tj7m6WYzNc+XnMamlEzAwcCbYy+2kJjWpST3/GQ+LMVfbwEAeizEwMDDwfYe9jf9/ZbR/tRiTurzUzMVceVIDT12PzYEwF1dzNXARV9uDTYzzYmyeCxgYuEwjcGsha75W31q6SU1qYK7u4Gp5zNXNYux9p/w8Vp2AgYGBMxuBbelxDFKTupnURm7yXc1cpNaBAAMDAwMDzwn2jrl3zMWY1KR2xsoiMPDPDm+GMBdXr+9qeczVzWJsnis/j0ktnYCBgTMbge3ihsuAcYzLHzWGjEhNalLPIjVzKYvNYuz6OD+PtbfAwMDAmY3ArjD0frl9dzuT1FGtz0NiTOp8qZmLufKkBp69HpsDYS6u5mrgCq62f7UY58XYPBcwMDAwMDAwMDAwMDAwMDAwMPCK4PN39r6fm/d+/PM9KVDmfjWpSU3qWaRmrnxz6UD6xbhcHjMXMDAwcHIHciwYncrisUSSOq31uTPGpM6XmrmYK09q4Knr8VW79UinqwkmxsBcLY+5ulmMV9sma2FziXH+kqkRAAYG7lokDCeQWjoBF3W1PObqZjE2z5Wfx6oTMDAwcCa43ufESU1qUpN6vTMeFmNS60CAgYH7Hr4+yFzA0smXYhc4Y5+2JHXcAuK7qcDANVsfr3ozF1fP5Wp5zNXNYmyeKz+PSS2dgIGBYxuBbd3PiZOa1KQm9WmpmUtZbBZj18f5eay9BQYGBo5tBDwMWUhq96tJnSc1czFXntTAwMDAwMDAwMDAwMDAwMA2YyV1otTAXN3M1fKYq5vF2DxXfh6TWjoBAwMnNwLHVazTWn1ct0lNalKTuo/U5rlIrQMBBgYGBgZ2ffz3nqRHz3W1CyN1VF/9kBiTOl9q5mKuPKmBp67HbqIyF1fP5Wp5zNXNYlzvmYQY58fYcydgYOAFG4HT1/+774f1AB+3rSQ1qYG5uqer5TFXN4sxqfPzWHUCBgYGXqA6lfuceD2pV5sD8cl4Ujtj5qooNTAwMHDXLtN0E3Nx9fo9l3kuMSY1MDAwMPCQerz5jjlzcfU8rpbHXN0sxvavzs9jUksnYGDgzEZgM89FaukEXNPV8jjfXBaQqS/aNsOCzAUMDAw8HXhXEvq9FLsrggVebh8m9bAzHhZjUudLzVzMpREABgYOBdu/Ov+MubpbjL3vJMZ5Mfa+EzAwMDDwQ4vEZZ0YMAdy+axcXw3M1fKYq1vG2DxXfh6TWjoBAwNnNgLHJ+ZdX24/rtukJjWpSd1H6mFnvOA+AqQGZi7mAgYGBq5yfWxYcCGpzXOROk9q5mKuPKmB+7n69F+eexr6APC557/MxdXBrpbHXN0sxgue8armEuP8JVMjAAwMfH7lcr+a1HFSA3N1M1fLY65uFmPzXPl5rDoBAwMDawQ0e4XrsdaH1K6PmYvUwMDAwMDAwN2unW71Bbk9160WTIzFuLLUwMDAwMBNi8Rm31vm4uqpXC2PubpZjOvtbSzG+TG2fzUwMHAN8PGJeSfwcUaA1KQG5urZXT3sjIfF2FqdH+N65hJjYGBg4CJgX8LJl9o8F6nzpGYu5sqTGnjqeryZA2EuruZq4BquNs8lxnkxNs8FDAxcoxFwv5rU0gm4qKvlMVc3i7H9q/PzmNTSCRgYOLYRsH81qUm9futj/2qbKpNaI8BczAUMDAw8ZZE492e7AZQCZ7yb9RFjMSZ1SamZSz0GBj6/ZJoDYS6u5mrm4ur5zth8tRi3irF5LmBg4DKNgCEjUk8s9b8CDAB1fQOaVD7Z1wAAAABJRU5ErkJggg%3D%3D" alt="" />
3782
+
3783
+ <form id="login" name="login" method="post" action="" onsubmit="verifyPassword($('#masterPassword').val()); return false;">
3784
+
3785
+ <label for="masterPassword" id="passwordLabel"></label>
3786
+ <input id="masterPassword" type="password" name="masterPassword" value="" tabindex="1" />
3787
+
3788
+ <button id="unlock" type="submit" tabindex="2"></button>
3789
+
3790
+ <!--Had to make the keyhole background a form element because it's impossible to make form spacing the same on all browsers (couldn't make things line up together)-->
3791
+ <button id="keyhole" type="button" name="keyhole" value="" tabindex="-1"></button>
3792
+
3793
+ </form>
3794
+
3795
+ <div id="passwordError" style="display:none;">
3796
+ <h3>Password Hint:</h3>
3797
+ <p id="masterPasswordHint"></p>
3798
+ </div>
3799
+
3800
+ <img id="rivetTL" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUJJREFUeNpi/P//PwMtABMDjcCowbQ3mIWQAkZGRiEgJQfEokD8G4hfAfENYGr6h1cfvuQGNNQUSKlgkfoExPuBer+R7GKgocIgQ1lYWJhqa2vdNTU1LX79+vV1x44dW5YsWXINKGcJxHtJNpiTk1MeRJeWlnoYGBjEgNjs7OwMQUFBai9evKg/evQoAxcXl8i3b9/ekGQwUBMoTBkkJCQsP378iCJlYmJieP78+afQcCfNYB4enl8g+u3bt19///6NIvf+/fsvQHkQ8xfJQQF0MSj2JS5cuLBeW1tbARjWfCBxoNcvA117EijPAE0hpKcKoJc9gZSAuLi4JBDoA13+5c6dO6d/AgFQ/MGZM2eOk2Wwra0tB5CyAmJxNKn7hw8fPkF2OoYBJycnIWhEgVz6et++fV8JZqzR8njUYAwAEGAAJYt4HfLkZYsAAAAASUVORK5CYII%3D" alt="" />
3801
+ <img id="rivetTR" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUJJREFUeNpi/P//PwMtABMDjcCowbQ3mIWQAkZGRiEgJQfEokD8G4hfAfENYGr6h1cfvuQGNNQUSKlgkfoExPuBer+R7GKgocIgQ1lYWJhqa2vdNTU1LX79+vV1x44dW5YsWXINKGcJxHtJNpiTk1MeRJeWlnoYGBjEgNjs7OwMQUFBai9evKg/evQoAxcXl8i3b9/ekGQwUBMoTBkkJCQsP378iCJlYmJieP78+afQcCfNYB4enl8g+u3bt19///6NIvf+/fsvQHkQ8xfJQQF0MSj2JS5cuLBeW1tbARjWfCBxoNcvA117EijPAE0hpKcKoJc9gZSAuLi4JBDoA13+5c6dO6d/AgFQ/MGZM2eOk2Wwra0tB5CyAmJxNKn7hw8fPkF2OoYBJycnIWhEgVz6et++fV8JZqzR8njUYAwAEGAAJYt4HfLkZYsAAAAASUVORK5CYII%3D" alt="" />
3802
+ <img id="rivetBL" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUJJREFUeNpi/P//PwMtABMDjcCowbQ3mIWQAkZGRiEgJQfEokD8G4hfAfENYGr6h1cfvuQGNNQUSKlgkfoExPuBer+R7GKgocIgQ1lYWJhqa2vdNTU1LX79+vV1x44dW5YsWXINKGcJxHtJNpiTk1MeRJeWlnoYGBjEgNjs7OwMQUFBai9evKg/evQoAxcXl8i3b9/ekGQwUBMoTBkkJCQsP378iCJlYmJieP78+afQcCfNYB4enl8g+u3bt19///6NIvf+/fsvQHkQ8xfJQQF0MSj2JS5cuLBeW1tbARjWfCBxoNcvA117EijPAE0hpKcKoJc9gZSAuLi4JBDoA13+5c6dO6d/AgFQ/MGZM2eOk2Wwra0tB5CyAmJxNKn7hw8fPkF2OoYBJycnIWhEgVz6et++fV8JZqzR8njUYAwAEGAAJYt4HfLkZYsAAAAASUVORK5CYII%3D" alt="" />
3803
+ <img id="rivetsDoorsTop" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAWCAYAAAC7ZX7KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXtJREFUeNpi/P//P8NQAkwMQwyMOnjUwUPdwSyEFDAyMgoBKTkgFgXi30D8CohvAEuXf5RYTK65jPiKNaChpkBKBYvUJyDeD9T7jUzHkm0uCx5DhUGGsrCwMNXW1rprampa/Pr16+uOHTu2LFmy5BpQzhKI95LhWIrMxelgTk5OeRBdWlrqYWBgEANis7OzMwQFBam9ePGi/ujRowxcXFwi3759e0OKgyk1F6eDgZpAaYtBQkLC8uPHjyhSJiYmhufPn38KTX8kOZhSc3E6mIeH5xeIfvv27dffv3+jyL1///4LUB7E/EVqkqDUXHwhDMq1EhcuXFivra2tAExzfCBxYFRdBobCSaA8AzRnM5AYwhSZi7eUAEaRJ5ASEBcXlwQCfWCIfLlz587pn0AAFH9w5syZ4+SUEpSYi9fBtra2HEDKCojF0aTuHz58+AS5ZTAl5jIS07x0cnISgmYEUAi83rdv31dq1FrkmMs42h4edfCog0cdjBcABBgAQ8XeGZejfMAAAAAASUVORK5CYII%3D" alt="" />
3804
+ <img id="rivetsDoorsBottom" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAWCAYAAAC7ZX7KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXtJREFUeNpi/P//P8NQAkwMQwyMOnjUwUPdwSyEFDAyMgoBKTkgFgXi30D8CohvAEuXf5RYTK65jPiKNaChpkBKBYvUJyDeD9T7jUzHkm0uCx5DhUGGsrCwMNXW1rprampa/Pr16+uOHTu2LFmy5BpQzhKI95LhWIrMxelgTk5OeRBdWlrqYWBgEANis7OzMwQFBam9ePGi/ujRowxcXFwi3759e0OKgyk1F6eDgZpAaYtBQkLC8uPHjyhSJiYmhufPn38KTX8kOZhSc3E6mIeH5xeIfvv27dffv3+jyL1///4LUB7E/EVqkqDUXHwhDMq1EhcuXFivra2tAExzfCBxYFRdBobCSaA8AzRnM5AYwhSZi7eUAEaRJ5ASEBcXlwQCfWCIfLlz587pn0AAFH9w5syZ4+SUEpSYi9fBtra2HEDKCojF0aTuHz58+AS5ZTAl5jIS07x0cnISgmYEUAi83rdv31dq1FrkmMs42h4edfCog0cdjBcABBgAQ8XeGZejfMAAAAAASUVORK5CYII%3D" alt="" />
3805
+
3806
+ <a id="help" target='_blank' href="http://help.agilebits.com/1Password3/1passwordanywhere.html"></a>
3807
+
3808
+ <img id="branding" src="data:image/png;base64,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" alt="" />
3809
+ </div>
3810
+
3811
+ <div id="messageBox_wrapper" style="display:none;">
3812
+ <div id="messageBox">
3813
+ <h1 id="messageBox_title"></h1>
3814
+ <div id="messageBox_message"></div>
3815
+ <a id="messageBox_help" href="#"></a>
3816
+ <a id="messageBox_dismiss" href=""></a>
3817
+ </div>
3818
+ </div>
3819
+
3820
+ </div>
3821
+
3822
+
3823
+ <div id="main-html" style="display:none">
3824
+
3825
+ <div>
3826
+ <div id="headerBar">
3827
+ <img src="data:image/png;base64,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%3D%3D" />
3828
+ <input id="search" type="search" name="" value="" placeholder="Search" results="0" onkeyup="searchEntries();" onclick="searchEntries();"/>
3829
+ <button id="lock" onclick="logout(false);"></button>
3830
+ </div>
3831
+
3832
+ <ul id="sourcesPane">
3833
+ <!--
3834
+ <li class="subFolder">
3835
+ <ul>
3836
+ <li>
3837
+ <img src="http://aws.cachefly.net/anywhere/001/images/folder-20.png" alt="" />
3838
+ AWS</li>
3839
+ </ul></li>
3840
+ <li>
3841
+ -->
3842
+ </ul>
3843
+
3844
+ <ul id="listPane">
3845
+ </ul>
3846
+
3847
+ <div id="detailsPane">
3848
+ <table>
3849
+
3850
+ </table>
3851
+ </div>
3852
+
3853
+ <div id="emptyDetailsPane">
3854
+ </div>
3855
+ <div id="messageBox_wrapper" style="display:none;">
3856
+ <div id="messageBox" style="display:none;">
3857
+ <div>
3858
+ <h1 id="messageBox_title"></h1>
3859
+ <p id="messageBox_message"></p>
3860
+ <a id="messageBox_help" href="#"></a>
3861
+ <span id="messageBox_dismiss">OK</span>
3862
+ </div>
3863
+ </div>
3864
+ </div>
3865
+
3866
+ </div>
3867
+ </body>
3868
+
3869
+
3870
+ </html>