playful 0.1.0.alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.gemtest +0 -0
  3. data/.gitignore +19 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +5 -0
  6. data/Gemfile +6 -0
  7. data/History.rdoc +3 -0
  8. data/LICENSE.rdoc +22 -0
  9. data/README.rdoc +194 -0
  10. data/Rakefile +20 -0
  11. data/features/control_point.feature +13 -0
  12. data/features/device.feature +22 -0
  13. data/features/device_discovery.feature +9 -0
  14. data/features/step_definitions/control_point_steps.rb +19 -0
  15. data/features/step_definitions/device_discovery_steps.rb +40 -0
  16. data/features/step_definitions/device_steps.rb +28 -0
  17. data/features/support/common.rb +9 -0
  18. data/features/support/env.rb +17 -0
  19. data/features/support/fake_upnp_device_collection.rb +108 -0
  20. data/features/support/world_extensions.rb +15 -0
  21. data/lib/core_ext/hash_patch.rb +5 -0
  22. data/lib/core_ext/socket_patch.rb +16 -0
  23. data/lib/core_ext/to_upnp_s.rb +65 -0
  24. data/lib/playful.rb +5 -0
  25. data/lib/playful/control_point.rb +175 -0
  26. data/lib/playful/control_point/base.rb +74 -0
  27. data/lib/playful/control_point/device.rb +511 -0
  28. data/lib/playful/control_point/error.rb +13 -0
  29. data/lib/playful/control_point/service.rb +404 -0
  30. data/lib/playful/device.rb +28 -0
  31. data/lib/playful/logger.rb +8 -0
  32. data/lib/playful/ssdp.rb +195 -0
  33. data/lib/playful/ssdp/broadcast_searcher.rb +114 -0
  34. data/lib/playful/ssdp/error.rb +6 -0
  35. data/lib/playful/ssdp/listener.rb +38 -0
  36. data/lib/playful/ssdp/multicast_connection.rb +112 -0
  37. data/lib/playful/ssdp/network_constants.rb +17 -0
  38. data/lib/playful/ssdp/notifier.rb +41 -0
  39. data/lib/playful/ssdp/searcher.rb +87 -0
  40. data/lib/playful/version.rb +3 -0
  41. data/lib/rack/upnp_control_point.rb +70 -0
  42. data/playful.gemspec +38 -0
  43. data/spec/spec_helper.rb +16 -0
  44. data/spec/support/search_responses.rb +134 -0
  45. data/spec/unit/core_ext/to_upnp_s_spec.rb +105 -0
  46. data/spec/unit/playful/control_point/device_spec.rb +7 -0
  47. data/spec/unit/playful/control_point_spec.rb +45 -0
  48. data/spec/unit/playful/ssdp/listener_spec.rb +29 -0
  49. data/spec/unit/playful/ssdp/multicast_connection_spec.rb +157 -0
  50. data/spec/unit/playful/ssdp/notifier_spec.rb +76 -0
  51. data/spec/unit/playful/ssdp/searcher_spec.rb +110 -0
  52. data/spec/unit/playful/ssdp_spec.rb +214 -0
  53. data/tasks/control_point.html +30 -0
  54. data/tasks/control_point.thor +43 -0
  55. data/tasks/search.thor +128 -0
  56. data/tasks/test_js/FABridge.js +1425 -0
  57. data/tasks/test_js/WebSocketMain.swf +807 -0
  58. data/tasks/test_js/swfobject.js +825 -0
  59. data/tasks/test_js/web_socket.js +1133 -0
  60. data/test/test_ssdp.rb +298 -0
  61. data/test/test_ssdp_notification.rb +74 -0
  62. data/test/test_ssdp_response.rb +31 -0
  63. data/test/test_ssdp_search.rb +23 -0
  64. metadata +339 -0
