pax_global_header 0000666 0000000 0000000 00000000064 13130715565 0014520 g ustar 00root root 0000000 0000000 52 comment=3e3d99381444379bb0483cb9216caa39ac67bebb asap-2.0.6/ 0000775 0000000 0000000 00000000000 13130715565 0012451 5 ustar 00root root 0000000 0000000 asap-2.0.6/.gitignore 0000664 0000000 0000000 00000000045 13130715565 0014440 0 ustar 00root root 0000000 0000000 /node_modules credentials.json .idea asap-2.0.6/.jshintrc 0000664 0000000 0000000 00000000674 13130715565 0014305 0 ustar 00root root 0000000 0000000 { "browser": true, "node": true, "globalstrict": true, "curly": true, "eqeqeq": true, "newcap": false, "noarg": true, "nonew": true, "quotmark": "double", "strict": true, "trailing": true, "undef": true, "unused": true, "loopfunc": true, "globals": { "setImmediate": false, "performance": false, "Map": true, "Set": true, "URL": true } } asap-2.0.6/.npmignore 0000664 0000000 0000000 00000000047 13130715565 0014451 0 ustar 00root root 0000000 0000000 /credentials.json /test /scripts .idea asap-2.0.6/.travis.yml 0000664 0000000 0000000 00000003361 13130715565 0014565 0 ustar 00root root 0000000 0000000 language: node_js node_js: - '6' script: npm run test-travis env: global: - secure: Q9+xobddxjpTNQNBaJvJSUwFrvWBYt8EVn/d7AxtkzVLnZ6906jjftlmUf5CJ0cxgBTWDKsO+/SxEzHqiYrpvTKlbfqkuzIyiBNN7QcBHej7Xu5dut8uW4gL74R/PXVvAzVnSWJTadqCnLZzjyavVBg+osw6PnXxQffTXjMJKQU= - secure: LLkx7d0YTw1HPh8cYlW3BL79twCFMafmdatwNCWrjFWq3oLTdDqoG15kamev/nDQa+igoM/eXtodTtj9bSa7C/i19QFG3W5RO58yedoHYzzT/0htIC9X8udVuf11yHPyBSMIH8SK5Uw0SD9v6xzf8fKsuhMxBfSzHotEuIQOYrw= - secure: GJmAub8a0/7TpqHXzmCY9KqvglggSKiQFiRmbYggCk6gCz5TEf1okQjnFqepekYzOm6YkJItDXVxkFXjz3XGx/liqEosOpqZ0V7YmgJcI+3VjHD0VbkKHOVPncOv4xRlfVxhWZ+02gneFyulVc7xb4AC9Hn5w7uZH0I/y1N/d1M= - secure: gT+4Qs5MM4OMWYcvYrkTTOXephdXNouhdziJqHy/lOd4ZxpuhA39YSmRudkxjYoIF83D+b9+9Odj17dTSfOY5iHzU+QZ3y6dU2zhZB7L1Rg8sjmFsCV6qjOERvjyO1gAbN5gEI8QF+YoatX74AyySQNw4n+r9K+MdtbOiizggiQ= - secure: brecafurfPr32/3WjfDYiH9N8mzToLAAq9Mvi1ZNdFWbUHyMiLIIgZDgi9WfUBwjncxGhG7Yw3yLIuS8wuwltWZrIIOawMjHoyiZgb/XWMGRZdZxa6RRlycaPcSDmmLWxHcH4JXCqai9WjHPir9i2VQWPM2OZFopdMvAPw0ld04= - secure: SHVGFTwIukwOZS6cp/34x2XnerN/lgEQtYa19NgIQFmCzBbNgMXQ7ondx6le8eZpEJRIROvTfem4fTW62HsT1HMipPcLc8aahCUUQ6HLzVbbit9KE+Y16dqgF2wyHwCNevYitEaWmwPE9HLWpRxA9hswBdgMpGNgoE1zwmQMooQ= - secure: BZwr6wc56OSBiNdnwwHNDWYNo0jRbw3H850m9A0Xy46OSVLmhKAKDAjffNGDiv8k6KNY4W4Ocsk4PM/3Bws7ijAVfA6NrKp7ndRMrXS6LgxV61pIz6E9RsXmCSSIrX0fQTR5HPPGop+gIn7xCYsqwXaUuP9jyIo2kxrGHo9wQqQ= - secure: It/K4ganfz0YL78it8r3j8gyeDvSxAnZ7qpS4jfGnH056rtIs2ysegNkc73BnLclehDNEmxGd0c/jM7/QEnzR0/KYd/EHBuKLuNyhxrfzUZ3Crk/Hz7wCnySPDJKSYnrLcpA/nTM6xkzQAZSILLN256xXSJLt7bO2rNYQ3aBXaI= - secure: IggHzZSM9Z2lqHwQU/PblOwZaSYbRCINTaqJi4OxqZ6uqkteCSWyZbagasvftoS46xmFhPB5OYldcouyrEWd3Ul61rCvY2ROfhX4sIMRKMFd1ICRf9hl3R28ecxul/DhIXjhiQyRII7XNCkkN5BZ0qGhNyeAZqnaQKzPrpI4exA= before_install: - npm update -g npm asap-2.0.6/CHANGES.md 0000664 0000000 0000000 00000005532 13130715565 0014050 0 ustar 00root root 0000000 0000000 ## 2.0.6 Version 2.0.4 adds support for React Native by clarifying in package.json that the browser environment does not support Node.js domains. Why this is necessary, we leave as an exercise for the user. ## 2.0.3 Version 2.0.3 fixes a bug when adjusting the capacity of the task queue. ## 2.0.1-2.02 Version 2.0.1 fixes a bug in the way redirects were expressed that affected the function of Browserify, but which Mr would tolerate. ## 2.0.0 Version 2 of ASAP is a full rewrite with a few salient changes. First, the ASAP source is CommonJS only and designed with [Browserify][] and [Browserify-compatible][Mr] module loaders in mind. [Browserify]: https://github.com/substack/node-browserify [Mr]: https://github.com/montagejs/mr The new version has been refactored in two dimensions. Support for Node.js and browsers have been separated, using Browserify redirects and ASAP has been divided into two modules. The "raw" layer depends on the tasks to catch thrown exceptions and unravel Node.js domains. The full implementation of ASAP is loadable as `require("asap")` in both Node.js and browsers. The raw layer that lacks exception handling overhead is loadable as `require("asap/raw")`. The interface is the same for both layers. Tasks are no longer required to be functions, but can rather be any object that implements `task.call()`. With this feature you can recycle task objects to avoid garbage collector churn and avoid closures in general. The implementation has been rigorously documented so that our successors can understand the scope of the problem that this module solves and all of its nuances, ensuring that the next generation of implementations know what details are essential. - [asap.js](https://github.com/kriskowal/asap/blob/master/asap.js) - [raw.js](https://github.com/kriskowal/asap/blob/master/raw.js) - [browser-asap.js](https://github.com/kriskowal/asap/blob/master/browser-asap.js) - [browser-raw.js](https://github.com/kriskowal/asap/blob/master/browser-raw.js) The new version has also been rigorously tested across a broad spectrum of browsers, in both the window and worker context. The following charts capture the browser test results for the most recent release. The first chart shows test results for ASAP running in the main window context. The second chart shows test results for ASAP running in a web worker context. Test results are inconclusive (grey) on browsers that do not support web workers. These data are captured automatically by [Continuous Integration][].   [Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md asap-2.0.6/CONTRIBUTING.md 0000664 0000000 0000000 00000014125 13130715565 0014705 0 ustar 00root root 0000000 0000000 ## Testing against a spectrum of browsers Testing this library against a spectrum of browsers involves several bits of infrastructure, which are each either very cheap or free for open source projects. You will need an Amazon Web Services (AWS) S3 account, for which you can expect to pay a couple bucks annually. You will also need a SauceLabs account, which is free for open source projects. You will need to populate an `credentials.json` module in the project. Git has been directed to ignore this file to mitigate fears of accidentally sharing your credentials. This configuration file is used both for running browser tests during development and to generate the encrypted configuration for Travis CI (continuous integration). ```json { "S3_USERNAME": "kriskowal", "S3_BUCKET": "kriskowal-asap", "S3_REGION": "Oregon", "S3_WEBSITE": "http://kriskowal-asap.s3-website-us-west-2.amazonaws.com", "S3_ACCESS_KEY_ID": "xxxxxxxxxxxxxxxxxxxx", "S3_ACCESS_KEY": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "SAUCE_EMAIL": "kriskowal@example.com", "SAUCE_USERNAME": "kriskowal-asap", "SAUCE_ACCESS_KEY": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } ``` ### AWS S3 You will need an account for [S3][]. Note your S3 user name under `S3_USERNAME`in `credentials.json`. It is not your email address. It is not mine either. Sign into the console. Click your name and follow the menu to “Security Credentials”. I was unable to figure out how to set up IAM users, but if you do, please come back and amend this document for posterity. Continue to your own security credentials. Expand the “Access Keys” section. Create an access key. Record the Access Key ID under `S3_ACCESS_KEY_ID` in `credentials.json`, and the key itself under `S3_ACCESS_KEY`. These access keys can be revoked if you lose control over them. Create a bucket. Note the name of the bucket as `S3_BUCKET` in `credentials.json`. Open your bucket and select the “Properties” tab. Note the `S3_REGION`, which depends on which datacenter you chose for your bucket. Expand the “Static Website Hosting” section. Note the “Endpoint address” as `S3_WEBSITE`. The test suite will upload a built version of this project to S3 using the `knox` package from npm, and then will use Selenium WebDriver, `wd` in npm, to load the test page from the S3 website. [S3]: aws.amazon.com/s3 ### Manual browser testing This package includes scripts that will create a test bundle and publish it to S3. The bundle can be viewed in a web browser from anywhere on the web. I have found this to be one useful way to run tests in browsers on other physical or virtual machines. ``` npm run test-browser ``` This will open a web browser with the URL where the tests were published. If you are running on a Mac, or have otherwise arranged for `pbcopy` to be emulated on your system, use `npm run test-publish` to publish and copy the URL to your system clipboard. ``` npm run test-publish pbpaste ``` ### Sauce Labs You will need an account with Sauce Labs. If the account will be used for continuous integration for an open source project, apply for an open source account *for your project*. Choose a user name like `montagejs-jasminum`. If you are just using Sauce Labs for testing during development or if you are developing a closed source project, you will need to purchase a plan. If you have a plan, you can create sub-accounts for individual projects. Note your Sauce Labs user name in `credentials.json` under `SAUCE_USERNAME`. Your Sauce Labs access key is visible in the left column of the dashboard. Make a note of it under `SAUCE_ACCESS_KEY`. The dashboard will show all of your Selenium WebDriver sessions. A link in the top left will take you to your “Open Sauce Profile”, a link you can share to show your project's build status. ### Check your local copy To test your working copy, use the command `npm run test-saucelabs`. ``` npm run test-saucelabs npm run test-saucelabs-all # all configurations npm run test-saucealbs-worker # for a web worker test matrix npm run test-saucealbs-worker-all ``` This will read the environment variables in `credentials.json` and then run `scripts/saucelabs.js`, which will in turn orchestrate the creation of a build script, uploading that script to Amazon S3, and the execution of a Selenium WebDriver session on Sauce Labs for each of the `sauce.configurations` in `package.json`, and annotating the test results using the Sauce Labs API. ### Travis Continuous Integration You will probably not need to deal with this portion personally. This package is already set up with Travis, and a commit hook is installed on Github to automatically kick off jobs for any push to the main repository. However, you will need to do these steps if you intend to run tests from your own fork. Take care not to push changes to `.travis.yml` upstream. We use `.travis.yml` to instruct Travis CI to run the Node.js tests and the spectrum of browser tests. The browser tests need the content of your `credentials.json` script, but that information has to be encrypted and appended to `.travis.yml`. To do this you will need the `travis` command line tool and Ruby. Version 2.1.0 of Ruby, installed with [Homebrew][1] was suffiient in my experience. Earlier versions of Ruby, particularly an earlier version packed with the operating system, were not. Gem did not cooperate the first time. It may require multiple attempts. If you find that your experience differs substantially, please ammend these notes for posterity. [1]: http://brew.sh/ ``` gem install travis ``` The enclosed `scripts/encrypt-credentials.js` script uses `travis encrypt` to append the encrypted environment variables to `.travis.yml`. ``` node scripts/encrypt-credentials.js ``` The script is very small and not very clever (that is, not idempotent), so before you run it again, you will need to manually remove the previous environment variables from the end of `.travis.yml`. Obtain an account for [Travis CI][]. From their web interface, under accounts, find your repository and enable continuous integration. Travis will install its commit hook in your repository on your behalf. [Travis CI]: https://travis-ci.org/ asap-2.0.6/LICENSE.md 0000664 0000000 0000000 00000002073 13130715565 0014057 0 ustar 00root root 0000000 0000000 Copyright 2009–2014 Contributors. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. asap-2.0.6/README.md 0000664 0000000 0000000 00000023551 13130715565 0013736 0 ustar 00root root 0000000 0000000 # ASAP [](https://travis-ci.org/kriskowal/asap) Promise and asynchronous observer libraries, as well as hand-rolled callback programs and libraries, often need a mechanism to postpone the execution of a callback until the next available event. (See [Designing API’s for Asynchrony][Zalgo].) The `asap` function executes a task **as soon as possible** but not before it returns, waiting only for the completion of the current event and previously scheduled tasks. ```javascript asap(function () { // ... }); ``` [Zalgo]: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony This CommonJS package provides an `asap` module that exports a function that executes a task function *as soon as possible*. ASAP strives to schedule events to occur before yielding for IO, reflow, or redrawing. Each event receives an independent stack, with only platform code in parent frames and the events run in the order they are scheduled. ASAP provides a fast event queue that will execute tasks until it is empty before yielding to the JavaScript engine's underlying event-loop. When a task gets added to a previously empty event queue, ASAP schedules a flush event, preferring for that event to occur before the JavaScript engine has an opportunity to perform IO tasks or rendering, thus making the first task and subsequent tasks semantically indistinguishable. ASAP uses a variety of techniques to preserve this invariant on different versions of browsers and Node.js. By design, ASAP prevents input events from being handled until the task queue is empty. If the process is busy enough, this may cause incoming connection requests to be dropped, and may cause existing connections to inform the sender to reduce the transmission rate or stall. ASAP allows this on the theory that, if there is enough work to do, there is no sense in looking for trouble. As a consequence, ASAP can interfere with smooth animation. If your task should be tied to the rendering loop, consider using `requestAnimationFrame` instead. A long sequence of tasks can also effect the long running script dialog. If this is a problem, you may be able to use ASAP’s cousin `setImmediate` to break long processes into shorter intervals and periodically allow the browser to breathe. `setImmediate` will yield for IO, reflow, and repaint events. It also returns a handler and can be canceled. For a `setImmediate` shim, consider [YuzuJS setImmediate][setImmediate]. [setImmediate]: https://github.com/YuzuJS/setImmediate Take care. ASAP can sustain infinite recursive calls without warning. It will not halt from a stack overflow, and it will not consume unbounded memory. This is behaviorally equivalent to an infinite loop. Just as with infinite loops, you can monitor a Node.js process for this behavior with a heart-beat signal. As with infinite loops, a very small amount of caution goes a long way to avoiding problems. ```javascript function loop() { asap(loop); } loop(); ``` In browsers, if a task throws an exception, it will not interrupt the flushing of high-priority tasks. The exception will be postponed to a later, low-priority event to avoid slow-downs. In Node.js, if a task throws an exception, ASAP will resume flushing only if—and only after—the error is handled by `domain.on("error")` or `process.on("uncaughtException")`. ## Raw ASAP Checking for exceptions comes at a cost. The package also provides an `asap/raw` module that exports the underlying implementation which is faster but stalls if a task throws an exception. This internal version of the ASAP function does not check for errors. If a task does throw an error, it will stall the event queue unless you manually call `rawAsap.requestFlush()` before throwing the error, or any time after. In Node.js, `asap/raw` also runs all tasks outside any domain. If you need a task to be bound to your domain, you will have to do it manually. ```js if (process.domain) { task = process.domain.bind(task); } rawAsap(task); ``` ## Tasks A task may be any object that implements `call()`. A function will suffice, but closures tend not to be reusable and can cause garbage collector churn. Both `asap` and `rawAsap` accept task objects to give you the option of recycling task objects or using higher callable object abstractions. See the `asap` source for an illustration. ## Compatibility ASAP is tested on Node.js v0.10 and in a broad spectrum of web browsers. The following charts capture the browser test results for the most recent release. The first chart shows test results for ASAP running in the main window context. The second chart shows test results for ASAP running in a web worker context. Test results are inconclusive (grey) on browsers that do not support web workers. These data are captured automatically by [Continuous Integration][]. [Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md   ## Caveats When a task is added to an empty event queue, it is not always possible to guarantee that the task queue will begin flushing immediately after the current event. However, once the task queue begins flushing, it will not yield until the queue is empty, even if the queue grows while executing tasks. The following browsers allow the use of [DOM mutation observers][] to access the HTML [microtask queue][], and thus begin flushing ASAP's task queue immediately at the end of the current event loop turn, before any rendering or IO: [microtask queue]: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#microtask-queue [DOM mutation observers]: http://dom.spec.whatwg.org/#mutation-observers - Android 4–4.3 - Chrome 26–34 - Firefox 14–29 - Internet Explorer 11 - iPad Safari 6–7.1 - iPhone Safari 7–7.1 - Safari 6–7 In the absense of mutation observers, there are a few browsers, and situations like web workers in some of the above browsers, where [message channels][] would be a useful way to avoid falling back to timers. Message channels give direct access to the HTML [task queue][], so the ASAP task queue would flush after any already queued rendering and IO tasks, but without having the minimum delay imposed by timers. However, among these browsers, Internet Explorer 10 and Safari do not reliably dispatch messages, so they are not worth the trouble to implement. [message channels]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#message-channels [task queue]: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#concept-task - Internet Explorer 10 - Safair 5.0-1 - Opera 11-12 In the absense of mutation observers, these browsers and the following browsers all fall back to using `setTimeout` and `setInterval` to ensure that a `flush` occurs. The implementation uses both and cancels whatever handler loses the race, since `setTimeout` tends to occasionally skip tasks in unisolated circumstances. Timers generally delay the flushing of ASAP's task queue for four milliseconds. - Firefox 3–13 - Internet Explorer 6–10 - iPad Safari 4.3 - Lynx 2.8.7 ## Heritage ASAP has been factored out of the [Q][] asynchronous promise library. It originally had a naïve implementation in terms of `setTimeout`, but [Malte Ubl][NonBlocking] provided an insight that `postMessage` might be useful for creating a high-priority, no-delay event dispatch hack. Since then, Internet Explorer proposed and implemented `setImmediate`. Robert Katić began contributing to Q by measuring the performance of the internal implementation of `asap`, paying particular attention to error recovery. Domenic, Robert, and Kris Kowal collectively settled on the current strategy of unrolling the high-priority event queue internally regardless of what strategy we used to dispatch the potentially lower-priority flush event. Domenic went on to make ASAP cooperate with Node.js domains. [Q]: https://github.com/kriskowal/q [NonBlocking]: http://www.nonblocking.io/2011/06/windownexttick.html For further reading, Nicholas Zakas provided a thorough article on [The Case for setImmediate][NCZ]. [NCZ]: http://www.nczonline.net/blog/2013/07/09/the-case-for-setimmediate/ Ember’s RSVP promise implementation later [adopted][RSVP ASAP] the name ASAP but further developed the implentation. Particularly, The `MessagePort` implementation was abandoned due to interaction [problems with Mobile Internet Explorer][IE Problems] in favor of an implementation backed on the newer and more reliable DOM `MutationObserver` interface. These changes were back-ported into this library. [IE Problems]: https://github.com/cujojs/when/issues/197 [RSVP ASAP]: https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js In addition, ASAP factored into `asap` and `asap/raw`, such that `asap` remained exception-safe, but `asap/raw` provided a tight kernel that could be used for tasks that guaranteed that they would not throw exceptions. This core is useful for promise implementations that capture thrown errors in rejected promises and do not need a second safety net. At the same time, the exception handling in `asap` was factored into separate implementations for Node.js and browsers, using the the [Browserify][Browser Config] `browser` property in `package.json` to instruct browser module loaders and bundlers, including [Browserify][], [Mr][], and [Mop][], to use the browser-only implementation. [Browser Config]: https://gist.github.com/defunctzombie/4339901 [Browserify]: https://github.com/substack/node-browserify [Mr]: https://github.com/montagejs/mr [Mop]: https://github.com/montagejs/mop ## License Copyright 2009-2014 by Contributors MIT License (enclosed) asap-2.0.6/asap.js 0000664 0000000 0000000 00000003646 13130715565 0013744 0 ustar 00root root 0000000 0000000 "use strict"; var rawAsap = require("./raw"); var freeTasks = []; /** * Calls a task as soon as possible after returning, in its own event, with * priority over IO events. An exception thrown in a task can be handled by * `process.on("uncaughtException") or `domain.on("error")`, but will otherwise * crash the process. If the error is handled, all subsequent tasks will * resume. * * @param {{call}} task A callable object, typically a function that takes no * arguments. */ module.exports = asap; function asap(task) { var rawTask; if (freeTasks.length) { rawTask = freeTasks.pop(); } else { rawTask = new RawTask(); } rawTask.task = task; rawTask.domain = process.domain; rawAsap(rawTask); } function RawTask() { this.task = null; this.domain = null; } RawTask.prototype.call = function () { if (this.domain) { this.domain.enter(); } var threw = true; try { this.task.call(); threw = false; // If the task throws an exception (presumably) Node.js restores the // domain stack for the next event. if (this.domain) { this.domain.exit(); } } finally { // We use try/finally and a threw flag to avoid messing up stack traces // when we catch and release errors. if (threw) { // In Node.js, uncaught exceptions are considered fatal errors. // Re-throw them to interrupt flushing! // Ensure that flushing continues if an uncaught exception is // suppressed listening process.on("uncaughtException") or // domain.on("error"). rawAsap.requestFlush(); } // If the task threw an error, we do not want to exit the domain here. // Exiting the domain would prevent the domain from catching the error. this.task = null; this.domain = null; freeTasks.push(this); } }; asap-2.0.6/benchmarks/ 0000775 0000000 0000000 00000000000 13130715565 0014566 5 ustar 00root root 0000000 0000000 asap-2.0.6/benchmarks/drain.js 0000664 0000000 0000000 00000000474 13130715565 0016226 0 ustar 00root root 0000000 0000000 var benchmark = require("./scaffold"); var asap = require("../asap"); benchmark.time("Drain", function (done) { var pending = 100; for (var i = 0; i < 100; ++i) { asap(function () { --pending; if (pending === 0) { done(); } }); } }); asap-2.0.6/benchmarks/index.js 0000664 0000000 0000000 00000000131 13130715565 0016226 0 ustar 00root root 0000000 0000000 var drain = require("./drain"); var benchmark = require("./scaffold"); benchmark.run(); asap-2.0.6/benchmarks/scaffold.js 0000664 0000000 0000000 00000001077 13130715565 0016712 0 ustar 00root root 0000000 0000000 var Benchmark = require("benchmark"); var suite = new Benchmark.Suite({ onCycle: function (event) { console.log("" + event.target); } }); function addTimer(s, f) { suite.add(s, function (deferred) { f(function () { deferred.resolve(); }); }, { defer: true }); } function time(s, f) { // This is to make sure that the function doesn't // have any errors before benchmarking it f(function () {}); addTimer(s, f); } function run() { suite.run(); } exports.time = time; exports.run = run; asap-2.0.6/browser-asap.js 0000664 0000000 0000000 00000004210 13130715565 0015411 0 ustar 00root root 0000000 0000000 "use strict"; // rawAsap provides everything we need except exception management. var rawAsap = require("./raw"); // RawTasks are recycled to reduce GC churn. var freeTasks = []; // We queue errors to ensure they are thrown in right order (FIFO). // Array-as-queue is good enough here, since we are just dealing with exceptions. var pendingErrors = []; var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError); function throwFirstError() { if (pendingErrors.length) { throw pendingErrors.shift(); } } /** * Calls a task as soon as possible after returning, in its own event, with priority * over other events like animation, reflow, and repaint. An error thrown from an * event will not interrupt, nor even substantially slow down the processing of * other events, but will be rather postponed to a lower priority event. * @param {{call}} task A callable object, typically a function that takes no * arguments. */ module.exports = asap; function asap(task) { var rawTask; if (freeTasks.length) { rawTask = freeTasks.pop(); } else { rawTask = new RawTask(); } rawTask.task = task; rawAsap(rawTask); } // We wrap tasks with recyclable task objects. A task object implements // `call`, just like a function. function RawTask() { this.task = null; } // The sole purpose of wrapping the task is to catch the exception and recycle // the task object after its single use. RawTask.prototype.call = function () { try { this.task.call(); } catch (error) { if (asap.onerror) { // This hook exists purely for testing purposes. // Its name will be periodically randomized to break any code that // depends on its existence. asap.onerror(error); } else { // In a web browser, exceptions are not fatal. However, to avoid // slowing down the queue of pending tasks, we rethrow the error in a // lower priority turn. pendingErrors.push(error); requestErrorThrow(); } } finally { this.task = null; freeTasks[freeTasks.length] = this; } }; asap-2.0.6/browser-raw.js 0000664 0000000 0000000 00000022616 13130715565 0015270 0 ustar 00root root 0000000 0000000 "use strict"; // Use the fastest means possible to execute a task in its own turn, with // priority over other events including IO, animation, reflow, and redraw // events in browsers. // // An exception thrown by a task will permanently interrupt the processing of // subsequent tasks. The higher level `asap` function ensures that if an // exception is thrown by a task, that the task queue will continue flushing as // soon as possible, but if you use `rawAsap` directly, you are responsible to // either ensure that no exceptions are thrown from your task, or to manually // call `rawAsap.requestFlush` if an exception is thrown. module.exports = rawAsap; function rawAsap(task) { if (!queue.length) { requestFlush(); flushing = true; } // Equivalent to push, but avoids a function call. queue[queue.length] = task; } var queue = []; // Once a flush has been requested, no further calls to `requestFlush` are // necessary until the next `flush` completes. var flushing = false; // `requestFlush` is an implementation-specific method that attempts to kick // off a `flush` event as quickly as possible. `flush` will attempt to exhaust // the event queue before yielding to the browser's own event loop. var requestFlush; // The position of the next task to execute in the task queue. This is // preserved between calls to `flush` so that it can be resumed if // a task throws an exception. var index = 0; // If a task schedules additional tasks recursively, the task queue can grow // unbounded. To prevent memory exhaustion, the task queue will periodically // truncate already-completed tasks. var capacity = 1024; // The flush function processes all tasks that have been scheduled with // `rawAsap` unless and until one of those tasks throws an exception. // If a task throws an exception, `flush` ensures that its state will remain // consistent and will resume where it left off when called again. // However, `flush` does not make any arrangements to be called again if an // exception is thrown. function flush() { while (index < queue.length) { var currentIndex = index; // Advance the index before calling the task. This ensures that we will // begin flushing on the next task the task throws an error. index = index + 1; queue[currentIndex].call(); // Prevent leaking memory for long chains of recursive calls to `asap`. // If we call `asap` within tasks scheduled by `asap`, the queue will // grow, but to avoid an O(n) walk for every task we execute, we don't // shift tasks off the queue after they have been executed. // Instead, we periodically shift 1024 tasks off the queue. if (index > capacity) { // Manually shift all values starting at the index back to the // beginning of the queue. for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { queue[scan] = queue[scan + index]; } queue.length -= index; index = 0; } } queue.length = 0; index = 0; flushing = false; } // `requestFlush` is implemented using a strategy based on data collected from // every available SauceLabs Selenium web driver worker at time of writing. // https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593 // Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that // have WebKitMutationObserver but not un-prefixed MutationObserver. // Must use `global` or `self` instead of `window` to work in both frames and web // workers. `global` is a provision of Browserify, Mr, Mrs, or Mop. /* globals self */ var scope = typeof global !== "undefined" ? global : self; var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver; // MutationObservers are desirable because they have high priority and work // reliably everywhere they are implemented. // They are implemented in all modern browsers. // // - Android 4-4.3 // - Chrome 26-34 // - Firefox 14-29 // - Internet Explorer 11 // - iPad Safari 6-7.1 // - iPhone Safari 7-7.1 // - Safari 6-7 if (typeof BrowserMutationObserver === "function") { requestFlush = makeRequestCallFromMutationObserver(flush); // MessageChannels are desirable because they give direct access to the HTML // task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera // 11-12, and in web workers in many engines. // Although message channels yield to any queued rendering and IO tasks, they // would be better than imposing the 4ms delay of timers. // However, they do not work reliably in Internet Explorer or Safari. // Internet Explorer 10 is the only browser that has setImmediate but does // not have MutationObservers. // Although setImmediate yields to the browser's renderer, it would be // preferrable to falling back to setTimeout since it does not have // the minimum 4ms penalty. // Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and // Desktop to a lesser extent) that renders both setImmediate and // MessageChannel useless for the purposes of ASAP. // https://github.com/kriskowal/q/issues/396 // Timers are implemented universally. // We fall back to timers in workers in most engines, and in foreground // contexts in the following browsers. // However, note that even this simple case requires nuances to operate in a // broad spectrum of browsers. // // - Firefox 3-13 // - Internet Explorer 6-9 // - iPad Safari 4.3 // - Lynx 2.8.7 } else { requestFlush = makeRequestCallFromTimer(flush); } // `requestFlush` requests that the high priority event queue be flushed as // soon as possible. // This is useful to prevent an error thrown in a task from stalling the event // queue if the exception handled by Node.js’s // `process.on("uncaughtException")` or by a domain. rawAsap.requestFlush = requestFlush; // To request a high priority event, we induce a mutation observer by toggling // the text of a text node between "1" and "-1". function makeRequestCallFromMutationObserver(callback) { var toggle = 1; var observer = new BrowserMutationObserver(callback); var node = document.createTextNode(""); observer.observe(node, {characterData: true}); return function requestCall() { toggle = -toggle; node.data = toggle; }; } // The message channel technique was discovered by Malte Ubl and was the // original foundation for this library. // http://www.nonblocking.io/2011/06/windownexttick.html // Safari 6.0.5 (at least) intermittently fails to create message ports on a // page's first load. Thankfully, this version of Safari supports // MutationObservers, so we don't need to fall back in that case. // function makeRequestCallFromMessageChannel(callback) { // var channel = new MessageChannel(); // channel.port1.onmessage = callback; // return function requestCall() { // channel.port2.postMessage(0); // }; // } // For reasons explained above, we are also unable to use `setImmediate` // under any circumstances. // Even if we were, there is another bug in Internet Explorer 10. // It is not sufficient to assign `setImmediate` to `requestFlush` because // `setImmediate` must be called *by name* and therefore must be wrapped in a // closure. // Never forget. // function makeRequestCallFromSetImmediate(callback) { // return function requestCall() { // setImmediate(callback); // }; // } // Safari 6.0 has a problem where timers will get lost while the user is // scrolling. This problem does not impact ASAP because Safari 6.0 supports // mutation observers, so that implementation is used instead. // However, if we ever elect to use timers in Safari, the prevalent work-around // is to add a scroll event listener that calls for a flush. // `setTimeout` does not call the passed callback if the delay is less than // approximately 7 in web workers in Firefox 8 through 18, and sometimes not // even then. function makeRequestCallFromTimer(callback) { return function requestCall() { // We dispatch a timeout with a specified delay of 0 for engines that // can reliably accommodate that request. This will usually be snapped // to a 4 milisecond delay, but once we're flushing, there's no delay // between events. var timeoutHandle = setTimeout(handleTimer, 0); // However, since this timer gets frequently dropped in Firefox // workers, we enlist an interval handle that will try to fire // an event 20 times per second until it succeeds. var intervalHandle = setInterval(handleTimer, 50); function handleTimer() { // Whichever timer succeeds will cancel both timers and // execute the callback. clearTimeout(timeoutHandle); clearInterval(intervalHandle); callback(); } }; } // This is for `asap.js` only. // Its name will be periodically randomized to break any code that depends on // its existence. rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer; // ASAP was originally a nextTick shim included in Q. This was factored out // into this ASAP package. It was later adapted to RSVP which made further // amendments. These decisions, particularly to marginalize MessageChannel and // to capture the MutationObserver implementation in a closure, were integrated // back into ASAP proper. // https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js asap-2.0.6/package.json 0000664 0000000 0000000 00000003627 13130715565 0014747 0 ustar 00root root 0000000 0000000 { "name": "asap", "version": "2.0.6", "description": "High-priority task queue for Node.js and browsers", "keywords": [ "event", "task", "queue" ], "license": "MIT", "repository": { "type": "git", "url": "https://github.com/kriskowal/asap.git" }, "main": "./asap.js", "browser": { "./asap": "./browser-asap.js", "./asap.js": "./browser-asap.js", "./raw": "./browser-raw.js", "./raw.js": "./browser-raw.js", "./test/domain.js": "./test/browser-domain.js" }, "react-native": { "domain": false }, "files": [ "raw.js", "asap.js", "browser-raw.js", "browser-asap.js" ], "scripts": { "test": "npm run lint && npm run test-node", "test-travis": "npm run lint && npm run test-node && npm run test-saucelabs && npm run test-saucelabs-worker", "test-node": "node test/asap-test.js", "test-publish": "node scripts/publish-bundle.js test/asap-test.js | pbcopy", "test-browser": "node scripts/publish-bundle.js test/asap-test.js | xargs opener", "test-saucelabs": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-spot-configurations.json", "test-saucelabs-all": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-all-configurations.json", "test-saucelabs-worker": "node scripts/saucelabs-worker-test.js scripts/saucelabs-spot-configurations.json", "test-saucelabs-worker-all": "node scripts/saucelabs-worker-test.js scripts/saucelabs-all-configurations.json", "lint": "jshint raw.js asap.js browser-raw.js browser-asap.js $(find scripts -name '*.js' | grep -v gauntlet)", "benchmarks": "node benchmarks" }, "devDependencies": { "events": "^1.0.1", "jshint": "^2.5.1", "knox": "^0.8.10", "mr": "^2.0.5", "opener": "^1.3.0", "q": "^2.0.3", "q-io": "^2.0.3", "saucelabs": "^0.1.1", "wd": "^0.2.21", "weak-map": "^1.0.5", "benchmark": "^1.0.0" } } asap-2.0.6/raw.js 0000664 0000000 0000000 00000010053 13130715565 0013577 0 ustar 00root root 0000000 0000000 "use strict"; var domain; // The domain module is executed on demand var hasSetImmediate = typeof setImmediate === "function"; // Use the fastest means possible to execute a task in its own turn, with // priority over other events including network IO events in Node.js. // // An exception thrown by a task will permanently interrupt the processing of // subsequent tasks. The higher level `asap` function ensures that if an // exception is thrown by a task, that the task queue will continue flushing as // soon as possible, but if you use `rawAsap` directly, you are responsible to // either ensure that no exceptions are thrown from your task, or to manually // call `rawAsap.requestFlush` if an exception is thrown. module.exports = rawAsap; function rawAsap(task) { if (!queue.length) { requestFlush(); flushing = true; } // Avoids a function call queue[queue.length] = task; } var queue = []; // Once a flush has been requested, no further calls to `requestFlush` are // necessary until the next `flush` completes. var flushing = false; // The position of the next task to execute in the task queue. This is // preserved between calls to `flush` so that it can be resumed if // a task throws an exception. var index = 0; // If a task schedules additional tasks recursively, the task queue can grow // unbounded. To prevent memory excaustion, the task queue will periodically // truncate already-completed tasks. var capacity = 1024; // The flush function processes all tasks that have been scheduled with // `rawAsap` unless and until one of those tasks throws an exception. // If a task throws an exception, `flush` ensures that its state will remain // consistent and will resume where it left off when called again. // However, `flush` does not make any arrangements to be called again if an // exception is thrown. function flush() { while (index < queue.length) { var currentIndex = index; // Advance the index before calling the task. This ensures that we will // begin flushing on the next task the task throws an error. index = index + 1; queue[currentIndex].call(); // Prevent leaking memory for long chains of recursive calls to `asap`. // If we call `asap` within tasks scheduled by `asap`, the queue will // grow, but to avoid an O(n) walk for every task we execute, we don't // shift tasks off the queue after they have been executed. // Instead, we periodically shift 1024 tasks off the queue. if (index > capacity) { // Manually shift all values starting at the index back to the // beginning of the queue. for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { queue[scan] = queue[scan + index]; } queue.length -= index; index = 0; } } queue.length = 0; index = 0; flushing = false; } rawAsap.requestFlush = requestFlush; function requestFlush() { // Ensure flushing is not bound to any domain. // It is not sufficient to exit the domain, because domains exist on a stack. // To execute code outside of any domain, the following dance is necessary. var parentDomain = process.domain; if (parentDomain) { if (!domain) { // Lazy execute the domain module. // Only employed if the user elects to use domains. domain = require("domain"); } domain.active = process.domain = null; } // `setImmediate` is slower that `process.nextTick`, but `process.nextTick` // cannot handle recursion. // `requestFlush` will only be called recursively from `asap.js`, to resume // flushing after an error is thrown into a domain. // Conveniently, `setImmediate` was introduced in the same version // `process.nextTick` started throwing recursion errors. if (flushing && hasSetImmediate) { setImmediate(flush); } else { process.nextTick(flush); } if (parentDomain) { domain.active = process.domain = parentDomain; } } asap-2.0.6/scripts/ 0000775 0000000 0000000 00000000000 13130715565 0014140 5 ustar 00root root 0000000 0000000 asap-2.0.6/scripts/analyze-configurations.js 0000664 0000000 0000000 00000003061 13130715565 0021171 0 ustar 00root root 0000000 0000000 "use strict"; var configurations = require("./saucelabs-all-configurations.json"); var Set = require("collections/set"); var Map = require("collections/map"); var List = require("collections/list"); var browsers = new Map(new Map(new List(configurations).group(function (configuration) { return configuration.browserName; })).map(function (value, key) { return [key, new Set(value.filter(function (configuration) { return configuration.version !== "beta"; }).map(function (configuration) { return [configuration.version.split(".").map(function (number) { if (+number === +number) { return +number; } else { return number; } }), configuration.browserName]; }).sorted().map(function (pair) { return pair[1] + ":" + pair[0].join("."); })).map(function (configuration) { var pair = configuration.split(":"); return { browserName: pair[0], version: pair[1] }; })]; })).toObject(); var platforms = new Map(new Set(configurations.map(function (configuration) { return configuration.platform; })).group(function (configuration) { if (configuration.indexOf("Windows") >= 0) { return "windows"; } else if (configuration.indexOf("Mac") >= 0) { return "mac"; } else if (configuration.indexOf("Linux") >= 0) { return "linux"; } else { return "other"; } })).toObject(); console.log(JSON.stringify({ platforms: platforms, browsers: browsers }, null, 4)); asap-2.0.6/scripts/annotations.js 0000664 0000000 0000000 00000006574 13130715565 0017047 0 ustar 00root root 0000000 0000000 "use strict"; var FS = require("q-io/fs"); var ChildProcess = require("child_process"); var NodeReader = require("q-io/node/reader"); // Creates an annotations object for the working copy of the current Git // repository, suitable for determining where to publish a build on S3, // and for annotating a Selenium WebDriver session. // // If the repository is clean, tagged, and the tag matches the version in // package.json, produces a release annotation. // // If the repository is clean, produces an integration testing annotation, // based on the last commit hash. // // If the repository is dirty, produces a development testing annotation, // based on the last commit hash and a randomly generated nonce to avoid // overlap with other developer testing deployments. module.exports = getAnnotations; function getAnnotations() { return getGitHash("HEAD").then(function (hash) { return gitIsClean().then(function (gitIsClean) { if (gitIsClean) { return FS.read("package.json", {charset: "utf-8"}) .then(function (configJson) { var config = JSON.parse(configJson); return getGitHash("v" + config.version).then(function (vHash) { var parts = config.version.split("."); var major = parts[0]; if (hash === vHash) { return { type: "release", tags: ["release", "v" + config.version], hash: hash, version: config.version, build: "v" + config.version, train: "v" + major, path: "release/" + config.version + "/", trainPath: "train/release-" + major + "/" }; } else { return { type: "integration", tags: ["integration", hash.slice(0, 7)], hash: hash, build: hash.slice(0, 7), path: "integration/" + hash + "/", trainPath: "train/integration-" + major + "/" }; } }); }); } else { var nonce = Math.random().toString(36).slice(2, 7); return { type: "development", tags: ["development", hash.slice(0, 7), nonce], hash: hash, nonce: nonce, build: hash.slice(0, 7) + "-" + nonce, path: "development/" + hash + "-" + nonce + "/", trainPath: "train/development/" }; } }); }); } function getGitHash(rev) { var git = ChildProcess.spawn("git", ["rev-parse", rev]); var out = NodeReader(git.stdout, "utf-8"); return out.read().then(function (line) { return line.trim(); }); } function gitIsClean() { var git = ChildProcess.spawn("git", ["status", "--porcelain"]); var out = NodeReader(git.stdout, "utf-8"); return out.read().then(function (line) { return line.trim() === ""; }); } asap-2.0.6/scripts/credentials.js 0000664 0000000 0000000 00000001062 13130715565 0016772 0 ustar 00root root 0000000 0000000 "use strict"; var FS = require("q-io/fs"); module.exports = getCredentials; function getCredentials(credentialsPath) { return FS.read(credentialsPath || "credentials.json", {charset: "utf-8"}) .then(JSON.parse, function () { if (!process.env.TRAVIS) { throw new Error("Can't find credentials.json in the working directory, nor a TRAVIS environment"); } else { // TravisCI will acquire the encrypted configuration through environment // variables. return process.env; } }); } asap-2.0.6/scripts/encrypt-credentials.js 0000664 0000000 0000000 00000001552 13130715565 0020460 0 ustar 00root root 0000000 0000000 "use strict"; var Q = require("q"); var ChildProcess = require("child_process"); var Reader = require("q-io/reader"); var getCredentials = require("./credentials"); getCredentials() .then(function (credentials) { return new Reader(Object.keys(credentials)) .forEach(function (key) { var value = credentials[key]; console.log(key); return encrypt(key, value); }); }) .done(); function encrypt(key, value) { var deferred = Q.defer(); var git = ChildProcess.spawn("travis", [ "encrypt", "--add", "env.global", key + "=" + value ], { stdio: [0, 1, 2] }); git.on("exit", function (code) { if (code) { deferred.reject(new Error("Exit with status " + code)); } else { deferred.resolve(); } }); return deferred.promise; } asap-2.0.6/scripts/event-queue-query.js 0000664 0000000 0000000 00000000420 13130715565 0020100 0 ustar 00root root 0000000 0000000 "use strict"; window.global_test_results = { webkitmutationobserver: typeof WebKitMutationObserver, mutationobserver: typeof MutationObserver, messagechannel: typeof MessageChannel, setimmediate: typeof setImmediate, settimeout: typeof setTimeout }; asap-2.0.6/scripts/gauntlet.js 0000664 0000000 0000000 00003231320 13130715565 0016325 0 ustar 00root root 0000000 0000000 "use strict"; module.exports = gauntlet; function gauntlet(asap, subjectName, done) { //var subjects = [nestedLoop4096, nested1024, tree4096, queued4096]; var names = ["nested loop 4096", "nested 128", "queue 4096", "tree 4096"]; var subjects = [nestedLoop4096, nested128, queued4096, tree4096]; var results = []; var index = 0; next(); function next() { if (index < subjects.length) { var name = names[index]; var subject = subjects[index++]; console.log("> " + name); sample(subject, asap, 1000, 100, function (error, result) { if (error) { done(error); } else { result.name = name; results.push(result); next(); } }); } else { done(null, results); } } } var now; if (typeof process !== "undefined") { var offset = process.hrtime()[0]; now = function () { var parts = process.hrtime(); return (parts[0] - offset) * 1e3 + parts[1] / 1e6; }; } else if (typeof performance !== "undefined") { now = function () { return performance.now(); }; } else { now = function () { return Date.now(); }; } // measures the duration of one iteration function measure(test, done) { var start = now(); test(function (error, results) { var stop = now(); done(error, results, stop - start); }); } // measures iterations of the test for a duration, maintaining a representative // sample of the measurements up to a given size function sample(test, asap, minDuration, sampleSize, done) { var count = 0; var totalDuration = 0; var sampleDurations = []; next(); function next() { measure(function (done) { test(asap, done); }, function (error, results, duration) { if (error) { done(error); } if (sampleDurations.length < sampleSize) { sampleDurations.push(duration); } else if (Math.random() < 1 / count) { sampleDurations.splice(Math.floor(Math.random() * sampleDurations.length), 1); sampleDurations.push(duration); } totalDuration += duration; count++; if (totalDuration >= minDuration) { done(null, { name: test.name, subjectName: asap.name, count: count, totalDuration: totalDuration, averageFrequency: count / totalDuration, averageDuration: totalDuration / count, averageOpsHz: count / totalDuration, sampleDurations: sampleDurations }); } else { next(); } }); } } function nestedLoop4096(asap, done) { var next = done; for (var index = 0; index < 4096; index++) { next = (function (next) { return function () { asap(next); }; })(next); } next(); } function nested128(asap, done) { phase0(function () { phase1(function () { phase2(function () { phase3(done); }); }); }); function phase0(done) { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { done(); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); } function phase1(done) { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { done(); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); } function phase2(done) { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { done(); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); } function phase3(done) { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { done(); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); } } function queued4096(asap, done) { asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); asap(function () {check();}); var counter = 0; function check() { if (++counter === 4096) { done(); } } } function tree4096(asap, done) { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); asap(function () { asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); asap(function () { asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); asap(function () { asap(function () { asap(poll); asap(poll); }); asap(function () { asap(poll); asap(poll); }); }); }); }); }); }); }); }); }); }); }); }); var counter = 0; function poll() { if (++counter === 4096) { done(); } } } asap-2.0.6/scripts/publish-bundle.js 0000664 0000000 0000000 00000002430 13130715565 0017412 0 ustar 00root root 0000000 0000000 "use strict"; var Q = require("q"); var URL = require("url"); var build = require("mr/build"); var getCredentials = require("./credentials"); var S3 = require("./s3"); module.exports = publishBundle; function publishBundle(modulePath, targetPath, credentials) { targetPath = targetPath || getAdhocTargetPath(); return Q([ credentials || getCredentials(), build(modulePath) ]).spread(function (credentials, script) { var s3 = new S3({ bucket: credentials.S3_BUCKET, key: credentials.S3_ACCESS_KEY_ID, secret: credentials.S3_ACCESS_KEY }); script = new Buffer(script, "utf-8"); var page = new Buffer("
"); return Q.all([ s3.put(URL.resolve(targetPath, "test.js"), script, "application/javascript"), s3.put(URL.resolve(targetPath, "test.html"), page, "text/html") ]).then(function () { return URL.resolve(URL.resolve(credentials.S3_WEBSITE, targetPath), "test.html"); }); }); } function getAdhocTargetPath() { var nonce = Math.random().toString(36).slice(2, 7); return "adhoc/" + nonce + "/"; } if (require.main === module) { return publishBundle(process.argv[2]).done(console.log); } asap-2.0.6/scripts/publish-worker-test.js 0000664 0000000 0000000 00000002676 13130715565 0020443 0 ustar 00root root 0000000 0000000 "use strict"; var Q = require("q"); var FS = require("q-io/fs"); var URL = require("url"); var build = require("mr/build"); var getCredentials = require("./credentials"); var S3 = require("./s3"); module.exports = publishWorkerTest; function publishWorkerTest() { var targetPath = targetPath || getAdhocTargetPath(); return Q([ getCredentials(), build(FS.join("test/asap-test.js")), build(FS.join("test/worker.js")), ]).spread(function (credentials, workerScript, testScript) { var s3 = new S3({ bucket: credentials.S3_BUCKET, key: credentials.S3_ACCESS_KEY_ID, secret: credentials.S3_ACCESS_KEY }); workerScript = new Buffer(workerScript, "utf-8"); var page = new Buffer(""); return Q.all([ s3.put(URL.resolve(targetPath, "test.js"), testScript, "application/javascript"), s3.put(URL.resolve(targetPath, "worker.js"), workerScript, "application/javascript"), s3.put(URL.resolve(targetPath, "test.html"), page, "text/html") ]).then(function () { return URL.resolve(URL.resolve(credentials.S3_WEBSITE, targetPath), "test.html"); }); }); } function getAdhocTargetPath() { var nonce = Math.random().toString(36).slice(2, 7); return "adhoc/" + nonce + "/"; } if (require.main === module) { publishWorkerTest().done(console.log); } asap-2.0.6/scripts/run-gauntlet.js 0000664 0000000 0000000 00000001305 13130715565 0017122 0 ustar 00root root 0000000 0000000 "use strict"; var gauntlet = require("./gauntlet"); var asap = require("../asap"); var rawAsap = require("../raw"); console.log(rawAsap.requestFlush); gauntlet(asap, "asap", function (error, asapResults) { if (error) { global.global_test_results = {error: error}; throw error; } gauntlet(rawAsap, "raw asap", function (error, rawAsapResults) { var results = asapResults.concat(rawAsapResults); results.forEach(function (result) { console.log(result.subjectName, result.name, ((result.count / result.totalDuration) * 1000).toFixed(0), "ops/sec"); }); global.global_test_results = { results: results }; }); }); asap-2.0.6/scripts/s3.js 0000664 0000000 0000000 00000002003 13130715565 0015016 0 ustar 00root root 0000000 0000000 "use strict"; var Q = require("q"); var knox = require("knox"); module.exports = S3; function S3(config) { this.knox = knox.createClient(config); } S3.prototype.put = function (path, content, contentType, moreHeaders) { var deferred = Q.defer(); var headers = { "Content-Length": content.length, "Content-type": contentType, "x-amz-acl": "public-read" }; for (var name in moreHeaders) { headers[name] = moreHeaders[name]; } var request = this.knox.put(path, headers); request.on("response", function (response) { if (response.statusCode === 200) { // alt: response.resume(); // does not appear to have any content typically response.pipe(process.stderr); response.on("end", deferred.resolve); response.on("error", deferred.reject); } else { deferred.reject("Can't post " + response.statusCode); } }); request.end(content); return deferred.promise; }; asap-2.0.6/scripts/saucelabs-all-configurations.json 0000664 0000000 0000000 00000071156 13130715565 0022605 0 ustar 00root root 0000000 0000000 [ { "browserName": "internet explorer", "platform": "Windows 2012 R2", "version": "11" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "3.0" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "8" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "9" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "10" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "11" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "12" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "13" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "14" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "15" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "16" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "17" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "18" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "3.5" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "3.6" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "4" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "5" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "6" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "7" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "19" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "20" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "21" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "22" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "23" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "24" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "25" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "26" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "27" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "28" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "26" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "27" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "28" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "30" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "31" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "32" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "33" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "34" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "beta" }, { "browserName": "ipad", "platform": "Mac 10.6", "version": "4.3" }, { "browserName": "ipad", "platform": "Mac 10.6", "version": "5.0" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "4" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "5" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "6" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "7" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "8" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "9" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "10" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "11" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "12" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "13" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "14" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "15" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "16" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "17" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "18" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "19" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "20" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "21" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "22" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "23" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "24" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "25" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "26" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "27" }, { "browserName": "firefox", "platform": "Mac 10.6", "version": "28" }, { "browserName": "iphone", "platform": "Mac 10.6", "version": "4.3" }, { "browserName": "iphone", "platform": "Mac 10.6", "version": "5.0" }, { "browserName": "safari", "platform": "Mac 10.6", "version": "5" }, { "browserName": "chrome", "platform": "Mac 10.6", "version": "27" }, { "browserName": "chrome", "platform": "Mac 10.6", "version": "28" }, { "browserName": "chrome", "platform": "Mac 10.6", "version": "31" }, { "browserName": "chrome", "platform": "Mac 10.6", "version": "32" }, { "browserName": "chrome", "platform": "Mac 10.6", "version": "33" }, { "browserName": "chrome", "platform": "Mac 10.6", "version": "34" }, { "browserName": "chrome", "platform": "Mac 10.6", "version": "beta" }, { "browserName": "internet explorer", "platform": "Windows 2008", "version": "9" }, { "browserName": "ipad", "platform": "Mac 10.9", "version": "7.0" }, { "browserName": "ipad", "platform": "Mac 10.9", "version": "7.1" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "4" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "5" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "6" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "7" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "8" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "9" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "10" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "11" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "12" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "13" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "14" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "15" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "16" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "17" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "18" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "19" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "20" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "21" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "22" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "23" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "24" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "25" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "26" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "27" }, { "browserName": "firefox", "platform": "Mac 10.9", "version": "28" }, { "browserName": "iphone", "platform": "Mac 10.9", "version": "7.0" }, { "browserName": "iphone", "platform": "Mac 10.9", "version": "7.1" }, { "browserName": "safari", "platform": "Mac 10.9", "version": "7" }, { "browserName": "chrome", "platform": "Mac 10.9", "version": "31" }, { "browserName": "chrome", "platform": "Mac 10.9", "version": "32" }, { "browserName": "chrome", "platform": "Mac 10.9", "version": "33" }, { "browserName": "chrome", "platform": "Mac 10.9", "version": "34" }, { "browserName": "internet explorer", "platform": "Windows 2003", "version": "6" }, { "browserName": "internet explorer", "platform": "Windows 2008", "version": "8" }, { "browserName": "opera", "platform": "Windows 2003", "version": "11" }, { "browserName": "opera", "platform": "Windows 2003", "version": "12" }, { "browserName": "internet explorer", "platform": "Windows 2003", "version": "8" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "3.0" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "3.5" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "3.6" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "4" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "5" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "6" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "7" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "8" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "9" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "10" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "11" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "12" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "13" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "14" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "15" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "16" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "17" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "18" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "19" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "20" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "21" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "22" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "23" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "24" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "25" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "26" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "27" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "28" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "26" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "27" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "28" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "30" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "31" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "32" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "33" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "34" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "beta" }, { "browserName": "opera", "platform": "Windows 2008", "version": "11" }, { "browserName": "opera", "platform": "Windows 2008", "version": "12" }, { "browserName": "internet explorer", "platform": "Windows 2008", "version": "10" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "3.0" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "3.5" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "3.6" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "4" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "5" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "6" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "7" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "8" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "9" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "10" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "11" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "12" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "13" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "14" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "15" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "16" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "17" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "18" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "19" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "20" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "21" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "22" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "23" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "24" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "25" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "26" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "27" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "28" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "29" }, { "browserName": "safari", "platform": "Windows 2008", "version": "5" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "26" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "27" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "28" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "30" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "31" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "32" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "33" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "34" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "beta" }, { "browserName": "internet explorer", "platform": "Windows 2012", "version": "10" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "3.0" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "3.5" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "3.6" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "4" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "5" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "6" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "7" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "8" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "9" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "10" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "11" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "12" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "13" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "14" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "15" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "16" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "17" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "18" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "19" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "20" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "21" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "22" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "23" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "24" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "25" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "26" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "27" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "28" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "26" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "27" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "28" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "30" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "31" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "32" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "33" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "34" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "beta" }, { "browserName": "internet explorer", "platform": "Windows 2008", "version": "11" }, { "browserName": "internet explorer", "platform": "Windows 2003", "version": "7" }, { "browserName": "ipad", "platform": "Mac 10.8", "version": "5.1" }, { "browserName": "ipad", "platform": "Mac 10.8", "version": "6.0" }, { "browserName": "ipad", "platform": "Mac 10.8", "version": "6.1" }, { "browserName": "iphone", "platform": "Mac 10.8", "version": "5.1" }, { "browserName": "iphone", "platform": "Mac 10.8", "version": "6.0" }, { "browserName": "iphone", "platform": "Mac 10.8", "version": "6.1" }, { "browserName": "safari", "platform": "Mac 10.8", "version": "6" }, { "browserName": "chrome", "platform": "Mac 10.8", "version": "27" }, { "browserName": "chrome", "platform": "Mac 10.8", "version": "28" }, { "browserName": "chrome", "platform": "Mac 10.8", "version": "31" }, { "browserName": "chrome", "platform": "Mac 10.8", "version": "32" }, { "browserName": "chrome", "platform": "Mac 10.8", "version": "33" }, { "browserName": "chrome", "platform": "Mac 10.8", "version": "34" }, { "browserName": "chrome", "platform": "Mac 10.8", "version": "beta" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.1" }, { "browserName": "android", "platform": "Linux", "version": "4.2" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.1" }, { "browserName": "android", "platform": "Linux", "version": "4.2" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.1" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.1" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.2" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.1" }, { "browserName": "android", "platform": "Linux", "version": "4.2" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.1" }, { "browserName": "android", "platform": "Linux", "version": "4.2" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.1" }, { "browserName": "android", "platform": "Linux", "version": "4.2" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.1" }, { "browserName": "android", "platform": "Linux", "version": "4.1" }, { "browserName": "android", "platform": "Linux", "version": "4.2" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "android", "platform": "Linux", "version": "4.1" }, { "browserName": "android", "platform": "Linux", "version": "4.0" }, { "browserName": "opera", "platform": "Linux", "version": "12" }, { "browserName": "lynx", "platform": "Linux", "version": "2.8.7" }, { "browserName": "firefox", "platform": "Linux", "version": "3.6" }, { "browserName": "firefox", "platform": "Linux", "version": "4" }, { "browserName": "firefox", "platform": "Linux", "version": "5" }, { "browserName": "firefox", "platform": "Linux", "version": "6" }, { "browserName": "firefox", "platform": "Linux", "version": "7" }, { "browserName": "firefox", "platform": "Linux", "version": "8" }, { "browserName": "firefox", "platform": "Linux", "version": "9" }, { "browserName": "firefox", "platform": "Linux", "version": "10" }, { "browserName": "firefox", "platform": "Linux", "version": "11" }, { "browserName": "firefox", "platform": "Linux", "version": "12" }, { "browserName": "firefox", "platform": "Linux", "version": "13" }, { "browserName": "firefox", "platform": "Linux", "version": "14" }, { "browserName": "firefox", "platform": "Linux", "version": "15" }, { "browserName": "firefox", "platform": "Linux", "version": "16" }, { "browserName": "firefox", "platform": "Linux", "version": "17" }, { "browserName": "firefox", "platform": "Linux", "version": "18" }, { "browserName": "firefox", "platform": "Linux", "version": "19" }, { "browserName": "firefox", "platform": "Linux", "version": "20" }, { "browserName": "firefox", "platform": "Linux", "version": "21" }, { "browserName": "firefox", "platform": "Linux", "version": "22" }, { "browserName": "firefox", "platform": "Linux", "version": "23" }, { "browserName": "firefox", "platform": "Linux", "version": "24" }, { "browserName": "firefox", "platform": "Linux", "version": "25" }, { "browserName": "firefox", "platform": "Linux", "version": "26" }, { "browserName": "firefox", "platform": "Linux", "version": "27" }, { "browserName": "firefox", "platform": "Linux", "version": "28" }, { "browserName": "firefox", "platform": "Linux", "version": "29" }, { "browserName": "chrome", "platform": "Linux", "version": "26" }, { "browserName": "chrome", "platform": "Linux", "version": "27" }, { "browserName": "chrome", "platform": "Linux", "version": "28" }, { "browserName": "chrome", "platform": "Linux", "version": "29" }, { "browserName": "chrome", "platform": "Linux", "version": "30" }, { "browserName": "chrome", "platform": "Linux", "version": "31" }, { "browserName": "chrome", "platform": "Linux", "version": "32" }, { "browserName": "chrome", "platform": "Linux", "version": "33" }, { "browserName": "chrome", "platform": "Linux", "version": "34" } ] asap-2.0.6/scripts/saucelabs-configurations.js 0000664 0000000 0000000 00000001354 13130715565 0021473 0 ustar 00root root 0000000 0000000 "use strict"; var Q = require("q"); var SauceLabs = require("saucelabs"); var getCredentials = require("./credentials"); return getCredentials() .then(function (credentials) { var saucelabs = Q(new SauceLabs({ username: credentials.SAUCE_USERNAME, password: credentials.SAUCE_ACCESS_KEY })); return saucelabs.ninvoke("getWebDriverBrowsers"); }) .then(function (configurations) { return configurations.map(function (configuration) { return { browserName: configuration.api_name, platform: configuration.os, version: configuration.short_version }; }); }) .then(function (configurations) { console.log(JSON.stringify(configurations, null, 2)); }) .done(); asap-2.0.6/scripts/saucelabs-event-queue-query.js 0000664 0000000 0000000 00000002574 13130715565 0022054 0 ustar 00root root 0000000 0000000 "use strict"; // This script asks every available Saucelabs Web Driver configuration which // event queue flush request methods are available. // I previously used this script to generate the data for this report: // https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593 var publishBundle = require("./publish-bundle"); var run = require("./saucelabs"); publishBundle("scripts/event-queue-query.js") .then(function (location) { return run(location, { name: "event-queue-query", build: Math.random().toString(36).slice(2) }, "scripts/saucelabs-fast-configurations.json"); }) .then(function (results) { console.log(); console.log("os,browser,version,settimeout,setimmediate,messagechannel,mutationobserver,webkitmutationobserver"); results.forEach(function (result) { var configuration = result.configuration; var results = result.results; console.log([ configuration.platform, configuration.browserName, configuration.version, ].concat([ results.settimeout, results.setimmediate, results.messagechannel, results.mutationobserver, results.webkitmutationobserver ].map(yesno)).join(",")); }); }) .done(); function yesno(x) { return x === "undefined" ? "FALSE" : "TRUE"; } asap-2.0.6/scripts/saucelabs-fast-configurations.json 0000664 0000000 0000000 00000000127 13130715565 0022760 0 ustar 00root root 0000000 0000000 [ { "browserName": "firefox", "platform": "Linux", "version": "29" } ] asap-2.0.6/scripts/saucelabs-matrix.js 0000664 0000000 0000000 00000001361 13130715565 0017743 0 ustar 00root root 0000000 0000000 "use strict"; var URL = require("url"); var HTTP = require("q-io/http"); var S3 = require("./s3"); module.exports = captureMatrix; function captureMatrix(credentials, annotations, name) { var s3 = new S3({ bucket: credentials.S3_BUCKET, key: credentials.S3_ACCESS_KEY_ID, secret: credentials.S3_ACCESS_KEY }); return HTTP.read("https://saucelabs.com/browser-matrix/" + credentials.SAUCE_USERNAME + ".svg") .then(function (content) { var path = URL.resolve(annotations.trainPath, name || "saucelabs-results-matrix.svg"); return s3.put(path, content, "image/svg+xml", { "Cache-Control": "no-cache" }) .thenResolve(URL.resolve(credentials.S3_WEBSITE, path)); }); } asap-2.0.6/scripts/saucelabs-spot-configurations.json 0000664 0000000 0000000 00000007375 13130715565 0023024 0 ustar 00root root 0000000 0000000 [ { "browserName": "internet explorer", "platform": "Windows 2012 R2", "version": "11" }, { "browserName": "firefox", "platform": "Windows 2012 R2", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2012 R2", "version": "34" }, { "browserName": "chrome", "platform": "Mac 10.6", "version": "34" }, { "browserName": "internet explorer", "platform": "Windows 2008", "version": "9" }, { "browserName": "ipad", "platform": "Mac 10.9", "version": "7.1" }, { "browserName": "iphone", "platform": "Mac 10.9", "version": "7.1" }, { "browserName": "safari", "platform": "Mac 10.9", "version": "7" }, { "browserName": "chrome", "platform": "Mac 10.9", "version": "34" }, { "browserName": "internet explorer", "platform": "Windows 2003", "version": "6" }, { "browserName": "internet explorer", "platform": "Windows 2008", "version": "8" }, { "browserName": "opera", "platform": "Windows 2003", "version": "12" }, { "browserName": "internet explorer", "platform": "Windows 2003", "version": "8" }, { "browserName": "firefox", "platform": "Windows 2003", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2003", "version": "34" }, { "browserName": "opera", "platform": "Windows 2008", "version": "12" }, { "browserName": "internet explorer", "platform": "Windows 2008", "version": "10" }, { "browserName": "firefox", "platform": "Windows 2008", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2008", "version": "34" }, { "browserName": "internet explorer", "platform": "Windows 2012", "version": "10" }, { "browserName": "firefox", "platform": "Windows 2012", "version": "29" }, { "browserName": "chrome", "platform": "Windows 2012", "version": "34" }, { "browserName": "internet explorer", "platform": "Windows 2008", "version": "11" }, { "browserName": "internet explorer", "platform": "Windows 2003", "version": "7" }, { "browserName": "chrome", "platform": "Mac 10.8", "version": "34" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "android", "platform": "Linux", "version": "4.3" }, { "browserName": "opera", "platform": "Linux", "version": "12" }, { "browserName": "lynx", "platform": "Linux", "version": "2.8.7" }, { "browserName": "firefox", "platform": "Linux", "version": "29" }, { "browserName": "chrome", "platform": "Linux", "version": "34" } ] asap-2.0.6/scripts/saucelabs-worker-test.js 0000664 0000000 0000000 00000001404 13130715565 0020723 0 ustar 00root root 0000000 0000000 "use strict"; var Q = require("q"); var getCredentials = require("./credentials"); var getAnnotations = require("./annotations"); var run = require("./saucelabs"); var publishWorkerTest = require("./publish-worker-test"); var captureSaucelabsMatrix = require("./saucelabs-matrix"); return Q([ getCredentials(), getAnnotations(), publishWorkerTest() ]).spread(function (credentials, annotations, location) { return run(location, { name: "worker-test", build: Math.random().toString(36).slice(2) }, process.argv[2] || "scripts/saucelabs-spot-configurations.json", null, 40e3) .then(function () { return captureSaucelabsMatrix(credentials, annotations, "saucelabs-worker-results-matrix.svg"); }); }) .done(console.log); asap-2.0.6/scripts/saucelabs.js 0000664 0000000 0000000 00000011143 13130715565 0016440 0 ustar 00root root 0000000 0000000 "use strict"; var Q = require("q"); var FS = require("q-io/fs"); var Reader = require("q-io/reader"); var SauceLabs = require("saucelabs"); var webdriver = require("wd"); var publishBundle = require("./publish-bundle"); var getAnnotations = require("./annotations"); var getCredentials = require("./credentials"); var captureSaucelabsMatrix = require("./saucelabs-matrix"); module.exports = run; function run(location, annotations, configurationsPath, credentialsPath, timeout) { return Q([ getConfigurations(configurationsPath), getCredentials(credentialsPath) ]) .spread(function (configurations, credentials) { var saucelabs = Q(new SauceLabs({ username: credentials.SAUCE_USERNAME, password: credentials.SAUCE_ACCESS_KEY })); return Reader(configurations) .map(function (configuration) { return runConfiguration( location, annotations, configuration, credentials, saucelabs, timeout ) .then(function (result) { return { configuration: configuration, results: result }; }, function (error) { console.log("ERROR", error); // Continue regardless of whether there's an error. return { configuration: configuration, results: { passed: false, error: error } }; }); }, null, 1) .all(); }); } function getConfigurations(path) { return FS.read(path || "saucelabs-configurations.json", {charset: "utf-8"}) .then(JSON.parse); } function runConfiguration(location, annotations, configuration, credentials, saucelabs, timeout) { var browser = webdriver.promiseRemote( "ondemand.saucelabs.com", 80, credentials.SAUCE_USERNAME, credentials.SAUCE_ACCESS_KEY ); browser.on("status", function (info) { console.log("WD-STATUS>", info); }); browser.on("command", function(meth, path){ console.log("WD-COMMAND>", meth, path); }); configuration.name = annotations.name || "job"; configuration.tags = annotations.tags; configuration.build = annotations.build; configuration["custom-data"] = annotations; var result; return browser.init(configuration) .then(function (session) { var sessionId = session[0]; console.log("SESSION", sessionId); return browser.get(location) .then(function () { return poll(function () { console.log("POLL"); /*jshint -W061 */ return browser.eval("window.global_test_results"); }, 100); }) .timeout(timeout || (20 * 1e3)) .then(function (_result) { console.log("RESULT", _result); result = _result; return saucelabs.ninvoke("updateJob", sessionId, { passed: result.passed, public: true }); }, function (error) { console.log("ERROR", error); return saucelabs.ninvoke("updateJob", sessionId, { passed: false, error: true, public: true, "custom-data": { "error": error.stack } }); }); }) .finally(function () { return browser.quit(); }) .then(function () { return result; }); } function poll(callback, ms) { return callback().then(function (value) { if (value) { return value; } else { return Q().delay(ms).then(function () { return poll(callback, ms); }); } }); } function main() { return Q([ getCredentials(), getAnnotations() ]).spread(function (credentials, annotations) { // Use an adhoc location for the bundle. The annotation path is // reserved for build products. return publishBundle(FS.join(process.argv[2]), null, credentials) .then(function (location) { return run(location, annotations, process.argv[3]); }) .then(function (results) { return captureSaucelabsMatrix(credentials, annotations) .thenResolve(results); }); }) .done(function (results) { console.log(JSON.stringify(results, null, 4)); }); } if (require.main === module) { main(); } asap-2.0.6/scripts/synthesize-configurations.js 0000664 0000000 0000000 00000001132 13130715565 0021730 0 ustar 00root root 0000000 0000000 "use strict"; var configurations = require("./saucelabs-all-configurations.json"); var selection = require("./selection.json"); var Map = require("collections/map"); var latests = new Map(new Map(selection.browsers).map(function (versions, name) { return [name, versions.pop().version]; })); var selections = configurations.filter(function (configuration) { if (configuration.browserName === "internet explorer") { return true; } else { return configuration.version === latests.get(configuration.browserName); } }); console.log(JSON.stringify(selections, null, 4)); asap-2.0.6/test/ 0000775 0000000 0000000 00000000000 13130715565 0013430 5 ustar 00root root 0000000 0000000 asap-2.0.6/test/asap-test.js 0000664 0000000 0000000 00000025304 13130715565 0015673 0 ustar 00root root 0000000 0000000 require("./scaffold"); var asap = require("../asap"); var rawAsap = require("../raw"); var domain = require("./domain"); var MAX_RECURSION = 10; var WAIT_FOR_NORMAL_CASE = 100; var WAIT_FOR_ERRORS = 100; if (typeof process === "undefined" && typeof window === "undefined") { // give web workers a chance WAIT_FOR_NORMAL_CASE = 1000; WAIT_FOR_ERRORS = 1000; } describeAsap("rawAsap", rawAsap); describeAsap("asap", asap); function describeAsap(name, asap) { it(name + " calls task in a future turn", function (done) { var called = false; asap(function () { called = true; done(); }); expect(called).toBe(false); }); it(name + " calls task.call method in a future turn", function (done) { var called = false; asap({call: function (thisp) { called = true; done(); }}); expect(called).toBe(false); }); it(name + " calls multiple tasks in order", function (done) { var calls = []; asap(function () { calls.push(0); }); asap(function () { calls.push(1); }); asap(function () { calls.push(2); }); expect(calls).toEqual([]); setTimeout(function () { expect(calls).toEqual([0, 1, 2]); done(); }, WAIT_FOR_NORMAL_CASE); }); it(name + " calls tasks in breadth-first order", function (done) { var calls = []; asap(function () { calls.push(0); asap(function () { calls.push(2); asap(function () { calls.push(5); }); asap(function () { calls.push(6); }); }); asap(function () { calls.push(3); }); }); asap(function () { calls.push(1); asap(function () { calls.push(4); }); }); expect(calls).toEqual([]); setTimeout(function () { expect(calls).toEqual([0, 1, 2, 3, 4, 5, 6]); done(); }, WAIT_FOR_NORMAL_CASE); }); it(name + " can schedule more than capacity tasks", function(done) { var target = 1060; var targetList = []; for (var i=0; i