@@ -0,0 +1,30 @@
1
+ <html>
2
+ <head>
3
+ <script src='test_js/swfobject.js'></script>
4
+ <script src='test_js/FABridge.js'></script>
5
+ <script src='test_js/web_socket.js'></script>
6
+ <script>
7
+ function init() {
8
+ function debug(string) {
9
+ var element = document.getElementById("debug");
10
+ var p = document.createElement("p");
11
+ p.appendChild(document.createTextNode(string));
12
+ element.appendChild(p);
13
+ }
14
+
15
+ var Socket = "MozWebSocket" in window ? MozWebSocket : WebSocket;
16
+ var ws = new Socket("ws://localhost:8080/");
17
+ ws.onmessage = function(evt) { debug("Message: " + evt.data); };
18
+ ws.onclose = function() { debug("socket closed"); };
19
+ ws.onopen = function() {
20
+ debug("connected...");
21
+ ws.send("hello server");
22
+ ws.send("hello again");
23
+ };
24
+ };
25
+ </script>
26
+ </head>
27
+ <body onload="init();">
28
+ <div id="debug"></div>
29
+ </body>
30
+ </html>
@@ -0,0 +1,43 @@
1
+ require 'bundler/setup'
2
+ require File.expand_path(File.dirname(__FILE__)+ '/../lib/playful/control_point')
3
+ require 'rack'
4
+ require 'em-websocket'
5
+
6
+ Playful::ControlPoint.raise_on_remote_error = false
7
+
8
+ module Playful
9
+ class ControlPoint < Thor
10
+ desc 'test TARGET', 'Make a control point'
11
+ def test(target='upnp:rootdevice')
12
+ cp = Playful::ControlPoint.new(target)
13
+
14
+ cp.start do |new_device_channel, old_device_channel|
15
+ EM.defer do
16
+ EM::WebSocket.start(host: '0.0.0.0', port: 8080, debug: true) do |ws|
17
+ ws.onopen do
18
+ new_device_channel.subscribe do |device|
19
+ puts "New device in channel: #{device.friendly_name}"
20
+
21
+ ws.send "[#{Time.now}] #{device.friendly_name}: #{device.device_type}"
22
+
23
+ device.service_list.each do |service|
24
+ ws.send "-- #{service.service_type}"
25
+
26
+ service.action_list.each do |action|
27
+ ws.send "---- #{action[:name]}"
28
+ ws.send "---- #{action[:argumentList]}"
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ Rack::Handler::Thin.run(Rack::Builder.new {
36
+ run Rack::File.new(File.expand_path(File.dirname(__FILE__) + '/control_point.html'))
37
+ }, Port: 3000)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+
data/tasks/search.thor ADDED
@@ -0,0 +1,128 @@
1
+ require 'pp'
2
+ require File.expand_path(File.dirname(__FILE__)+ '/../lib/playful/ssdp')
3
+ require File.expand_path(File.dirname(__FILE__)+ '/../lib/playful/control_point/device')
4
+
5
+ module Playful
6
+ class Ssdp < Thor
7
+ #---------------------------------------------------------------------------
8
+ # search
9
+ #---------------------------------------------------------------------------
10
+ desc 'search TARGET', 'Searches for devices of type TARGET'
11
+ method_option :response_wait_time, default: 5
12
+ method_option :ttl, default: 4
13
+ method_option :do_broadcast_search, type: :boolean
14
+ method_option :log, type: :boolean
15
+ def search(target='upnp:rootdevice')
16
+ Playful.log = options[:log]
17
+ time_before = Time.now
18
+ results = Playful::SSDP.search(target, options.dup)
19
+ time_after = Time.now
20
+
21
+ puts <<-RESULTS
22
+ size: #{results.size}
23
+ locations: #{results.map { |r| r[:location] }}
24
+ unique size: #{results.uniq.size}
25
+ unique locations: #{results.uniq.map { |r| r[:location] }}
26
+ search duration: #{time_after - time_before}
27
+ RESULTS
28
+
29
+ results
30
+ end
31
+
32
+ #---------------------------------------------------------------------------
33
+ # search_and_parse
34
+ #---------------------------------------------------------------------------
35
+ desc 'search_and_parse TARGET', 'Searches for devices, fetches, and parses their DDFs'
36
+ method_option :response_wait_time, default: 3
37
+ method_option :ttl, default: 4
38
+ method_option :do_broadcast_search, type: :boolean
39
+ method_option :log, type: :boolean
40
+ def search_and_parse(target='upnp:rootdevice')
41
+ responses = invoke :search, target
42
+ return if responses.empty?
43
+
44
+ devices = []
45
+ successful_devices = 0
46
+ failed_devices = 0
47
+ responses.uniq!
48
+
49
+ EM.synchrony do
50
+ responses.each_with_index do |response, i|
51
+ device_creator = Playful::ControlPoint::Device.new(ssdp_notification: response)
52
+
53
+ device_creator.errback do
54
+ puts "<#{self.class}> Failed creating device."
55
+ failed_devices += 1
56
+ end
57
+
58
+ device_creator.callback do |built_device|
59
+ devices << built_device
60
+ successful_devices += 1
61
+ end
62
+
63
+ device_creator.fetch
64
+ end
65
+
66
+ tickloop = EM.tick_loop do
67
+ if (successful_devices + failed_devices) == responses.size
68
+ :stop
69
+ end
70
+ end
71
+
72
+ EM.add_periodic_timer(1) do
73
+ puts "successful devices: #{successful_devices}/#{responses.size}"
74
+ puts "failed devices: #{failed_devices}/#{responses.size}"
75
+ puts "Connections: #{EM.connection_count}"
76
+ end
77
+
78
+ tickloop.on_stop { EM.stop }
79
+ end
80
+
81
+ puts 'No devices found' && exit if devices.empty?
82
+
83
+ first_device = devices.first
84
+
85
+ puts "First device's devices count: #{first_device.device_list.size}"
86
+ puts "First device's service_list count: #{first_device.service_list.size}"
87
+
88
+ if first_device.has_services?
89
+ puts "First Service's ACTIONS"
90
+ pp first_device.service_list.first.action_list
91
+
92
+ puts "First Service's ACTIONS as methods"
93
+ pp first_device.service_list.first.singleton_methods
94
+
95
+ if devices.first.service_list.first.respond_to? :GetCurrentConnectionIDs
96
+ puts "Current connection IDs: #{devices.first.service_list.first.GetCurrentConnectionIDs}"
97
+ end
98
+
99
+ if devices.first.service_list.first.respond_to? :GetSystemUpdateID
100
+ puts "System update id: #{devices.first.service_list.first.GetSystemUpdateID}"
101
+ end
102
+ end
103
+
104
+ if first_device.has_devices?
105
+ pp first_device.devices
106
+ pp first_device.devices.first.service_list
107
+ puts "First Child Device's Service"
108
+ pp first_device.devices.first.service_list.first
109
+ puts "First Child Device's Service's ACTIONS"
110
+ pp first_device.devices.first.service_list.first.action_list
111
+ pp first_device.devices.first.service_list.first.singleton_methods
112
+ #puts "Services state table"
113
+ #pp devices.first.service_list.first.service_state_table
114
+ modules = first_device.devices.first.service_list.first.GetModules
115
+ pp modules
116
+
117
+ end
118
+
119
+ #if devices.last.has_services?
120
+ # puts "Last Service's ACTIONS"
121
+ # pp devices.first.service_list.last.action_list
122
+ # puts "Services state table"
123
+ # pp devices.first.service_list.last.service_state_table
124
+ # puts "protocol info: #{devices.first.service_list.last.GetProtocolInfo}"
125
+ #end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,1425 @@
1
+
2
+
3
+
4
+ <!DOCTYPE html>
5
+ <html>
6
+ <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# githubog: http://ogp.me/ns/fb/githubog#">
7
+ <meta charset='utf-8'>
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
9
+ <title>em-websocket/examples/js/FABridge.js at master · igrigorik/em-websocket · GitHub</title>
10
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub" />
11
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub" />
12
+ <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
13
+
14
+
15
+
16
+
17
+ <meta content="authenticity_token" name="csrf-param" />
18
+ <meta content="8fctVMGZ6BmL3BVur7nN7f/K4QOCvZ0Ug4W7ESxVmr8=" name="csrf-token" />
19
+
20
+ <link href="https://a248.e.akamai.net/assets.github.com/stylesheets/bundles/github-bbf16587e4cb227e94d4838b0b62e06ad84f2419.css" media="screen" rel="stylesheet" type="text/css" />
21
+ <link href="https://a248.e.akamai.net/assets.github.com/stylesheets/bundles/github2-27fd7716e0bafa52297f37784a2d549774dc1969.css" media="screen" rel="stylesheet" type="text/css" />
22
+
23
+
24
+
25
+
26
+ <script src="https://a248.e.akamai.net/assets.github.com/javascripts/bundles/frameworks-a450c7f907bdc1ee6b362ab1ecca811c761fd259.js" type="text/javascript"></script>
27
+
28
+ <script defer="defer" src="https://a248.e.akamai.net/assets.github.com/javascripts/bundles/github-962475eecb5a745150445b68592ced09de5cd872.js" type="text/javascript"></script>
29
+
30
+
31
+
32
+ <link rel='permalink' href='/igrigorik/em-websocket/blob/b9d439cd3494db3225587ccf7cb060f4b37a9f13/examples/js/FABridge.js'>
33
+ <meta property="og:title" content="em-websocket"/>
34
+ <meta property="og:type" content="githubog:gitrepository"/>
35
+ <meta property="og:url" content="https://github.com/igrigorik/em-websocket"/>
36
+ <meta property="og:image" content="https://a248.e.akamai.net/assets.github.com/images/gravatars/gravatar-140.png?1329921026"/>
37
+ <meta property="og:site_name" content="GitHub"/>
38
+ <meta property="og:description" content="EventMachine based WebSocket server. Contribute to em-websocket development by creating an account on GitHub."/>
39
+
40
+ <meta name="description" content="EventMachine based WebSocket server. Contribute to em-websocket development by creating an account on GitHub." />
41
+
42
+ <link href="https://github.com/igrigorik/em-websocket/commits/master.atom" rel="alternate" title="Recent Commits to em-websocket:master" type="application/atom+xml" />
43
+
44
+ </head>
45
+
46
+
47
+ <body class="logged_out page-blob vis-public env-production " data-blob-contribs-enabled="yes">
48
+ <div id="wrapper">
49
+
50
+
51
+
52
+
53
+
54
+ <div id="header" class="true clearfix">
55
+ <div class="container clearfix">
56
+ <a class="site-logo" href="https://github.com/">
57
+ <!--[if IE]>
58
+ <img alt="GitHub" class="github-logo" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7.png?1329921026" />
59
+ <img alt="GitHub" class="github-logo-hover" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7-hover.png?1329921026" />
60
+ <![endif]-->
61
+ <img alt="GitHub" class="github-logo-4x" height="30" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7@4x.png?1337118071" />
62
+ <img alt="GitHub" class="github-logo-4x-hover" height="30" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7@4x-hover.png?1337118071" />
63
+ </a>
64
+
65
+
66
+ <!--
67
+ make sure to use fully qualified URLs here since this nav
68
+ is used on error pages on other domains
69
+ -->
70
+ <ul class="top-nav logged_out">
71
+ <li class="pricing"><a href="https://github.com/plans">Signup and Pricing</a></li>
72
+ <li class="explore"><a href="https://github.com/explore">Explore GitHub</a></li>
73
+ <li class="features"><a href="https://github.com/features">Features</a></li>
74
+ <li class="blog"><a href="https://github.com/blog">Blog</a></li>
75
+ <li class="login"><a href="https://github.com/login?return_to=%2Figrigorik%2Fem-websocket%2Fblob%2Fmaster%2Fexamples%2Fjs%2FFABridge.js">Login</a></li>
76
+ </ul>
77
+
78
+
79
+
80
+
81
+ </div>
82
+ </div>
83
+
84
+
85
+
86
+ <div class="site hfeed" itemscope itemtype="http://schema.org/WebPage">
87
+ <div class="container hentry">
88
+ <div class="pagehead repohead instapaper_ignore readability-menu">
89
+ <div class="title-actions-bar">
90
+
91
+
92
+
93
+
94
+ <ul class="pagehead-actions">
95
+
96
+
97
+
98
+
99
+ <li>
100
+ <span class="watch-button"><a href="/login?return_to=%2Figrigorik%2Fem-websocket" class="minibutton btn-watch js-toggler-target entice tooltipped leftwards" title="You must be logged in to use this feature" rel="nofollow">Watch</a><a class="social-count js-social-count" href="/igrigorik/em-websocket/watchers">755</a></span>
101
+ </li>
102
+ <li>
103
+ <a href="/login?return_to=%2Figrigorik%2Fem-websocket" class="minibutton btn-fork js-toggler-target fork-button entice tooltipped leftwards" title="You must be logged in to use this feature" rel="nofollow">Fork</a><a href="/igrigorik/em-websocket/network" class="social-count">73</a>
104
+ </li>
105
+
106
+ </ul>
107
+
108
+ <h1 itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="entry-title public">
109
+ <span class="repo-label"><span>public</span></span>
110
+ <span class="mega-icon mega-icon-public-repo"></span>
111
+ <span class="author vcard">
112
+ <a href="/igrigorik" class="url fn" itemprop="url" rel="author"> <span itemprop="title">igrigorik</span>
113
+ </a></span> /
114
+ <strong><a href="/igrigorik/em-websocket" class="js-current-repository">em-websocket</a></strong>
115
+ </h1>
116
+ </div>
117
+
118
+
119
+
120
+ <ul class="tabs">
121
+ <li><a href="/igrigorik/em-websocket" class="selected" highlight="repo_sourcerepo_downloadsrepo_commitsrepo_tagsrepo_branches">Code</a></li>
122
+ <li><a href="/igrigorik/em-websocket/network" highlight="repo_network">Network</a>
123
+ <li><a href="/igrigorik/em-websocket/pulls" highlight="repo_pulls">Pull Requests <span class='counter'>2</span></a></li>
124
+
125
+ <li><a href="/igrigorik/em-websocket/issues" highlight="repo_issues">Issues <span class='counter'>14</span></a></li>
126
+
127
+ <li><a href="/igrigorik/em-websocket/wiki" highlight="repo_wiki">Wiki</a></li>
128
+
129
+ <li><a href="/igrigorik/em-websocket/graphs" highlight="repo_graphsrepo_contributors">Graphs</a></li>
130
+
131
+ </ul>
132
+
133
+ <div class="frame frame-center tree-finder" style="display:none"
134
+ data-tree-list-url="/igrigorik/em-websocket/tree-list/b9d439cd3494db3225587ccf7cb060f4b37a9f13"
135
+ data-blob-url-prefix="/igrigorik/em-websocket/blob/b9d439cd3494db3225587ccf7cb060f4b37a9f13"
136
+ >
137
+
138
+ <div class="breadcrumb">
139
+ <span class="bold"><a href="/igrigorik/em-websocket">em-websocket</a></span> /
140
+ <input class="tree-finder-input js-navigation-enable" type="text" name="query" autocomplete="off" spellcheck="false">
141
+ </div>
142
+
143
+ <div class="octotip">
144
+ <p>
145
+ <a href="/igrigorik/em-websocket/dismiss-tree-finder-help" class="dismiss js-dismiss-tree-list-help" title="Hide this notice forever" rel="nofollow">Dismiss</a>
146
+ <span class="bold">Octotip:</span> You've activated the <em>file finder</em>
147
+ by pressing <span class="kbd">t</span> Start typing to filter the
148
+ file list. Use <span class="kbd badmono">↑</span> and
149
+ <span class="kbd badmono">↓</span> to navigate,
150
+ <span class="kbd">enter</span> to view files.
151
+ </p>
152
+ </div>
153
+
154
+ <table class="tree-browser" cellpadding="0" cellspacing="0">
155
+ <tr class="js-header"><th>&nbsp;</th><th>name</th></tr>
156
+ <tr class="js-no-results no-results" style="display: none">
157
+ <th colspan="2">No matching files</th>
158
+ </tr>
159
+ <tbody class="js-results-list js-navigation-container">
160
+ </tbody>
161
+ </table>
162
+ </div>
163
+
164
+ <div id="jump-to-line" style="display:none">
165
+ <h2>Jump to Line</h2>
166
+ <form accept-charset="UTF-8">
167
+ <input class="textfield" type="text">
168
+ <div class="full-button">
169
+ <button type="submit" class="classy">
170
+ Go
171
+ </button>
172
+ </div>
173
+ </form>
174
+ </div>
175
+
176
+
177
+ <div class="subnav-bar">
178
+
179
+ <ul class="actions subnav">
180
+ <li><a href="/igrigorik/em-websocket/tags" class="" highlight="repo_tags">Tags <span class="counter">10</span></a></li>
181
+ <li><a href="/igrigorik/em-websocket/downloads" class="blank downloads-blank" highlight="repo_downloads">Downloads <span class="counter">0</span></a></li>
182
+
183
+ </ul>
184
+
185
+ <ul class="scope">
186
+ <li class="switcher">
187
+
188
+ <div class="context-menu-container js-menu-container js-context-menu">
189
+ <a href="#"
190
+ class="minibutton bigger switcher js-menu-target js-commitish-button btn-branch repo-tree"
191
+ data-hotkey="w"
192
+ data-master-branch="master"
193
+ data-ref="master">
194
+ <span><i>branch:</i> master</span>
195
+ </a>
196
+
197
+ <div class="context-pane commitish-context js-menu-content">
198
+ <a href="javascript:;" class="close js-menu-close"><span class="mini-icon mini-icon-remove-close"></span></a>
199
+ <div class="context-title">Switch Branches/Tags</div>
200
+ <div class="context-body pane-selector commitish-selector js-navigation-container">
201
+ <div class="filterbar">
202
+ <input type="text" id="context-commitish-filter-field" class="js-navigation-enable" placeholder="Filter branches/tags" data-filterable />
203
+
204
+ <ul class="tabs">
205
+ <li><a href="#" data-filter="branches" class="selected">Branches</a></li>
206
+ <li><a href="#" data-filter="tags">Tags</a></li>
207
+ </ul>
208
+ </div>
209
+
210
+ <div class="js-filter-tab js-filter-branches" data-filterable-for="context-commitish-filter-field" data-filterable-type=substring>
211
+ <div class="no-results js-not-filterable">Nothing to show</div>
212
+ <div class="commitish-item branch-commitish selector-item js-navigation-item js-navigation-target">
213
+ <h4>
214
+ <a href="/igrigorik/em-websocket/blob/master/examples/js/FABridge.js" class="js-navigation-open" data-name="master" rel="nofollow">master</a>
215
+ </h4>
216
+ </div>
217
+ </div>
218
+
219
+ <div class="js-filter-tab js-filter-tags" style="display:none" data-filterable-for="context-commitish-filter-field" data-filterable-type=substring>
220
+ <div class="no-results js-not-filterable">Nothing to show</div>
221
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
222
+ <h4>
223
+ <a href="/igrigorik/em-websocket/blob/v0.3.6/examples/js/FABridge.js" class="js-navigation-open" data-name="v0.3.6" rel="nofollow">v0.3.6</a>
224
+ </h4>
225
+ </div>
226
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
227
+ <h4>
228
+ <a href="/igrigorik/em-websocket/blob/v0.3.5/examples/js/FABridge.js" class="js-navigation-open" data-name="v0.3.5" rel="nofollow">v0.3.5</a>
229
+ </h4>
230
+ </div>
231
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
232
+ <h4>
233
+ <a href="/igrigorik/em-websocket/blob/v0.3.4/examples/js/FABridge.js" class="js-navigation-open" data-name="v0.3.4" rel="nofollow">v0.3.4</a>
234
+ </h4>
235
+ </div>
236
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
237
+ <h4>
238
+ <a href="/igrigorik/em-websocket/blob/v0.3.3/examples/js/FABridge.js" class="js-navigation-open" data-name="v0.3.3" rel="nofollow">v0.3.3</a>
239
+ </h4>
240
+ </div>
241
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
242
+ <h4>
243
+ <a href="/igrigorik/em-websocket/blob/v0.3.2/examples/js/FABridge.js" class="js-navigation-open" data-name="v0.3.2" rel="nofollow">v0.3.2</a>
244
+ </h4>
245
+ </div>
246
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
247
+ <h4>
248
+ <a href="/igrigorik/em-websocket/blob/v0.3.1/examples/js/FABridge.js" class="js-navigation-open" data-name="v0.3.1" rel="nofollow">v0.3.1</a>
249
+ </h4>
250
+ </div>
251
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
252
+ <h4>
253
+ <a href="/igrigorik/em-websocket/blob/v0.3.0/examples/js/FABridge.js" class="js-navigation-open" data-name="v0.3.0" rel="nofollow">v0.3.0</a>
254
+ </h4>
255
+ </div>
256
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
257
+ <h4>
258
+ <a href="/igrigorik/em-websocket/blob/v0.2.1/examples/js/FABridge.js" class="js-navigation-open" data-name="v0.2.1" rel="nofollow">v0.2.1</a>
259
+ </h4>
260
+ </div>
261
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
262
+ <h4>
263
+ <a href="/igrigorik/em-websocket/blob/v0.2.0/examples/js/FABridge.js" class="js-navigation-open" data-name="v0.2.0" rel="nofollow">v0.2.0</a>
264
+ </h4>
265
+ </div>
266
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
267
+ <h4>
268
+ <a href="/igrigorik/em-websocket/blob/v0.1.4/examples/js/FABridge.js" class="js-navigation-open" data-name="v0.1.4" rel="nofollow">v0.1.4</a>
269
+ </h4>
270
+ </div>
271
+ </div>
272
+ </div>
273
+ </div><!-- /.commitish-context-context -->
274
+ </div>
275
+
276
+ </li>
277
+ </ul>
278
+
279
+ <ul class="subnav with-scope">
280
+
281
+ <li><a href="/igrigorik/em-websocket" class="selected" highlight="repo_source">Files</a></li>
282
+ <li><a href="/igrigorik/em-websocket/commits/master" highlight="repo_commits">Commits</a></li>
283
+ <li><a href="/igrigorik/em-websocket/branches" class="" highlight="repo_branches" rel="nofollow">Branches <span class="counter">1</span></a></li>
284
+ </ul>
285
+
286
+ </div>
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+ </div><!-- /.repohead -->
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+ <!-- block_view_fragment_key: views10/v8/blob:v21:1adde03cc3ec78be5ff3ebfd0adc869d -->
304
+ <div id="slider">
305
+
306
+ <div class="breadcrumb" data-path="examples/js/FABridge.js/">
307
+ <b itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/igrigorik/em-websocket/tree/b9d439cd3494db3225587ccf7cb060f4b37a9f13" class="js-rewrite-sha" itemprop="url"><span itemprop="title">em-websocket</span></a></b> / <span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/igrigorik/em-websocket/tree/b9d439cd3494db3225587ccf7cb060f4b37a9f13/examples" class="js-rewrite-sha" itemscope="url"><span itemprop="title">examples</span></a></span> / <span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/igrigorik/em-websocket/tree/b9d439cd3494db3225587ccf7cb060f4b37a9f13/examples/js" class="js-rewrite-sha" itemscope="url"><span itemprop="title">js</span></a></span> / <strong class="final-path">FABridge.js</strong> <span class="js-clippy mini-icon mini-icon-clippy " data-clipboard-text="examples/js/FABridge.js" data-copied-hint="copied!" data-copy-hint="copy to clipboard"></span>
308
+ </div>
309
+
310
+
311
+ <div class="commit file-history-tease" data-path="examples/js/FABridge.js/">
312
+ <img class="main-avatar" height="24" src="https://secure.gravatar.com/avatar/aeecf4f1c835bc7d53021bac0a8a7da9?s=140&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png" width="24" />
313
+ <span class="author">Bernard Potocki</span>
314
+ <time class="js-relative-date" datetime="2010-04-17T10:55:19-07:00" title="2010-04-17 10:55:19">April 17, 2010</time>
315
+ <div class="commit-title">
316
+ <a href="/igrigorik/em-websocket/commit/12e69e7b2793a134ae81a81dc0f3d035bb6a3393" class="message">Example of use in browser not supporting WebSocket using web-socket-js.</a>
317
+ </div>
318
+
319
+ <div class="participation">
320
+ <p class="quickstat"><a href="#blob_contributors_box" rel="facebox"><strong>0</strong> contributors</a></p>
321
+
322
+ </div>
323
+ <div id="blob_contributors_box" style="display:none">
324
+ <h2>Users on GitHub who have contributed to this file</h2>
325
+ <ul class="facebox-user-list">
326
+ </ul>
327
+ </div>
328
+ </div>
329
+
330
+ <div class="frames">
331
+ <div class="frame frame-center" data-path="examples/js/FABridge.js/" data-permalink-url="/igrigorik/em-websocket/blob/b9d439cd3494db3225587ccf7cb060f4b37a9f13/examples/js/FABridge.js" data-title="em-websocket/examples/js/FABridge.js at master · igrigorik/em-websocket · GitHub" data-type="blob">
332
+
333
+ <div id="files" class="bubble">
334
+ <div class="file">
335
+ <div class="meta">
336
+ <div class="info">
337
+ <span class="icon"><b class="mini-icon mini-icon-text-file"></b></span>
338
+ <span class="mode" title="File Mode">100644</span>
339
+ <span>605 lines (535 sloc)</span>
340
+ <span>18.306 kb</span>
341
+ </div>
342
+ <ul class="button-group actions">
343
+ <li>
344
+ <a class="grouped-button file-edit-link minibutton bigger lighter js-rewrite-sha" href="/igrigorik/em-websocket/edit/b9d439cd3494db3225587ccf7cb060f4b37a9f13/examples/js/FABridge.js" data-method="post" rel="nofollow" data-hotkey="e">Edit this file</a>
345
+ </li>
346
+
347
+ <li>
348
+ <a href="/igrigorik/em-websocket/raw/master/examples/js/FABridge.js" class="minibutton btn-raw grouped-button bigger lighter" id="raw-url">Raw</a>
349
+ </li>
350
+ <li>
351
+ <a href="/igrigorik/em-websocket/blame/master/examples/js/FABridge.js" class="minibutton btn-blame grouped-button bigger lighter">Blame</a>
352
+ </li>
353
+ <li>
354
+ <a href="/igrigorik/em-websocket/commits/master/examples/js/FABridge.js" class="minibutton btn-history grouped-button bigger lighter" rel="nofollow">History</a>
355
+ </li>
356
+ </ul>
357
+ </div>
358
+ <div class="data type-javascript">
359
+ <table cellpadding="0" cellspacing="0" class="lines">
360
+ <tr>
361
+ <td>
362
+ <pre class="line_numbers"><span id="L1" rel="#L1">1</span>
363
+ <span id="L2" rel="#L2">2</span>
364
+ <span id="L3" rel="#L3">3</span>
365
+ <span id="L4" rel="#L4">4</span>
366
+ <span id="L5" rel="#L5">5</span>
367
+ <span id="L6" rel="#L6">6</span>
368
+ <span id="L7" rel="#L7">7</span>
369
+ <span id="L8" rel="#L8">8</span>
370
+ <span id="L9" rel="#L9">9</span>
371
+ <span id="L10" rel="#L10">10</span>
372
+ <span id="L11" rel="#L11">11</span>
373
+ <span id="L12" rel="#L12">12</span>
374
+ <span id="L13" rel="#L13">13</span>
375
+ <span id="L14" rel="#L14">14</span>
376
+ <span id="L15" rel="#L15">15</span>
377
+ <span id="L16" rel="#L16">16</span>
378
+ <span id="L17" rel="#L17">17</span>
379
+ <span id="L18" rel="#L18">18</span>
380
+ <span id="L19" rel="#L19">19</span>
381
+ <span id="L20" rel="#L20">20</span>
382
+ <span id="L21" rel="#L21">21</span>
383
+ <span id="L22" rel="#L22">22</span>
384
+ <span id="L23" rel="#L23">23</span>
385
+ <span id="L24" rel="#L24">24</span>
386
+ <span id="L25" rel="#L25">25</span>
387
+ <span id="L26" rel="#L26">26</span>
388
+ <span id="L27" rel="#L27">27</span>
389
+ <span id="L28" rel="#L28">28</span>
390
+ <span id="L29" rel="#L29">29</span>
391
+ <span id="L30" rel="#L30">30</span>
392
+ <span id="L31" rel="#L31">31</span>
393
+ <span id="L32" rel="#L32">32</span>
394
+ <span id="L33" rel="#L33">33</span>
395
+ <span id="L34" rel="#L34">34</span>
396
+ <span id="L35" rel="#L35">35</span>
397
+ <span id="L36" rel="#L36">36</span>
398
+ <span id="L37" rel="#L37">37</span>
399
+ <span id="L38" rel="#L38">38</span>
400
+ <span id="L39" rel="#L39">39</span>
401
+ <span id="L40" rel="#L40">40</span>
402
+ <span id="L41" rel="#L41">41</span>
403
+ <span id="L42" rel="#L42">42</span>
404
+ <span id="L43" rel="#L43">43</span>
405
+ <span id="L44" rel="#L44">44</span>
406
+ <span id="L45" rel="#L45">45</span>
407
+ <span id="L46" rel="#L46">46</span>
408
+ <span id="L47" rel="#L47">47</span>
409
+ <span id="L48" rel="#L48">48</span>
410
+ <span id="L49" rel="#L49">49</span>
411
+ <span id="L50" rel="#L50">50</span>
412
+ <span id="L51" rel="#L51">51</span>
413
+ <span id="L52" rel="#L52">52</span>
414
+ <span id="L53" rel="#L53">53</span>
415
+ <span id="L54" rel="#L54">54</span>
416
+ <span id="L55" rel="#L55">55</span>
417
+ <span id="L56" rel="#L56">56</span>
418
+ <span id="L57" rel="#L57">57</span>
419
+ <span id="L58" rel="#L58">58</span>
420
+ <span id="L59" rel="#L59">59</span>
421
+ <span id="L60" rel="#L60">60</span>
422
+ <span id="L61" rel="#L61">61</span>
423
+ <span id="L62" rel="#L62">62</span>
424
+ <span id="L63" rel="#L63">63</span>
425
+ <span id="L64" rel="#L64">64</span>
426
+ <span id="L65" rel="#L65">65</span>
427
+ <span id="L66" rel="#L66">66</span>
428
+ <span id="L67" rel="#L67">67</span>
429
+ <span id="L68" rel="#L68">68</span>
430
+ <span id="L69" rel="#L69">69</span>
431
+ <span id="L70" rel="#L70">70</span>
432
+ <span id="L71" rel="#L71">71</span>
433
+ <span id="L72" rel="#L72">72</span>
434
+ <span id="L73" rel="#L73">73</span>
435
+ <span id="L74" rel="#L74">74</span>
436
+ <span id="L75" rel="#L75">75</span>
437
+ <span id="L76" rel="#L76">76</span>
438
+ <span id="L77" rel="#L77">77</span>
439
+ <span id="L78" rel="#L78">78</span>
440
+ <span id="L79" rel="#L79">79</span>
441
+ <span id="L80" rel="#L80">80</span>
442
+ <span id="L81" rel="#L81">81</span>
443
+ <span id="L82" rel="#L82">82</span>
444
+ <span id="L83" rel="#L83">83</span>
445
+ <span id="L84" rel="#L84">84</span>
446
+ <span id="L85" rel="#L85">85</span>
447
+ <span id="L86" rel="#L86">86</span>
448
+ <span id="L87" rel="#L87">87</span>
449
+ <span id="L88" rel="#L88">88</span>
450
+ <span id="L89" rel="#L89">89</span>
451
+ <span id="L90" rel="#L90">90</span>
452
+ <span id="L91" rel="#L91">91</span>
453
+ <span id="L92" rel="#L92">92</span>
454
+ <span id="L93" rel="#L93">93</span>
455
+ <span id="L94" rel="#L94">94</span>
456
+ <span id="L95" rel="#L95">95</span>
457
+ <span id="L96" rel="#L96">96</span>
458
+ <span id="L97" rel="#L97">97</span>
459
+ <span id="L98" rel="#L98">98</span>
460
+ <span id="L99" rel="#L99">99</span>
461
+ <span id="L100" rel="#L100">100</span>
462
+ <span id="L101" rel="#L101">101</span>
463
+ <span id="L102" rel="#L102">102</span>
464
+ <span id="L103" rel="#L103">103</span>
465
+ <span id="L104" rel="#L104">104</span>
466
+ <span id="L105" rel="#L105">105</span>
467
+ <span id="L106" rel="#L106">106</span>
468
+ <span id="L107" rel="#L107">107</span>
469
+ <span id="L108" rel="#L108">108</span>
470
+ <span id="L109" rel="#L109">109</span>
471
+ <span id="L110" rel="#L110">110</span>
472
+ <span id="L111" rel="#L111">111</span>
473
+ <span id="L112" rel="#L112">112</span>
474
+ <span id="L113" rel="#L113">113</span>
475
+ <span id="L114" rel="#L114">114</span>
476
+ <span id="L115" rel="#L115">115</span>
477
+ <span id="L116" rel="#L116">116</span>
478
+ <span id="L117" rel="#L117">117</span>
479
+ <span id="L118" rel="#L118">118</span>
480
+ <span id="L119" rel="#L119">119</span>
481
+ <span id="L120" rel="#L120">120</span>
482
+ <span id="L121" rel="#L121">121</span>
483
+ <span id="L122" rel="#L122">122</span>
484
+ <span id="L123" rel="#L123">123</span>
485
+ <span id="L124" rel="#L124">124</span>
486
+ <span id="L125" rel="#L125">125</span>
487
+ <span id="L126" rel="#L126">126</span>
488
+ <span id="L127" rel="#L127">127</span>
489
+ <span id="L128" rel="#L128">128</span>
490
+ <span id="L129" rel="#L129">129</span>
491
+ <span id="L130" rel="#L130">130</span>
492
+ <span id="L131" rel="#L131">131</span>
493
+ <span id="L132" rel="#L132">132</span>
494
+ <span id="L133" rel="#L133">133</span>
495
+ <span id="L134" rel="#L134">134</span>
496
+ <span id="L135" rel="#L135">135</span>
497
+ <span id="L136" rel="#L136">136</span>
498
+ <span id="L137" rel="#L137">137</span>
499
+ <span id="L138" rel="#L138">138</span>
500
+ <span id="L139" rel="#L139">139</span>
501
+ <span id="L140" rel="#L140">140</span>
502
+ <span id="L141" rel="#L141">141</span>
503
+ <span id="L142" rel="#L142">142</span>
504
+ <span id="L143" rel="#L143">143</span>
505
+ <span id="L144" rel="#L144">144</span>
506
+ <span id="L145" rel="#L145">145</span>
507
+ <span id="L146" rel="#L146">146</span>
508
+ <span id="L147" rel="#L147">147</span>
509
+ <span id="L148" rel="#L148">148</span>
510
+ <span id="L149" rel="#L149">149</span>
511
+ <span id="L150" rel="#L150">150</span>
512
+ <span id="L151" rel="#L151">151</span>
513
+ <span id="L152" rel="#L152">152</span>
514
+ <span id="L153" rel="#L153">153</span>
515
+ <span id="L154" rel="#L154">154</span>
516
+ <span id="L155" rel="#L155">155</span>
517
+ <span id="L156" rel="#L156">156</span>
518
+ <span id="L157" rel="#L157">157</span>
519
+ <span id="L158" rel="#L158">158</span>
520
+ <span id="L159" rel="#L159">159</span>
521
+ <span id="L160" rel="#L160">160</span>
522
+ <span id="L161" rel="#L161">161</span>
523
+ <span id="L162" rel="#L162">162</span>
524
+ <span id="L163" rel="#L163">163</span>
525
+ <span id="L164" rel="#L164">164</span>
526
+ <span id="L165" rel="#L165">165</span>
527
+ <span id="L166" rel="#L166">166</span>
528
+ <span id="L167" rel="#L167">167</span>
529
+ <span id="L168" rel="#L168">168</span>
530
+ <span id="L169" rel="#L169">169</span>
531
+ <span id="L170" rel="#L170">170</span>
532
+ <span id="L171" rel="#L171">171</span>
533
+ <span id="L172" rel="#L172">172</span>
534
+ <span id="L173" rel="#L173">173</span>
535
+ <span id="L174" rel="#L174">174</span>
536
+ <span id="L175" rel="#L175">175</span>
537
+ <span id="L176" rel="#L176">176</span>
538
+ <span id="L177" rel="#L177">177</span>
539
+ <span id="L178" rel="#L178">178</span>
540
+ <span id="L179" rel="#L179">179</span>
541
+ <span id="L180" rel="#L180">180</span>
542
+ <span id="L181" rel="#L181">181</span>
543
+ <span id="L182" rel="#L182">182</span>
544
+ <span id="L183" rel="#L183">183</span>
545
+ <span id="L184" rel="#L184">184</span>
546
+ <span id="L185" rel="#L185">185</span>
547
+ <span id="L186" rel="#L186">186</span>
548
+ <span id="L187" rel="#L187">187</span>
549
+ <span id="L188" rel="#L188">188</span>
550
+ <span id="L189" rel="#L189">189</span>
551
+ <span id="L190" rel="#L190">190</span>
552
+ <span id="L191" rel="#L191">191</span>
553
+ <span id="L192" rel="#L192">192</span>
554
+ <span id="L193" rel="#L193">193</span>
555
+ <span id="L194" rel="#L194">194</span>
556
+ <span id="L195" rel="#L195">195</span>
557
+ <span id="L196" rel="#L196">196</span>
558
+ <span id="L197" rel="#L197">197</span>
559
+ <span id="L198" rel="#L198">198</span>
560
+ <span id="L199" rel="#L199">199</span>
561
+ <span id="L200" rel="#L200">200</span>
562
+ <span id="L201" rel="#L201">201</span>
563
+ <span id="L202" rel="#L202">202</span>
564
+ <span id="L203" rel="#L203">203</span>
565
+ <span id="L204" rel="#L204">204</span>
566
+ <span id="L205" rel="#L205">205</span>
567
+ <span id="L206" rel="#L206">206</span>
568
+ <span id="L207" rel="#L207">207</span>
569
+ <span id="L208" rel="#L208">208</span>
570
+ <span id="L209" rel="#L209">209</span>
571
+ <span id="L210" rel="#L210">210</span>
572
+ <span id="L211" rel="#L211">211</span>
573
+ <span id="L212" rel="#L212">212</span>
574
+ <span id="L213" rel="#L213">213</span>
575
+ <span id="L214" rel="#L214">214</span>
576
+ <span id="L215" rel="#L215">215</span>
577
+ <span id="L216" rel="#L216">216</span>
578
+ <span id="L217" rel="#L217">217</span>
579
+ <span id="L218" rel="#L218">218</span>
580
+ <span id="L219" rel="#L219">219</span>
581
+ <span id="L220" rel="#L220">220</span>
582
+ <span id="L221" rel="#L221">221</span>
583
+ <span id="L222" rel="#L222">222</span>
584
+ <span id="L223" rel="#L223">223</span>
585
+ <span id="L224" rel="#L224">224</span>
586
+ <span id="L225" rel="#L225">225</span>
587
+ <span id="L226" rel="#L226">226</span>
588
+ <span id="L227" rel="#L227">227</span>
589
+ <span id="L228" rel="#L228">228</span>
590
+ <span id="L229" rel="#L229">229</span>
591
+ <span id="L230" rel="#L230">230</span>
592
+ <span id="L231" rel="#L231">231</span>
593
+ <span id="L232" rel="#L232">232</span>
594
+ <span id="L233" rel="#L233">233</span>
595
+ <span id="L234" rel="#L234">234</span>
596
+ <span id="L235" rel="#L235">235</span>
597
+ <span id="L236" rel="#L236">236</span>
598
+ <span id="L237" rel="#L237">237</span>
599
+ <span id="L238" rel="#L238">238</span>
600
+ <span id="L239" rel="#L239">239</span>
601
+ <span id="L240" rel="#L240">240</span>
602
+ <span id="L241" rel="#L241">241</span>
603
+ <span id="L242" rel="#L242">242</span>
604
+ <span id="L243" rel="#L243">243</span>
605
+ <span id="L244" rel="#L244">244</span>
606
+ <span id="L245" rel="#L245">245</span>
607
+ <span id="L246" rel="#L246">246</span>
608
+ <span id="L247" rel="#L247">247</span>
609
+ <span id="L248" rel="#L248">248</span>
610
+ <span id="L249" rel="#L249">249</span>
611
+ <span id="L250" rel="#L250">250</span>
612
+ <span id="L251" rel="#L251">251</span>
613
+ <span id="L252" rel="#L252">252</span>
614
+ <span id="L253" rel="#L253">253</span>
615
+ <span id="L254" rel="#L254">254</span>
616
+ <span id="L255" rel="#L255">255</span>
617
+ <span id="L256" rel="#L256">256</span>
618
+ <span id="L257" rel="#L257">257</span>
619
+ <span id="L258" rel="#L258">258</span>
620
+ <span id="L259" rel="#L259">259</span>
621
+ <span id="L260" rel="#L260">260</span>
622
+ <span id="L261" rel="#L261">261</span>
623
+ <span id="L262" rel="#L262">262</span>
624
+ <span id="L263" rel="#L263">263</span>
625
+ <span id="L264" rel="#L264">264</span>
626
+ <span id="L265" rel="#L265">265</span>
627
+ <span id="L266" rel="#L266">266</span>
628
+ <span id="L267" rel="#L267">267</span>
629
+ <span id="L268" rel="#L268">268</span>
630
+ <span id="L269" rel="#L269">269</span>
631
+ <span id="L270" rel="#L270">270</span>
632
+ <span id="L271" rel="#L271">271</span>
633
+ <span id="L272" rel="#L272">272</span>
634
+ <span id="L273" rel="#L273">273</span>
635
+ <span id="L274" rel="#L274">274</span>
636
+ <span id="L275" rel="#L275">275</span>
637
+ <span id="L276" rel="#L276">276</span>
638
+ <span id="L277" rel="#L277">277</span>
639
+ <span id="L278" rel="#L278">278</span>
640
+ <span id="L279" rel="#L279">279</span>
641
+ <span id="L280" rel="#L280">280</span>
642
+ <span id="L281" rel="#L281">281</span>
643
+ <span id="L282" rel="#L282">282</span>
644
+ <span id="L283" rel="#L283">283</span>
645
+ <span id="L284" rel="#L284">284</span>
646
+ <span id="L285" rel="#L285">285</span>
647
+ <span id="L286" rel="#L286">286</span>
648
+ <span id="L287" rel="#L287">287</span>
649
+ <span id="L288" rel="#L288">288</span>
650
+ <span id="L289" rel="#L289">289</span>
651
+ <span id="L290" rel="#L290">290</span>
652
+ <span id="L291" rel="#L291">291</span>
653
+ <span id="L292" rel="#L292">292</span>
654
+ <span id="L293" rel="#L293">293</span>
655
+ <span id="L294" rel="#L294">294</span>
656
+ <span id="L295" rel="#L295">295</span>
657
+ <span id="L296" rel="#L296">296</span>
658
+ <span id="L297" rel="#L297">297</span>
659
+ <span id="L298" rel="#L298">298</span>
660
+ <span id="L299" rel="#L299">299</span>
661
+ <span id="L300" rel="#L300">300</span>
662
+ <span id="L301" rel="#L301">301</span>
663
+ <span id="L302" rel="#L302">302</span>
664
+ <span id="L303" rel="#L303">303</span>
665
+ <span id="L304" rel="#L304">304</span>
666
+ <span id="L305" rel="#L305">305</span>
667
+ <span id="L306" rel="#L306">306</span>
668
+ <span id="L307" rel="#L307">307</span>
669
+ <span id="L308" rel="#L308">308</span>
670
+ <span id="L309" rel="#L309">309</span>
671
+ <span id="L310" rel="#L310">310</span>
672
+ <span id="L311" rel="#L311">311</span>
673
+ <span id="L312" rel="#L312">312</span>
674
+ <span id="L313" rel="#L313">313</span>
675
+ <span id="L314" rel="#L314">314</span>
676
+ <span id="L315" rel="#L315">315</span>
677
+ <span id="L316" rel="#L316">316</span>
678
+ <span id="L317" rel="#L317">317</span>
679
+ <span id="L318" rel="#L318">318</span>
680
+ <span id="L319" rel="#L319">319</span>
681
+ <span id="L320" rel="#L320">320</span>
682
+ <span id="L321" rel="#L321">321</span>
683
+ <span id="L322" rel="#L322">322</span>
684
+ <span id="L323" rel="#L323">323</span>
685
+ <span id="L324" rel="#L324">324</span>
686
+ <span id="L325" rel="#L325">325</span>
687
+ <span id="L326" rel="#L326">326</span>
688
+ <span id="L327" rel="#L327">327</span>
689
+ <span id="L328" rel="#L328">328</span>
690
+ <span id="L329" rel="#L329">329</span>
691
+ <span id="L330" rel="#L330">330</span>
692
+ <span id="L331" rel="#L331">331</span>
693
+ <span id="L332" rel="#L332">332</span>
694
+ <span id="L333" rel="#L333">333</span>
695
+ <span id="L334" rel="#L334">334</span>
696
+ <span id="L335" rel="#L335">335</span>
697
+ <span id="L336" rel="#L336">336</span>
698
+ <span id="L337" rel="#L337">337</span>
699
+ <span id="L338" rel="#L338">338</span>
700
+ <span id="L339" rel="#L339">339</span>
701
+ <span id="L340" rel="#L340">340</span>
702
+ <span id="L341" rel="#L341">341</span>
703
+ <span id="L342" rel="#L342">342</span>
704
+ <span id="L343" rel="#L343">343</span>
705
+ <span id="L344" rel="#L344">344</span>
706
+ <span id="L345" rel="#L345">345</span>
707
+ <span id="L346" rel="#L346">346</span>
708
+ <span id="L347" rel="#L347">347</span>
709
+ <span id="L348" rel="#L348">348</span>
710
+ <span id="L349" rel="#L349">349</span>
711
+ <span id="L350" rel="#L350">350</span>
712
+ <span id="L351" rel="#L351">351</span>
713
+ <span id="L352" rel="#L352">352</span>
714
+ <span id="L353" rel="#L353">353</span>
715
+ <span id="L354" rel="#L354">354</span>
716
+ <span id="L355" rel="#L355">355</span>
717
+ <span id="L356" rel="#L356">356</span>
718
+ <span id="L357" rel="#L357">357</span>
719
+ <span id="L358" rel="#L358">358</span>
720
+ <span id="L359" rel="#L359">359</span>
721
+ <span id="L360" rel="#L360">360</span>
722
+ <span id="L361" rel="#L361">361</span>
723
+ <span id="L362" rel="#L362">362</span>
724
+ <span id="L363" rel="#L363">363</span>
725
+ <span id="L364" rel="#L364">364</span>
726
+ <span id="L365" rel="#L365">365</span>
727
+ <span id="L366" rel="#L366">366</span>
728
+ <span id="L367" rel="#L367">367</span>
729
+ <span id="L368" rel="#L368">368</span>
730
+ <span id="L369" rel="#L369">369</span>
731
+ <span id="L370" rel="#L370">370</span>
732
+ <span id="L371" rel="#L371">371</span>
733
+ <span id="L372" rel="#L372">372</span>
734
+ <span id="L373" rel="#L373">373</span>
735
+ <span id="L374" rel="#L374">374</span>
736
+ <span id="L375" rel="#L375">375</span>
737
+ <span id="L376" rel="#L376">376</span>
738
+ <span id="L377" rel="#L377">377</span>
739
+ <span id="L378" rel="#L378">378</span>
740
+ <span id="L379" rel="#L379">379</span>
741
+ <span id="L380" rel="#L380">380</span>
742
+ <span id="L381" rel="#L381">381</span>
743
+ <span id="L382" rel="#L382">382</span>
744
+ <span id="L383" rel="#L383">383</span>
745
+ <span id="L384" rel="#L384">384</span>
746
+ <span id="L385" rel="#L385">385</span>
747
+ <span id="L386" rel="#L386">386</span>
748
+ <span id="L387" rel="#L387">387</span>
749
+ <span id="L388" rel="#L388">388</span>
750
+ <span id="L389" rel="#L389">389</span>
751
+ <span id="L390" rel="#L390">390</span>
752
+ <span id="L391" rel="#L391">391</span>
753
+ <span id="L392" rel="#L392">392</span>
754
+ <span id="L393" rel="#L393">393</span>
755
+ <span id="L394" rel="#L394">394</span>
756
+ <span id="L395" rel="#L395">395</span>
757
+ <span id="L396" rel="#L396">396</span>
758
+ <span id="L397" rel="#L397">397</span>
759
+ <span id="L398" rel="#L398">398</span>
760
+ <span id="L399" rel="#L399">399</span>
761
+ <span id="L400" rel="#L400">400</span>
762
+ <span id="L401" rel="#L401">401</span>
763
+ <span id="L402" rel="#L402">402</span>
764
+ <span id="L403" rel="#L403">403</span>
765
+ <span id="L404" rel="#L404">404</span>
766
+ <span id="L405" rel="#L405">405</span>
767
+ <span id="L406" rel="#L406">406</span>
768
+ <span id="L407" rel="#L407">407</span>
769
+ <span id="L408" rel="#L408">408</span>
770
+ <span id="L409" rel="#L409">409</span>
771
+ <span id="L410" rel="#L410">410</span>
772
+ <span id="L411" rel="#L411">411</span>
773
+ <span id="L412" rel="#L412">412</span>
774
+ <span id="L413" rel="#L413">413</span>
775
+ <span id="L414" rel="#L414">414</span>
776
+ <span id="L415" rel="#L415">415</span>
777
+ <span id="L416" rel="#L416">416</span>
778
+ <span id="L417" rel="#L417">417</span>
779
+ <span id="L418" rel="#L418">418</span>
780
+ <span id="L419" rel="#L419">419</span>
781
+ <span id="L420" rel="#L420">420</span>
782
+ <span id="L421" rel="#L421">421</span>
783
+ <span id="L422" rel="#L422">422</span>
784
+ <span id="L423" rel="#L423">423</span>
785
+ <span id="L424" rel="#L424">424</span>
786
+ <span id="L425" rel="#L425">425</span>
787
+ <span id="L426" rel="#L426">426</span>
788
+ <span id="L427" rel="#L427">427</span>
789
+ <span id="L428" rel="#L428">428</span>
790
+ <span id="L429" rel="#L429">429</span>
791
+ <span id="L430" rel="#L430">430</span>
792
+ <span id="L431" rel="#L431">431</span>
793
+ <span id="L432" rel="#L432">432</span>
794
+ <span id="L433" rel="#L433">433</span>
795
+ <span id="L434" rel="#L434">434</span>
796
+ <span id="L435" rel="#L435">435</span>
797
+ <span id="L436" rel="#L436">436</span>
798
+ <span id="L437" rel="#L437">437</span>
799
+ <span id="L438" rel="#L438">438</span>
800
+ <span id="L439" rel="#L439">439</span>
801
+ <span id="L440" rel="#L440">440</span>
802
+ <span id="L441" rel="#L441">441</span>
803
+ <span id="L442" rel="#L442">442</span>
804
+ <span id="L443" rel="#L443">443</span>
805
+ <span id="L444" rel="#L444">444</span>
806
+ <span id="L445" rel="#L445">445</span>
807
+ <span id="L446" rel="#L446">446</span>
808
+ <span id="L447" rel="#L447">447</span>
809
+ <span id="L448" rel="#L448">448</span>
810
+ <span id="L449" rel="#L449">449</span>
811
+ <span id="L450" rel="#L450">450</span>
812
+ <span id="L451" rel="#L451">451</span>
813
+ <span id="L452" rel="#L452">452</span>
814
+ <span id="L453" rel="#L453">453</span>
815
+ <span id="L454" rel="#L454">454</span>
816
+ <span id="L455" rel="#L455">455</span>
817
+ <span id="L456" rel="#L456">456</span>
818
+ <span id="L457" rel="#L457">457</span>
819
+ <span id="L458" rel="#L458">458</span>
820
+ <span id="L459" rel="#L459">459</span>
821
+ <span id="L460" rel="#L460">460</span>
822
+ <span id="L461" rel="#L461">461</span>
823
+ <span id="L462" rel="#L462">462</span>
824
+ <span id="L463" rel="#L463">463</span>
825
+ <span id="L464" rel="#L464">464</span>
826
+ <span id="L465" rel="#L465">465</span>
827
+ <span id="L466" rel="#L466">466</span>
828
+ <span id="L467" rel="#L467">467</span>
829
+ <span id="L468" rel="#L468">468</span>
830
+ <span id="L469" rel="#L469">469</span>
831
+ <span id="L470" rel="#L470">470</span>
832
+ <span id="L471" rel="#L471">471</span>
833
+ <span id="L472" rel="#L472">472</span>
834
+ <span id="L473" rel="#L473">473</span>
835
+ <span id="L474" rel="#L474">474</span>
836
+ <span id="L475" rel="#L475">475</span>
837
+ <span id="L476" rel="#L476">476</span>
838
+ <span id="L477" rel="#L477">477</span>
839
+ <span id="L478" rel="#L478">478</span>
840
+ <span id="L479" rel="#L479">479</span>
841
+ <span id="L480" rel="#L480">480</span>
842
+ <span id="L481" rel="#L481">481</span>
843
+ <span id="L482" rel="#L482">482</span>
844
+ <span id="L483" rel="#L483">483</span>
845
+ <span id="L484" rel="#L484">484</span>
846
+ <span id="L485" rel="#L485">485</span>
847
+ <span id="L486" rel="#L486">486</span>
848
+ <span id="L487" rel="#L487">487</span>
849
+ <span id="L488" rel="#L488">488</span>
850
+ <span id="L489" rel="#L489">489</span>
851
+ <span id="L490" rel="#L490">490</span>
852
+ <span id="L491" rel="#L491">491</span>
853
+ <span id="L492" rel="#L492">492</span>
854
+ <span id="L493" rel="#L493">493</span>
855
+ <span id="L494" rel="#L494">494</span>
856
+ <span id="L495" rel="#L495">495</span>
857
+ <span id="L496" rel="#L496">496</span>
858
+ <span id="L497" rel="#L497">497</span>
859
+ <span id="L498" rel="#L498">498</span>
860
+ <span id="L499" rel="#L499">499</span>
861
+ <span id="L500" rel="#L500">500</span>
862
+ <span id="L501" rel="#L501">501</span>
863
+ <span id="L502" rel="#L502">502</span>
864
+ <span id="L503" rel="#L503">503</span>
865
+ <span id="L504" rel="#L504">504</span>
866
+ <span id="L505" rel="#L505">505</span>
867
+ <span id="L506" rel="#L506">506</span>
868
+ <span id="L507" rel="#L507">507</span>
869
+ <span id="L508" rel="#L508">508</span>
870
+ <span id="L509" rel="#L509">509</span>
871
+ <span id="L510" rel="#L510">510</span>
872
+ <span id="L511" rel="#L511">511</span>
873
+ <span id="L512" rel="#L512">512</span>
874
+ <span id="L513" rel="#L513">513</span>
875
+ <span id="L514" rel="#L514">514</span>
876
+ <span id="L515" rel="#L515">515</span>
877
+ <span id="L516" rel="#L516">516</span>
878
+ <span id="L517" rel="#L517">517</span>
879
+ <span id="L518" rel="#L518">518</span>
880
+ <span id="L519" rel="#L519">519</span>
881
+ <span id="L520" rel="#L520">520</span>
882
+ <span id="L521" rel="#L521">521</span>
883
+ <span id="L522" rel="#L522">522</span>
884
+ <span id="L523" rel="#L523">523</span>
885
+ <span id="L524" rel="#L524">524</span>
886
+ <span id="L525" rel="#L525">525</span>
887
+ <span id="L526" rel="#L526">526</span>
888
+ <span id="L527" rel="#L527">527</span>
889
+ <span id="L528" rel="#L528">528</span>
890
+ <span id="L529" rel="#L529">529</span>
891
+ <span id="L530" rel="#L530">530</span>
892
+ <span id="L531" rel="#L531">531</span>
893
+ <span id="L532" rel="#L532">532</span>
894
+ <span id="L533" rel="#L533">533</span>
895
+ <span id="L534" rel="#L534">534</span>
896
+ <span id="L535" rel="#L535">535</span>
897
+ <span id="L536" rel="#L536">536</span>
898
+ <span id="L537" rel="#L537">537</span>
899
+ <span id="L538" rel="#L538">538</span>
900
+ <span id="L539" rel="#L539">539</span>
901
+ <span id="L540" rel="#L540">540</span>
902
+ <span id="L541" rel="#L541">541</span>
903
+ <span id="L542" rel="#L542">542</span>
904
+ <span id="L543" rel="#L543">543</span>
905
+ <span id="L544" rel="#L544">544</span>
906
+ <span id="L545" rel="#L545">545</span>
907
+ <span id="L546" rel="#L546">546</span>
908
+ <span id="L547" rel="#L547">547</span>
909
+ <span id="L548" rel="#L548">548</span>
910
+ <span id="L549" rel="#L549">549</span>
911
+ <span id="L550" rel="#L550">550</span>
912
+ <span id="L551" rel="#L551">551</span>
913
+ <span id="L552" rel="#L552">552</span>
914
+ <span id="L553" rel="#L553">553</span>
915
+ <span id="L554" rel="#L554">554</span>
916
+ <span id="L555" rel="#L555">555</span>
917
+ <span id="L556" rel="#L556">556</span>
918
+ <span id="L557" rel="#L557">557</span>
919
+ <span id="L558" rel="#L558">558</span>
920
+ <span id="L559" rel="#L559">559</span>
921
+ <span id="L560" rel="#L560">560</span>
922
+ <span id="L561" rel="#L561">561</span>
923
+ <span id="L562" rel="#L562">562</span>
924
+ <span id="L563" rel="#L563">563</span>
925
+ <span id="L564" rel="#L564">564</span>
926
+ <span id="L565" rel="#L565">565</span>
927
+ <span id="L566" rel="#L566">566</span>
928
+ <span id="L567" rel="#L567">567</span>
929
+ <span id="L568" rel="#L568">568</span>
930
+ <span id="L569" rel="#L569">569</span>
931
+ <span id="L570" rel="#L570">570</span>
932
+ <span id="L571" rel="#L571">571</span>
933
+ <span id="L572" rel="#L572">572</span>
934
+ <span id="L573" rel="#L573">573</span>
935
+ <span id="L574" rel="#L574">574</span>
936
+ <span id="L575" rel="#L575">575</span>
937
+ <span id="L576" rel="#L576">576</span>
938
+ <span id="L577" rel="#L577">577</span>
939
+ <span id="L578" rel="#L578">578</span>
940
+ <span id="L579" rel="#L579">579</span>
941
+ <span id="L580" rel="#L580">580</span>
942
+ <span id="L581" rel="#L581">581</span>
943
+ <span id="L582" rel="#L582">582</span>
944
+ <span id="L583" rel="#L583">583</span>
945
+ <span id="L584" rel="#L584">584</span>
946
+ <span id="L585" rel="#L585">585</span>
947
+ <span id="L586" rel="#L586">586</span>
948
+ <span id="L587" rel="#L587">587</span>
949
+ <span id="L588" rel="#L588">588</span>
950
+ <span id="L589" rel="#L589">589</span>
951
+ <span id="L590" rel="#L590">590</span>
952
+ <span id="L591" rel="#L591">591</span>
953
+ <span id="L592" rel="#L592">592</span>
954
+ <span id="L593" rel="#L593">593</span>
955
+ <span id="L594" rel="#L594">594</span>
956
+ <span id="L595" rel="#L595">595</span>
957
+ <span id="L596" rel="#L596">596</span>
958
+ <span id="L597" rel="#L597">597</span>
959
+ <span id="L598" rel="#L598">598</span>
960
+ <span id="L599" rel="#L599">599</span>
961
+ <span id="L600" rel="#L600">600</span>
962
+ <span id="L601" rel="#L601">601</span>
963
+ <span id="L602" rel="#L602">602</span>
964
+ <span id="L603" rel="#L603">603</span>
965
+ <span id="L604" rel="#L604">604</span>
966
+ </pre>
967
+ </td>
968
+ <td width="100%">
969
+ <div class="highlight"><pre><div class='line' id='LC1'><span class="cm">/*</span></div><div class='line' id='LC2'><span class="cm">/*</span></div><div class='line' id='LC3'><span class="cm">Copyright 2006 Adobe Systems Incorporated</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'><span class="cm">Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &quot;Software&quot;),</span></div><div class='line' id='LC6'><span class="cm">to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div><div class='line' id='LC7'><span class="cm">and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</span></div><div class='line' id='LC8'><br/></div><div class='line' id='LC9'><span class="cm"> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</span></div><div class='line' id='LC10'><br/></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'><span class="cm">THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class='line' id='LC13'><span class="cm">FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div><div class='line' id='LC14'><span class="cm">LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE</span></div><div class='line' id='LC15'><span class="cm">OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</span></div><div class='line' id='LC16'><br/></div><div class='line' id='LC17'><span class="cm">*/</span></div><div class='line' id='LC18'><br/></div><div class='line' id='LC19'><br/></div><div class='line' id='LC20'><span class="cm">/*</span></div><div class='line' id='LC21'><span class="cm"> * The Bridge class, responsible for navigating AS instances</span></div><div class='line' id='LC22'><span class="cm"> */</span></div><div class='line' id='LC23'><span class="kd">function</span> <span class="nx">FABridge</span><span class="p">(</span><span class="nx">target</span><span class="p">,</span><span class="nx">bridgeName</span><span class="p">)</span></div><div class='line' id='LC24'><span class="p">{</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">target</span> <span class="o">=</span> <span class="nx">target</span><span class="p">;</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">remoteTypeCache</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">remoteInstanceCache</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">remoteFunctionCache</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">localFunctionCache</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">bridgeID</span> <span class="o">=</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">nextBridgeID</span><span class="o">++</span><span class="p">;</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">name</span> <span class="o">=</span> <span class="nx">bridgeName</span><span class="p">;</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">nextLocalFuncID</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">instances</span><span class="p">[</span><span class="k">this</span><span class="p">.</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">idMap</span><span class="p">[</span><span class="k">this</span><span class="p">.</span><span class="nx">bridgeID</span><span class="p">]</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class='line' id='LC35'><br/></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">;</span></div><div class='line' id='LC37'><span class="p">}</span></div><div class='line' id='LC38'><br/></div><div class='line' id='LC39'><span class="c1">// type codes for packed values</span></div><div class='line' id='LC40'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_ASINSTANCE</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span></div><div class='line' id='LC41'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_ASFUNCTION</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span></div><div class='line' id='LC42'><br/></div><div class='line' id='LC43'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_JSFUNCTION</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span></div><div class='line' id='LC44'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_ANONYMOUS</span> <span class="o">=</span> <span class="mi">4</span><span class="p">;</span></div><div class='line' id='LC45'><br/></div><div class='line' id='LC46'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">initCallbacks</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC47'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">userTypes</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC48'><br/></div><div class='line' id='LC49'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">addToUserTypes</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span></div><div class='line' id='LC50'><span class="p">{</span></div><div class='line' id='LC51'> <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">arguments</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC52'> <span class="p">{</span></div><div class='line' id='LC53'> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">userTypes</span><span class="p">[</span><span class="nx">arguments</span><span class="p">[</span><span class="nx">i</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span></div><div class='line' id='LC54'> <span class="s1">&#39;typeName&#39;</span><span class="o">:</span> <span class="nx">arguments</span><span class="p">[</span><span class="nx">i</span><span class="p">],</span> </div><div class='line' id='LC55'> <span class="s1">&#39;enriched&#39;</span><span class="o">:</span> <span class="kc">false</span></div><div class='line' id='LC56'> <span class="p">};</span></div><div class='line' id='LC57'> <span class="p">}</span></div><div class='line' id='LC58'><span class="p">}</span></div><div class='line' id='LC59'><br/></div><div class='line' id='LC60'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">argsToArray</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">args</span><span class="p">)</span></div><div class='line' id='LC61'><span class="p">{</span></div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="p">[];</span></div><div class='line' id='LC63'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">args</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC64'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC65'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="nx">args</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span></div><div class='line' id='LC66'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC67'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">result</span><span class="p">;</span></div><div class='line' id='LC68'><span class="p">}</span></div><div class='line' id='LC69'><br/></div><div class='line' id='LC70'><span class="kd">function</span> <span class="nx">instanceFactory</span><span class="p">(</span><span class="nx">objID</span><span class="p">)</span></div><div class='line' id='LC71'><span class="p">{</span></div><div class='line' id='LC72'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">fb_instance_id</span> <span class="o">=</span> <span class="nx">objID</span><span class="p">;</span></div><div class='line' id='LC73'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">;</span></div><div class='line' id='LC74'><span class="p">}</span></div><div class='line' id='LC75'><br/></div><div class='line' id='LC76'><span class="kd">function</span> <span class="nx">FABridge__invokeJSFunction</span><span class="p">(</span><span class="nx">args</span><span class="p">)</span></div><div class='line' id='LC77'><span class="p">{</span> </div><div class='line' id='LC78'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">funcID</span> <span class="o">=</span> <span class="nx">args</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span></div><div class='line' id='LC79'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">throughArgs</span> <span class="o">=</span> <span class="nx">args</span><span class="p">.</span><span class="nx">concat</span><span class="p">();</span><span class="c1">//FABridge.argsToArray(arguments);</span></div><div class='line' id='LC80'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">throughArgs</span><span class="p">.</span><span class="nx">shift</span><span class="p">();</span></div><div class='line' id='LC81'>&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC82'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">bridge</span> <span class="o">=</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">extractBridgeFromID</span><span class="p">(</span><span class="nx">funcID</span><span class="p">);</span></div><div class='line' id='LC83'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">bridge</span><span class="p">.</span><span class="nx">invokeLocalFunction</span><span class="p">(</span><span class="nx">funcID</span><span class="p">,</span> <span class="nx">throughArgs</span><span class="p">);</span></div><div class='line' id='LC84'><span class="p">}</span></div><div class='line' id='LC85'><br/></div><div class='line' id='LC86'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">addInitializationCallback</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">bridgeName</span><span class="p">,</span> <span class="nx">callback</span><span class="p">)</span></div><div class='line' id='LC87'><span class="p">{</span></div><div class='line' id='LC88'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">inst</span> <span class="o">=</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">instances</span><span class="p">[</span><span class="nx">bridgeName</span><span class="p">];</span></div><div class='line' id='LC89'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">inst</span> <span class="o">!=</span> <span class="kc">undefined</span><span class="p">)</span></div><div class='line' id='LC90'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC91'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">callback</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">inst</span><span class="p">);</span></div><div class='line' id='LC92'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span><span class="p">;</span></div><div class='line' id='LC93'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC94'><br/></div><div class='line' id='LC95'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">callbackList</span> <span class="o">=</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">initCallbacks</span><span class="p">[</span><span class="nx">bridgeName</span><span class="p">];</span></div><div class='line' id='LC96'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="nx">callbackList</span> <span class="o">==</span> <span class="kc">null</span><span class="p">)</span></div><div class='line' id='LC97'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC98'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">initCallbacks</span><span class="p">[</span><span class="nx">bridgeName</span><span class="p">]</span> <span class="o">=</span> <span class="nx">callbackList</span> <span class="o">=</span> <span class="p">[];</span></div><div class='line' id='LC99'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC100'><br/></div><div class='line' id='LC101'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">callbackList</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">callback</span><span class="p">);</span></div><div class='line' id='LC102'><span class="p">}</span></div><div class='line' id='LC103'><br/></div><div class='line' id='LC104'><span class="c1">// updated for changes to SWFObject2</span></div><div class='line' id='LC105'><span class="kd">function</span> <span class="nx">FABridge__bridgeInitialized</span><span class="p">(</span><span class="nx">bridgeName</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC106'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">objects</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;object&quot;</span><span class="p">);</span></div><div class='line' id='LC107'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">ol</span> <span class="o">=</span> <span class="nx">objects</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span></div><div class='line' id='LC108'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">activeObjects</span> <span class="o">=</span> <span class="p">[];</span></div><div class='line' id='LC109'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">ol</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC110'> <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">ol</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC111'> <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">objects</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">SetVariable</span> <span class="o">!=</span> <span class="s2">&quot;undefined&quot;</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC112'> <span class="nx">activeObjects</span><span class="p">[</span><span class="nx">activeObjects</span><span class="p">.</span><span class="nx">length</span><span class="p">]</span> <span class="o">=</span> <span class="nx">objects</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span></div><div class='line' id='LC113'> <span class="p">}</span></div><div class='line' id='LC114'> <span class="p">}</span></div><div class='line' id='LC115'> <span class="p">}</span></div><div class='line' id='LC116'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">embeds</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;embed&quot;</span><span class="p">);</span></div><div class='line' id='LC117'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">el</span> <span class="o">=</span> <span class="nx">embeds</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span></div><div class='line' id='LC118'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">activeEmbeds</span> <span class="o">=</span> <span class="p">[];</span></div><div class='line' id='LC119'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">el</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC120'> <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">j</span> <span class="o">&lt;</span> <span class="nx">el</span><span class="p">;</span> <span class="nx">j</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC121'> <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">embeds</span><span class="p">[</span><span class="nx">j</span><span class="p">].</span><span class="nx">SetVariable</span> <span class="o">!=</span> <span class="s2">&quot;undefined&quot;</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC122'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="nx">activeEmbeds</span><span class="p">[</span><span class="nx">activeEmbeds</span><span class="p">.</span><span class="nx">length</span><span class="p">]</span> <span class="o">=</span> <span class="nx">embeds</span><span class="p">[</span><span class="nx">j</span><span class="p">];</span></div><div class='line' id='LC123'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC124'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC125'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC126'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">aol</span> <span class="o">=</span> <span class="nx">activeObjects</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span></div><div class='line' id='LC127'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">ael</span> <span class="o">=</span> <span class="nx">activeEmbeds</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span></div><div class='line' id='LC128'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">searchStr</span> <span class="o">=</span> <span class="s2">&quot;bridgeName=&quot;</span><span class="o">+</span> <span class="nx">bridgeName</span><span class="p">;</span></div><div class='line' id='LC129'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">((</span><span class="nx">aol</span> <span class="o">==</span> <span class="mi">1</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">ael</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="nx">aol</span> <span class="o">==</span> <span class="mi">1</span> <span class="o">&amp;&amp;</span> <span class="nx">ael</span> <span class="o">==</span> <span class="mi">1</span><span class="p">))</span> <span class="p">{</span></div><div class='line' id='LC130'>&nbsp;&nbsp;&nbsp;&nbsp; <span class="nx">FABridge</span><span class="p">.</span><span class="nx">attachBridge</span><span class="p">(</span><span class="nx">activeObjects</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nx">bridgeName</span><span class="p">);</span> </div><div class='line' id='LC131'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC132'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">ael</span> <span class="o">==</span> <span class="mi">1</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">aol</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC133'>&nbsp;&nbsp;&nbsp;&nbsp; <span class="nx">FABridge</span><span class="p">.</span><span class="nx">attachBridge</span><span class="p">(</span><span class="nx">activeEmbeds</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nx">bridgeName</span><span class="p">);</span></div><div class='line' id='LC134'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC135'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="p">{</span></div><div class='line' id='LC136'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">flash_found</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span></div><div class='line' id='LC137'> <span class="k">if</span> <span class="p">(</span><span class="nx">aol</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC138'> <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">k</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">k</span> <span class="o">&lt;</span> <span class="nx">aol</span><span class="p">;</span> <span class="nx">k</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC139'> <span class="kd">var</span> <span class="nx">params</span> <span class="o">=</span> <span class="nx">activeObjects</span><span class="p">[</span><span class="nx">k</span><span class="p">].</span><span class="nx">childNodes</span><span class="p">;</span></div><div class='line' id='LC140'> <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">l</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">l</span> <span class="o">&lt;</span> <span class="nx">params</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">l</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC141'> <span class="kd">var</span> <span class="nx">param</span> <span class="o">=</span> <span class="nx">params</span><span class="p">[</span><span class="nx">l</span><span class="p">];</span></div><div class='line' id='LC142'> <span class="k">if</span> <span class="p">(</span><span class="nx">param</span><span class="p">.</span><span class="nx">nodeType</span> <span class="o">==</span> <span class="mi">1</span> <span class="o">&amp;&amp;</span> <span class="nx">param</span><span class="p">.</span><span class="nx">tagName</span><span class="p">.</span><span class="nx">toLowerCase</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;param&quot;</span> <span class="o">&amp;&amp;</span> <span class="nx">param</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">].</span><span class="nx">toLowerCase</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;flashvars&quot;</span> <span class="o">&amp;&amp;</span> <span class="nx">param</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">].</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">searchStr</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC143'> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">attachBridge</span><span class="p">(</span><span class="nx">activeObjects</span><span class="p">[</span><span class="nx">k</span><span class="p">],</span> <span class="nx">bridgeName</span><span class="p">);</span></div><div class='line' id='LC144'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">flash_found</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span></div><div class='line' id='LC145'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC146'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC147'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC148'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">flash_found</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC149'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC150'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC151'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC152'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC153'> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">flash_found</span> <span class="o">&amp;&amp;</span> <span class="nx">ael</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC154'> <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">m</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">m</span> <span class="o">&lt;</span> <span class="nx">ael</span><span class="p">;</span> <span class="nx">m</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC155'> <span class="kd">var</span> <span class="nx">flashVars</span> <span class="o">=</span> <span class="nx">activeEmbeds</span><span class="p">[</span><span class="nx">m</span><span class="p">].</span><span class="nx">attributes</span><span class="p">.</span><span class="nx">getNamedItem</span><span class="p">(</span><span class="s2">&quot;flashVars&quot;</span><span class="p">).</span><span class="nx">nodeValue</span><span class="p">;</span></div><div class='line' id='LC156'> <span class="k">if</span> <span class="p">(</span><span class="nx">flashVars</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">searchStr</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC157'> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">attachBridge</span><span class="p">(</span><span class="nx">activeEmbeds</span><span class="p">[</span><span class="nx">m</span><span class="p">],</span> <span class="nx">bridgeName</span><span class="p">);</span></div><div class='line' id='LC158'> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC159'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC160'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC161'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC162'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC163'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="kc">true</span><span class="p">;</span></div><div class='line' id='LC164'><span class="p">}</span></div><div class='line' id='LC165'><br/></div><div class='line' id='LC166'><span class="c1">// used to track multiple bridge instances, since callbacks from AS are global across the page.</span></div><div class='line' id='LC167'><br/></div><div class='line' id='LC168'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">nextBridgeID</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC169'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">instances</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC170'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">idMap</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC171'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC172'><br/></div><div class='line' id='LC173'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">extractBridgeFromID</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">id</span><span class="p">)</span></div><div class='line' id='LC174'><span class="p">{</span></div><div class='line' id='LC175'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">bridgeID</span> <span class="o">=</span> <span class="p">(</span><span class="nx">id</span> <span class="o">&gt;&gt;</span> <span class="mi">16</span><span class="p">);</span></div><div class='line' id='LC176'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">idMap</span><span class="p">[</span><span class="nx">bridgeID</span><span class="p">];</span></div><div class='line' id='LC177'><span class="p">}</span></div><div class='line' id='LC178'><br/></div><div class='line' id='LC179'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">attachBridge</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">instance</span><span class="p">,</span> <span class="nx">bridgeName</span><span class="p">)</span></div><div class='line' id='LC180'><span class="p">{</span></div><div class='line' id='LC181'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">newBridgeInstance</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">FABridge</span><span class="p">(</span><span class="nx">instance</span><span class="p">,</span> <span class="nx">bridgeName</span><span class="p">);</span></div><div class='line' id='LC182'><br/></div><div class='line' id='LC183'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">[</span><span class="nx">bridgeName</span><span class="p">]</span> <span class="o">=</span> <span class="nx">newBridgeInstance</span><span class="p">;</span></div><div class='line' id='LC184'><br/></div><div class='line' id='LC185'><span class="cm">/* FABridge[bridgeName] = function() {</span></div><div class='line' id='LC186'><span class="cm"> return newBridgeInstance.root();</span></div><div class='line' id='LC187'><span class="cm"> }</span></div><div class='line' id='LC188'><span class="cm">*/</span></div><div class='line' id='LC189'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">callbacks</span> <span class="o">=</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">initCallbacks</span><span class="p">[</span><span class="nx">bridgeName</span><span class="p">];</span></div><div class='line' id='LC190'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">callbacks</span> <span class="o">==</span> <span class="kc">null</span><span class="p">)</span></div><div class='line' id='LC191'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC192'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span><span class="p">;</span></div><div class='line' id='LC193'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC194'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">callbacks</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC195'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC196'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">callbacks</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">call</span><span class="p">(</span><span class="nx">newBridgeInstance</span><span class="p">);</span></div><div class='line' id='LC197'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC198'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">delete</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">initCallbacks</span><span class="p">[</span><span class="nx">bridgeName</span><span class="p">]</span></div><div class='line' id='LC199'><span class="p">}</span></div><div class='line' id='LC200'><br/></div><div class='line' id='LC201'><span class="c1">// some methods can&#39;t be proxied. You can use the explicit get,set, and call methods if necessary.</span></div><div class='line' id='LC202'><br/></div><div class='line' id='LC203'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">blockedMethods</span> <span class="o">=</span></div><div class='line' id='LC204'><span class="p">{</span></div><div class='line' id='LC205'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">toString</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span></div><div class='line' id='LC206'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">get</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span></div><div class='line' id='LC207'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">set</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span></div><div class='line' id='LC208'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">call</span><span class="o">:</span> <span class="kc">true</span></div><div class='line' id='LC209'><span class="p">};</span></div><div class='line' id='LC210'><br/></div><div class='line' id='LC211'><span class="nx">FABridge</span><span class="p">.</span><span class="nx">prototype</span> <span class="o">=</span></div><div class='line' id='LC212'><span class="p">{</span></div><div class='line' id='LC213'><br/></div><div class='line' id='LC214'><br/></div><div class='line' id='LC215'><span class="c1">// bootstrapping</span></div><div class='line' id='LC216'><br/></div><div class='line' id='LC217'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">root</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span></div><div class='line' id='LC218'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC219'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">deserialize</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">getRoot</span><span class="p">());</span></div><div class='line' id='LC220'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC221'><span class="c1">//clears all of the AS objects in the cache maps</span></div><div class='line' id='LC222'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">releaseASObjects</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span></div><div class='line' id='LC223'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC224'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">releaseASObjects</span><span class="p">();</span></div><div class='line' id='LC225'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC226'><span class="c1">//clears a specific object in AS from the type maps</span></div><div class='line' id='LC227'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">releaseNamedASObject</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span></div><div class='line' id='LC228'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC229'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="k">typeof</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="o">!=</span> <span class="s2">&quot;object&quot;</span><span class="p">)</span></div><div class='line' id='LC230'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC231'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="kc">false</span><span class="p">;</span></div><div class='line' id='LC232'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC233'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC234'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC235'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">ret</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">releaseNamedASObject</span><span class="p">(</span><span class="nx">value</span><span class="p">.</span><span class="nx">fb_instance_id</span><span class="p">);</span></div><div class='line' id='LC236'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">ret</span><span class="p">;</span></div><div class='line' id='LC237'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC238'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC239'><span class="c1">//create a new AS Object</span></div><div class='line' id='LC240'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">create</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">className</span><span class="p">)</span></div><div class='line' id='LC241'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC242'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">deserialize</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="nx">className</span><span class="p">));</span></div><div class='line' id='LC243'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC244'><br/></div><div class='line' id='LC245'><br/></div><div class='line' id='LC246'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// utilities</span></div><div class='line' id='LC247'><br/></div><div class='line' id='LC248'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">makeID</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">token</span><span class="p">)</span></div><div class='line' id='LC249'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC250'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">bridgeID</span> <span class="o">&lt;&lt;</span> <span class="mi">16</span><span class="p">)</span> <span class="o">+</span> <span class="nx">token</span><span class="p">;</span></div><div class='line' id='LC251'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC252'><br/></div><div class='line' id='LC253'><br/></div><div class='line' id='LC254'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// low level access to the flash object</span></div><div class='line' id='LC255'><br/></div><div class='line' id='LC256'><span class="c1">//get a named property from an AS object</span></div><div class='line' id='LC257'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">getPropertyFromAS</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">objRef</span><span class="p">,</span> <span class="nx">propName</span><span class="p">)</span></div><div class='line' id='LC258'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC259'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC260'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC261'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s2">&quot;You are trying to call recursively into the Flash Player which is not allowed. In most cases the JavaScript setTimeout function, can be used as a workaround.&quot;</span><span class="p">);</span></div><div class='line' id='LC262'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC263'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC264'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC265'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span><span class="o">++</span><span class="p">;</span></div><div class='line' id='LC266'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">retVal</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">getPropFromAS</span><span class="p">(</span><span class="nx">objRef</span><span class="p">,</span> <span class="nx">propName</span><span class="p">);</span></div><div class='line' id='LC267'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">retVal</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">handleError</span><span class="p">(</span><span class="nx">retVal</span><span class="p">);</span></div><div class='line' id='LC268'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span><span class="o">--</span><span class="p">;</span></div><div class='line' id='LC269'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">retVal</span><span class="p">;</span></div><div class='line' id='LC270'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC271'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC272'><span class="c1">//set a named property on an AS object</span></div><div class='line' id='LC273'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">setPropertyInAS</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">objRef</span><span class="p">,</span><span class="nx">propName</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span></div><div class='line' id='LC274'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC275'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC276'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC277'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s2">&quot;You are trying to call recursively into the Flash Player which is not allowed. In most cases the JavaScript setTimeout function, can be used as a workaround.&quot;</span><span class="p">);</span></div><div class='line' id='LC278'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC279'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC280'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC281'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span><span class="o">++</span><span class="p">;</span></div><div class='line' id='LC282'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">retVal</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">setPropInAS</span><span class="p">(</span><span class="nx">objRef</span><span class="p">,</span><span class="nx">propName</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">serialize</span><span class="p">(</span><span class="nx">value</span><span class="p">));</span></div><div class='line' id='LC283'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">retVal</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">handleError</span><span class="p">(</span><span class="nx">retVal</span><span class="p">);</span></div><div class='line' id='LC284'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span><span class="o">--</span><span class="p">;</span></div><div class='line' id='LC285'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">retVal</span><span class="p">;</span></div><div class='line' id='LC286'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC287'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC288'><br/></div><div class='line' id='LC289'><span class="c1">//call an AS function</span></div><div class='line' id='LC290'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">callASFunction</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">funcID</span><span class="p">,</span> <span class="nx">args</span><span class="p">)</span></div><div class='line' id='LC291'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC292'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC293'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC294'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s2">&quot;You are trying to call recursively into the Flash Player which is not allowed. In most cases the JavaScript setTimeout function, can be used as a workaround.&quot;</span><span class="p">);</span></div><div class='line' id='LC295'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC296'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC297'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC298'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span><span class="o">++</span><span class="p">;</span></div><div class='line' id='LC299'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">retVal</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">invokeASFunction</span><span class="p">(</span><span class="nx">funcID</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">serialize</span><span class="p">(</span><span class="nx">args</span><span class="p">));</span></div><div class='line' id='LC300'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">retVal</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">handleError</span><span class="p">(</span><span class="nx">retVal</span><span class="p">);</span></div><div class='line' id='LC301'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span><span class="o">--</span><span class="p">;</span></div><div class='line' id='LC302'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">retVal</span><span class="p">;</span></div><div class='line' id='LC303'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC304'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC305'><span class="c1">//call a method on an AS object</span></div><div class='line' id='LC306'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">callASMethod</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">objID</span><span class="p">,</span> <span class="nx">funcName</span><span class="p">,</span> <span class="nx">args</span><span class="p">)</span></div><div class='line' id='LC307'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC308'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC309'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC310'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s2">&quot;You are trying to call recursively into the Flash Player which is not allowed. In most cases the JavaScript setTimeout function, can be used as a workaround.&quot;</span><span class="p">);</span></div><div class='line' id='LC311'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC312'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC313'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC314'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span><span class="o">++</span><span class="p">;</span></div><div class='line' id='LC315'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">args</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">serialize</span><span class="p">(</span><span class="nx">args</span><span class="p">);</span></div><div class='line' id='LC316'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">retVal</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">invokeASMethod</span><span class="p">(</span><span class="nx">objID</span><span class="p">,</span> <span class="nx">funcName</span><span class="p">,</span> <span class="nx">args</span><span class="p">);</span></div><div class='line' id='LC317'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">retVal</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">handleError</span><span class="p">(</span><span class="nx">retVal</span><span class="p">);</span></div><div class='line' id='LC318'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span><span class="o">--</span><span class="p">;</span></div><div class='line' id='LC319'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">retVal</span><span class="p">;</span></div><div class='line' id='LC320'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC321'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC322'><br/></div><div class='line' id='LC323'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// responders to remote calls from flash</span></div><div class='line' id='LC324'><br/></div><div class='line' id='LC325'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//callback from flash that executes a local JS function</span></div><div class='line' id='LC326'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//used mostly when setting js functions as callbacks on events</span></div><div class='line' id='LC327'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">invokeLocalFunction</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">funcID</span><span class="p">,</span> <span class="nx">args</span><span class="p">)</span></div><div class='line' id='LC328'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC329'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">result</span><span class="p">;</span></div><div class='line' id='LC330'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">func</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">localFunctionCache</span><span class="p">[</span><span class="nx">funcID</span><span class="p">];</span></div><div class='line' id='LC331'><br/></div><div class='line' id='LC332'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="nx">func</span> <span class="o">!=</span> <span class="kc">undefined</span><span class="p">)</span></div><div class='line' id='LC333'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC334'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">serialize</span><span class="p">(</span><span class="nx">func</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">deserialize</span><span class="p">(</span><span class="nx">args</span><span class="p">)));</span></div><div class='line' id='LC335'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC336'><br/></div><div class='line' id='LC337'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">result</span><span class="p">;</span></div><div class='line' id='LC338'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC339'><br/></div><div class='line' id='LC340'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Object Types and Proxies</span></div><div class='line' id='LC341'><br/></div><div class='line' id='LC342'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// accepts an object reference, returns a type object matching the obj reference.</span></div><div class='line' id='LC343'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">getTypeFromName</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">objTypeName</span><span class="p">)</span></div><div class='line' id='LC344'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC345'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">remoteTypeCache</span><span class="p">[</span><span class="nx">objTypeName</span><span class="p">];</span></div><div class='line' id='LC346'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC347'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//create an AS proxy for the given object ID and type</span></div><div class='line' id='LC348'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">createProxy</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">objID</span><span class="p">,</span> <span class="nx">typeName</span><span class="p">)</span></div><div class='line' id='LC349'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC350'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">objType</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getTypeFromName</span><span class="p">(</span><span class="nx">typeName</span><span class="p">);</span></div><div class='line' id='LC351'> <span class="nx">instanceFactory</span><span class="p">.</span><span class="nx">prototype</span> <span class="o">=</span> <span class="nx">objType</span><span class="p">;</span></div><div class='line' id='LC352'> <span class="kd">var</span> <span class="nx">instance</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">instanceFactory</span><span class="p">(</span><span class="nx">objID</span><span class="p">);</span></div><div class='line' id='LC353'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">remoteInstanceCache</span><span class="p">[</span><span class="nx">objID</span><span class="p">]</span> <span class="o">=</span> <span class="nx">instance</span><span class="p">;</span></div><div class='line' id='LC354'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">instance</span><span class="p">;</span></div><div class='line' id='LC355'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC356'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//return the proxy associated with the given object ID</span></div><div class='line' id='LC357'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">getProxy</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">objID</span><span class="p">)</span></div><div class='line' id='LC358'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC359'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">remoteInstanceCache</span><span class="p">[</span><span class="nx">objID</span><span class="p">];</span></div><div class='line' id='LC360'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC361'><br/></div><div class='line' id='LC362'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// accepts a type structure, returns a constructed type</span></div><div class='line' id='LC363'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">addTypeDataToCache</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">typeData</span><span class="p">)</span></div><div class='line' id='LC364'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC365'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">newType</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ASProxy</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">typeData</span><span class="p">.</span><span class="nx">name</span><span class="p">);</span></div><div class='line' id='LC366'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">accessors</span> <span class="o">=</span> <span class="nx">typeData</span><span class="p">.</span><span class="nx">accessors</span><span class="p">;</span></div><div class='line' id='LC367'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">accessors</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC368'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC369'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">addPropertyToType</span><span class="p">(</span><span class="nx">newType</span><span class="p">,</span> <span class="nx">accessors</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span></div><div class='line' id='LC370'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC371'><br/></div><div class='line' id='LC372'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">methods</span> <span class="o">=</span> <span class="nx">typeData</span><span class="p">.</span><span class="nx">methods</span><span class="p">;</span></div><div class='line' id='LC373'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">methods</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC374'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC375'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">FABridge</span><span class="p">.</span><span class="nx">blockedMethods</span><span class="p">[</span><span class="nx">methods</span><span class="p">[</span><span class="nx">i</span><span class="p">]]</span> <span class="o">==</span> <span class="kc">undefined</span><span class="p">)</span></div><div class='line' id='LC376'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC377'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">addMethodToType</span><span class="p">(</span><span class="nx">newType</span><span class="p">,</span> <span class="nx">methods</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span></div><div class='line' id='LC378'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC379'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC380'><br/></div><div class='line' id='LC381'><br/></div><div class='line' id='LC382'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">remoteTypeCache</span><span class="p">[</span><span class="nx">newType</span><span class="p">.</span><span class="nx">typeName</span><span class="p">]</span> <span class="o">=</span> <span class="nx">newType</span><span class="p">;</span></div><div class='line' id='LC383'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">newType</span><span class="p">;</span></div><div class='line' id='LC384'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC385'><br/></div><div class='line' id='LC386'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//add a property to a typename; used to define the properties that can be called on an AS proxied object</span></div><div class='line' id='LC387'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">addPropertyToType</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">ty</span><span class="p">,</span> <span class="nx">propName</span><span class="p">)</span></div><div class='line' id='LC388'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC389'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">c</span> <span class="o">=</span> <span class="nx">propName</span><span class="p">.</span><span class="nx">charAt</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span></div><div class='line' id='LC390'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">setterName</span><span class="p">;</span></div><div class='line' id='LC391'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">getterName</span><span class="p">;</span></div><div class='line' id='LC392'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="nx">c</span> <span class="o">&gt;=</span> <span class="s2">&quot;a&quot;</span> <span class="o">&amp;&amp;</span> <span class="nx">c</span> <span class="o">&lt;=</span> <span class="s2">&quot;z&quot;</span><span class="p">)</span></div><div class='line' id='LC393'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC394'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">getterName</span> <span class="o">=</span> <span class="s2">&quot;get&quot;</span> <span class="o">+</span> <span class="nx">c</span><span class="p">.</span><span class="nx">toUpperCase</span><span class="p">()</span> <span class="o">+</span> <span class="nx">propName</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span></div><div class='line' id='LC395'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">setterName</span> <span class="o">=</span> <span class="s2">&quot;set&quot;</span> <span class="o">+</span> <span class="nx">c</span><span class="p">.</span><span class="nx">toUpperCase</span><span class="p">()</span> <span class="o">+</span> <span class="nx">propName</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span></div><div class='line' id='LC396'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC397'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC398'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC399'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">getterName</span> <span class="o">=</span> <span class="s2">&quot;get&quot;</span> <span class="o">+</span> <span class="nx">propName</span><span class="p">;</span></div><div class='line' id='LC400'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">setterName</span> <span class="o">=</span> <span class="s2">&quot;set&quot;</span> <span class="o">+</span> <span class="nx">propName</span><span class="p">;</span></div><div class='line' id='LC401'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC402'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">ty</span><span class="p">[</span><span class="nx">setterName</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">val</span><span class="p">)</span></div><div class='line' id='LC403'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC404'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">setPropertyInAS</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">fb_instance_id</span><span class="p">,</span> <span class="nx">propName</span><span class="p">,</span> <span class="nx">val</span><span class="p">);</span></div><div class='line' id='LC405'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC406'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">ty</span><span class="p">[</span><span class="nx">getterName</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span></div><div class='line' id='LC407'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC408'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">deserialize</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">getPropertyFromAS</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">fb_instance_id</span><span class="p">,</span> <span class="nx">propName</span><span class="p">));</span></div><div class='line' id='LC409'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC410'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC411'><br/></div><div class='line' id='LC412'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//add a method to a typename; used to define the methods that can be callefd on an AS proxied object</span></div><div class='line' id='LC413'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">addMethodToType</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">ty</span><span class="p">,</span> <span class="nx">methodName</span><span class="p">)</span></div><div class='line' id='LC414'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC415'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">ty</span><span class="p">[</span><span class="nx">methodName</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span></div><div class='line' id='LC416'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC417'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">deserialize</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">callASMethod</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">fb_instance_id</span><span class="p">,</span> <span class="nx">methodName</span><span class="p">,</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">argsToArray</span><span class="p">(</span><span class="nx">arguments</span><span class="p">)));</span></div><div class='line' id='LC418'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC419'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC420'><br/></div><div class='line' id='LC421'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Function Proxies</span></div><div class='line' id='LC422'><br/></div><div class='line' id='LC423'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//returns the AS proxy for the specified function ID</span></div><div class='line' id='LC424'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">getFunctionProxy</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">funcID</span><span class="p">)</span></div><div class='line' id='LC425'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC426'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">bridge</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class='line' id='LC427'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">remoteFunctionCache</span><span class="p">[</span><span class="nx">funcID</span><span class="p">]</span> <span class="o">==</span> <span class="kc">null</span><span class="p">)</span></div><div class='line' id='LC428'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC429'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">remoteFunctionCache</span><span class="p">[</span><span class="nx">funcID</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span></div><div class='line' id='LC430'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC431'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">bridge</span><span class="p">.</span><span class="nx">callASFunction</span><span class="p">(</span><span class="nx">funcID</span><span class="p">,</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">argsToArray</span><span class="p">(</span><span class="nx">arguments</span><span class="p">));</span></div><div class='line' id='LC432'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC433'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC434'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">remoteFunctionCache</span><span class="p">[</span><span class="nx">funcID</span><span class="p">];</span></div><div class='line' id='LC435'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC436'>&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC437'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//reutrns the ID of the given function; if it doesnt exist it is created and added to the local cache</span></div><div class='line' id='LC438'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">getFunctionID</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">func</span><span class="p">)</span></div><div class='line' id='LC439'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC440'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">func</span><span class="p">.</span><span class="nx">__bridge_id__</span> <span class="o">==</span> <span class="kc">undefined</span><span class="p">)</span></div><div class='line' id='LC441'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC442'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">func</span><span class="p">.</span><span class="nx">__bridge_id__</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">makeID</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">nextLocalFuncID</span><span class="o">++</span><span class="p">);</span></div><div class='line' id='LC443'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">localFunctionCache</span><span class="p">[</span><span class="nx">func</span><span class="p">.</span><span class="nx">__bridge_id__</span><span class="p">]</span> <span class="o">=</span> <span class="nx">func</span><span class="p">;</span></div><div class='line' id='LC444'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC445'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">func</span><span class="p">.</span><span class="nx">__bridge_id__</span><span class="p">;</span></div><div class='line' id='LC446'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC447'><br/></div><div class='line' id='LC448'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// serialization / deserialization</span></div><div class='line' id='LC449'><br/></div><div class='line' id='LC450'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">serialize</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span></div><div class='line' id='LC451'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC452'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC453'><br/></div><div class='line' id='LC454'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">t</span> <span class="o">=</span> <span class="k">typeof</span><span class="p">(</span><span class="nx">value</span><span class="p">);</span></div><div class='line' id='LC455'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//primitives are kept as such</span></div><div class='line' id='LC456'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">t</span> <span class="o">==</span> <span class="s2">&quot;number&quot;</span> <span class="o">||</span> <span class="nx">t</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="o">||</span> <span class="nx">t</span> <span class="o">==</span> <span class="s2">&quot;boolean&quot;</span> <span class="o">||</span> <span class="nx">t</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">||</span> <span class="nx">t</span> <span class="o">==</span> <span class="kc">undefined</span><span class="p">)</span></div><div class='line' id='LC457'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC458'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span> <span class="o">=</span> <span class="nx">value</span><span class="p">;</span></div><div class='line' id='LC459'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC460'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">value</span> <span class="k">instanceof</span> <span class="nb">Array</span><span class="p">)</span></div><div class='line' id='LC461'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC462'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//arrays are serializesd recursively</span></div><div class='line' id='LC463'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span> <span class="o">=</span> <span class="p">[];</span></div><div class='line' id='LC464'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">value</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC465'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC466'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">serialize</span><span class="p">(</span><span class="nx">value</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span></div><div class='line' id='LC467'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC468'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC469'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">t</span> <span class="o">==</span> <span class="s2">&quot;function&quot;</span><span class="p">)</span></div><div class='line' id='LC470'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC471'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//js functions are assigned an ID and stored in the local cache </span></div><div class='line' id='LC472'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_JSFUNCTION</span><span class="p">;</span></div><div class='line' id='LC473'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span><span class="p">.</span><span class="nx">value</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getFunctionID</span><span class="p">(</span><span class="nx">value</span><span class="p">);</span></div><div class='line' id='LC474'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC475'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">value</span> <span class="k">instanceof</span> <span class="nx">ASProxy</span><span class="p">)</span></div><div class='line' id='LC476'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC477'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_ASINSTANCE</span><span class="p">;</span></div><div class='line' id='LC478'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span><span class="p">.</span><span class="nx">value</span> <span class="o">=</span> <span class="nx">value</span><span class="p">.</span><span class="nx">fb_instance_id</span><span class="p">;</span></div><div class='line' id='LC479'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC480'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC481'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC482'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_ANONYMOUS</span><span class="p">;</span></div><div class='line' id='LC483'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span><span class="p">.</span><span class="nx">value</span> <span class="o">=</span> <span class="nx">value</span><span class="p">;</span></div><div class='line' id='LC484'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC485'><br/></div><div class='line' id='LC486'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">result</span><span class="p">;</span></div><div class='line' id='LC487'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC488'><br/></div><div class='line' id='LC489'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//on deserialization we always check the return for the specific error code that is used to marshall NPE&#39;s into JS errors</span></div><div class='line' id='LC490'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// the unpacking is done by returning the value on each pachet for objects/arrays </span></div><div class='line' id='LC491'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">deserialize</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">packedValue</span><span class="p">)</span></div><div class='line' id='LC492'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC493'><br/></div><div class='line' id='LC494'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">result</span><span class="p">;</span></div><div class='line' id='LC495'><br/></div><div class='line' id='LC496'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">t</span> <span class="o">=</span> <span class="k">typeof</span><span class="p">(</span><span class="nx">packedValue</span><span class="p">);</span></div><div class='line' id='LC497'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">t</span> <span class="o">==</span> <span class="s2">&quot;number&quot;</span> <span class="o">||</span> <span class="nx">t</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="o">||</span> <span class="nx">t</span> <span class="o">==</span> <span class="s2">&quot;boolean&quot;</span> <span class="o">||</span> <span class="nx">packedValue</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">||</span> <span class="nx">packedValue</span> <span class="o">==</span> <span class="kc">undefined</span><span class="p">)</span></div><div class='line' id='LC498'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC499'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">handleError</span><span class="p">(</span><span class="nx">packedValue</span><span class="p">);</span></div><div class='line' id='LC500'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC501'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">packedValue</span> <span class="k">instanceof</span> <span class="nb">Array</span><span class="p">)</span></div><div class='line' id='LC502'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC503'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span> <span class="o">=</span> <span class="p">[];</span></div><div class='line' id='LC504'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">packedValue</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC505'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC506'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">deserialize</span><span class="p">(</span><span class="nx">packedValue</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span></div><div class='line' id='LC507'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC508'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC509'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">t</span> <span class="o">==</span> <span class="s2">&quot;object&quot;</span><span class="p">)</span></div><div class='line' id='LC510'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC511'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span><span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">packedValue</span><span class="p">.</span><span class="nx">newTypes</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC512'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC513'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">addTypeDataToCache</span><span class="p">(</span><span class="nx">packedValue</span><span class="p">.</span><span class="nx">newTypes</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span></div><div class='line' id='LC514'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC515'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">aRefID</span> <span class="k">in</span> <span class="nx">packedValue</span><span class="p">.</span><span class="nx">newRefs</span><span class="p">)</span></div><div class='line' id='LC516'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC517'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">createProxy</span><span class="p">(</span><span class="nx">aRefID</span><span class="p">,</span> <span class="nx">packedValue</span><span class="p">.</span><span class="nx">newRefs</span><span class="p">[</span><span class="nx">aRefID</span><span class="p">]);</span></div><div class='line' id='LC518'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC519'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">packedValue</span><span class="p">.</span><span class="nx">type</span> <span class="o">==</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_PRIMITIVE</span><span class="p">)</span></div><div class='line' id='LC520'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC521'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span> <span class="o">=</span> <span class="nx">packedValue</span><span class="p">.</span><span class="nx">value</span><span class="p">;</span></div><div class='line' id='LC522'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC523'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">packedValue</span><span class="p">.</span><span class="nx">type</span> <span class="o">==</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_ASFUNCTION</span><span class="p">)</span></div><div class='line' id='LC524'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC525'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getFunctionProxy</span><span class="p">(</span><span class="nx">packedValue</span><span class="p">.</span><span class="nx">value</span><span class="p">);</span></div><div class='line' id='LC526'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC527'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">packedValue</span><span class="p">.</span><span class="nx">type</span> <span class="o">==</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_ASINSTANCE</span><span class="p">)</span></div><div class='line' id='LC528'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC529'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getProxy</span><span class="p">(</span><span class="nx">packedValue</span><span class="p">.</span><span class="nx">value</span><span class="p">);</span></div><div class='line' id='LC530'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC531'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">packedValue</span><span class="p">.</span><span class="nx">type</span> <span class="o">==</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">TYPE_ANONYMOUS</span><span class="p">)</span></div><div class='line' id='LC532'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC533'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">result</span> <span class="o">=</span> <span class="nx">packedValue</span><span class="p">.</span><span class="nx">value</span><span class="p">;</span></div><div class='line' id='LC534'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC535'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC536'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">result</span><span class="p">;</span></div><div class='line' id='LC537'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC538'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//increases the reference count for the given object</span></div><div class='line' id='LC539'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">addRef</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span></div><div class='line' id='LC540'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC541'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">incRef</span><span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">fb_instance_id</span><span class="p">);</span></div><div class='line' id='LC542'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC543'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//decrease the reference count for the given object and release it if needed</span></div><div class='line' id='LC544'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">release</span><span class="o">:</span><span class="kd">function</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span></div><div class='line' id='LC545'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC546'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">releaseRef</span><span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">fb_instance_id</span><span class="p">);</span></div><div class='line' id='LC547'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC548'><br/></div><div class='line' id='LC549'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// check the given value for the components of the hard-coded error code : __FLASHERROR</span></div><div class='line' id='LC550'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// used to marshall NPE&#39;s into flash</span></div><div class='line' id='LC551'>&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC552'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">handleError</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span></div><div class='line' id='LC553'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC554'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="k">typeof</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span><span class="o">==</span><span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="nx">value</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="s2">&quot;__FLASHERROR&quot;</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC555'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC556'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">myErrorMessage</span> <span class="o">=</span> <span class="nx">value</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s2">&quot;||&quot;</span><span class="p">);</span></div><div class='line' id='LC557'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="p">)</span></div><div class='line' id='LC558'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC559'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">refCount</span><span class="o">--</span><span class="p">;</span></div><div class='line' id='LC560'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC561'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="nx">myErrorMessage</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span></div><div class='line' id='LC562'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">value</span><span class="p">;</span></div><div class='line' id='LC563'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC564'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC565'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC566'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nx">value</span><span class="p">;</span></div><div class='line' id='LC567'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> </div><div class='line' id='LC568'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC569'><span class="p">};</span></div><div class='line' id='LC570'><br/></div><div class='line' id='LC571'><span class="c1">// The root ASProxy class that facades a flash object</span></div><div class='line' id='LC572'><br/></div><div class='line' id='LC573'><span class="nx">ASProxy</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">bridge</span><span class="p">,</span> <span class="nx">typeName</span><span class="p">)</span></div><div class='line' id='LC574'><span class="p">{</span></div><div class='line' id='LC575'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">bridge</span> <span class="o">=</span> <span class="nx">bridge</span><span class="p">;</span></div><div class='line' id='LC576'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">typeName</span> <span class="o">=</span> <span class="nx">typeName</span><span class="p">;</span></div><div class='line' id='LC577'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">;</span></div><div class='line' id='LC578'><span class="p">};</span></div><div class='line' id='LC579'><span class="c1">//methods available on each ASProxy object</span></div><div class='line' id='LC580'><span class="nx">ASProxy</span><span class="p">.</span><span class="nx">prototype</span> <span class="o">=</span></div><div class='line' id='LC581'><span class="p">{</span></div><div class='line' id='LC582'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">get</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">propName</span><span class="p">)</span></div><div class='line' id='LC583'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC584'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">deserialize</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">getPropertyFromAS</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">fb_instance_id</span><span class="p">,</span> <span class="nx">propName</span><span class="p">));</span></div><div class='line' id='LC585'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC586'><br/></div><div class='line' id='LC587'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">set</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">propName</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span></div><div class='line' id='LC588'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC589'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">setPropertyInAS</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">fb_instance_id</span><span class="p">,</span> <span class="nx">propName</span><span class="p">,</span> <span class="nx">value</span><span class="p">);</span></div><div class='line' id='LC590'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span></div><div class='line' id='LC591'><br/></div><div class='line' id='LC592'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">call</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">funcName</span><span class="p">,</span> <span class="nx">args</span><span class="p">)</span></div><div class='line' id='LC593'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC594'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">callASMethod</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">fb_instance_id</span><span class="p">,</span> <span class="nx">funcName</span><span class="p">,</span> <span class="nx">args</span><span class="p">);</span></div><div class='line' id='LC595'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span> </div><div class='line' id='LC596'>&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC597'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">addRef</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC598'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">addRef</span><span class="p">(</span><span class="k">this</span><span class="p">);</span></div><div class='line' id='LC599'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">},</span> </div><div class='line' id='LC600'>&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC601'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">release</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC602'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">bridge</span><span class="p">.</span><span class="nx">release</span><span class="p">(</span><span class="k">this</span><span class="p">);</span></div><div class='line' id='LC603'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC604'><span class="p">};</span></div></pre></div>
970
+ </td>
971
+ </tr>
972
+ </table>
973
+ </div>
974
+
975
+ </div>
976
+ </div>
977
+ </div>
978
+ </div>
979
+
980
+ </div>
981
+
982
+ <div class="frame frame-loading large-loading-area" style="display:none;" data-tree-list-url="/igrigorik/em-websocket/tree-list/b9d439cd3494db3225587ccf7cb060f4b37a9f13" data-blob-url-prefix="/igrigorik/em-websocket/blob/b9d439cd3494db3225587ccf7cb060f4b37a9f13">
983
+ <img src="https://a248.e.akamai.net/assets.github.com/images/spinners/octocat-spinner-64.gif?1329921026" height="64" width="64">
984
+ </div>
985
+
986
+ </div>
987
+ <div class="context-overlay"></div>
988
+ </div>
989
+
990
+ <div id="footer-push"></div><!-- hack for sticky footer -->
991
+ </div><!-- end of wrapper - hack for sticky footer -->
992
+
993
+ <!-- footer -->
994
+ <div id="footer" >
995
+
996
+ <div class="upper_footer">
997
+ <div class="container clearfix">
998
+
999
+ <!--[if IE]><h4 id="blacktocat_ie">GitHub Links</h4><![endif]-->
1000
+ <![if !IE]><h4 id="blacktocat">GitHub Links</h4><![endif]>
1001
+
1002
+ <ul class="footer_nav">
1003
+ <h4>GitHub</h4>
1004
+ <li><a href="https://github.com/about">About</a></li>
1005
+ <li><a href="https://github.com/blog">Blog</a></li>
1006
+ <li><a href="https://github.com/features">Features</a></li>
1007
+ <li><a href="https://github.com/contact">Contact &amp; Support</a></li>
1008
+ <li><a href="https://github.com/training">Training</a></li>
1009
+ <li><a href="http://enterprise.github.com/">GitHub Enterprise</a></li>
1010
+ <li><a href="http://status.github.com/">Site Status</a></li>
1011
+ </ul>
1012
+
1013
+ <ul class="footer_nav">
1014
+ <h4>Tools</h4>
1015
+ <li><a href="http://get.gaug.es/">Gauges: Analyze web traffic</a></li>
1016
+ <li><a href="http://speakerdeck.com">Speaker Deck: Presentations</a></li>
1017
+ <li><a href="https://gist.github.com">Gist: Code snippets</a></li>
1018
+ <li><a href="http://mac.github.com/">GitHub for Mac</a></li>
1019
+ <li><a href="http://windows.github.com/">GitHub for Windows</a></li>
1020
+ <li><a href="http://mobile.github.com/">Issues for iPhone</a></li>
1021
+ <li><a href="http://jobs.github.com/">Job Board</a></li>
1022
+ </ul>
1023
+
1024
+ <ul class="footer_nav">
1025
+ <h4>Extras</h4>
1026
+ <li><a href="http://shop.github.com/">GitHub Shop</a></li>
1027
+ <li><a href="http://octodex.github.com/">The Octodex</a></li>
1028
+ </ul>
1029
+
1030
+ <ul class="footer_nav">
1031
+ <h4>Documentation</h4>
1032
+ <li><a href="http://help.github.com/">GitHub Help</a></li>
1033
+ <li><a href="http://developer.github.com/">Developer API</a></li>
1034
+ <li><a href="http://github.github.com/github-flavored-markdown/">GitHub Flavored Markdown</a></li>
1035
+ <li><a href="http://pages.github.com/">GitHub Pages</a></li>
1036
+ </ul>
1037
+
1038
+ </div><!-- /.site -->
1039
+ </div><!-- /.upper_footer -->
1040
+
1041
+ <div class="lower_footer">
1042
+ <div class="container clearfix">
1043
+ <!--[if IE]><div id="legal_ie"><![endif]-->
1044
+ <![if !IE]><div id="legal"><![endif]>
1045
+ <ul>
1046
+ <li><a href="https://github.com/site/terms">Terms of Service</a></li>
1047
+ <li><a href="https://github.com/site/privacy">Privacy</a></li>
1048
+ <li><a href="https://github.com/security">Security</a></li>
1049
+ </ul>
1050
+
1051
+ <p>&copy; 2012 <span title="0.06992s from fe14.rs.github.com">GitHub</span> Inc. All rights reserved.</p>
1052
+ </div><!-- /#legal or /#legal_ie-->
1053
+
1054
+ <div class="sponsor">
1055
+ <a href="http://www.rackspace.com" class="logo">
1056
+ <img alt="Dedicated Server" height="36" src="https://a248.e.akamai.net/assets.github.com/images/modules/footer/rackspaces_logo.png?1329921026" width="38" />
1057
+ </a>
1058
+ Powered by the <a href="http://www.rackspace.com ">Dedicated
1059
+ Servers</a> and<br/> <a href="http://www.rackspacecloud.com">Cloud
1060
+ Computing</a> of Rackspace Hosting<span>&reg;</span>
1061
+ </div>
1062
+ </div><!-- /.site -->
1063
+ </div><!-- /.lower_footer -->
1064
+
1065
+ </div><!-- /#footer -->
1066
+
1067
+
1068
+
1069
+ <div id="keyboard_shortcuts_pane" class="instapaper_ignore readability-extra" style="display:none">
1070
+ <h2>Keyboard Shortcuts <small><a href="#" class="js-see-all-keyboard-shortcuts">(see all)</a></small></h2>
1071
+
1072
+ <div class="columns threecols">
1073
+ <div class="column first">
1074
+ <h3>Site wide shortcuts</h3>
1075
+ <dl class="keyboard-mappings">
1076
+ <dt>s</dt>
1077
+ <dd>Focus site search</dd>
1078
+ </dl>
1079
+ <dl class="keyboard-mappings">
1080
+ <dt>?</dt>
1081
+ <dd>Bring up this help dialog</dd>
1082
+ </dl>
1083
+ </div><!-- /.column.first -->
1084
+
1085
+ <div class="column middle" style='display:none'>
1086
+ <h3>Commit list</h3>
1087
+ <dl class="keyboard-mappings">
1088
+ <dt>j</dt>
1089
+ <dd>Move selection down</dd>
1090
+ </dl>
1091
+ <dl class="keyboard-mappings">
1092
+ <dt>k</dt>
1093
+ <dd>Move selection up</dd>
1094
+ </dl>
1095
+ <dl class="keyboard-mappings">
1096
+ <dt>c <em>or</em> o <em>or</em> enter</dt>
1097
+ <dd>Open commit</dd>
1098
+ </dl>
1099
+ <dl class="keyboard-mappings">
1100
+ <dt>y</dt>
1101
+ <dd>Expand URL to its canonical form</dd>
1102
+ </dl>
1103
+ </div><!-- /.column.first -->
1104
+
1105
+ <div class="column last" style='display:none'>
1106
+ <h3>Pull request list</h3>
1107
+ <dl class="keyboard-mappings">
1108
+ <dt>j</dt>
1109
+ <dd>Move selection down</dd>
1110
+ </dl>
1111
+ <dl class="keyboard-mappings">
1112
+ <dt>k</dt>
1113
+ <dd>Move selection up</dd>
1114
+ </dl>
1115
+ <dl class="keyboard-mappings">
1116
+ <dt>o <em>or</em> enter</dt>
1117
+ <dd>Open issue</dd>
1118
+ </dl>
1119
+ <dl class="keyboard-mappings">
1120
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> enter</dt>
1121
+ <dd>Submit comment</dd>
1122
+ </dl>
1123
+ </div><!-- /.columns.last -->
1124
+
1125
+ </div><!-- /.columns.equacols -->
1126
+
1127
+ <div style='display:none'>
1128
+ <div class="rule"></div>
1129
+
1130
+ <h3>Issues</h3>
1131
+
1132
+ <div class="columns threecols">
1133
+ <div class="column first">
1134
+ <dl class="keyboard-mappings">
1135
+ <dt>j</dt>
1136
+ <dd>Move selection down</dd>
1137
+ </dl>
1138
+ <dl class="keyboard-mappings">
1139
+ <dt>k</dt>
1140
+ <dd>Move selection up</dd>
1141
+ </dl>
1142
+ <dl class="keyboard-mappings">
1143
+ <dt>x</dt>
1144
+ <dd>Toggle selection</dd>
1145
+ </dl>
1146
+ <dl class="keyboard-mappings">
1147
+ <dt>o <em>or</em> enter</dt>
1148
+ <dd>Open issue</dd>
1149
+ </dl>
1150
+ <dl class="keyboard-mappings">
1151
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> enter</dt>
1152
+ <dd>Submit comment</dd>
1153
+ </dl>
1154
+ </div><!-- /.column.first -->
1155
+ <div class="column last">
1156
+ <dl class="keyboard-mappings">
1157
+ <dt>c</dt>
1158
+ <dd>Create issue</dd>
1159
+ </dl>
1160
+ <dl class="keyboard-mappings">
1161
+ <dt>l</dt>
1162
+ <dd>Create label</dd>
1163
+ </dl>
1164
+ <dl class="keyboard-mappings">
1165
+ <dt>i</dt>
1166
+ <dd>Back to inbox</dd>
1167
+ </dl>
1168
+ <dl class="keyboard-mappings">
1169
+ <dt>u</dt>
1170
+ <dd>Back to issues</dd>
1171
+ </dl>
1172
+ <dl class="keyboard-mappings">
1173
+ <dt>/</dt>
1174
+ <dd>Focus issues search</dd>
1175
+ </dl>
1176
+ </div>
1177
+ </div>
1178
+ </div>
1179
+
1180
+ <div style='display:none'>
1181
+ <div class="rule"></div>
1182
+
1183
+ <h3>Issues Dashboard</h3>
1184
+
1185
+ <div class="columns threecols">
1186
+ <div class="column first">
1187
+ <dl class="keyboard-mappings">
1188
+ <dt>j</dt>
1189
+ <dd>Move selection down</dd>
1190
+ </dl>
1191
+ <dl class="keyboard-mappings">
1192
+ <dt>k</dt>
1193
+ <dd>Move selection up</dd>
1194
+ </dl>
1195
+ <dl class="keyboard-mappings">
1196
+ <dt>o <em>or</em> enter</dt>
1197
+ <dd>Open issue</dd>
1198
+ </dl>
1199
+ </div><!-- /.column.first -->
1200
+ </div>
1201
+ </div>
1202
+
1203
+ <div style='display:none'>
1204
+ <div class="rule"></div>
1205
+
1206
+ <h3>Network Graph</h3>
1207
+ <div class="columns equacols">
1208
+ <div class="column first">
1209
+ <dl class="keyboard-mappings">
1210
+ <dt><span class="badmono">←</span> <em>or</em> h</dt>
1211
+ <dd>Scroll left</dd>
1212
+ </dl>
1213
+ <dl class="keyboard-mappings">
1214
+ <dt><span class="badmono">→</span> <em>or</em> l</dt>
1215
+ <dd>Scroll right</dd>
1216
+ </dl>
1217
+ <dl class="keyboard-mappings">
1218
+ <dt><span class="badmono">↑</span> <em>or</em> k</dt>
1219
+ <dd>Scroll up</dd>
1220
+ </dl>
1221
+ <dl class="keyboard-mappings">
1222
+ <dt><span class="badmono">↓</span> <em>or</em> j</dt>
1223
+ <dd>Scroll down</dd>
1224
+ </dl>
1225
+ <dl class="keyboard-mappings">
1226
+ <dt>t</dt>
1227
+ <dd>Toggle visibility of head labels</dd>
1228
+ </dl>
1229
+ </div><!-- /.column.first -->
1230
+ <div class="column last">
1231
+ <dl class="keyboard-mappings">
1232
+ <dt>shift <span class="badmono">←</span> <em>or</em> shift h</dt>
1233
+ <dd>Scroll all the way left</dd>
1234
+ </dl>
1235
+ <dl class="keyboard-mappings">
1236
+ <dt>shift <span class="badmono">→</span> <em>or</em> shift l</dt>
1237
+ <dd>Scroll all the way right</dd>
1238
+ </dl>
1239
+ <dl class="keyboard-mappings">
1240
+ <dt>shift <span class="badmono">↑</span> <em>or</em> shift k</dt>
1241
+ <dd>Scroll all the way up</dd>
1242
+ </dl>
1243
+ <dl class="keyboard-mappings">
1244
+ <dt>shift <span class="badmono">↓</span> <em>or</em> shift j</dt>
1245
+ <dd>Scroll all the way down</dd>
1246
+ </dl>
1247
+ </div><!-- /.column.last -->
1248
+ </div>
1249
+ </div>
1250
+
1251
+ <div >
1252
+ <div class="rule"></div>
1253
+ <div class="columns threecols">
1254
+ <div class="column first" >
1255
+ <h3>Source Code Browsing</h3>
1256
+ <dl class="keyboard-mappings">
1257
+ <dt>t</dt>
1258
+ <dd>Activates the file finder</dd>
1259
+ </dl>
1260
+ <dl class="keyboard-mappings">
1261
+ <dt>l</dt>
1262
+ <dd>Jump to line</dd>
1263
+ </dl>
1264
+ <dl class="keyboard-mappings">
1265
+ <dt>w</dt>
1266
+ <dd>Switch branch/tag</dd>
1267
+ </dl>
1268
+ <dl class="keyboard-mappings">
1269
+ <dt>y</dt>
1270
+ <dd>Expand URL to its canonical form</dd>
1271
+ </dl>
1272
+ </div>
1273
+ </div>
1274
+ </div>
1275
+
1276
+ <div style='display:none'>
1277
+ <div class="rule"></div>
1278
+ <div class="columns threecols">
1279
+ <div class="column first">
1280
+ <h3>Browsing Commits</h3>
1281
+ <dl class="keyboard-mappings">
1282
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> enter</dt>
1283
+ <dd>Submit comment</dd>
1284
+ </dl>
1285
+ <dl class="keyboard-mappings">
1286
+ <dt>escape</dt>
1287
+ <dd>Close form</dd>
1288
+ </dl>
1289
+ <dl class="keyboard-mappings">
1290
+ <dt>p</dt>
1291
+ <dd>Parent commit</dd>
1292
+ </dl>
1293
+ <dl class="keyboard-mappings">
1294
+ <dt>o</dt>
1295
+ <dd>Other parent commit</dd>
1296
+ </dl>
1297
+ </div>
1298
+ </div>
1299
+ </div>
1300
+ </div>
1301
+
1302
+ <div id="markdown-help" class="instapaper_ignore readability-extra">
1303
+ <h2>Markdown Cheat Sheet</h2>
1304
+
1305
+ <div class="cheatsheet-content">
1306
+
1307
+ <div class="mod">
1308
+ <div class="col">
1309
+ <h3>Format Text</h3>
1310
+ <p>Headers</p>
1311
+ <pre>
1312
+ # This is an &lt;h1&gt; tag
1313
+ ## This is an &lt;h2&gt; tag
1314
+ ###### This is an &lt;h6&gt; tag</pre>
1315
+ <p>Text styles</p>
1316
+ <pre>
1317
+ *This text will be italic*
1318
+ _This will also be italic_
1319
+ **This text will be bold**
1320
+ __This will also be bold__
1321
+
1322
+ *You **can** combine them*
1323
+ </pre>
1324
+ </div>
1325
+ <div class="col">
1326
+ <h3>Lists</h3>
1327
+ <p>Unordered</p>
1328
+ <pre>
1329
+ * Item 1
1330
+ * Item 2
1331
+ * Item 2a
1332
+ * Item 2b</pre>
1333
+ <p>Ordered</p>
1334
+ <pre>
1335
+ 1. Item 1
1336
+ 2. Item 2
1337
+ 3. Item 3
1338
+ * Item 3a
1339
+ * Item 3b</pre>
1340
+ </div>
1341
+ <div class="col">
1342
+ <h3>Miscellaneous</h3>
1343
+ <p>Images</p>
1344
+ <pre>
1345
+ ![GitHub Logo](/images/logo.png)
1346
+ Format: ![Alt Text](url)
1347
+ </pre>
1348
+ <p>Links</p>
1349
+ <pre>
1350
+ http://github.com - automatic!
1351
+ [GitHub](http://github.com)</pre>
1352
+ <p>Blockquotes</p>
1353
+ <pre>
1354
+ As Kanye West said:
1355
+
1356
+ > We're living the future so
1357
+ > the present is our past.
1358
+ </pre>
1359
+ </div>
1360
+ </div>
1361
+ <div class="rule"></div>
1362
+
1363
+ <h3>Code Examples in Markdown</h3>
1364
+ <div class="col">
1365
+ <p>Syntax highlighting with <a href="http://github.github.com/github-flavored-markdown/" title="GitHub Flavored Markdown" target="_blank">GFM</a></p>
1366
+ <pre>
1367
+ ```javascript
1368
+ function fancyAlert(arg) {
1369
+ if(arg) {
1370
+ $.facebox({div:'#foo'})
1371
+ }
1372
+ }
1373
+ ```</pre>
1374
+ </div>
1375
+ <div class="col">
1376
+ <p>Or, indent your code 4 spaces</p>
1377
+ <pre>
1378
+ Here is a Python code example
1379
+ without syntax highlighting:
1380
+
1381
+ def foo:
1382
+ if not bar:
1383
+ return true</pre>
1384
+ </div>
1385
+ <div class="col">
1386
+ <p>Inline code for comments</p>
1387
+ <pre>
1388
+ I think you should use an
1389
+ `&lt;addr&gt;` element here instead.</pre>
1390
+ </div>
1391
+ </div>
1392
+
1393
+ </div>
1394
+ </div>
1395
+
1396
+
1397
+ <div id="ajax-error-message">
1398
+ <span class="mini-icon mini-icon-exclamation"></span>
1399
+ Something went wrong with that request. Please try again.
1400
+ <a href="#" class="ajax-error-dismiss">Dismiss</a>
1401
+ </div>
1402
+
1403
+ <div id="logo-popup">
1404
+ <h2>Looking for the GitHub logo?</h2>
1405
+ <ul>
1406
+ <li>
1407
+ <h4>GitHub Logo</h4>
1408
+ <a href="http://github-media-downloads.s3.amazonaws.com/GitHub_Logos.zip"><img alt="Github_logo" src="https://a248.e.akamai.net/assets.github.com/images/modules/about_page/github_logo.png?1329921026" /></a>
1409
+ <a href="http://github-media-downloads.s3.amazonaws.com/GitHub_Logos.zip" class="minibutton btn-download download">Download</a>
1410
+ </li>
1411
+ <li>
1412
+ <h4>The Octocat</h4>
1413
+ <a href="http://github-media-downloads.s3.amazonaws.com/Octocats.zip"><img alt="Octocat" src="https://a248.e.akamai.net/assets.github.com/images/modules/about_page/octocat.png?1329921026" /></a>
1414
+ <a href="http://github-media-downloads.s3.amazonaws.com/Octocats.zip" class="minibutton btn-download download">Download</a>
1415
+ </li>
1416
+ </ul>
1417
+ </div>
1418
+
1419
+
1420
+
1421
+
1422
+ <span id='server_response_time' data-time='0.07302' data-host='fe14'></span>
1423
+ </body>
1424
+ </html>
1425
+