[
  {
    "path": ".gitignore",
    "content": "node_modules\n.DS_Store\n*~\ncoverage\ntest/test-bundle.js\nnpm-debug.log\ntestdb*\n"
  },
  {
    "path": ".jshintrc",
    "content": "{\r\n  \"curly\": true,\r\n  \"eqeqeq\": true,\r\n  \"immed\": true,\r\n  \"newcap\": true,\r\n  \"noarg\": true,\r\n  \"sub\": true,\r\n  \"undef\": true,\r\n  \"unused\": true,\r\n  \"eqnull\": true,\r\n  \"browser\": true,\r\n  \"node\": true,\r\n  \"strict\": true,\r\n  \"globalstrict\": true,\r\n  \"globals\": { \"eio\": true},\r\n  \"white\": true,\r\n  \"indent\": 2,\r\n  \"maxlen\": 100,\r\n  \"predef\": [\r\n    \"chrome\",\r\n    \"eio\",\r\n    \"process\",\r\n    \"global\",\r\n    \"require\",\r\n    \"console\",\r\n    \"describe\",\r\n    \"beforeEach\",\r\n    \"afterEach\",\r\n    \"it\",\r\n    \"emit\"\r\n  ]\r\n}"
  },
  {
    "path": ".npmignore",
    "content": ".git*\nnode_modules\n.DS_Store\n*~\ncoverage\nnpm-debug.log\nvendor/\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\n\nservices:\n  - couchdb\n\nnode_js:\n  - \"5\"\nsudo: false\naddons:\n  firefox: \"41.0.1\"\nscript: npm run $COMMAND\nbefore_script:\n  - \"export DISPLAY=:99.0\"\n  - \"sh -e /etc/init.d/xvfb start\"\n\n  - \"export DEBUG=pouchdb:socket\"\n  - \"npm install add-cors-to-couchdb\"\n  - \"./node_modules/.bin/add-cors-to-couchdb\"\n\nenv:\n  matrix:\n  - COMMAND=test\n  - CLIENT=selenium:firefox:41.0.1 COMMAND=test\n\nbranches:\n  only:\n  - master\n"
  },
  {
    "path": "LICENSE",
    "content": "\n                                Apache License\n                          Version 2.0, January 2004\n                       http://www.apache.org/licenses/\n\n  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n  1. Definitions.\n\n     \"License\" shall mean the terms and conditions for use, reproduction,\n     and distribution as defined by Sections 1 through 9 of this document.\n\n     \"Licensor\" shall mean the copyright owner or entity authorized by\n     the copyright owner that is granting the License.\n\n     \"Legal Entity\" shall mean the union of the acting entity and all\n     other entities that control, are controlled by, or are under common\n     control with that entity. For the purposes of this definition,\n     \"control\" means (i) the power, direct or indirect, to cause the\n     direction or management of such entity, whether by contract or\n     otherwise, or (ii) ownership of fifty percent (50%) or more of the\n     outstanding shares, or (iii) beneficial ownership of such entity.\n\n     \"You\" (or \"Your\") shall mean an individual or Legal Entity\n     exercising permissions granted by this License.\n\n     \"Source\" form shall mean the preferred form for making modifications,\n     including but not limited to software source code, documentation\n     source, and configuration files.\n\n     \"Object\" form shall mean any form resulting from mechanical\n     transformation or translation of a Source form, including but\n     not limited to compiled object code, generated documentation,\n     and conversions to other media types.\n\n     \"Work\" shall mean the work of authorship, whether in Source or\n     Object form, made available under the License, as indicated by a\n     copyright notice that is included in or attached to the work\n     (an example is provided in the Appendix below).\n\n     \"Derivative Works\" shall mean any work, whether in Source or Object\n     form, that is based on (or derived from) the Work and for which the\n     editorial revisions, annotations, elaborations, or other modifications\n     represent, as a whole, an original work of authorship. For the purposes\n     of this License, Derivative Works shall not include works that remain\n     separable from, or merely link (or bind by name) to the interfaces of,\n     the Work and Derivative Works thereof.\n\n     \"Contribution\" shall mean any work of authorship, including\n     the original version of the Work and any modifications or additions\n     to that Work or Derivative Works thereof, that is intentionally\n     submitted to Licensor for inclusion in the Work by the copyright owner\n     or by an individual or Legal Entity authorized to submit on behalf of\n     the copyright owner. For the purposes of this definition, \"submitted\"\n     means any form of electronic, verbal, or written communication sent\n     to the Licensor or its representatives, including but not limited to\n     communication on electronic mailing lists, source code control systems,\n     and issue tracking systems that are managed by, or on behalf of, the\n     Licensor for the purpose of discussing and improving the Work, but\n     excluding communication that is conspicuously marked or otherwise\n     designated in writing by the copyright owner as \"Not a Contribution.\"\n\n     \"Contributor\" shall mean Licensor and any individual or Legal Entity\n     on behalf of whom a Contribution has been received by Licensor and\n     subsequently incorporated within the Work.\n\n  2. Grant of Copyright License. Subject to the terms and conditions of\n     this License, each Contributor hereby grants to You a perpetual,\n     worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n     copyright license to reproduce, prepare Derivative Works of,\n     publicly display, publicly perform, sublicense, and distribute the\n     Work and such Derivative Works in Source or Object form.\n\n  3. Grant of Patent License. Subject to the terms and conditions of\n     this License, each Contributor hereby grants to You a perpetual,\n     worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n     (except as stated in this section) patent license to make, have made,\n     use, offer to sell, sell, import, and otherwise transfer the Work,\n     where such license applies only to those patent claims licensable\n     by such Contributor that are necessarily infringed by their\n     Contribution(s) alone or by combination of their Contribution(s)\n     with the Work to which such Contribution(s) was submitted. If You\n     institute patent litigation against any entity (including a\n     cross-claim or counterclaim in a lawsuit) alleging that the Work\n     or a Contribution incorporated within the Work constitutes direct\n     or contributory patent infringement, then any patent licenses\n     granted to You under this License for that Work shall terminate\n     as of the date such litigation is filed.\n\n  4. Redistribution. You may reproduce and distribute copies of the\n     Work or Derivative Works thereof in any medium, with or without\n     modifications, and in Source or Object form, provided that You\n     meet the following conditions:\n\n     (a) You must give any other recipients of the Work or\n         Derivative Works a copy of this License; and\n\n     (b) You must cause any modified files to carry prominent notices\n         stating that You changed the files; and\n\n     (c) You must retain, in the Source form of any Derivative Works\n         that You distribute, all copyright, patent, trademark, and\n         attribution notices from the Source form of the Work,\n         excluding those notices that do not pertain to any part of\n         the Derivative Works; and\n\n     (d) If the Work includes a \"NOTICE\" text file as part of its\n         distribution, then any Derivative Works that You distribute must\n         include a readable copy of the attribution notices contained\n         within such NOTICE file, excluding those notices that do not\n         pertain to any part of the Derivative Works, in at least one\n         of the following places: within a NOTICE text file distributed\n         as part of the Derivative Works; within the Source form or\n         documentation, if provided along with the Derivative Works; or,\n         within a display generated by the Derivative Works, if and\n         wherever such third-party notices normally appear. The contents\n         of the NOTICE file are for informational purposes only and\n         do not modify the License. You may add Your own attribution\n         notices within Derivative Works that You distribute, alongside\n         or as an addendum to the NOTICE text from the Work, provided\n         that such additional attribution notices cannot be construed\n         as modifying the License.\n\n     You may add Your own copyright statement to Your modifications and\n     may provide additional or different license terms and conditions\n     for use, reproduction, or distribution of Your modifications, or\n     for any such Derivative Works as a whole, provided Your use,\n     reproduction, and distribution of the Work otherwise complies with\n     the conditions stated in this License.\n\n  5. Submission of Contributions. Unless You explicitly state otherwise,\n     any Contribution intentionally submitted for inclusion in the Work\n     by You to the Licensor shall be under the terms and conditions of\n     this License, without any additional terms or conditions.\n     Notwithstanding the above, nothing herein shall supersede or modify\n     the terms of any separate license agreement you may have executed\n     with Licensor regarding such Contributions.\n\n  6. Trademarks. This License does not grant permission to use the trade\n     names, trademarks, service marks, or product names of the Licensor,\n     except as required for reasonable and customary use in describing the\n     origin of the Work and reproducing the content of the NOTICE file.\n\n  7. Disclaimer of Warranty. Unless required by applicable law or\n     agreed to in writing, Licensor provides the Work (and each\n     Contributor provides its Contributions) on an \"AS IS\" BASIS,\n     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n     implied, including, without limitation, any warranties or conditions\n     of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n     PARTICULAR PURPOSE. You are solely responsible for determining the\n     appropriateness of using or redistributing the Work and assume any\n     risks associated with Your exercise of permissions under this License.\n\n  8. Limitation of Liability. In no event and under no legal theory,\n     whether in tort (including negligence), contract, or otherwise,\n     unless required by applicable law (such as deliberate and grossly\n     negligent acts) or agreed to in writing, shall any Contributor be\n     liable to You for damages, including any direct, indirect, special,\n     incidental, or consequential damages of any character arising as a\n     result of this License or out of the use or inability to use the\n     Work (including but not limited to damages for loss of goodwill,\n     work stoppage, computer failure or malfunction, or any and all\n     other commercial damages or losses), even if such Contributor\n     has been advised of the possibility of such damages.\n\n  9. Accepting Warranty or Additional Liability. While redistributing\n     the Work or Derivative Works thereof, You may choose to offer,\n     and charge a fee for, acceptance of support, warranty, indemnity,\n     or other liability obligations and/or rights consistent with this\n     License. However, in accepting such obligations, You may act only\n     on Your own behalf and on Your sole responsibility, not on behalf\n     of any other Contributor, and only if You agree to indemnify,\n     defend, and hold each Contributor harmless for any liability\n     incurred by, or claims asserted against, such Contributor by reason\n     of your accepting any such warranty or additional liability.\n\n  END OF TERMS AND CONDITIONS\n\n  APPENDIX: How to apply the Apache License to your work.\n\n     To apply the Apache License to your work, attach the following\n     boilerplate notice, with the fields enclosed by brackets \"[]\"\n     replaced with your own identifying information. (Don't include\n     the brackets!)  The text should be enclosed in the appropriate\n     comment syntax for the file format. We also recommend that a\n     file or class name and description of purpose be included on the\n     same \"printed page\" as the copyright notice for easier\n     identification within third-party archives.\n\n  Copyright [yyyy] [name of copyright owner]\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n      http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "socket-pouch [![Build Status](https://travis-ci.org/nolanlawson/socket-pouch.svg)](https://travis-ci.org/nolanlawson/socket-pouch)\n=====\n\n```js\n// This pouch is powered by web sockets!\nvar db = new PouchDB('mydb', {adapter: 'socket', url: 'ws://localhost:80'});\n```\n\nAdapter plugin that proxies all PouchDB API calls to another PouchDB running on the server in Node.js. The communication mechanism is [Engine.io](https://github.com/Automattic/engine.io), the famous core of [Socket.io](http://socket.io/).\n\nThis means that instead of syncing over HTTP, socket-pouch syncs over WebSockets. Thanks to Engine.io, it falls back to XHR polling in browsers that don't support WebSockets.\n\nThe socket-pouch library has two parts:\n\n* **A Node.js server**, which can create local PouchDBs or proxy to a remote CouchDB.\n* **A JavaScript client**, which can run in Node.js or the browser.\n\nThis adapter passes [the full PouchDB test suite](https://travis-ci.org/nolanlawson/socket-pouch). It requires PouchDB 5.0.0+.\n\nUsage\n---\n\n    $ npm install socket-pouch\n\n#### Server\n\n```js\nvar socketPouchServer = require('socket-pouch/server');\n\nsocketPouchServer.listen(80);\n```\n\n#### Client\n\n##### In the browser\n    \nWhen you `npm install socket-pouch`, the client JS file is available at `node_modules/socket-pouch/dist/socket-pouch.client.js`. Or you can just download it from Github above.\n\nThen include it in your HTML, after PouchDB:\n\n```html\n<script src=\"pouchdb.js\"></script>\n<script src=\"socket-pouch.client.js\"></script>\n```\n\nThen you can create a socket-powered PouchDB using:\n\n```js\nvar db = new PouchDB('mydb', {\n  adapter: 'socket',\n  url: 'ws://localhost:80'\n});\n```\n\n##### In Node.js/Browserify\n\nThe same rules apply, but you have to notify PouchDB of the new adapter:\n\n```js\nvar PouchDB = require('pouchdb');\nPouchDB.adapter('socket', require('socket-pouch/client'));\n```\n\nAPI\n----\n\n### Server\n\n```js\nvar socketPouchServer = require('socket-pouch/server');\n\nsocketPouchServer.listen(80, {}, function () {\n  // server started\n});\n```\n\n#### socketPouchServer.listen(port [, options] [, callback])\n\n##### Arguments\n\n* **port**: the port to listen on. You should probably use 80 or 443 if you plan on running this in production; most browsers are finicky about other ports. 8080 may work in Chrome during debugging.\n* **options**: (optional) options object\n  * **remoteUrl**: tells socket-pouch to act as a proxy for a remote CouchDB at the given URL (rather than creating local PouchDB databases)\n  * **pouchCreator**: alternatively, you can supply a custom function that takes a string and returns any PouchDB object however you like. (See examples below.) \n  * **socketOptions**: (optional) options passed verbatim to Engine.io. See [their documentation](https://github.com/Automattic/engine.io/#methods) for details.\n* **callback**: (optional) called when the server has started\n\nCreate a server which creates local PouchDBs, named by the user and placed in the current directory:\n\n```js\nsocketPouchServer.listen(80, {}, function () {\n  console.log('server started!');\n});\n```\n\nCreate a server which acts as a proxy to a remote CouchDB (or CouchDB-compliant database):\n\n```js\nsocketPouchServer.listen(80, {\n  remoteUrl: 'http://localhost:5984'\n});\n```\n\nSo e.g. when the user requests a database called 'foo', it will use a remote database at `'http://localhost:5984/foo'`. Note that authentication is not handled, so you may want the `pouchCreator` option instead.\n\nCreate a MemDOWN-backed PouchDB server:\n\n```js\nsocketPouchServer.listen(80, {\n  pouchCreator: function (dbName) {\n    return new PouchDB(dbName, {\n      db: require('memdown')\n    });\n  }\n});\n```\n\nNote that this `dbName` is supplied by the client ver batim, meaning **it could be dangerous**. In the example above, everything is fine because MemDOWN databases can have any string as a name.\n\nAlternatively, your `pouchCreator` can return a `Promise` if you want to do something asynchronously, such as authenticating the user. In that case you must wrap the object in `{pouch: yourPouchDB}`:\n\n```js\nsocketPouchServer.listen(80, {\n  pouchCreator: function (dbName) {\n    return doSomethingAsynchronously().then(function () {\n      return {\n        pouch: new PouchDB('dbname')\n      };\n    });\n  }\n});\n```\n\n### Client\n\n```js\nvar db = new PouchDB({\n  adapter: 'socket',\n  name: 'mydb',\n  url: 'ws://localhost:80',\n  socketOptions: {}\n});\n```\n\nThe `name` and `url` are required and must point to a valid `socketPouchServer`. The `socketOptions`, if provided, are passed ver batim to Engine.io, so refer to [their documentation](https://github.com/Automattic/engine.io-client/#nodejs-with-certificates) for details.\n\n### Replication\n\nThe `db` object acts like a PouchDB that communicates remotely with the `socketPouchServer` In other words, it's analogous to a PouchDB created like `new PouchDB('http://localhost:5984/mydb')`.\n\nSo you can replicate using the normal methods:\n\n```js\nvar localDB = new PouchDB('local');\nvar remoteDB = new PouchDB({adapter: 'socket', name: 'remote', url: 'ws://localhost:80'});\n\n// replicate from local to remote\nlocalDB.replicate.to(remoteDB);\n\n// replicate from remote to local\nlocalDB.replicate.from(remoteDB);\n\n// replicate bidirectionally\nlocalDB.sync(remoteDB);\n```\n\nFor details, see the official [`replicate()`](http://pouchdb.com/api.html#replication) or [`sync()`](http://pouchdb.com/api.html#sync) docs.\n\n### Remote API\n\n```js\nvar remoteDB = new PouchDB({adapter: 'socket', name: 'remote', url: 'ws://localhost:80'});\n```\n\nYou can also talk to this `remoteDB` as if it were a normal PouchDB. All the standard methods like `info()`, `get()`, `put()`, and `putAttachment()` will work. The [Travis tests](https://travis-ci.org/nolanlawson/socket-pouch) run the full PouchDB test suite.\n\n### Debugging\n\nSocketPouch uses [debug](https://github.com/visionmedia/debug) for logging. So in Node.js, you can enable debugging by setting a flag:\n\n```\nDEBUG=pouchdb:socket:*\n```\n\nIn the browser, you can enable debugging by using PouchDB's logger:\n\n```js\nPouchDB.debug.enable('pouchdb:socket:*');\n```\n\nQ & A\n---\n\n#### How does it communicate?\n\nSocketPouch communicates using the normal Engine.io APIs like `send()` and `on('message')`.\n\nNormally it sends JSON text data, but in the case of attachments, binary data is sent. This means that SocketPouch is actually more efficient than regular PouchDB replication, which (as of this writing) uses base64-string encoding to send attachments between the client and server.\n\n#### Does it work in a web worker or service worker?\n\nUnfortuantely, not at the moment.\n\n#### How is it implemented?\n\nThis is a custom PouchDB adapter. Other examples of PouchDB adapters include the built-in IndexedDB, WebSQL, LevelDB, and HTTP (Couch) adapters, as well as a partial adapter written for [pouchdb-replication-stream](https://github.com/nolanlawson/pouchdb-replication-stream) and [worker-pouch](https://github.com/nolanlawson/worker-pouch), which is a fork of this repo.\n\nChangelog\n---\n\n- 2.0.0\n  - Support for PouchDB 6.0.0, drop support for PouchDB <=5\n- 1.0.0\n  - Initial release\n\nBuilding\n----\n\n    npm install\n    npm run build\n\nTesting\n----\n\n### In Node\n\nThis will run the tests in Node using LevelDB:\n\n    npm test\n    \nYou can also check for 100% code coverage using:\n\n    npm run coverage\n\nRun certain tests:\n```\nGREP=foo npm test\n```\n\n### In the browser\n\nRun `npm run dev` and then point your favorite browser to [http://127.0.0.1:8000/test/index.html](http://127.0.0.1:8000/test/index.html).\n\nThe query param `?grep=mysearch` will search for tests matching `mysearch`.\n\n### Automated browser tests\n\nYou can run e.g.\n\n    CLIENT=selenium:firefox npm test\n    CLIENT=selenium:phantomjs npm test\n\nThis will run the tests automatically and the process will exit with a 0 or a 1 when it's done. Firefox uses IndexedDB, and PhantomJS uses WebSQL.\n\n\n"
  },
  {
    "path": "bin/dev-server.js",
    "content": "#!/usr/bin/env node\n\n'use strict';\n\nvar COUCH_HOST = process.env.COUCH_HOST || 'http://127.0.0.1:5984';\nvar HTTP_PORT = 8000;\nvar CORS_PORT = 2020;\nvar SOCKET_PORT = 8080;\n\nvar cors_proxy = require('corsproxy');\nvar Promise = require('bluebird');\nvar http_proxy = require('pouchdb-http-proxy');\nvar http_server = require(\"http-server\");\nvar fs = require('fs');\nvar indexfile = \"./test/test.js\";\nvar dotfile = \"./test/.test-bundle.js\";\nvar outfile = \"./test/test-bundle.js\";\nvar watchify = require(\"watchify\");\nvar browserify = require('browserify');\nvar socketPouch = require('../lib/server');\nvar w = watchify(browserify(indexfile, {\n  cache: {},\n  packageCache: {},\n  fullPaths: true,\n  debug: true\n}));\n\nw.on('update', bundle);\nbundle();\n\nvar filesWritten = false;\nvar serverStarted = false;\nvar socketServerStarted = false;\nvar readyCallback;\n\nfunction bundle() {\n  var wb = w.bundle();\n  wb.on('error', function (err) {\n    console.error(String(err));\n  });\n  wb.on(\"end\", end);\n  wb.pipe(fs.createWriteStream(dotfile));\n\n  function end() {\n    fs.rename(dotfile, outfile, function (err) {\n      if (err) { return console.error(err); }\n      console.log('Updated:', outfile);\n      filesWritten = true;\n      checkReady();\n    });\n  }\n}\n\nfunction startSocketServer() {\n  socketPouch.listen(SOCKET_PORT, {}, function () {\n    console.log('Socket server started');\n    socketServerStarted = true;\n    checkReady();\n  });\n}\n\nfunction startServers(callback) {\n  readyCallback = callback;\n\n  startSocketServer();\n\n  return new Promise(function (resolve, reject) {\n    http_server.createServer().listen(HTTP_PORT, function (err) {\n      if (err) {\n        return reject(err);\n      }\n      cors_proxy.options = {target: COUCH_HOST};\n      http_proxy.createServer(cors_proxy).listen(CORS_PORT, function (err) {\n        if (err) {\n          return reject(err);\n        }\n        resolve();\n      });\n    });\n  }).then(function () {\n    console.log('Tests: http://127.0.0.1:' + HTTP_PORT + '/test/index.html');\n    serverStarted = true;\n    checkReady();\n  }).catch(function (err) {\n    if (err) {\n      console.log(err);\n      process.exit(1);\n    }\n  });\n}\n\nfunction checkReady() {\n  if (filesWritten && serverStarted && socketServerStarted && readyCallback) {\n    readyCallback();\n  }\n}\n\nif (require.main === module) {\n  startServers();\n} else {\n  module.exports.start = startServers;\n}\n"
  },
  {
    "path": "bin/es3ify.js",
    "content": "#!/usr/bin/env node\n'use strict';\nvar es3ify = require('es3ify');\nreturn process.stdin.pipe(es3ify()).pipe(process.stdout);\n"
  },
  {
    "path": "bin/run-test.sh",
    "content": "#!/bin/bash\n\n: ${CLIENT:=\"node\"}\n\nif [ \"$CLIENT\" == \"node\" ]; then\n    npm run test-node\nelse\n    npm run test-browser\nfi\n"
  },
  {
    "path": "bin/test-browser.js",
    "content": "#!/usr/bin/env node\n'use strict';\n\nvar wd = require('wd');\nvar sauceConnectLauncher = require('sauce-connect-launcher');\nvar selenium = require('selenium-standalone');\nvar querystring = require(\"querystring\");\n\nvar devserver = require('./dev-server.js');\n\nvar testTimeout = 30 * 60 * 1000;\n\nvar username = process.env.SAUCE_USERNAME;\nvar accessKey = process.env.SAUCE_ACCESS_KEY;\n\n// process.env.CLIENT is a colon seperated list of\n// (saucelabs|selenium):browserName:browserVerion:platform\nvar tmp = (process.env.CLIENT || 'selenium:firefox').split(':');\nvar client = {\n  runner: tmp[0] || 'selenium',\n  browser: tmp[1] || 'firefox',\n  version: tmp[2] || null, // Latest\n  platform: tmp[3] || null\n};\n\nvar testUrl = 'http://127.0.0.1:8000/test/index.html';\nvar qs = {};\n\nvar sauceClient;\nvar sauceConnectProcess;\nvar tunnelId = process.env.TRAVIS_JOB_NUMBER || 'tunnel-' + Date.now();\n\nif (client.runner === 'saucelabs') {\n  qs.saucelabs = true;\n}\nif (process.env.GREP) {\n  qs.grep = process.env.GREP;\n}\ntestUrl += '?';\ntestUrl += querystring.stringify(qs);\n\nif (process.env.TRAVIS &&\n    client.browser !== 'firefox' &&\n    client.browser !== 'phantomjs' &&\n    process.env.TRAVIS_SECURE_ENV_VARS === 'false') {\n  console.error('Not running test, cannot connect to saucelabs');\n  process.exit(1);\n  return;\n}\n\nfunction testError(e) {\n  console.error(e);\n  console.error('Doh, tests failed');\n  sauceClient.quit();\n  process.exit(3);\n}\n\nfunction postResult(result) {\n  process.exit(!process.env.PERF && result.failed ? 1 : 0);\n}\n\nfunction testComplete(result) {\n  console.log(result);\n\n  sauceClient.quit().then(function () {\n    if (sauceConnectProcess) {\n      sauceConnectProcess.close(function () {\n        postResult(result);\n      });\n    } else {\n      postResult(result);\n    }\n  });\n}\n\nfunction startSelenium(callback) {\n  // Start selenium\n  var opts = {version: '2.45.0'};\n  selenium.install(opts, function(err) {\n    if (err) {\n      console.error('Failed to install selenium');\n      process.exit(1);\n    }\n    selenium.start(opts, function(err, server) {\n      sauceClient = wd.promiseChainRemote();\n      callback();\n    });\n  });\n}\n\nfunction startSauceConnect(callback) {\n\n  var options = {\n    username: username,\n    accessKey: accessKey,\n    tunnelIdentifier: tunnelId\n  };\n\n  sauceConnectLauncher(options, function (err, process) {\n    if (err) {\n      console.error('Failed to connect to saucelabs');\n      console.error(err);\n      return process.exit(1);\n    }\n    sauceConnectProcess = process;\n    sauceClient = wd.promiseChainRemote(\"localhost\", 4445, username, accessKey);\n    callback();\n  });\n}\n\nfunction startTest() {\n\n  console.log('Starting', client);\n\n  var opts = {\n    browserName: client.browser,\n    version: client.version,\n    platform: client.platform,\n    tunnelTimeout: testTimeout,\n    name: client.browser + ' - ' + tunnelId,\n    'max-duration': 60 * 30,\n    'command-timeout': 599,\n    'idle-timeout': 599,\n    'tunnel-identifier': tunnelId\n  };\n\n  sauceClient.init(opts).get(testUrl, function () {\n\n    /* jshint evil: true */\n    var interval = setInterval(function () {\n      sauceClient.eval('window.results', function (err, results) {\n        if (err) {\n          clearInterval(interval);\n          testError(err);\n        } else if (results.completed || results.failures.length) {\n          clearInterval(interval);\n          testComplete(results);\n        } else {\n          console.log('=> ', results);\n        }\n      });\n    }, 10 * 1000);\n  });\n}\n\ndevserver.start(function () {\n  if (client.runner === 'saucelabs') {\n    startSauceConnect(startTest);\n  } else {\n    startSelenium(startTest);\n  }\n});\n"
  },
  {
    "path": "bin/test-node.sh",
    "content": "#!/usr/bin/env bash\n\n: ${TIMEOUT:=50000}\n: ${REPORTER:=\"spec\"}\n\nnode ./bin/dev-server.js &\nexport DEV_SERVER_PID=$!\n\nsleep 10\n\n# TODO: this fixes a weird test in test.views.js\n./node_modules/.bin/rimraf tmp\n./node_modules/.bin/mkdirp tmp\n\n# skip migration and defaults tests\nif [[ $INVERT == '1' ]]; then\n  INVERT_ARG='--invert'\nelse\n  INVERT_ARG=''\nfi\n\nmocha \\\n  --reporter=$REPORTER \\\n  --timeout $TIMEOUT --bail \\\n  --require=./test/node.setup.js \\\n  --grep=$GREP \\\n  $INVERT_ARG \\\n  test/pouchdb/{integration,mapreduce}/test.*.js\n\nEXIT_STATUS=$?\nif [[ ! -z $DEV_SERVER_PID ]]; then\n  kill $DEV_SERVER_PID\nfi\nexit $EXIT_STATUS\n"
  },
  {
    "path": "client/index.js",
    "content": "'use strict';\n\nmodule.exports = require('../lib/client');"
  },
  {
    "path": "dist/socket-pouch.client.js",
    "content": "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.socketPouch = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = _dereq_('../lib/client');\n},{\"../lib/client\":8}],2:[function(_dereq_,module,exports){\n'use strict';\n\n//Can't find original post, but this is close\n//http://stackoverflow.com/questions/6965107/ (continues on next line)\n//converting-between-strings-and-arraybuffers\nmodule.exports = function (buffer) {\n  var binary = '';\n  var bytes = new Uint8Array(buffer);\n  var length = bytes.byteLength;\n  for (var i = 0; i < length; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return binary;\n};\n},{}],3:[function(_dereq_,module,exports){\n'use strict';\n\nvar buffer = _dereq_('../shared/buffer');\n\n/* istanbul ignore if */\nif (typeof atob === 'function') {\n  exports.atob = function (str) {\n    /* global atob */\n    return atob(str);\n  };\n} else {\n  exports.atob = function (str) {\n    var base64 = new buffer(str, 'base64');\n    // Node.js will just skip the characters it can't encode instead of\n    // throwing and exception\n    if (base64.toString('base64') !== str) {\n      throw (\"Cannot base64 encode full string\");\n    }\n    return base64.toString('binary');\n  };\n}\n\n/* istanbul ignore if */\nif (typeof btoa === 'function') {\n  exports.btoa = function (str) {\n    /* global btoa */\n    return btoa(str);\n  };\n} else {\n  exports.btoa = function (str) {\n    return new buffer(str, 'binary').toString('base64');\n  };\n}\n},{\"../shared/buffer\":11}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar binaryStringToBlobOrBuffer = _dereq_('./binaryStringToBlobOrBuffer');\n\nmodule.exports = function (b64, type) {\n  return binaryStringToBlobOrBuffer(atob(b64), type);\n};\n},{\"./binaryStringToBlobOrBuffer\":6}],5:[function(_dereq_,module,exports){\n'use strict';\n\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nmodule.exports = function (bin) {\n  var length = bin.length;\n  var buf = new ArrayBuffer(length);\n  var arr = new Uint8Array(buf);\n  for (var i = 0; i < length; i++) {\n    arr[i] = bin.charCodeAt(i);\n  }\n  return buf;\n};\n},{}],6:[function(_dereq_,module,exports){\n'use strict';\n\nvar createBlob = _dereq_('./blob');\nvar binaryStringToArrayBuffer = _dereq_('./binaryStringToArrayBuffer');\n\nmodule.exports = function (binString, type) {\n  return createBlob([binaryStringToArrayBuffer(binString)], {type: type});\n};\n},{\"./binaryStringToArrayBuffer\":5,\"./blob\":7}],7:[function(_dereq_,module,exports){\n\"use strict\";\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor (e.g.\n// old QtWebKit versions, Android < 4.4).\nfunction createBlob(parts, properties) {\n  /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n  parts = parts || [];\n  properties = properties || {};\n  try {\n    return new Blob(parts, properties);\n  } catch (e) {\n    if (e.name !== \"TypeError\") {\n      throw e;\n    }\n    var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\n                  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\n                  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :\n                  WebKitBlobBuilder;\n    var builder = new Builder();\n    for (var i = 0; i < parts.length; i += 1) {\n      builder.append(parts[i]);\n    }\n    return builder.getBlob(properties.type);\n  }\n}\n\nmodule.exports = createBlob;\n\n\n},{}],8:[function(_dereq_,module,exports){\n(function (process){\n'use strict';\n\nvar utils = _dereq_('../shared/utils');\nvar clientUtils = _dereq_('./utils');\nvar uuid = _dereq_('./../shared/uuid');\nvar errors = _dereq_('../shared/errors');\nvar log = _dereq_('debug')('pouchdb:socket:client');\nvar Socket = _dereq_('engine.io-client');\nvar blobUtil = _dereq_('blob-util');\nvar isBrowser = typeof process === 'undefined' || process.browser;\nvar buffer = _dereq_('../shared/buffer');\nvar preprocessAttachments = clientUtils.preprocessAttachments;\nvar stringifyArgs = clientUtils.stringifyArgs;\nvar padInt = clientUtils.padInt;\nvar readAttachmentsAsBlobOrBuffer = clientUtils.readAttachmentsAsBlobOrBuffer;\nvar adapterFun = clientUtils.adapterFun;\nvar readAsBinaryString = _dereq_('./readAsBinaryString');\nvar isBinaryObject = _dereq_('../shared/isBinaryObject');\nvar Promise = _dereq_('pouchdb-promise');\nvar base64 = _dereq_('./base64');\n\nvar instances = {};\n\nfunction close(api, callback) {\n  // api.name was added in pouchdb 6.0.0\n  log('closing socket', api._socketId, api.name || api._name);\n\n  function closeSocket() {\n    api._socket.closed = true;\n    api._socket.once('close', function (msg) {\n      log('socket closed', api._socketId, msg);\n      api._socket.removeAllListeners();\n      callback();\n    });\n    api._socket.close();\n  }\n\n  if (api._socket.closed) {\n    return callback();\n  }\n  closeSocket();\n}\n\n// Implements the PouchDB API for dealing with CouchDB instances over WS\nfunction SocketPouch(opts, callback) {\n  var api = this;\n\n  if (typeof opts === 'string') {\n    var slashIdx = utils.lastIndexOf(opts, '/');\n    opts = {\n      url: opts.substring(0, slashIdx),\n      name: opts.substring(slashIdx + 1)\n    };\n  } else {\n    opts = utils.clone(opts);\n  }\n\n  log('constructor called', opts);\n\n  if (!opts.url || !opts.name) {\n    var optsErrMessage = 'Error: you must provide a web socket ' +\n      'url and database name.';\n    console.error(optsErrMessage);\n    return callback(new Error(optsErrMessage));\n  }\n\n  // api.name was added in pouchdb 6.0.0\n  api._socketName = api.name || opts.originalName;\n\n  var cacheKey = '$' + api._socketName;\n\n  function useExistingSocket() {\n    // Re-use the cached one instead of creating multiple sockets.\n    // This is important, because if a user creates many PouchDBs\n    // without closing/destroying each one, then we could end up\n    // with too many open sockets, which causes problems like\n    // https://github.com/Automattic/engine.io/issues/320\n    var instance = instances[cacheKey];\n    api._socket = instance._socket;\n    api._callbacks = instance._callbacks;\n    api._changesListeners = instance._changesListeners;\n    api._blobs = instance._blobs;\n    api._binaryMessages = instance._binaryMessages;\n    api._name = instance._name;\n\n    if (instance._socketId) {\n      api._socketId = instance._socketId;\n      process.nextTick(function () {\n        callback(null, api);\n      });\n    } else {\n      api._socket.once('open', function () {\n        api._socketId = api._socket.id;\n        process.nextTick(function () {\n          callback(null, api);\n        });\n      });\n    }\n  }\n\n  function createNewSocket() {\n    // to force XHR during debugging\n    // opts.socketOptions = {transports: ['polling']};\n    var socket = api._socket = new Socket(opts.url, opts.socketOptions || {});\n    socket.binaryType = 'blob';\n    api._callbacks = {};\n    api._changesListeners = {};\n    api._blobs = {};\n    api._binaryMessages = {};\n    api._name = api._socketName;\n    instances[cacheKey] = api;\n\n    socket.once('open', function () {\n      api._socketId = socket.id;\n      log('socket opened', api._socketId, api._name);\n      var serverOpts = {\n        name: api._name,\n        auto_compaction: !!opts.auto_compaction\n      };\n      if ('revs_limit' in opts) {\n        serverOpts.revs_limit = opts.revs_limit;\n      }\n      sendMessage('createDatabase', [serverOpts], function (err) {\n        if (err) {\n          return callback(err);\n        }\n        callback(null, api);\n      });\n    });\n\n    api._socket.once('error', function (err) {\n      callback(err);\n    });\n\n    function handleUncaughtError(content) {\n      try {\n        api.emit('error', content);\n      } catch (err) {\n        // TODO: it's weird that adapters should have to handle this themselves\n        console.error(\n          'The user\\'s map/reduce function threw an uncaught error.\\n' +\n          'You can debug this error by doing:\\n' +\n          'myDatabase.on(\\'error\\', function (err) { debugger; });\\n' +\n          'Please double-check your map/reduce function.');\n        console.error(content);\n      }\n    }\n\n    function receiveMessage(res) {\n      var split = utils.parseMessage(res, 3);\n      var messageId = split[0];\n      var messageType = split[1];\n      var content = JSON.parse(split[2]);\n\n      if (messageType === '4') { // unhandled error\n        handleUncaughtError(content);\n        return;\n      }\n\n      var cb = api._callbacks[messageId];\n\n      if (!cb) {\n        log('duplicate message (ignoring)', messageId, messageType, content);\n        return;\n      }\n\n      log('receive message', api._socketId, messageId, messageType, content);\n\n      if (messageType === '0') { // error\n        delete api._callbacks[messageId];\n        cb(content);\n      } else if (messageType === '1') { // success\n        delete api._callbacks[messageId];\n        cb(null, content);\n      } else if (messageType === '2') { // update, i.e. changes\n        if (api._changesListeners[messageId].asBinary) {\n          readAttachmentsAsBlobOrBuffer(content);\n        }\n        api._changesListeners[messageId].listener(content);\n      } else { // binary success\n        delete api._callbacks[messageId];\n        receiveBinaryMessage(content, cb);\n      }\n    }\n\n    function receiveBinaryMessage(content, cb) {\n      log('receiveBinaryMessage', content.uuid);\n      api._binaryMessages[content.uuid] = {\n        contentType: content.type,\n        cb: cb\n      };\n      checkBinaryReady(uuid);\n    }\n\n    function receiveBlob(blob) {\n      if (isBrowser) {\n        blobUtil.blobToBinaryString(blob.slice(0, 36)).then(function (uuid) {\n          api._blobs[uuid] = blob.slice(36);\n          log('receiveBlob', uuid);\n          checkBinaryReady(uuid);\n        })[\"catch\"](console.log.bind(console));\n      } else {\n        var uuid = blob.slice(0, 36).toString('utf8');\n        log('receiveBlob', uuid);\n        api._blobs[uuid] = blob.slice(36);\n        checkBinaryReady(uuid);\n      }\n    }\n\n    // binary messages come in two parts; wait until we've received both\n    function checkBinaryReady(uuid) {\n      if (!(uuid in api._blobs && uuid in api._binaryMessages)) {\n        return;\n      }\n      log('receive full binary message', uuid);\n      var blob = api._blobs[uuid];\n      var msg = api._binaryMessages[uuid];\n\n      delete api._blobs[uuid];\n      delete api._binaryMessages[uuid];\n\n      var blobToDeliver;\n      if (isBrowser) {\n        blobToDeliver = blobUtil.createBlob([blob], {type: msg.contentType});\n      } else {\n        blobToDeliver = blob;\n        blob.type = msg.contentType; // non-standard, but we do it for the tests\n      }\n\n      msg.cb(null, blobToDeliver);\n    }\n\n    api._socket.on('message', function (res) {\n      if (typeof res !== 'string') {\n        return receiveBlob(res);\n      }\n      receiveMessage(res);\n    });\n  }\n\n  if (instances[cacheKey]) {\n    useExistingSocket();\n  } else { // new DB\n    createNewSocket();\n  }\n\n  function sendMessage(type, args, callback) {\n    if (api._destroyed) {\n      return callback(new Error('this db was destroyed'));\n    } else if (api._closed) {\n      return callback(new Error('this db was closed'));\n    }\n    var messageId = uuid();\n    log('send message', api._socketId, messageId, type, args);\n    api._callbacks[messageId] = callback;\n    var stringArgs = stringifyArgs(args);\n    api._socket.send(type + ':' + messageId + ':' + stringArgs, function () {\n      log('message sent', api._socketId, messageId);\n    });\n  }\n\n  function sendBinaryMessage(type, args, blobIndex, blob, callback) {\n    var messageId = uuid();\n    api._callbacks[messageId] = callback;\n    var header = {\n      args: args,\n      blobIndex: blobIndex,\n      messageId: messageId,\n      messageType: type\n    };\n\n    log('send binary message', api._socketId, messageId, header);\n    var headerString = JSON.stringify(header);\n    var headerLen = padInt(headerString.length, 16);\n    var blobToSend;\n    if (isBrowser) {\n      blobToSend = blobUtil.createBlob([\n        headerLen,\n        headerString,\n        blob\n      ]);\n    } else { // node.js\n      blobToSend = buffer.concat([\n        new buffer(headerLen, 'utf8'),\n        new buffer(headerString, 'utf8'),\n        new buffer(blob, 'binary')\n      ]);\n    }\n    api._socket.send(blobToSend, function () {\n      log('binary message sent', api._socketId, messageId);\n    });\n  }\n\n  api.type = function () {\n    return 'socket';\n  };\n\n  api._id = adapterFun('id', function (callback) {\n    sendMessage('id', [], callback);\n  });\n\n  api.compact = adapterFun('compact', function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    sendMessage('compact', [opts], callback);\n  });\n\n  api._info = function (callback) {\n    sendMessage('info', [], callback);\n  };\n\n  api.get = adapterFun('get', function (id, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    sendMessage('get', [id, opts], function (err, res) {\n      if (err) {\n        return callback(err);\n      }\n      if (opts.attachments && opts.binary) {\n        if (Array.isArray(res)) {\n          res.forEach(readAttachmentsAsBlobOrBuffer);\n        } else {\n          readAttachmentsAsBlobOrBuffer({doc: res});\n        }\n      }\n      callback(null, res);\n    });\n  });\n\n  // hacky code necessary due to implicit breaking change in\n  // https://github.com/pouchdb/pouchdb/commits/0ddeae6b\n  api._get = function (id, opts, callback) {\n    api.get(id, opts, function (err, doc) {\n      if (err) {\n        return callback(err);\n      }\n      callback(null, {doc: doc});\n    });\n  };\n\n  api.remove =\n    adapterFun('remove', function (docOrId, optsOrRev, opts, callback) {\n      var doc;\n      if (typeof optsOrRev === 'string') {\n        // id, rev, opts, callback style\n        doc = {\n          _id: docOrId,\n          _rev: optsOrRev\n        };\n        if (typeof opts === 'function') {\n          callback = opts;\n          opts = {};\n        }\n      } else {\n        // doc, opts, callback style\n        doc = docOrId;\n        if (typeof optsOrRev === 'function') {\n          callback = optsOrRev;\n          opts = {};\n        } else {\n          callback = opts;\n          opts = optsOrRev;\n        }\n      }\n      var rev = (doc._rev || opts.rev);\n\n      sendMessage('remove', [doc._id, rev], callback);\n  });\n\n  api.getAttachment =\n    adapterFun('getAttachment', function (docId, attachmentId, opts,\n                                                callback) {\n      if (typeof opts === 'function') {\n        callback = opts;\n        opts = {};\n      }\n      sendMessage('getAttachment', [docId, attachmentId, opts], callback);\n  });\n\n  api.removeAttachment =\n    adapterFun('removeAttachment', function (docId, attachmentId, rev,\n                                                   callback) {\n\n      sendMessage('removeAttachment', [docId, attachmentId, rev], callback);\n    });\n\n  // Add the attachment given by blob and its contentType property\n  // to the document with the given id, the revision given by rev, and\n  // add it to the database given by host.\n  api.putAttachment =\n    adapterFun('putAttachment', function (docId, attachmentId, rev, blob,\n                                                type, callback) {\n      if (typeof type === 'function') {\n        callback = type;\n        type = blob;\n        blob = rev;\n        rev = null;\n      }\n      if (typeof type === 'undefined') {\n        type = blob;\n        blob = rev;\n        rev = null;\n      }\n\n      if (typeof blob === 'string') {\n        var binary;\n        try {\n          binary = utils.atob(blob);\n        } catch (err) {\n          // it's not base64-encoded, so throw error\n          return callback(errors.error(errors.BAD_ARG,\n            'Attachments need to be base64 encoded'));\n        }\n        if (isBrowser) {\n          blob = utils.createBlob([utils.binaryStringToArrayBuffer(binary)], {type: type});\n        } else {\n          blob = binary ? new buffer(binary, 'binary') : '';\n        }\n      }\n\n      var args = [docId, attachmentId, rev, null, type];\n      sendBinaryMessage('putAttachment', args, 3, blob, callback);\n    });\n\n  api.put = adapterFun('put', utils.getArguments(function (args) {\n    var temp, temptype, opts;\n    var doc = args.shift();\n    var id = '_id' in doc;\n    var callback = args.pop();\n    if (typeof doc !== 'object' || Array.isArray(doc)) {\n      return callback(errors.error(errors.NOT_AN_OBJECT));\n    }\n\n    doc = utils.clone(doc);\n\n    preprocessAttachments(doc).then(function () {\n      while (true) {\n        temp = args.shift();\n        temptype = typeof temp;\n        if (temptype === \"string\" && !id) {\n          doc._id = temp;\n          id = true;\n        } else if (temptype === \"string\" && id && !('_rev' in doc)) {\n          doc._rev = temp;\n        } else if (temptype === \"object\") {\n          opts = utils.clone(temp);\n        }\n        if (!args.length) {\n          break;\n        }\n      }\n      opts = opts || {};\n\n      sendMessage('put', [doc, opts], callback);\n    })[\"catch\"](callback);\n\n  }));\n\n  api.post = adapterFun('post', function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = utils.clone(opts);\n\n    sendMessage('post', [doc, opts], callback);\n  });\n\n  api._bulkDocs = function (req, opts, callback) {\n    var docs = req.docs || req;\n\n    Promise.all(docs.map(function (doc) {\n      var atts = doc._attachments;\n      if (!atts) {\n        return;\n      }\n      return Promise.all(Object.keys(atts).map(function (key) {\n        var att = doc._attachments[key];\n        if (!isBinaryObject(att.data)) {\n          return;\n        }\n        return new Promise(function (resolve) {\n          readAsBinaryString(att.data, resolve);\n        }).then(function (binString) {\n          att.data = base64.btoa(binString);\n        });\n      }));\n    })).then(function () {\n      sendMessage('bulkDocs', [req, opts], callback);\n    })[\"catch\"](callback);\n  };\n\n  api._allDocs = function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    sendMessage('allDocs', [opts], function (err, res) {\n      if (err) {\n        return callback(err);\n      }\n      if (opts.attachments && opts.binary) {\n        res.rows.forEach(readAttachmentsAsBlobOrBuffer);\n      }\n      callback(null, res);\n    });\n  };\n\n  api._changes = function (opts) {\n    opts = utils.clone(opts);\n\n    if (opts.continuous) {\n      var messageId = uuid();\n      api._changesListeners[messageId] = {\n        listener: opts.onChange,\n        asBinary: opts.attachments && opts.binary\n      };\n      api._callbacks[messageId] = opts.complete;\n      api._socket.send('liveChanges' + ':' + messageId + ':' + JSON.stringify([opts]));\n      return {\n        cancel: function () {\n          api._socket.send('cancelChanges' + ':' + messageId + ':' + JSON.stringify([]));\n        }\n      };\n    }\n\n    sendMessage('changes', [opts], function (err, res) {\n      if (err) {\n        opts.complete(err);\n        return callback(err);\n      }\n      res.results.forEach(function (change) {\n        if (opts.attachments && opts.binary) {\n          readAttachmentsAsBlobOrBuffer(change);\n        }\n        opts.onChange(change);\n      });\n      if (opts.returnDocs === false || opts.return_docs === false) {\n        res.results = [];\n      }\n      opts.complete(null, res);\n    });\n  };\n\n  // Given a set of document/revision IDs (given by req), tets the subset of\n  // those that do NOT correspond to revisions stored in the database.\n  // See http://wiki.apache.org/couchdb/HttpPostRevsDiff\n  api.revsDiff = adapterFun('revsDiff', function (req, opts, callback) {\n    // If no options were given, set the callback to be the second parameter\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n\n    sendMessage('revsDiff', [req, opts], callback);\n  });\n\n  api._query = adapterFun('query', function (fun, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var funEncoded = fun;\n    if (typeof fun === 'function') {\n      funEncoded = {map: fun};\n    }\n    sendMessage('query', [funEncoded, opts], function (err, res) {\n      if (err) {\n        return callback(err);\n      }\n      if (opts.attachments && opts.binary) {\n        res.rows.forEach(readAttachmentsAsBlobOrBuffer);\n      }\n      callback(null, res);\n    });\n  });\n\n  api._viewCleanup = adapterFun('viewCleanup', function (callback) {\n    sendMessage('viewCleanup', [], callback);\n  });\n\n  api._close = function (callback) {\n    api._closed = true;\n    var cacheKey = '$' + api._socketName;\n    if (!instances[cacheKey]) { // already closed/destroyed\n      return callback();\n    }\n    delete instances[cacheKey];\n    close(api, callback);\n  };\n\n  api.destroy = adapterFun('destroy', function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var cacheKey = '$' + api._socketName;\n\n    if (!instances[cacheKey]) { // already closed/destroyed\n      return callback(null, {ok: true});\n    }\n    delete instances[cacheKey];\n    sendMessage('destroy', [], function (err, res) {\n      if (err) {\n        api.emit('error', err);\n        return callback(err);\n      }\n      api._destroyed = true;\n      close(api, function (err) {\n        if (err) {\n          api.emit('error', err);\n          return callback(err);\n        }\n        api.emit('destroyed');\n        callback(null, res);\n      });\n    });\n  });\n}\n\n// SocketPouch is a valid adapter.\nSocketPouch.valid = function () {\n  return true;\n};\n\nmodule.exports = SocketPouch;\n\n/* istanbul ignore next */\nif (typeof window !== 'undefined' && window.PouchDB) {\n  window.PouchDB.adapter('socket', module.exports);\n}\n\n}).call(this,_dereq_('_process'))\n},{\"../shared/buffer\":11,\"../shared/errors\":13,\"../shared/isBinaryObject\":14,\"../shared/utils\":17,\"./../shared/uuid\":18,\"./base64\":3,\"./readAsBinaryString\":9,\"./utils\":10,\"_process\":71,\"blob-util\":22,\"debug\":27,\"engine.io-client\":29,\"pouchdb-promise\":69}],9:[function(_dereq_,module,exports){\n'use strict';\n\nvar arrayBufferToBinaryString = _dereq_('./arrayBufferToBinaryString');\n\n// shim for browsers that don't support it\nmodule.exports = function (blob, callback) {\n  var reader = new FileReader();\n  var hasBinaryString = typeof reader.readAsBinaryString === 'function';\n  reader.onloadend = function (e) {\n    var result = e.target.result || '';\n    if (hasBinaryString) {\n      return callback(result);\n    }\n    callback(arrayBufferToBinaryString(result));\n  };\n  if (hasBinaryString) {\n    reader.readAsBinaryString(blob);\n  } else {\n    reader.readAsArrayBuffer(blob);\n  }\n};\n},{\"./arrayBufferToBinaryString\":2}],10:[function(_dereq_,module,exports){\n(function (process){\n'use strict';\n\nvar utils = _dereq_('../shared/utils');\nvar log = _dereq_('debug')('pouchdb:socket:client');\nvar isBrowser = typeof process === 'undefined' || process.browser;\n\nexports.preprocessAttachments = function preprocessAttachments(doc) {\n  if (!doc._attachments || !Object.keys(doc._attachments)) {\n    return utils.Promise.resolve();\n  }\n\n  var atts = doc._attachments;\n  return utils.Promise.all(Object.keys(atts).map(function (key) {\n    var att = atts[key];\n    if (att.data && typeof att.data !== 'string') {\n      if (isBrowser) {\n        return new utils.Promise(function (resolve) {\n          utils.readAsBinaryString(att.data, function (binary) {\n            att.data = utils.btoa(binary);\n            resolve();\n          });\n        });\n      } else {\n        att.data = att.data.toString('base64');\n      }\n    }\n  }));\n};\n\nvar b64StringToBluffer =\n  _dereq_('./base64StringToBlobOrBuffer');\n\nexports.readAttachmentsAsBlobOrBuffer = function (row) {\n  var atts = (row.doc && row.doc._attachments) ||\n    (row.ok && row.ok._attachments);\n  if (!atts) {\n    return;\n  }\n  Object.keys(atts).forEach(function (filename) {\n    var att = atts[filename];\n    att.data = b64StringToBluffer(att.data, att.content_type);\n  });\n};\n\nexports.stringifyArgs = function stringifyArgs(args) {\n  var funcArgs = ['filter', 'map', 'reduce'];\n  args.forEach(function (arg) {\n    if (typeof arg === 'object' && arg !== null && !Array.isArray(arg)) {\n      funcArgs.forEach(function (funcArg) {\n        if (funcArg in arg && typeof arg[funcArg] === 'function') {\n          arg[funcArg] = {\n            type: 'func',\n            func: arg[funcArg].toString()\n          };\n        }\n      });\n    }\n  });\n  return JSON.stringify(args);\n};\n\nexports.padInt = function padInt(i, len) {\n  var res = i.toString();\n  while (res.length < len) {\n    res = '0' + res;\n  }\n  return res;\n};\n\n\nexports.adapterFun = function adapterFun(name, callback) {\n\n  function logApiCall(self, name, args) {\n    if (!log.enabled) {\n      return;\n    }\n    // db.name was added in pouch 6.0.0\n    var dbName = self.name || self._db_name;\n    var logArgs = [dbName, name];\n    for (var i = 0; i < args.length - 1; i++) {\n      logArgs.push(args[i]);\n    }\n    log.apply(null, logArgs);\n\n    // override the callback itself to log the response\n    var origCallback = args[args.length - 1];\n    args[args.length - 1] = function (err, res) {\n      var responseArgs = [dbName, name];\n      responseArgs = responseArgs.concat(\n        err ? ['error', err] : ['success', res]\n      );\n      log.apply(null, responseArgs);\n      origCallback(err, res);\n    };\n  }\n\n\n  return utils.toPromise(utils.getArguments(function (args) {\n    if (this._closed) {\n      return utils.Promise.reject(new Error('database is closed'));\n    }\n    var self = this;\n    logApiCall(self, name, args);\n    if (!this.taskqueue.isReady) {\n      return new utils.Promise(function (fulfill, reject) {\n        self.taskqueue.addTask(function (failed) {\n          if (failed) {\n            reject(failed);\n          } else {\n            fulfill(self[name].apply(self, args));\n          }\n        });\n      });\n    }\n    return callback.apply(this, args);\n  }));\n};\n}).call(this,_dereq_('_process'))\n},{\"../shared/utils\":17,\"./base64StringToBlobOrBuffer\":4,\"_process\":71,\"debug\":27}],11:[function(_dereq_,module,exports){\n// hey guess what, we don't need this in the browser\nmodule.exports = {};\n},{}],12:[function(_dereq_,module,exports){\n'use strict';\n\nfunction cloneArrayBuffer(buff) {\n  if (typeof buff.slice === 'function') {\n    return buff.slice(0);\n  }\n  // IE10-11 slice() polyfill\n  var target = new ArrayBuffer(buff.byteLength);\n  var targetArray = new Uint8Array(target);\n  var sourceArray = new Uint8Array(buff);\n  targetArray.set(sourceArray);\n  return target;\n}\n\nmodule.exports = function cloneBinaryObject(object) {\n  if (object instanceof ArrayBuffer) {\n    return cloneArrayBuffer(object);\n  }\n  var size = object.size;\n  var type = object.type;\n  // Blob\n  if (typeof object.slice === 'function') {\n    return object.slice(0, size, type);\n  }\n  // PhantomJS slice() replacement\n  return object.webkitSlice(0, size, type);\n};\n\n},{}],13:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar inherits = _dereq_('inherits');\ninherits(PouchError, Error);\n\nfunction PouchError(opts) {\n  Error.call(opts.reason);\n  this.status = opts.status;\n  this.name = opts.error;\n  this.message = opts.reason;\n  this.error = true;\n}\n\nPouchError.prototype.toString = function () {\n  return JSON.stringify({\n    status: this.status,\n    name: this.name,\n    message: this.message\n  });\n};\n\nexports.UNAUTHORIZED = new PouchError({\n  status: 401,\n  error: 'unauthorized',\n  reason: \"Name or password is incorrect.\"\n});\n\nexports.MISSING_BULK_DOCS = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: \"Missing JSON list of 'docs'\"\n});\n\nexports.MISSING_DOC = new PouchError({\n  status: 404,\n  error: 'not_found',\n  reason: 'missing'\n});\n\nexports.REV_CONFLICT = new PouchError({\n  status: 409,\n  error: 'conflict',\n  reason: 'Document update conflict'\n});\n\nexports.INVALID_ID = new PouchError({\n  status: 400,\n  error: 'invalid_id',\n  reason: '_id field must contain a string'\n});\n\nexports.MISSING_ID = new PouchError({\n  status: 412,\n  error: 'missing_id',\n  reason: '_id is required for puts'\n});\n\nexports.RESERVED_ID = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Only reserved document ids may start with underscore.'\n});\n\nexports.NOT_OPEN = new PouchError({\n  status: 412,\n  error: 'precondition_failed',\n  reason: 'Database not open'\n});\n\nexports.UNKNOWN_ERROR = new PouchError({\n  status: 500,\n  error: 'unknown_error',\n  reason: 'Database encountered an unknown error'\n});\n\nexports.BAD_ARG = new PouchError({\n  status: 500,\n  error: 'badarg',\n  reason: 'Some query argument is invalid'\n});\n\nexports.INVALID_REQUEST = new PouchError({\n  status: 400,\n  error: 'invalid_request',\n  reason: 'Request was invalid'\n});\n\nexports.QUERY_PARSE_ERROR = new PouchError({\n  status: 400,\n  error: 'query_parse_error',\n  reason: 'Some query parameter is invalid'\n});\n\nexports.DOC_VALIDATION = new PouchError({\n  status: 500,\n  error: 'doc_validation',\n  reason: 'Bad special document member'\n});\n\nexports.BAD_REQUEST = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Something wrong with the request'\n});\n\nexports.NOT_AN_OBJECT = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Document must be a JSON object'\n});\n\nexports.DB_MISSING = new PouchError({\n  status: 404,\n  error: 'not_found',\n  reason: 'Database not found'\n});\n\nexports.IDB_ERROR = new PouchError({\n  status: 500,\n  error: 'indexed_db_went_bad',\n  reason: 'unknown'\n});\n\nexports.WSQ_ERROR = new PouchError({\n  status: 500,\n  error: 'web_sql_went_bad',\n  reason: 'unknown'\n});\n\nexports.LDB_ERROR = new PouchError({\n  status: 500,\n  error: 'levelDB_went_went_bad',\n  reason: 'unknown'\n});\n\nexports.FORBIDDEN = new PouchError({\n  status: 403,\n  error: 'forbidden',\n  reason: 'Forbidden by design doc validate_doc_update function'\n});\n\nexports.INVALID_REV = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Invalid rev format'\n});\n\nexports.FILE_EXISTS = new PouchError({\n  status: 412,\n  error: 'file_exists',\n  reason: 'The database could not be created, the file already exists.'\n});\n\nexports.MISSING_STUB = new PouchError({\n  status: 412,\n  error: 'missing_stub'\n});\n\nexports.error = function (error, reason, name) {\n  function CustomPouchError(reason) {\n    // inherit error properties from our parent error manually\n    // so as to allow proper JSON parsing.\n    /* jshint ignore:start */\n    for (var p in error) {\n      if (typeof error[p] !== 'function') {\n        this[p] = error[p];\n      }\n    }\n    /* jshint ignore:end */\n    if (name !== undefined) {\n      this.name = name;\n    }\n    if (reason !== undefined) {\n      this.reason = reason;\n    }\n  }\n  CustomPouchError.prototype = PouchError.prototype;\n  return new CustomPouchError(reason);\n};\n\n// Find one of the errors defined above based on the value\n// of the specified property.\n// If reason is provided prefer the error matching that reason.\n// This is for differentiating between errors with the same name and status,\n// eg, bad_request.\nexports.getErrorTypeByProp = function (prop, value, reason) {\n  var errors = exports;\n  var keys = Object.keys(errors).filter(function (key) {\n    var error = errors[key];\n    return typeof error !== 'function' && error[prop] === value;\n  });\n  var key = reason && keys.filter(function (key) {\n      var error = errors[key];\n      return error.message === reason;\n    })[0] || keys[0];\n  return (key) ? errors[key] : null;\n};\n\nexports.generateErrorFromResponse = function (res) {\n  var error, errName, errType, errMsg, errReason;\n  var errors = exports;\n\n  errName = (res.error === true && typeof res.name === 'string') ?\n    res.name :\n    res.error;\n  errReason = res.reason;\n  errType = errors.getErrorTypeByProp('name', errName, errReason);\n\n  if (res.missing ||\n    errReason === 'missing' ||\n    errReason === 'deleted' ||\n    errName === 'not_found') {\n    errType = errors.MISSING_DOC;\n  } else if (errName === 'doc_validation') {\n    // doc validation needs special treatment since\n    // res.reason depends on the validation error.\n    // see utils.js\n    errType = errors.DOC_VALIDATION;\n    errMsg = errReason;\n  } else if (errName === 'bad_request' && errType.message !== errReason) {\n    // if bad_request error already found based on reason don't override.\n\n    // attachment errors.\n    if (errReason.indexOf('unknown stub attachment') === 0) {\n      errType = errors.MISSING_STUB;\n      errMsg = errReason;\n    } else {\n      errType = errors.BAD_REQUEST;\n    }\n  }\n\n  // fallback to error by statys or unknown error.\n  if (!errType) {\n    errType = errors.getErrorTypeByProp('status', res.status, errReason) ||\n    errors.UNKNOWN_ERROR;\n  }\n\n  error = errors.error(errType, errReason, errName);\n\n  // Keep custom message.\n  if (errMsg) {\n    error.message = errMsg;\n  }\n\n  // Keep helpful response data in our error messages.\n  if (res.id) {\n    error.id = res.id;\n  }\n  if (res.status) {\n    error.status = res.status;\n  }\n  if (res.statusText) {\n    error.name = res.statusText;\n  }\n  if (res.missing) {\n    error.missing = res.missing;\n  }\n\n  return error;\n};\n\n},{\"inherits\":48}],14:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = function isBinaryObject(object) {\n  return object instanceof ArrayBuffer ||\n    (typeof Blob !== 'undefined' && object instanceof Blob);\n};\n},{}],15:[function(_dereq_,module,exports){\n'use strict';\n\nfunction parseMessage(msg, numArgs) {\n  var res = [];\n  for (var i = 0; i < numArgs - 1; i++) {\n    var idx = msg.indexOf(':');\n    res.push(msg.substring(0, idx));\n    msg = msg.substring(idx + 1);\n  }\n  res.push(msg);\n  return res;\n}\n\nmodule.exports = parseMessage;\n},{}],16:[function(_dereq_,module,exports){\n'use strict';\n\nvar isBinaryObject = _dereq_('./isBinaryObject');\nvar cloneBinaryObject = _dereq_('./cloneBinaryObject');\n\nmodule.exports = function clone(object) {\n  var newObject;\n  var i;\n  var len;\n\n  if (!object || typeof object !== 'object') {\n    return object;\n  }\n\n  if (Array.isArray(object)) {\n    newObject = [];\n    for (i = 0, len = object.length; i < len; i++) {\n      newObject[i] = clone(object[i]);\n    }\n    return newObject;\n  }\n\n  // special case: to avoid inconsistencies between IndexedDB\n  // and other backends, we automatically stringify Dates\n  if (object instanceof Date) {\n    return object.toISOString();\n  }\n\n  if (isBinaryObject(object)) {\n    return cloneBinaryObject(object);\n  }\n\n  newObject = {};\n  for (i in object) {\n    if (Object.prototype.hasOwnProperty.call(object, i)) {\n      var value = clone(object[i]);\n      if (typeof value !== 'undefined') {\n        newObject[i] = value;\n      }\n    }\n  }\n  return newObject;\n};\n\n},{\"./cloneBinaryObject\":12,\"./isBinaryObject\":14}],17:[function(_dereq_,module,exports){\n(function (process){\n'use strict';\n\nvar Promise = _dereq_('pouchdb-promise');\nvar buffer = _dereq_('./buffer');\n\nexports.lastIndexOf = function lastIndexOf(str, char) {\n  for (var i = str.length - 1; i >= 0; i--) {\n    if (str.charAt(i) === char) {\n      return i;\n    }\n  }\n  return -1;\n};\n\nexports.clone = _dereq_('./pouchdb-clone');\n\nexports.parseMessage = _dereq_('./parse-message');\n\n/* istanbul ignore next */\nexports.once = function once(fun) {\n  var called = false;\n  return exports.getArguments(function (args) {\n    if (called) {\n      console.trace();\n      throw new Error('once called  more than once');\n    } else {\n      called = true;\n      fun.apply(this, args);\n    }\n  });\n};\n/* istanbul ignore next */\nexports.getArguments = function getArguments(fun) {\n  return function () {\n    var len = arguments.length;\n    var args = new Array(len);\n    var i = -1;\n    while (++i < len) {\n      args[i] = arguments[i];\n    }\n    return fun.call(this, args);\n  };\n};\n/* istanbul ignore next */\nexports.toPromise = function toPromise(func) {\n  //create the function we will be returning\n  return exports.getArguments(function (args) {\n    var self = this;\n    var tempCB = (typeof args[args.length - 1] === 'function') ? args.pop() : false;\n    // if the last argument is a function, assume its a callback\n    var usedCB;\n    if (tempCB) {\n      // if it was a callback, create a new callback which calls it,\n      // but do so async so we don't trap any errors\n      usedCB = function (err, resp) {\n        process.nextTick(function () {\n          tempCB(err, resp);\n        });\n      };\n    }\n    var promise = new Promise(function (fulfill, reject) {\n      try {\n        var callback = exports.once(function (err, mesg) {\n          if (err) {\n            reject(err);\n          } else {\n            fulfill(mesg);\n          }\n        });\n        // create a callback for this invocation\n        // apply the function in the orig context\n        args.push(callback);\n        func.apply(self, args);\n      } catch (e) {\n        reject(e);\n      }\n    });\n    // if there is a callback, call it back\n    if (usedCB) {\n      promise.then(function (result) {\n        usedCB(null, result);\n      }, usedCB);\n    }\n    promise.cancel = function () {\n      return this;\n    };\n    return promise;\n  });\n};\n\nif (typeof atob === 'function') {\n  exports.atob = function atobShim(str) {\n    return atob(str);\n  };\n} else {\n  exports.atob = function atobShim(str) {\n    var base64 = new buffer(str, 'base64');\n    // Node.js will just skip the characters it can't encode instead of\n    // throwing and exception\n    if (base64.toString('base64') !== str) {\n      throw (\"Cannot base64 encode full string\");\n    }\n    return base64.toString('binary');\n  };\n}\n\nif (typeof btoa === 'function') {\n  exports.btoa = function btoaShim(str) {\n    return btoa(str);\n  };\n} else {\n  exports.btoa = function btoaShim(str) {\n    return new buffer(str, 'binary').toString('base64');\n  };\n}\n\nexports.inherits = _dereq_('inherits');\nexports.Promise = Promise;\n\nvar binUtil = _dereq_('pouchdb-binary-util');\n\nexports.createBlob = binUtil.createBlob;\nexports.readAsArrayBuffer = binUtil.readAsArrayBuffer;\nexports.readAsBinaryString = binUtil.readAsBinaryString;\nexports.binaryStringToArrayBuffer = binUtil.binaryStringToArrayBuffer;\nexports.arrayBufferToBinaryString = binUtil.arrayBufferToBinaryString;\n}).call(this,_dereq_('_process'))\n},{\"./buffer\":11,\"./parse-message\":15,\"./pouchdb-clone\":16,\"_process\":71,\"inherits\":48,\"pouchdb-binary-util\":68,\"pouchdb-promise\":69}],18:[function(_dereq_,module,exports){\n\"use strict\";\n\n// BEGIN Math.uuid.js\n\n/*!\n Math.uuid.js (v1.4)\n http://www.broofa.com\n mailto:robert@broofa.com\n\n Copyright (c) 2010 Robert Kieffer\n Dual licensed under the MIT and GPL licenses.\n */\n\n/*\n * Generate a random uuid.\n *\n * USAGE: Math.uuid(length, radix)\n *   length - the desired number of characters\n *   radix  - the number of allowable values for each character.\n *\n * EXAMPLES:\n *   // No arguments  - returns RFC4122, version 4 ID\n *   >>> Math.uuid()\n *   \"92329D39-6F5C-4520-ABFC-AAB64544E172\"\n *\n *   // One argument - returns ID of the specified length\n *   >>> Math.uuid(15)     // 15 character ID (default base=62)\n *   \"VcydxgltxrVZSTV\"\n *\n *   // Two arguments - returns ID of the specified length, and radix. \n *   // (Radix must be <= 62)\n *   >>> Math.uuid(8, 2)  // 8 character ID (base=2)\n *   \"01001010\"\n *   >>> Math.uuid(8, 10) // 8 character ID (base=10)\n *   \"47473046\"\n *   >>> Math.uuid(8, 16) // 8 character ID (base=16)\n *   \"098F4D35\"\n */\nvar chars = (\n'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' +\n'abcdefghijklmnopqrstuvwxyz'\n).split('');\nfunction getValue(radix) {\n  return 0 | Math.random() * radix;\n}\nfunction uuid(len, radix) {\n  radix = radix || chars.length;\n  var out = '';\n  var i = -1;\n\n  if (len) {\n    // Compact form\n    while (++i < len) {\n      out += chars[getValue(radix)];\n    }\n    return out;\n  }\n  // rfc4122, version 4 form\n  // Fill in random data.  At i==19 set the high bits of clock sequence as\n  // per rfc4122, sec. 4.1.5\n  while (++i < 36) {\n    switch (i) {\n      case 8:\n      case 13:\n      case 18:\n      case 23:\n        out += '-';\n        break;\n      case 19:\n        out += chars[(getValue(16) & 0x3) | 0x8];\n        break;\n      default:\n        out += chars[getValue(16)];\n    }\n  }\n\n  return out;\n}\n\n\n\nmodule.exports = uuid;\n\n\n},{}],19:[function(_dereq_,module,exports){\nmodule.exports = after\n\nfunction after(count, callback, err_cb) {\n    var bail = false\n    err_cb = err_cb || noop\n    proxy.count = count\n\n    return (count === 0) ? callback() : proxy\n\n    function proxy(err, result) {\n        if (proxy.count <= 0) {\n            throw new Error('after called too many times')\n        }\n        --proxy.count\n\n        // after first error, rest are passed to err_cb\n        if (err) {\n            bail = true\n            callback(err)\n            // future error callbacks will go to error handler\n            callback = err_cb\n        } else if (proxy.count === 0 && !bail) {\n            callback(null, result)\n        }\n    }\n}\n\nfunction noop() {}\n\n},{}],20:[function(_dereq_,module,exports){\n/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffer.prototype.slice is not supported\n *\n * @api public\n */\n\nmodule.exports = function(arraybuffer, start, end) {\n  var bytes = arraybuffer.byteLength;\n  start = start || 0;\n  end = end || bytes;\n\n  if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\n  if (start < 0) { start += bytes; }\n  if (end < 0) { end += bytes; }\n  if (end > bytes) { end = bytes; }\n\n  if (start >= bytes || start >= end || bytes === 0) {\n    return new ArrayBuffer(0);\n  }\n\n  var abv = new Uint8Array(arraybuffer);\n  var result = new Uint8Array(end - start);\n  for (var i = start, ii = 0; i < end; i++, ii++) {\n    result[ii] = abv[i];\n  }\n  return result.buffer;\n};\n\n},{}],21:[function(_dereq_,module,exports){\n/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(){\n  \"use strict\";\n\n  var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n  // Use a lookup table to find the index.\n  var lookup = new Uint8Array(256);\n  for (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n  }\n\n  exports.encode = function(arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer),\n    i, len = bytes.length, base64 = \"\";\n\n    for (i = 0; i < len; i+=3) {\n      base64 += chars[bytes[i] >> 2];\n      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n      base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if ((len % 3) === 2) {\n      base64 = base64.substring(0, base64.length - 1) + \"=\";\n    } else if (len % 3 === 1) {\n      base64 = base64.substring(0, base64.length - 2) + \"==\";\n    }\n\n    return base64;\n  };\n\n  exports.decode =  function(base64) {\n    var bufferLength = base64.length * 0.75,\n    len = base64.length, i, p = 0,\n    encoded1, encoded2, encoded3, encoded4;\n\n    if (base64[base64.length - 1] === \"=\") {\n      bufferLength--;\n      if (base64[base64.length - 2] === \"=\") {\n        bufferLength--;\n      }\n    }\n\n    var arraybuffer = new ArrayBuffer(bufferLength),\n    bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i+=4) {\n      encoded1 = lookup[base64.charCodeAt(i)];\n      encoded2 = lookup[base64.charCodeAt(i+1)];\n      encoded3 = lookup[base64.charCodeAt(i+2)];\n      encoded4 = lookup[base64.charCodeAt(i+3)];\n\n      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n  };\n})();\n\n},{}],22:[function(_dereq_,module,exports){\n'use strict';\n\n/* jshint -W079 */\nvar Blob = _dereq_('blob');\nvar Promise = _dereq_('native-or-lie');\n\n//\n// PRIVATE\n//\n\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction binaryStringToArrayBuffer(binary) {\n  var length = binary.length;\n  var buf = new ArrayBuffer(length);\n  var arr = new Uint8Array(buf);\n  var i = -1;\n  while (++i < length) {\n    arr[i] = binary.charCodeAt(i);\n  }\n  return buf;\n}\n\n// Can't find original post, but this is close\n// http://stackoverflow.com/questions/6965107/ (continues on next line)\n// converting-between-strings-and-arraybuffers\nfunction arrayBufferToBinaryString(buffer) {\n  var binary = '';\n  var bytes = new Uint8Array(buffer);\n  var length = bytes.byteLength;\n  var i = -1;\n  while (++i < length) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return binary;\n}\n\n// doesn't download the image more than once, because\n// browsers aren't dumb. uses the cache\nfunction loadImage(src, crossOrigin) {\n  return new Promise(function (resolve, reject) {\n    var img = new Image();\n    if (crossOrigin) {\n      img.crossOrigin = crossOrigin;\n    }\n    img.onload = function () {\n      resolve(img);\n    };\n    img.onerror = reject;\n    img.src = src;\n  });\n}\n\nfunction imgToCanvas(img) {\n  var canvas = document.createElement('canvas');\n\n  canvas.width = img.width;\n  canvas.height = img.height;\n\n  // copy the image contents to the canvas\n  var context = canvas.getContext('2d');\n  context.drawImage(\n    img,\n    0, 0,\n    img.width, img.height,\n    0, 0,\n    img.width, img.height);\n\n  return canvas;\n}\n\n//\n// PUBLIC\n//\n\n/**\n * Shim for\n * [new Blob()]{@link https://developer.mozilla.org/en-US/docs/Web/API/Blob.Blob}\n * to support\n * [older browsers that use the deprecated <code>BlobBuilder</code> API]{@link http://caniuse.com/blob}.\n *\n * @param {Array} parts - content of the <code>Blob</code>\n * @param {Object} options - usually just <code>{type: myContentType}</code>\n * @returns {Blob}\n */\nfunction createBlob(parts, options) {\n  options = options || {};\n  if (typeof options === 'string') {\n    options = {type: options}; // do you a solid here\n  }\n  return new Blob(parts, options);\n}\n\n/**\n * Shim for\n * [URL.createObjectURL()]{@link https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL}\n * to support browsers that only have the prefixed\n * <code>webkitURL</code> (e.g. Android <4.4).\n * @param {Blob} blob\n * @returns {string} url\n */\nfunction createObjectURL(blob) {\n  return (window.URL || window.webkitURL).createObjectURL(blob);\n}\n\n/**\n * Shim for\n * [URL.revokeObjectURL()]{@link https://developer.mozilla.org/en-US/docs/Web/API/URL.revokeObjectURL}\n * to support browsers that only have the prefixed\n * <code>webkitURL</code> (e.g. Android <4.4).\n * @param {string} url\n */\nfunction revokeObjectURL(url) {\n  return (window.URL || window.webkitURL).revokeObjectURL(url);\n}\n\n/**\n * Convert a <code>Blob</code> to a binary string. Returns a Promise.\n *\n * @param {Blob} blob\n * @returns {Promise} Promise that resolves with the binary string\n */\nfunction blobToBinaryString(blob) {\n  return new Promise(function (resolve, reject) {\n    var reader = new FileReader();\n    var hasBinaryString = typeof reader.readAsBinaryString === 'function';\n    reader.onloadend = function (e) {\n      var result = e.target.result || '';\n      if (hasBinaryString) {\n        return resolve(result);\n      }\n      resolve(arrayBufferToBinaryString(result));\n    };\n    reader.onerror = reject;\n    if (hasBinaryString) {\n      reader.readAsBinaryString(blob);\n    } else {\n      reader.readAsArrayBuffer(blob);\n    }\n  });\n}\n\n/**\n * Convert a base64-encoded string to a <code>Blob</code>. Returns a Promise.\n * @param {string} base64\n * @param {string|undefined} type - the content type (optional)\n * @returns {Promise} Promise that resolves with the <code>Blob</code>\n */\nfunction base64StringToBlob(base64, type) {\n  return Promise.resolve().then(function () {\n    var parts = [binaryStringToArrayBuffer(atob(base64))];\n    return type ? createBlob(parts, {type: type}) : createBlob(parts);\n  });\n}\n\n/**\n * Convert a binary string to a <code>Blob</code>. Returns a Promise.\n * @param {string} binary\n * @param {string|undefined} type - the content type (optional)\n * @returns {Promise} Promise that resolves with the <code>Blob</code>\n */\nfunction binaryStringToBlob(binary, type) {\n  return Promise.resolve().then(function () {\n    return base64StringToBlob(btoa(binary), type);\n  });\n}\n\n/**\n * Convert a <code>Blob</code> to a binary string. Returns a Promise.\n * @param {Blob} blob\n * @returns {Promise} Promise that resolves with the binary string\n */\nfunction blobToBase64String(blob) {\n  return blobToBinaryString(blob).then(function (binary) {\n    return btoa(binary);\n  });\n}\n\n/**\n * Convert a data URL string\n * (e.g. <code>'data:image/png;base64,iVBORw0KG...'</code>)\n * to a <code>Blob</code>. Returns a Promise.\n * @param {string} dataURL\n * @returns {Promise} Promise that resolves with the <code>Blob</code>\n */\nfunction dataURLToBlob(dataURL) {\n  return Promise.resolve().then(function () {\n    var type = dataURL.match(/data:([^;]+)/)[1];\n    var base64 = dataURL.replace(/^[^,]+,/, '');\n\n    var buff = binaryStringToArrayBuffer(atob(base64));\n    return createBlob([buff], {type: type});\n  });\n}\n\n/**\n * Convert an image's <code>src</code> URL to a data URL by loading the image and painting\n * it to a <code>canvas</code>. Returns a Promise.\n *\n * <p/>Note: this will coerce the image to the desired content type, and it\n * will only paint the first frame of an animated GIF.\n *\n * @param {string} src\n * @param {string|undefined} type - the content type (optional, defaults to 'image/png')\n * @param {string|undefined} crossOrigin - for CORS-enabled images, set this to\n *                                         'Anonymous' to avoid \"tainted canvas\" errors\n * @param {number|undefined} quality - a number between 0 and 1 indicating image quality\n *                                     if the requested type is 'image/jpeg' or 'image/webp'\n * @returns {Promise} Promise that resolves with the data URL string\n */\nfunction imgSrcToDataURL(src, type, crossOrigin, quality) {\n  type = type || 'image/png';\n\n  return loadImage(src, crossOrigin).then(function (img) {\n    return imgToCanvas(img);\n  }).then(function (canvas) {\n    return canvas.toDataURL(type, quality);\n  });\n}\n\n/**\n * Convert a <code>canvas</code> to a <code>Blob</code>. Returns a Promise.\n * @param {string} canvas\n * @param {string|undefined} type - the content type (optional, defaults to 'image/png')\n * @param {number|undefined} quality - a number between 0 and 1 indicating image quality\n *                                     if the requested type is 'image/jpeg' or 'image/webp'\n * @returns {Promise} Promise that resolves with the <code>Blob</code>\n */\nfunction canvasToBlob(canvas, type, quality) {\n  return Promise.resolve().then(function () {\n    if (typeof canvas.toBlob === 'function') {\n      return new Promise(function (resolve) {\n        canvas.toBlob(resolve, type, quality);\n      });\n    }\n    return dataURLToBlob(canvas.toDataURL(type, quality));\n  });\n}\n\n/**\n * Convert an image's <code>src</code> URL to a <code>Blob</code> by loading the image and painting\n * it to a <code>canvas</code>. Returns a Promise.\n *\n * <p/>Note: this will coerce the image to the desired content type, and it\n * will only paint the first frame of an animated GIF.\n *\n * @param {string} src\n * @param {string|undefined} type - the content type (optional, defaults to 'image/png')\n * @param {string|undefined} crossOrigin - for CORS-enabled images, set this to\n *                                         'Anonymous' to avoid \"tainted canvas\" errors\n * @param {number|undefined} quality - a number between 0 and 1 indicating image quality\n *                                     if the requested type is 'image/jpeg' or 'image/webp'\n * @returns {Promise} Promise that resolves with the <code>Blob</code>\n */\nfunction imgSrcToBlob(src, type, crossOrigin, quality) {\n  type = type || 'image/png';\n\n  return loadImage(src, crossOrigin).then(function (img) {\n    return imgToCanvas(img);\n  }).then(function (canvas) {\n    return canvasToBlob(canvas, type, quality);\n  });\n}\n\n/**\n * Convert an <code>ArrayBuffer</code> to a <code>Blob</code>. Returns a Promise.\n *\n * @param {ArrayBuffer} buffer\n * @param {string|undefined} type - the content type (optional)\n * @returns {Promise} Promise that resolves with the <code>Blob</code>\n */\nfunction arrayBufferToBlob(buffer, type) {\n  return Promise.resolve().then(function () {\n    return createBlob([buffer], type);\n  });\n}\n\n/**\n * Convert a <code>Blob</code> to an <code>ArrayBuffer</code>. Returns a Promise.\n * @param {Blob} blob\n * @returns {Promise} Promise that resolves with the <code>ArrayBuffer</code>\n */\nfunction blobToArrayBuffer(blob) {\n  return new Promise(function (resolve, reject) {\n    var reader = new FileReader();\n    reader.onloadend = function (e) {\n      var result = e.target.result || new ArrayBuffer(0);\n      resolve(result);\n    };\n    reader.onerror = reject;\n    reader.readAsArrayBuffer(blob);\n  });\n}\n\nmodule.exports = {\n  createBlob         : createBlob,\n  createObjectURL    : createObjectURL,\n  revokeObjectURL    : revokeObjectURL,\n  imgSrcToBlob       : imgSrcToBlob,\n  imgSrcToDataURL    : imgSrcToDataURL,\n  canvasToBlob       : canvasToBlob,\n  dataURLToBlob      : dataURLToBlob,\n  blobToBase64String : blobToBase64String,\n  base64StringToBlob : base64StringToBlob,\n  binaryStringToBlob : binaryStringToBlob,\n  blobToBinaryString : blobToBinaryString,\n  arrayBufferToBlob  : arrayBufferToBlob,\n  blobToArrayBuffer  : blobToArrayBuffer\n};\n\n},{\"blob\":23,\"native-or-lie\":64}],23:[function(_dereq_,module,exports){\n(function (global){\n/**\n * Create a blob builder even when vendor prefixes exist\n */\n\nvar BlobBuilder = global.BlobBuilder\n  || global.WebKitBlobBuilder\n  || global.MSBlobBuilder\n  || global.MozBlobBuilder;\n\n/**\n * Check if Blob constructor is supported\n */\n\nvar blobSupported = (function() {\n  try {\n    var a = new Blob(['hi']);\n    return a.size === 2;\n  } catch(e) {\n    return false;\n  }\n})();\n\n/**\n * Check if Blob constructor supports ArrayBufferViews\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\n */\n\nvar blobSupportsArrayBufferView = blobSupported && (function() {\n  try {\n    var b = new Blob([new Uint8Array([1,2])]);\n    return b.size === 2;\n  } catch(e) {\n    return false;\n  }\n})();\n\n/**\n * Check if BlobBuilder is supported\n */\n\nvar blobBuilderSupported = BlobBuilder\n  && BlobBuilder.prototype.append\n  && BlobBuilder.prototype.getBlob;\n\n/**\n * Helper function that maps ArrayBufferViews to ArrayBuffers\n * Used by BlobBuilder constructor and old browsers that didn't\n * support it in the Blob constructor.\n */\n\nfunction mapArrayBufferViews(ary) {\n  for (var i = 0; i < ary.length; i++) {\n    var chunk = ary[i];\n    if (chunk.buffer instanceof ArrayBuffer) {\n      var buf = chunk.buffer;\n\n      // if this is a subarray, make a copy so we only\n      // include the subarray region from the underlying buffer\n      if (chunk.byteLength !== buf.byteLength) {\n        var copy = new Uint8Array(chunk.byteLength);\n        copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\n        buf = copy.buffer;\n      }\n\n      ary[i] = buf;\n    }\n  }\n}\n\nfunction BlobBuilderConstructor(ary, options) {\n  options = options || {};\n\n  var bb = new BlobBuilder();\n  mapArrayBufferViews(ary);\n\n  for (var i = 0; i < ary.length; i++) {\n    bb.append(ary[i]);\n  }\n\n  return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\n};\n\nfunction BlobConstructor(ary, options) {\n  mapArrayBufferViews(ary);\n  return new Blob(ary, options || {});\n};\n\nmodule.exports = (function() {\n  if (blobSupported) {\n    return blobSupportsArrayBufferView ? global.Blob : BlobConstructor;\n  } else if (blobBuilderSupported) {\n    return BlobBuilderConstructor;\n  } else {\n    return undefined;\n  }\n})();\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],24:[function(_dereq_,module,exports){\n\n},{}],25:[function(_dereq_,module,exports){\n\n/**\n * Expose `Emitter`.\n */\n\nmodule.exports = Emitter;\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n  if (obj) return mixin(obj);\n};\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n  for (var key in Emitter.prototype) {\n    obj[key] = Emitter.prototype[key];\n  }\n  return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n  (this._callbacks[event] = this._callbacks[event] || [])\n    .push(fn);\n  return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n  var self = this;\n  this._callbacks = this._callbacks || {};\n\n  function on() {\n    self.off(event, on);\n    fn.apply(this, arguments);\n  }\n\n  on.fn = fn;\n  this.on(event, on);\n  return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n\n  // all\n  if (0 == arguments.length) {\n    this._callbacks = {};\n    return this;\n  }\n\n  // specific event\n  var callbacks = this._callbacks[event];\n  if (!callbacks) return this;\n\n  // remove all handlers\n  if (1 == arguments.length) {\n    delete this._callbacks[event];\n    return this;\n  }\n\n  // remove specific handler\n  var cb;\n  for (var i = 0; i < callbacks.length; i++) {\n    cb = callbacks[i];\n    if (cb === fn || cb.fn === fn) {\n      callbacks.splice(i, 1);\n      break;\n    }\n  }\n  return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n  this._callbacks = this._callbacks || {};\n  var args = [].slice.call(arguments, 1)\n    , callbacks = this._callbacks[event];\n\n  if (callbacks) {\n    callbacks = callbacks.slice(0);\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\n      callbacks[i].apply(this, args);\n    }\n  }\n\n  return this;\n};\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n  this._callbacks = this._callbacks || {};\n  return this._callbacks[event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n  return !! this.listeners(event).length;\n};\n\n},{}],26:[function(_dereq_,module,exports){\n\nmodule.exports = function(a, b){\n  var fn = function(){};\n  fn.prototype = b.prototype;\n  a.prototype = new fn;\n  a.prototype.constructor = a;\n};\n},{}],27:[function(_dereq_,module,exports){\n(function (process){\n\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = _dereq_('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && 'WebkitAppearance' in document.documentElement.style) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (window.console && (console.firebug || (console.exception && console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  return JSON.stringify(v);\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n  var args = arguments;\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return args;\n\n  var c = 'color: ' + this.color;\n  args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n  return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if ('env' in (typeof process === 'undefined' ? {} : process)) {\n    r = process.env.DEBUG;\n  }\n  \n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n\n}).call(this,_dereq_('_process'))\n},{\"./debug\":28,\"_process\":71}],28:[function(_dereq_,module,exports){\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug.debug = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = _dereq_('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n  return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n  // define the `disabled` version\n  function disabled() {\n  }\n  disabled.enabled = false;\n\n  // define the `enabled` version\n  function enabled() {\n\n    var self = enabled;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // add the `color` if not set\n    if (null == self.useColors) self.useColors = exports.useColors();\n    if (null == self.color && self.useColors) self.color = selectColor();\n\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %o\n      args = ['%o'].concat(args);\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting\n    args = exports.formatArgs.apply(self, args);\n\n    var logFn = enabled.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n  enabled.enabled = true;\n\n  var fn = exports.enabled(namespace) ? enabled : disabled;\n\n  fn.namespace = namespace;\n\n  return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  var split = (namespaces || '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/[\\\\^$+?.()|[\\]{}]/g, '\\\\$&').replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n\n},{\"ms\":63}],29:[function(_dereq_,module,exports){\n\nmodule.exports = _dereq_('./lib/index');\n\n},{\"./lib/index\":30}],30:[function(_dereq_,module,exports){\n\nmodule.exports = _dereq_('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = _dereq_('engine.io-parser');\n\n},{\"./socket\":31,\"engine.io-parser\":42}],31:[function(_dereq_,module,exports){\n(function (global){\n/**\n * Module dependencies.\n */\n\nvar transports = _dereq_('./transports/index');\nvar Emitter = _dereq_('component-emitter');\nvar debug = _dereq_('debug')('engine.io-client:socket');\nvar index = _dereq_('indexof');\nvar parser = _dereq_('engine.io-parser');\nvar parseuri = _dereq_('parseuri');\nvar parsejson = _dereq_('parsejson');\nvar parseqs = _dereq_('parseqs');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n  if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n  opts = opts || {};\n\n  if (uri && 'object' === typeof uri) {\n    opts = uri;\n    uri = null;\n  }\n\n  if (uri) {\n    uri = parseuri(uri);\n    opts.hostname = uri.host;\n    opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n    opts.port = uri.port;\n    if (uri.query) opts.query = uri.query;\n  } else if (opts.host) {\n    opts.hostname = parseuri(opts.host).host;\n  }\n\n  this.secure = null != opts.secure ? opts.secure\n    : (global.location && 'https:' === location.protocol);\n\n  if (opts.hostname && !opts.port) {\n    // if no port is specified manually, use the protocol default\n    opts.port = this.secure ? '443' : '80';\n  }\n\n  this.agent = opts.agent || false;\n  this.hostname = opts.hostname ||\n    (global.location ? location.hostname : 'localhost');\n  this.port = opts.port || (global.location && location.port\n      ? location.port\n      : (this.secure ? 443 : 80));\n  this.query = opts.query || {};\n  if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n  this.upgrade = false !== opts.upgrade;\n  this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n  this.forceJSONP = !!opts.forceJSONP;\n  this.jsonp = false !== opts.jsonp;\n  this.forceBase64 = !!opts.forceBase64;\n  this.enablesXDR = !!opts.enablesXDR;\n  this.timestampParam = opts.timestampParam || 't';\n  this.timestampRequests = opts.timestampRequests;\n  this.transports = opts.transports || ['polling', 'websocket'];\n  this.readyState = '';\n  this.writeBuffer = [];\n  this.prevBufferLen = 0;\n  this.policyPort = opts.policyPort || 843;\n  this.rememberUpgrade = opts.rememberUpgrade || false;\n  this.binaryType = null;\n  this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n  this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n  if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n  if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n    this.perMessageDeflate.threshold = 1024;\n  }\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx || null;\n  this.key = opts.key || null;\n  this.passphrase = opts.passphrase || null;\n  this.cert = opts.cert || null;\n  this.ca = opts.ca || null;\n  this.ciphers = opts.ciphers || null;\n  this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? null : opts.rejectUnauthorized;\n\n  // other options for Node.js client\n  var freeGlobal = typeof global === 'object' && global;\n  if (freeGlobal.global === freeGlobal) {\n    if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n      this.extraHeaders = opts.extraHeaders;\n    }\n  }\n\n  // set on handshake\n  this.id = null;\n  this.upgrades = null;\n  this.pingInterval = null;\n  this.pingTimeout = null;\n\n  // set on heartbeat\n  this.pingIntervalTimer = null;\n  this.pingTimeoutTimer = null;\n\n  this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = _dereq_('./transport');\nSocket.transports = _dereq_('./transports/index');\nSocket.parser = _dereq_('engine.io-parser');\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n  debug('creating transport \"%s\"', name);\n  var query = clone(this.query);\n\n  // append engine.io protocol identifier\n  query.EIO = parser.protocol;\n\n  // transport name\n  query.transport = name;\n\n  // session id if we already have one\n  if (this.id) query.sid = this.id;\n\n  var transport = new transports[name]({\n    agent: this.agent,\n    hostname: this.hostname,\n    port: this.port,\n    secure: this.secure,\n    path: this.path,\n    query: query,\n    forceJSONP: this.forceJSONP,\n    jsonp: this.jsonp,\n    forceBase64: this.forceBase64,\n    enablesXDR: this.enablesXDR,\n    timestampRequests: this.timestampRequests,\n    timestampParam: this.timestampParam,\n    policyPort: this.policyPort,\n    socket: this,\n    pfx: this.pfx,\n    key: this.key,\n    passphrase: this.passphrase,\n    cert: this.cert,\n    ca: this.ca,\n    ciphers: this.ciphers,\n    rejectUnauthorized: this.rejectUnauthorized,\n    perMessageDeflate: this.perMessageDeflate,\n    extraHeaders: this.extraHeaders\n  });\n\n  return transport;\n};\n\nfunction clone (obj) {\n  var o = {};\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      o[i] = obj[i];\n    }\n  }\n  return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n  var transport;\n  if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n    transport = 'websocket';\n  } else if (0 === this.transports.length) {\n    // Emit error on next tick so it can be listened to\n    var self = this;\n    setTimeout(function () {\n      self.emit('error', 'No transports available');\n    }, 0);\n    return;\n  } else {\n    transport = this.transports[0];\n  }\n  this.readyState = 'opening';\n\n  // Retry with the next transport if the transport is disabled (jsonp: false)\n  try {\n    transport = this.createTransport(transport);\n  } catch (e) {\n    this.transports.shift();\n    this.open();\n    return;\n  }\n\n  transport.open();\n  this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n  debug('setting transport %s', transport.name);\n  var self = this;\n\n  if (this.transport) {\n    debug('clearing existing transport %s', this.transport.name);\n    this.transport.removeAllListeners();\n  }\n\n  // set up transport\n  this.transport = transport;\n\n  // set up transport listeners\n  transport\n  .on('drain', function () {\n    self.onDrain();\n  })\n  .on('packet', function (packet) {\n    self.onPacket(packet);\n  })\n  .on('error', function (e) {\n    self.onError(e);\n  })\n  .on('close', function () {\n    self.onClose('transport close');\n  });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n  debug('probing transport \"%s\"', name);\n  var transport = this.createTransport(name, { probe: 1 });\n  var failed = false;\n  var self = this;\n\n  Socket.priorWebsocketSuccess = false;\n\n  function onTransportOpen () {\n    if (self.onlyBinaryUpgrades) {\n      var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n      failed = failed || upgradeLosesBinary;\n    }\n    if (failed) return;\n\n    debug('probe transport \"%s\" opened', name);\n    transport.send([{ type: 'ping', data: 'probe' }]);\n    transport.once('packet', function (msg) {\n      if (failed) return;\n      if ('pong' === msg.type && 'probe' === msg.data) {\n        debug('probe transport \"%s\" pong', name);\n        self.upgrading = true;\n        self.emit('upgrading', transport);\n        if (!transport) return;\n        Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n        debug('pausing current transport \"%s\"', self.transport.name);\n        self.transport.pause(function () {\n          if (failed) return;\n          if ('closed' === self.readyState) return;\n          debug('changing transport and sending upgrade packet');\n\n          cleanup();\n\n          self.setTransport(transport);\n          transport.send([{ type: 'upgrade' }]);\n          self.emit('upgrade', transport);\n          transport = null;\n          self.upgrading = false;\n          self.flush();\n        });\n      } else {\n        debug('probe transport \"%s\" failed', name);\n        var err = new Error('probe error');\n        err.transport = transport.name;\n        self.emit('upgradeError', err);\n      }\n    });\n  }\n\n  function freezeTransport () {\n    if (failed) return;\n\n    // Any callback called by transport should be ignored since now\n    failed = true;\n\n    cleanup();\n\n    transport.close();\n    transport = null;\n  }\n\n  // Handle any error that happens while probing\n  function onerror (err) {\n    var error = new Error('probe error: ' + err);\n    error.transport = transport.name;\n\n    freezeTransport();\n\n    debug('probe transport \"%s\" failed because of error: %s', name, err);\n\n    self.emit('upgradeError', error);\n  }\n\n  function onTransportClose () {\n    onerror('transport closed');\n  }\n\n  // When the socket is closed while we're probing\n  function onclose () {\n    onerror('socket closed');\n  }\n\n  // When the socket is upgraded while we're probing\n  function onupgrade (to) {\n    if (transport && to.name !== transport.name) {\n      debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n      freezeTransport();\n    }\n  }\n\n  // Remove all listeners on the transport and on self\n  function cleanup () {\n    transport.removeListener('open', onTransportOpen);\n    transport.removeListener('error', onerror);\n    transport.removeListener('close', onTransportClose);\n    self.removeListener('close', onclose);\n    self.removeListener('upgrading', onupgrade);\n  }\n\n  transport.once('open', onTransportOpen);\n  transport.once('error', onerror);\n  transport.once('close', onTransportClose);\n\n  this.once('close', onclose);\n  this.once('upgrading', onupgrade);\n\n  transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n  debug('socket open');\n  this.readyState = 'open';\n  Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n  this.emit('open');\n  this.flush();\n\n  // we check for `readyState` in case an `open`\n  // listener already closed the socket\n  if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n    debug('starting upgrade probes');\n    for (var i = 0, l = this.upgrades.length; i < l; i++) {\n      this.probe(this.upgrades[i]);\n    }\n  }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n  if ('opening' === this.readyState || 'open' === this.readyState ||\n      'closing' === this.readyState) {\n    debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\n    this.emit('packet', packet);\n\n    // Socket is live - any packet counts\n    this.emit('heartbeat');\n\n    switch (packet.type) {\n      case 'open':\n        this.onHandshake(parsejson(packet.data));\n        break;\n\n      case 'pong':\n        this.setPing();\n        this.emit('pong');\n        break;\n\n      case 'error':\n        var err = new Error('server error');\n        err.code = packet.data;\n        this.onError(err);\n        break;\n\n      case 'message':\n        this.emit('data', packet.data);\n        this.emit('message', packet.data);\n        break;\n    }\n  } else {\n    debug('packet received with socket readyState \"%s\"', this.readyState);\n  }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n  this.emit('handshake', data);\n  this.id = data.sid;\n  this.transport.query.sid = data.sid;\n  this.upgrades = this.filterUpgrades(data.upgrades);\n  this.pingInterval = data.pingInterval;\n  this.pingTimeout = data.pingTimeout;\n  this.onOpen();\n  // In case open handler closes socket\n  if ('closed' === this.readyState) return;\n  this.setPing();\n\n  // Prolong liveness of socket on heartbeat\n  this.removeListener('heartbeat', this.onHeartbeat);\n  this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n  clearTimeout(this.pingTimeoutTimer);\n  var self = this;\n  self.pingTimeoutTimer = setTimeout(function () {\n    if ('closed' === self.readyState) return;\n    self.onClose('ping timeout');\n  }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n  var self = this;\n  clearTimeout(self.pingIntervalTimer);\n  self.pingIntervalTimer = setTimeout(function () {\n    debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n    self.ping();\n    self.onHeartbeat(self.pingTimeout);\n  }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n  var self = this;\n  this.sendPacket('ping', function () {\n    self.emit('ping');\n  });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n  this.writeBuffer.splice(0, this.prevBufferLen);\n\n  // setting prevBufferLen = 0 is very important\n  // for example, when upgrading, upgrade packet is sent over,\n  // and a nonzero prevBufferLen could cause problems on `drain`\n  this.prevBufferLen = 0;\n\n  if (0 === this.writeBuffer.length) {\n    this.emit('drain');\n  } else {\n    this.flush();\n  }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n  if ('closed' !== this.readyState && this.transport.writable &&\n    !this.upgrading && this.writeBuffer.length) {\n    debug('flushing %d packets in socket', this.writeBuffer.length);\n    this.transport.send(this.writeBuffer);\n    // keep track of current length of writeBuffer\n    // splice writeBuffer and callbackBuffer on `drain`\n    this.prevBufferLen = this.writeBuffer.length;\n    this.emit('flush');\n  }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n  this.sendPacket('message', msg, options, fn);\n  return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n  if ('function' === typeof data) {\n    fn = data;\n    data = undefined;\n  }\n\n  if ('function' === typeof options) {\n    fn = options;\n    options = null;\n  }\n\n  if ('closing' === this.readyState || 'closed' === this.readyState) {\n    return;\n  }\n\n  options = options || {};\n  options.compress = false !== options.compress;\n\n  var packet = {\n    type: type,\n    data: data,\n    options: options\n  };\n  this.emit('packetCreate', packet);\n  this.writeBuffer.push(packet);\n  if (fn) this.once('flush', fn);\n  this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.readyState = 'closing';\n\n    var self = this;\n\n    if (this.writeBuffer.length) {\n      this.once('drain', function () {\n        if (this.upgrading) {\n          waitForUpgrade();\n        } else {\n          close();\n        }\n      });\n    } else if (this.upgrading) {\n      waitForUpgrade();\n    } else {\n      close();\n    }\n  }\n\n  function close () {\n    self.onClose('forced close');\n    debug('socket closing - telling transport to close');\n    self.transport.close();\n  }\n\n  function cleanupAndClose () {\n    self.removeListener('upgrade', cleanupAndClose);\n    self.removeListener('upgradeError', cleanupAndClose);\n    close();\n  }\n\n  function waitForUpgrade () {\n    // wait for upgrade to finish since we can't send packets while pausing a transport\n    self.once('upgrade', cleanupAndClose);\n    self.once('upgradeError', cleanupAndClose);\n  }\n\n  return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n  debug('socket error %j', err);\n  Socket.priorWebsocketSuccess = false;\n  this.emit('error', err);\n  this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n  if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n    debug('socket close with reason: \"%s\"', reason);\n    var self = this;\n\n    // clear timers\n    clearTimeout(this.pingIntervalTimer);\n    clearTimeout(this.pingTimeoutTimer);\n\n    // stop event from firing again for transport\n    this.transport.removeAllListeners('close');\n\n    // ensure transport won't stay open\n    this.transport.close();\n\n    // ignore further transport communication\n    this.transport.removeAllListeners();\n\n    // set ready state\n    this.readyState = 'closed';\n\n    // clear session id\n    this.id = null;\n\n    // emit close event\n    this.emit('close', reason, desc);\n\n    // clean buffers after, so users can still\n    // grab the buffers on `close` event\n    self.writeBuffer = [];\n    self.prevBufferLen = 0;\n  }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n  var filteredUpgrades = [];\n  for (var i = 0, j = upgrades.length; i < j; i++) {\n    if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n  }\n  return filteredUpgrades;\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./transport\":32,\"./transports/index\":33,\"component-emitter\":25,\"debug\":39,\"engine.io-parser\":42,\"indexof\":47,\"parsejson\":65,\"parseqs\":66,\"parseuri\":67}],32:[function(_dereq_,module,exports){\n/**\n * Module dependencies.\n */\n\nvar parser = _dereq_('engine.io-parser');\nvar Emitter = _dereq_('component-emitter');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n  this.path = opts.path;\n  this.hostname = opts.hostname;\n  this.port = opts.port;\n  this.secure = opts.secure;\n  this.query = opts.query;\n  this.timestampParam = opts.timestampParam;\n  this.timestampRequests = opts.timestampRequests;\n  this.readyState = '';\n  this.agent = opts.agent || false;\n  this.socket = opts.socket;\n  this.enablesXDR = opts.enablesXDR;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n  var err = new Error(msg);\n  err.type = 'TransportError';\n  err.description = desc;\n  this.emit('error', err);\n  return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n  if ('closed' === this.readyState || '' === this.readyState) {\n    this.readyState = 'opening';\n    this.doOpen();\n  }\n\n  return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n  if ('opening' === this.readyState || 'open' === this.readyState) {\n    this.doClose();\n    this.onClose();\n  }\n\n  return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n  if ('open' === this.readyState) {\n    this.write(packets);\n  } else {\n    throw new Error('Transport not open');\n  }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n  this.readyState = 'open';\n  this.writable = true;\n  this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n  var packet = parser.decodePacket(data, this.socket.binaryType);\n  this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n  this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n  this.readyState = 'closed';\n  this.emit('close');\n};\n\n},{\"component-emitter\":25,\"engine.io-parser\":42}],33:[function(_dereq_,module,exports){\n(function (global){\n/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = _dereq_('xmlhttprequest-ssl');\nvar XHR = _dereq_('./polling-xhr');\nvar JSONP = _dereq_('./polling-jsonp');\nvar websocket = _dereq_('./websocket');\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n  var xhr;\n  var xd = false;\n  var xs = false;\n  var jsonp = false !== opts.jsonp;\n\n  if (global.location) {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    xd = opts.hostname !== location.hostname || port !== opts.port;\n    xs = opts.secure !== isSSL;\n  }\n\n  opts.xdomain = xd;\n  opts.xscheme = xs;\n  xhr = new XMLHttpRequest(opts);\n\n  if ('open' in xhr && !opts.forceJSONP) {\n    return new XHR(opts);\n  } else {\n    if (!jsonp) throw new Error('JSONP disabled');\n    return new JSONP(opts);\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./polling-jsonp\":34,\"./polling-xhr\":35,\"./websocket\":37,\"xmlhttprequest-ssl\":38}],34:[function(_dereq_,module,exports){\n(function (global){\n\n/**\n * Module requirements.\n */\n\nvar Polling = _dereq_('./polling');\nvar inherit = _dereq_('component-inherit');\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n  Polling.call(this, opts);\n\n  this.query = this.query || {};\n\n  // define global callbacks array if not present\n  // we do this here (lazily) to avoid unneeded global pollution\n  if (!callbacks) {\n    // we need to consider multiple engines in the same page\n    if (!global.___eio) global.___eio = [];\n    callbacks = global.___eio;\n  }\n\n  // callback identifier\n  this.index = callbacks.length;\n\n  // add callback to jsonp global\n  var self = this;\n  callbacks.push(function (msg) {\n    self.onData(msg);\n  });\n\n  // append to query string\n  this.query.j = this.index;\n\n  // prevent spurious errors from being emitted when the window is unloaded\n  if (global.document && global.addEventListener) {\n    global.addEventListener('beforeunload', function () {\n      if (self.script) self.script.onerror = empty;\n    }, false);\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  if (this.form) {\n    this.form.parentNode.removeChild(this.form);\n    this.form = null;\n    this.iframe = null;\n  }\n\n  Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n  var self = this;\n  var script = document.createElement('script');\n\n  if (this.script) {\n    this.script.parentNode.removeChild(this.script);\n    this.script = null;\n  }\n\n  script.async = true;\n  script.src = this.uri();\n  script.onerror = function (e) {\n    self.onError('jsonp poll error', e);\n  };\n\n  var insertAt = document.getElementsByTagName('script')[0];\n  if (insertAt) {\n    insertAt.parentNode.insertBefore(script, insertAt);\n  } else {\n    (document.head || document.body).appendChild(script);\n  }\n  this.script = script;\n\n  var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n  if (isUAgecko) {\n    setTimeout(function () {\n      var iframe = document.createElement('iframe');\n      document.body.appendChild(iframe);\n      document.body.removeChild(iframe);\n    }, 100);\n  }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n  var self = this;\n\n  if (!this.form) {\n    var form = document.createElement('form');\n    var area = document.createElement('textarea');\n    var id = this.iframeId = 'eio_iframe_' + this.index;\n    var iframe;\n\n    form.className = 'socketio';\n    form.style.position = 'absolute';\n    form.style.top = '-1000px';\n    form.style.left = '-1000px';\n    form.target = id;\n    form.method = 'POST';\n    form.setAttribute('accept-charset', 'utf-8');\n    area.name = 'd';\n    form.appendChild(area);\n    document.body.appendChild(form);\n\n    this.form = form;\n    this.area = area;\n  }\n\n  this.form.action = this.uri();\n\n  function complete () {\n    initIframe();\n    fn();\n  }\n\n  function initIframe () {\n    if (self.iframe) {\n      try {\n        self.form.removeChild(self.iframe);\n      } catch (e) {\n        self.onError('jsonp polling iframe removal error', e);\n      }\n    }\n\n    try {\n      // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n      var html = '<iframe src=\"javascript:0\" name=\"' + self.iframeId + '\">';\n      iframe = document.createElement(html);\n    } catch (e) {\n      iframe = document.createElement('iframe');\n      iframe.name = self.iframeId;\n      iframe.src = 'javascript:0';\n    }\n\n    iframe.id = self.iframeId;\n\n    self.form.appendChild(iframe);\n    self.iframe = iframe;\n  }\n\n  initIframe();\n\n  // escape \\n to prevent it from being converted into \\r\\n by some UAs\n  // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n  data = data.replace(rEscapedNewline, '\\\\\\n');\n  this.area.value = data.replace(rNewline, '\\\\n');\n\n  try {\n    this.form.submit();\n  } catch (e) {}\n\n  if (this.iframe.attachEvent) {\n    this.iframe.onreadystatechange = function () {\n      if (self.iframe.readyState === 'complete') {\n        complete();\n      }\n    };\n  } else {\n    this.iframe.onload = complete;\n  }\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./polling\":36,\"component-inherit\":26}],35:[function(_dereq_,module,exports){\n(function (global){\n/**\n * Module requirements.\n */\n\nvar XMLHttpRequest = _dereq_('xmlhttprequest-ssl');\nvar Polling = _dereq_('./polling');\nvar Emitter = _dereq_('component-emitter');\nvar inherit = _dereq_('component-inherit');\nvar debug = _dereq_('debug')('engine.io-client:polling-xhr');\n\n/**\n * Module exports.\n */\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n\n/**\n * Empty function\n */\n\nfunction empty () {}\n\n/**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction XHR (opts) {\n  Polling.call(this, opts);\n\n  if (global.location) {\n    var isSSL = 'https:' === location.protocol;\n    var port = location.port;\n\n    // some user agents have empty `location.port`\n    if (!port) {\n      port = isSSL ? 443 : 80;\n    }\n\n    this.xd = opts.hostname !== global.location.hostname ||\n      port !== opts.port;\n    this.xs = opts.secure !== isSSL;\n  } else {\n    this.extraHeaders = opts.extraHeaders;\n  }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(XHR, Polling);\n\n/**\n * XHR supports binary\n */\n\nXHR.prototype.supportsBinary = true;\n\n/**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n\nXHR.prototype.request = function (opts) {\n  opts = opts || {};\n  opts.uri = this.uri();\n  opts.xd = this.xd;\n  opts.xs = this.xs;\n  opts.agent = this.agent || false;\n  opts.supportsBinary = this.supportsBinary;\n  opts.enablesXDR = this.enablesXDR;\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n\n  // other options for Node.js client\n  opts.extraHeaders = this.extraHeaders;\n\n  return new Request(opts);\n};\n\n/**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n\nXHR.prototype.doWrite = function (data, fn) {\n  var isBinary = typeof data !== 'string' && data !== undefined;\n  var req = this.request({ method: 'POST', data: data, isBinary: isBinary });\n  var self = this;\n  req.on('success', fn);\n  req.on('error', function (err) {\n    self.onError('xhr post error', err);\n  });\n  this.sendXhr = req;\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nXHR.prototype.doPoll = function () {\n  debug('xhr poll');\n  var req = this.request();\n  var self = this;\n  req.on('data', function (data) {\n    self.onData(data);\n  });\n  req.on('error', function (err) {\n    self.onError('xhr poll error', err);\n  });\n  this.pollXhr = req;\n};\n\n/**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n\nfunction Request (opts) {\n  this.method = opts.method || 'GET';\n  this.uri = opts.uri;\n  this.xd = !!opts.xd;\n  this.xs = !!opts.xs;\n  this.async = false !== opts.async;\n  this.data = undefined !== opts.data ? opts.data : null;\n  this.agent = opts.agent;\n  this.isBinary = opts.isBinary;\n  this.supportsBinary = opts.supportsBinary;\n  this.enablesXDR = opts.enablesXDR;\n\n  // SSL options for Node.js client\n  this.pfx = opts.pfx;\n  this.key = opts.key;\n  this.passphrase = opts.passphrase;\n  this.cert = opts.cert;\n  this.ca = opts.ca;\n  this.ciphers = opts.ciphers;\n  this.rejectUnauthorized = opts.rejectUnauthorized;\n\n  // other options for Node.js client\n  this.extraHeaders = opts.extraHeaders;\n\n  this.create();\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Request.prototype);\n\n/**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n\nRequest.prototype.create = function () {\n  var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n\n  var xhr = this.xhr = new XMLHttpRequest(opts);\n  var self = this;\n\n  try {\n    debug('xhr open %s: %s', this.method, this.uri);\n    xhr.open(this.method, this.uri, this.async);\n    try {\n      if (this.extraHeaders) {\n        xhr.setDisableHeaderCheck(true);\n        for (var i in this.extraHeaders) {\n          if (this.extraHeaders.hasOwnProperty(i)) {\n            xhr.setRequestHeader(i, this.extraHeaders[i]);\n          }\n        }\n      }\n    } catch (e) {}\n    if (this.supportsBinary) {\n      // This has to be done after open because Firefox is stupid\n      // http://stackoverflow.com/questions/13216903/get-binary-data-with-xmlhttprequest-in-a-firefox-extension\n      xhr.responseType = 'arraybuffer';\n    }\n\n    if ('POST' === this.method) {\n      try {\n        if (this.isBinary) {\n          xhr.setRequestHeader('Content-type', 'application/octet-stream');\n        } else {\n          xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');\n        }\n      } catch (e) {}\n    }\n\n    try {\n      xhr.setRequestHeader('Accept', '*/*');\n    } catch (e) {}\n\n    // ie6 check\n    if ('withCredentials' in xhr) {\n      xhr.withCredentials = true;\n    }\n\n    if (this.hasXDR()) {\n      xhr.onload = function () {\n        self.onLoad();\n      };\n      xhr.onerror = function () {\n        self.onError(xhr.responseText);\n      };\n    } else {\n      xhr.onreadystatechange = function () {\n        if (4 !== xhr.readyState) return;\n        if (200 === xhr.status || 1223 === xhr.status) {\n          self.onLoad();\n        } else {\n          // make sure the `error` event handler that's user-set\n          // does not throw in the same tick and gets caught here\n          setTimeout(function () {\n            self.onError(xhr.status);\n          }, 0);\n        }\n      };\n    }\n\n    debug('xhr data %s', this.data);\n    xhr.send(this.data);\n  } catch (e) {\n    // Need to defer since .create() is called directly fhrom the constructor\n    // and thus the 'error' event can only be only bound *after* this exception\n    // occurs.  Therefore, also, we cannot throw here at all.\n    setTimeout(function () {\n      self.onError(e);\n    }, 0);\n    return;\n  }\n\n  if (global.document) {\n    this.index = Request.requestsCount++;\n    Request.requests[this.index] = this;\n  }\n};\n\n/**\n * Called upon successful response.\n *\n * @api private\n */\n\nRequest.prototype.onSuccess = function () {\n  this.emit('success');\n  this.cleanup();\n};\n\n/**\n * Called if we have data.\n *\n * @api private\n */\n\nRequest.prototype.onData = function (data) {\n  this.emit('data', data);\n  this.onSuccess();\n};\n\n/**\n * Called upon error.\n *\n * @api private\n */\n\nRequest.prototype.onError = function (err) {\n  this.emit('error', err);\n  this.cleanup(true);\n};\n\n/**\n * Cleans up house.\n *\n * @api private\n */\n\nRequest.prototype.cleanup = function (fromError) {\n  if ('undefined' === typeof this.xhr || null === this.xhr) {\n    return;\n  }\n  // xmlhttprequest\n  if (this.hasXDR()) {\n    this.xhr.onload = this.xhr.onerror = empty;\n  } else {\n    this.xhr.onreadystatechange = empty;\n  }\n\n  if (fromError) {\n    try {\n      this.xhr.abort();\n    } catch (e) {}\n  }\n\n  if (global.document) {\n    delete Request.requests[this.index];\n  }\n\n  this.xhr = null;\n};\n\n/**\n * Called upon load.\n *\n * @api private\n */\n\nRequest.prototype.onLoad = function () {\n  var data;\n  try {\n    var contentType;\n    try {\n      contentType = this.xhr.getResponseHeader('Content-Type').split(';')[0];\n    } catch (e) {}\n    if (contentType === 'application/octet-stream') {\n      data = this.xhr.response || this.xhr.responseText;\n    } else {\n      if (!this.supportsBinary) {\n        data = this.xhr.responseText;\n      } else {\n        try {\n          data = String.fromCharCode.apply(null, new Uint8Array(this.xhr.response));\n        } catch (e) {\n          var ui8Arr = new Uint8Array(this.xhr.response);\n          var dataArray = [];\n          for (var idx = 0, length = ui8Arr.length; idx < length; idx++) {\n            dataArray.push(ui8Arr[idx]);\n          }\n\n          data = String.fromCharCode.apply(null, dataArray);\n        }\n      }\n    }\n  } catch (e) {\n    this.onError(e);\n  }\n  if (null != data) {\n    this.onData(data);\n  }\n};\n\n/**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n\nRequest.prototype.hasXDR = function () {\n  return 'undefined' !== typeof global.XDomainRequest && !this.xs && this.enablesXDR;\n};\n\n/**\n * Aborts the request.\n *\n * @api public\n */\n\nRequest.prototype.abort = function () {\n  this.cleanup();\n};\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (global.document) {\n  if (global.attachEvent) {\n    global.attachEvent('onunload', unloadHandler);\n  } else if (global.addEventListener) {\n    global.addEventListener('beforeunload', unloadHandler, false);\n  }\n}\n\nfunction unloadHandler () {\n  for (var i in Request.requests) {\n    if (Request.requests.hasOwnProperty(i)) {\n      Request.requests[i].abort();\n    }\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./polling\":36,\"component-emitter\":25,\"component-inherit\":26,\"debug\":39,\"xmlhttprequest-ssl\":38}],36:[function(_dereq_,module,exports){\n/**\n * Module dependencies.\n */\n\nvar Transport = _dereq_('../transport');\nvar parseqs = _dereq_('parseqs');\nvar parser = _dereq_('engine.io-parser');\nvar inherit = _dereq_('component-inherit');\nvar yeast = _dereq_('yeast');\nvar debug = _dereq_('debug')('engine.io-client:polling');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Polling;\n\n/**\n * Is XHR2 supported?\n */\n\nvar hasXHR2 = (function () {\n  var XMLHttpRequest = _dereq_('xmlhttprequest-ssl');\n  var xhr = new XMLHttpRequest({ xdomain: false });\n  return null != xhr.responseType;\n})();\n\n/**\n * Polling interface.\n *\n * @param {Object} opts\n * @api private\n */\n\nfunction Polling (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (!hasXHR2 || forceBase64) {\n    this.supportsBinary = false;\n  }\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(Polling, Transport);\n\n/**\n * Transport name.\n */\n\nPolling.prototype.name = 'polling';\n\n/**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n\nPolling.prototype.doOpen = function () {\n  this.poll();\n};\n\n/**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n\nPolling.prototype.pause = function (onPause) {\n  var self = this;\n\n  this.readyState = 'pausing';\n\n  function pause () {\n    debug('paused');\n    self.readyState = 'paused';\n    onPause();\n  }\n\n  if (this.polling || !this.writable) {\n    var total = 0;\n\n    if (this.polling) {\n      debug('we are currently polling - waiting to pause');\n      total++;\n      this.once('pollComplete', function () {\n        debug('pre-pause polling complete');\n        --total || pause();\n      });\n    }\n\n    if (!this.writable) {\n      debug('we are currently writing - waiting to pause');\n      total++;\n      this.once('drain', function () {\n        debug('pre-pause writing complete');\n        --total || pause();\n      });\n    }\n  } else {\n    pause();\n  }\n};\n\n/**\n * Starts polling cycle.\n *\n * @api public\n */\n\nPolling.prototype.poll = function () {\n  debug('polling');\n  this.polling = true;\n  this.doPoll();\n  this.emit('poll');\n};\n\n/**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n\nPolling.prototype.onData = function (data) {\n  var self = this;\n  debug('polling got data %s', data);\n  var callback = function (packet, index, total) {\n    // if its the first message we consider the transport open\n    if ('opening' === self.readyState) {\n      self.onOpen();\n    }\n\n    // if its a close packet, we close the ongoing requests\n    if ('close' === packet.type) {\n      self.onClose();\n      return false;\n    }\n\n    // otherwise bypass onData and handle the message\n    self.onPacket(packet);\n  };\n\n  // decode payload\n  parser.decodePayload(data, this.socket.binaryType, callback);\n\n  // if an event did not trigger closing\n  if ('closed' !== this.readyState) {\n    // if we got data we're not polling\n    this.polling = false;\n    this.emit('pollComplete');\n\n    if ('open' === this.readyState) {\n      this.poll();\n    } else {\n      debug('ignoring poll - transport state \"%s\"', this.readyState);\n    }\n  }\n};\n\n/**\n * For polling, send a close packet.\n *\n * @api private\n */\n\nPolling.prototype.doClose = function () {\n  var self = this;\n\n  function close () {\n    debug('writing close packet');\n    self.write([{ type: 'close' }]);\n  }\n\n  if ('open' === this.readyState) {\n    debug('transport open - closing');\n    close();\n  } else {\n    // in case we're trying to close while\n    // handshaking is in progress (GH-164)\n    debug('transport not open - deferring close');\n    this.once('open', close);\n  }\n};\n\n/**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n\nPolling.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n  var callbackfn = function () {\n    self.writable = true;\n    self.emit('drain');\n  };\n\n  parser.encodePayload(packets, this.supportsBinary, function (data) {\n    self.doWrite(data, callbackfn);\n  });\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nPolling.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'https' : 'http';\n  var port = '';\n\n  // cache busting is forced\n  if (false !== this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  if (!this.supportsBinary && !query.sid) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // avoid port if default for schema\n  if (this.port && (('https' === schema && this.port !== 443) ||\n     ('http' === schema && this.port !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n},{\"../transport\":32,\"component-inherit\":26,\"debug\":39,\"engine.io-parser\":42,\"parseqs\":66,\"xmlhttprequest-ssl\":38,\"yeast\":73}],37:[function(_dereq_,module,exports){\n(function (global){\n/**\n * Module dependencies.\n */\n\nvar Transport = _dereq_('../transport');\nvar parser = _dereq_('engine.io-parser');\nvar parseqs = _dereq_('parseqs');\nvar inherit = _dereq_('component-inherit');\nvar yeast = _dereq_('yeast');\nvar debug = _dereq_('debug')('engine.io-client:websocket');\nvar BrowserWebSocket = global.WebSocket || global.MozWebSocket;\n\n/**\n * Get either the `WebSocket` or `MozWebSocket` globals\n * in the browser or try to resolve WebSocket-compatible\n * interface exposed by `ws` for Node-like environment.\n */\n\nvar WebSocket = BrowserWebSocket;\nif (!WebSocket && typeof window === 'undefined') {\n  try {\n    WebSocket = _dereq_('ws');\n  } catch (e) { }\n}\n\n/**\n * Module exports.\n */\n\nmodule.exports = WS;\n\n/**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n\nfunction WS (opts) {\n  var forceBase64 = (opts && opts.forceBase64);\n  if (forceBase64) {\n    this.supportsBinary = false;\n  }\n  this.perMessageDeflate = opts.perMessageDeflate;\n  Transport.call(this, opts);\n}\n\n/**\n * Inherits from Transport.\n */\n\ninherit(WS, Transport);\n\n/**\n * Transport name.\n *\n * @api public\n */\n\nWS.prototype.name = 'websocket';\n\n/*\n * WebSockets support binary\n */\n\nWS.prototype.supportsBinary = true;\n\n/**\n * Opens socket.\n *\n * @api private\n */\n\nWS.prototype.doOpen = function () {\n  if (!this.check()) {\n    // let probe timeout\n    return;\n  }\n\n  var uri = this.uri();\n  var protocols = void (0);\n  var opts = {\n    agent: this.agent,\n    perMessageDeflate: this.perMessageDeflate\n  };\n\n  // SSL options for Node.js client\n  opts.pfx = this.pfx;\n  opts.key = this.key;\n  opts.passphrase = this.passphrase;\n  opts.cert = this.cert;\n  opts.ca = this.ca;\n  opts.ciphers = this.ciphers;\n  opts.rejectUnauthorized = this.rejectUnauthorized;\n  if (this.extraHeaders) {\n    opts.headers = this.extraHeaders;\n  }\n\n  try {\n    this.ws = BrowserWebSocket ? new WebSocket(uri) : new WebSocket(uri, protocols, opts);\n  } catch (err) {\n    return this.emit('error', err);\n  }\n\n  if (this.ws.binaryType === undefined) {\n    this.supportsBinary = false;\n  }\n\n  if (this.ws.supports && this.ws.supports.binary) {\n    this.supportsBinary = true;\n    this.ws.binaryType = 'nodebuffer';\n  } else {\n    this.ws.binaryType = 'arraybuffer';\n  }\n\n  this.addEventListeners();\n};\n\n/**\n * Adds event listeners to the socket\n *\n * @api private\n */\n\nWS.prototype.addEventListeners = function () {\n  var self = this;\n\n  this.ws.onopen = function () {\n    self.onOpen();\n  };\n  this.ws.onclose = function () {\n    self.onClose();\n  };\n  this.ws.onmessage = function (ev) {\n    self.onData(ev.data);\n  };\n  this.ws.onerror = function (e) {\n    self.onError('websocket error', e);\n  };\n};\n\n/**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n\nWS.prototype.write = function (packets) {\n  var self = this;\n  this.writable = false;\n\n  // encodePacket efficient as it uses WS framing\n  // no need for encodePayload\n  var total = packets.length;\n  for (var i = 0, l = total; i < l; i++) {\n    (function (packet) {\n      parser.encodePacket(packet, self.supportsBinary, function (data) {\n        if (!BrowserWebSocket) {\n          // always create a new object (GH-437)\n          var opts = {};\n          if (packet.options) {\n            opts.compress = packet.options.compress;\n          }\n\n          if (self.perMessageDeflate) {\n            var len = 'string' === typeof data ? global.Buffer.byteLength(data) : data.length;\n            if (len < self.perMessageDeflate.threshold) {\n              opts.compress = false;\n            }\n          }\n        }\n\n        // Sometimes the websocket has already been closed but the browser didn't\n        // have a chance of informing us about it yet, in that case send will\n        // throw an error\n        try {\n          if (BrowserWebSocket) {\n            // TypeError is thrown when passing the second argument on Safari\n            self.ws.send(data);\n          } else {\n            self.ws.send(data, opts);\n          }\n        } catch (e) {\n          debug('websocket closed before onclose event');\n        }\n\n        --total || done();\n      });\n    })(packets[i]);\n  }\n\n  function done () {\n    self.emit('flush');\n\n    // fake drain\n    // defer to next tick to allow Socket to clear writeBuffer\n    setTimeout(function () {\n      self.writable = true;\n      self.emit('drain');\n    }, 0);\n  }\n};\n\n/**\n * Called upon close\n *\n * @api private\n */\n\nWS.prototype.onClose = function () {\n  Transport.prototype.onClose.call(this);\n};\n\n/**\n * Closes socket.\n *\n * @api private\n */\n\nWS.prototype.doClose = function () {\n  if (typeof this.ws !== 'undefined') {\n    this.ws.close();\n  }\n};\n\n/**\n * Generates uri for connection.\n *\n * @api private\n */\n\nWS.prototype.uri = function () {\n  var query = this.query || {};\n  var schema = this.secure ? 'wss' : 'ws';\n  var port = '';\n\n  // avoid port if default for schema\n  if (this.port && (('wss' === schema && this.port !== 443) ||\n    ('ws' === schema && this.port !== 80))) {\n    port = ':' + this.port;\n  }\n\n  // append timestamp to URI\n  if (this.timestampRequests) {\n    query[this.timestampParam] = yeast();\n  }\n\n  // communicate binary support capabilities\n  if (!this.supportsBinary) {\n    query.b64 = 1;\n  }\n\n  query = parseqs.encode(query);\n\n  // prepend ? to query\n  if (query.length) {\n    query = '?' + query;\n  }\n\n  var ipv6 = this.hostname.indexOf(':') !== -1;\n  return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;\n};\n\n/**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n\nWS.prototype.check = function () {\n  return !!WebSocket && !('__initialize' in WebSocket && this.name === WS.prototype.name);\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../transport\":32,\"component-inherit\":26,\"debug\":39,\"engine.io-parser\":42,\"parseqs\":66,\"ws\":24,\"yeast\":73}],38:[function(_dereq_,module,exports){\n(function (global){\n// browser shim for xmlhttprequest module\n\nvar hasCORS = _dereq_('has-cors');\n\nmodule.exports = function (opts) {\n  var xdomain = opts.xdomain;\n\n  // scheme must be same when usign XDomainRequest\n  // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n  var xscheme = opts.xscheme;\n\n  // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n  // https://github.com/Automattic/engine.io-client/pull/217\n  var enablesXDR = opts.enablesXDR;\n\n  // XMLHttpRequest can be disabled on IE\n  try {\n    if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n      return new XMLHttpRequest();\n    }\n  } catch (e) { }\n\n  // Use XDomainRequest for IE8 if enablesXDR is true\n  // because loading bar keeps flashing when using jsonp-polling\n  // https://github.com/yujiosaka/socke.io-ie8-loading-example\n  try {\n    if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {\n      return new XDomainRequest();\n    }\n  } catch (e) { }\n\n  if (!xdomain) {\n    try {\n      return new global[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');\n    } catch (e) { }\n  }\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"has-cors\":45}],39:[function(_dereq_,module,exports){\n\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = _dereq_('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  return ('WebkitAppearance' in document.documentElement.style) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (window.console && (console.firebug || (console.exception && console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  return JSON.stringify(v);\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n  var args = arguments;\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return args;\n\n  var c = 'color: ' + this.color;\n  args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n  return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n\n},{\"./debug\":40}],40:[function(_dereq_,module,exports){\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = _dereq_('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n  return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n  // define the `disabled` version\n  function disabled() {\n  }\n  disabled.enabled = false;\n\n  // define the `enabled` version\n  function enabled() {\n\n    var self = enabled;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // add the `color` if not set\n    if (null == self.useColors) self.useColors = exports.useColors();\n    if (null == self.color && self.useColors) self.color = selectColor();\n\n    var args = Array.prototype.slice.call(arguments);\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %o\n      args = ['%o'].concat(args);\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    if ('function' === typeof exports.formatArgs) {\n      args = exports.formatArgs.apply(self, args);\n    }\n    var logFn = enabled.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n  enabled.enabled = true;\n\n  var fn = exports.enabled(namespace) ? enabled : disabled;\n\n  fn.namespace = namespace;\n\n  return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  var split = (namespaces || '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n\n},{\"ms\":41}],41:[function(_dereq_,module,exports){\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} options\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options){\n  options = options || {};\n  if ('string' == typeof val) return parse(val);\n  return options[\"long\"]\n    ? long(val)\n    : short(val);\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = '' + str;\n  if (str.length > 10000) return;\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);\n  if (!match) return;\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction short(ms) {\n  if (ms >= d) return Math.round(ms / d) + 'd';\n  if (ms >= h) return Math.round(ms / h) + 'h';\n  if (ms >= m) return Math.round(ms / m) + 'm';\n  if (ms >= s) return Math.round(ms / s) + 's';\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction long(ms) {\n  return plural(ms, d, 'day')\n    || plural(ms, h, 'hour')\n    || plural(ms, m, 'minute')\n    || plural(ms, s, 'second')\n    || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) return;\n  if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\n},{}],42:[function(_dereq_,module,exports){\n(function (global){\n/**\n * Module dependencies.\n */\n\nvar keys = _dereq_('./keys');\nvar hasBinary = _dereq_('has-binary');\nvar sliceBuffer = _dereq_('arraybuffer.slice');\nvar after = _dereq_('after');\nvar utf8 = _dereq_('wtf-8');\n\nvar base64encoder;\nif (global && global.ArrayBuffer) {\n  base64encoder = _dereq_('base64-arraybuffer');\n}\n\n/**\n * Check if we are running an android browser. That requires us to use\n * ArrayBuffer with polling transports...\n *\n * http://ghinda.net/jpeg-blob-ajax-android/\n */\n\nvar isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);\n\n/**\n * Check if we are running in PhantomJS.\n * Uploading a Blob with PhantomJS does not work correctly, as reported here:\n * https://github.com/ariya/phantomjs/issues/11395\n * @type boolean\n */\nvar isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);\n\n/**\n * When true, avoids using Blobs to encode payloads.\n * @type boolean\n */\nvar dontSendBlobs = isAndroid || isPhantomJS;\n\n/**\n * Current protocol version.\n */\n\nexports.protocol = 3;\n\n/**\n * Packet types.\n */\n\nvar packets = exports.packets = {\n    open:     0    // non-ws\n  , close:    1    // non-ws\n  , ping:     2\n  , pong:     3\n  , message:  4\n  , upgrade:  5\n  , noop:     6\n};\n\nvar packetslist = keys(packets);\n\n/**\n * Premade error packet.\n */\n\nvar err = { type: 'error', data: 'parser error' };\n\n/**\n * Create a blob api even for blob builder when vendor prefixes exist\n */\n\nvar Blob = _dereq_('blob');\n\n/**\n * Encodes a packet.\n *\n *     <packet type id> [ <data> ]\n *\n * Example:\n *\n *     5hello world\n *     3\n *     4\n *\n * Binary is encoded in an identical principle\n *\n * @api private\n */\n\nexports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {\n  if ('function' == typeof supportsBinary) {\n    callback = supportsBinary;\n    supportsBinary = false;\n  }\n\n  if ('function' == typeof utf8encode) {\n    callback = utf8encode;\n    utf8encode = null;\n  }\n\n  var data = (packet.data === undefined)\n    ? undefined\n    : packet.data.buffer || packet.data;\n\n  if (global.ArrayBuffer && data instanceof ArrayBuffer) {\n    return encodeArrayBuffer(packet, supportsBinary, callback);\n  } else if (Blob && data instanceof global.Blob) {\n    return encodeBlob(packet, supportsBinary, callback);\n  }\n\n  // might be an object with { base64: true, data: dataAsBase64String }\n  if (data && data.base64) {\n    return encodeBase64Object(packet, callback);\n  }\n\n  // Sending data as a utf-8 string\n  var encoded = packets[packet.type];\n\n  // data fragment is optional\n  if (undefined !== packet.data) {\n    encoded += utf8encode ? utf8.encode(String(packet.data)) : String(packet.data);\n  }\n\n  return callback('' + encoded);\n\n};\n\nfunction encodeBase64Object(packet, callback) {\n  // packet data is an object { base64: true, data: dataAsBase64String }\n  var message = 'b' + exports.packets[packet.type] + packet.data.data;\n  return callback(message);\n}\n\n/**\n * Encode packet helpers for binary types\n */\n\nfunction encodeArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var data = packet.data;\n  var contentArray = new Uint8Array(data);\n  var resultBuffer = new Uint8Array(1 + data.byteLength);\n\n  resultBuffer[0] = packets[packet.type];\n  for (var i = 0; i < contentArray.length; i++) {\n    resultBuffer[i+1] = contentArray[i];\n  }\n\n  return callback(resultBuffer.buffer);\n}\n\nfunction encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  var fr = new FileReader();\n  fr.onload = function() {\n    packet.data = fr.result;\n    exports.encodePacket(packet, supportsBinary, true, callback);\n  };\n  return fr.readAsArrayBuffer(packet.data);\n}\n\nfunction encodeBlob(packet, supportsBinary, callback) {\n  if (!supportsBinary) {\n    return exports.encodeBase64Packet(packet, callback);\n  }\n\n  if (dontSendBlobs) {\n    return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);\n  }\n\n  var length = new Uint8Array(1);\n  length[0] = packets[packet.type];\n  var blob = new Blob([length.buffer, packet.data]);\n\n  return callback(blob);\n}\n\n/**\n * Encodes a packet with binary data in a base64 string\n *\n * @param {Object} packet, has `type` and `data`\n * @return {String} base64 encoded message\n */\n\nexports.encodeBase64Packet = function(packet, callback) {\n  var message = 'b' + exports.packets[packet.type];\n  if (Blob && packet.data instanceof global.Blob) {\n    var fr = new FileReader();\n    fr.onload = function() {\n      var b64 = fr.result.split(',')[1];\n      callback(message + b64);\n    };\n    return fr.readAsDataURL(packet.data);\n  }\n\n  var b64data;\n  try {\n    b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));\n  } catch (e) {\n    // iPhone Safari doesn't let you apply with typed arrays\n    var typed = new Uint8Array(packet.data);\n    var basic = new Array(typed.length);\n    for (var i = 0; i < typed.length; i++) {\n      basic[i] = typed[i];\n    }\n    b64data = String.fromCharCode.apply(null, basic);\n  }\n  message += global.btoa(b64data);\n  return callback(message);\n};\n\n/**\n * Decodes a packet. Changes format to Blob if requested.\n *\n * @return {Object} with `type` and `data` (if any)\n * @api private\n */\n\nexports.decodePacket = function (data, binaryType, utf8decode) {\n  if (data === undefined) {\n    return err;\n  }\n  // String data\n  if (typeof data == 'string') {\n    if (data.charAt(0) == 'b') {\n      return exports.decodeBase64Packet(data.substr(1), binaryType);\n    }\n\n    if (utf8decode) {\n      data = tryDecode(data);\n      if (data === false) {\n        return err;\n      }\n    }\n    var type = data.charAt(0);\n\n    if (Number(type) != type || !packetslist[type]) {\n      return err;\n    }\n\n    if (data.length > 1) {\n      return { type: packetslist[type], data: data.substring(1) };\n    } else {\n      return { type: packetslist[type] };\n    }\n  }\n\n  var asArray = new Uint8Array(data);\n  var type = asArray[0];\n  var rest = sliceBuffer(data, 1);\n  if (Blob && binaryType === 'blob') {\n    rest = new Blob([rest]);\n  }\n  return { type: packetslist[type], data: rest };\n};\n\nfunction tryDecode(data) {\n  try {\n    data = utf8.decode(data);\n  } catch (e) {\n    return false;\n  }\n  return data;\n}\n\n/**\n * Decodes a packet encoded in a base64 string\n *\n * @param {String} base64 encoded message\n * @return {Object} with `type` and `data` (if any)\n */\n\nexports.decodeBase64Packet = function(msg, binaryType) {\n  var type = packetslist[msg.charAt(0)];\n  if (!base64encoder) {\n    return { type: type, data: { base64: true, data: msg.substr(1) } };\n  }\n\n  var data = base64encoder.decode(msg.substr(1));\n\n  if (binaryType === 'blob' && Blob) {\n    data = new Blob([data]);\n  }\n\n  return { type: type, data: data };\n};\n\n/**\n * Encodes multiple messages (payload).\n *\n *     <length>:data\n *\n * Example:\n *\n *     11:hello world2:hi\n *\n * If any contents are binary, they will be encoded as base64 strings. Base64\n * encoded strings are marked with a b before the length specifier\n *\n * @param {Array} packets\n * @api private\n */\n\nexports.encodePayload = function (packets, supportsBinary, callback) {\n  if (typeof supportsBinary == 'function') {\n    callback = supportsBinary;\n    supportsBinary = null;\n  }\n\n  var isBinary = hasBinary(packets);\n\n  if (supportsBinary && isBinary) {\n    if (Blob && !dontSendBlobs) {\n      return exports.encodePayloadAsBlob(packets, callback);\n    }\n\n    return exports.encodePayloadAsArrayBuffer(packets, callback);\n  }\n\n  if (!packets.length) {\n    return callback('0:');\n  }\n\n  function setLengthHeader(message) {\n    return message.length + ':' + message;\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, !isBinary ? false : supportsBinary, true, function(message) {\n      doneCallback(null, setLengthHeader(message));\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(results.join(''));\n  });\n};\n\n/**\n * Async array map using after\n */\n\nfunction map(ary, each, done) {\n  var result = new Array(ary.length);\n  var next = after(ary.length, done);\n\n  var eachWithIndex = function(i, el, cb) {\n    each(el, function(error, msg) {\n      result[i] = msg;\n      cb(error, result);\n    });\n  };\n\n  for (var i = 0; i < ary.length; i++) {\n    eachWithIndex(i, ary[i], next);\n  }\n}\n\n/*\n * Decodes data when a payload is maybe expected. Possible binary contents are\n * decoded from their base64 representation\n *\n * @param {String} data, callback method\n * @api public\n */\n\nexports.decodePayload = function (data, binaryType, callback) {\n  if (typeof data != 'string') {\n    return exports.decodePayloadAsBinary(data, binaryType, callback);\n  }\n\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var packet;\n  if (data == '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n  var length = ''\n    , n, msg;\n\n  for (var i = 0, l = data.length; i < l; i++) {\n    var chr = data.charAt(i);\n\n    if (':' != chr) {\n      length += chr;\n    } else {\n      if ('' == length || (length != (n = Number(length)))) {\n        // parser error - ignoring payload\n        return callback(err, 0, 1);\n      }\n\n      msg = data.substr(i + 1, n);\n\n      if (length != msg.length) {\n        // parser error - ignoring payload\n        return callback(err, 0, 1);\n      }\n\n      if (msg.length) {\n        packet = exports.decodePacket(msg, binaryType, true);\n\n        if (err.type == packet.type && err.data == packet.data) {\n          // parser error in individual packet - ignoring payload\n          return callback(err, 0, 1);\n        }\n\n        var ret = callback(packet, i + n, l);\n        if (false === ret) return;\n      }\n\n      // advance cursor\n      i += n;\n      length = '';\n    }\n  }\n\n  if (length != '') {\n    // parser error - ignoring payload\n    return callback(err, 0, 1);\n  }\n\n};\n\n/**\n * Encodes multiple messages (payload) as binary.\n *\n * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number\n * 255><data>\n *\n * Example:\n * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers\n *\n * @param {Array} packets\n * @return {ArrayBuffer} encoded payload\n * @api private\n */\n\nexports.encodePayloadAsArrayBuffer = function(packets, callback) {\n  if (!packets.length) {\n    return callback(new ArrayBuffer(0));\n  }\n\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(data) {\n      return doneCallback(null, data);\n    });\n  }\n\n  map(packets, encodeOne, function(err, encodedPackets) {\n    var totalLength = encodedPackets.reduce(function(acc, p) {\n      var len;\n      if (typeof p === 'string'){\n        len = p.length;\n      } else {\n        len = p.byteLength;\n      }\n      return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2\n    }, 0);\n\n    var resultArray = new Uint8Array(totalLength);\n\n    var bufferIndex = 0;\n    encodedPackets.forEach(function(p) {\n      var isString = typeof p === 'string';\n      var ab = p;\n      if (isString) {\n        var view = new Uint8Array(p.length);\n        for (var i = 0; i < p.length; i++) {\n          view[i] = p.charCodeAt(i);\n        }\n        ab = view.buffer;\n      }\n\n      if (isString) { // not true binary\n        resultArray[bufferIndex++] = 0;\n      } else { // true binary\n        resultArray[bufferIndex++] = 1;\n      }\n\n      var lenStr = ab.byteLength.toString();\n      for (var i = 0; i < lenStr.length; i++) {\n        resultArray[bufferIndex++] = parseInt(lenStr[i]);\n      }\n      resultArray[bufferIndex++] = 255;\n\n      var view = new Uint8Array(ab);\n      for (var i = 0; i < view.length; i++) {\n        resultArray[bufferIndex++] = view[i];\n      }\n    });\n\n    return callback(resultArray.buffer);\n  });\n};\n\n/**\n * Encode as Blob\n */\n\nexports.encodePayloadAsBlob = function(packets, callback) {\n  function encodeOne(packet, doneCallback) {\n    exports.encodePacket(packet, true, true, function(encoded) {\n      var binaryIdentifier = new Uint8Array(1);\n      binaryIdentifier[0] = 1;\n      if (typeof encoded === 'string') {\n        var view = new Uint8Array(encoded.length);\n        for (var i = 0; i < encoded.length; i++) {\n          view[i] = encoded.charCodeAt(i);\n        }\n        encoded = view.buffer;\n        binaryIdentifier[0] = 0;\n      }\n\n      var len = (encoded instanceof ArrayBuffer)\n        ? encoded.byteLength\n        : encoded.size;\n\n      var lenStr = len.toString();\n      var lengthAry = new Uint8Array(lenStr.length + 1);\n      for (var i = 0; i < lenStr.length; i++) {\n        lengthAry[i] = parseInt(lenStr[i]);\n      }\n      lengthAry[lenStr.length] = 255;\n\n      if (Blob) {\n        var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);\n        doneCallback(null, blob);\n      }\n    });\n  }\n\n  map(packets, encodeOne, function(err, results) {\n    return callback(new Blob(results));\n  });\n};\n\n/*\n * Decodes data when a payload is maybe expected. Strings are decoded by\n * interpreting each byte as a key code for entries marked to start with 0. See\n * description of encodePayloadAsBinary\n *\n * @param {ArrayBuffer} data, callback method\n * @api public\n */\n\nexports.decodePayloadAsBinary = function (data, binaryType, callback) {\n  if (typeof binaryType === 'function') {\n    callback = binaryType;\n    binaryType = null;\n  }\n\n  var bufferTail = data;\n  var buffers = [];\n\n  var numberTooLong = false;\n  while (bufferTail.byteLength > 0) {\n    var tailArray = new Uint8Array(bufferTail);\n    var isString = tailArray[0] === 0;\n    var msgLength = '';\n\n    for (var i = 1; ; i++) {\n      if (tailArray[i] == 255) break;\n\n      if (msgLength.length > 310) {\n        numberTooLong = true;\n        break;\n      }\n\n      msgLength += tailArray[i];\n    }\n\n    if(numberTooLong) return callback(err, 0, 1);\n\n    bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);\n    msgLength = parseInt(msgLength);\n\n    var msg = sliceBuffer(bufferTail, 0, msgLength);\n    if (isString) {\n      try {\n        msg = String.fromCharCode.apply(null, new Uint8Array(msg));\n      } catch (e) {\n        // iPhone Safari doesn't let you apply to typed arrays\n        var typed = new Uint8Array(msg);\n        msg = '';\n        for (var i = 0; i < typed.length; i++) {\n          msg += String.fromCharCode(typed[i]);\n        }\n      }\n    }\n\n    buffers.push(msg);\n    bufferTail = sliceBuffer(bufferTail, msgLength);\n  }\n\n  var total = buffers.length;\n  buffers.forEach(function(buffer, i) {\n    callback(exports.decodePacket(buffer, binaryType, true), i, total);\n  });\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./keys\":43,\"after\":19,\"arraybuffer.slice\":20,\"base64-arraybuffer\":21,\"blob\":23,\"has-binary\":44,\"wtf-8\":72}],43:[function(_dereq_,module,exports){\n\n/**\n * Gets the keys for an object.\n *\n * @return {Array} keys\n * @api private\n */\n\nmodule.exports = Object.keys || function keys (obj){\n  var arr = [];\n  var has = Object.prototype.hasOwnProperty;\n\n  for (var i in obj) {\n    if (has.call(obj, i)) {\n      arr.push(i);\n    }\n  }\n  return arr;\n};\n\n},{}],44:[function(_dereq_,module,exports){\n(function (global){\n\n/*\n * Module requirements.\n */\n\nvar isArray = _dereq_('isarray');\n\n/**\n * Module exports.\n */\n\nmodule.exports = hasBinary;\n\n/**\n * Checks for binary data.\n *\n * Right now only Buffer and ArrayBuffer are supported..\n *\n * @param {Object} anything\n * @api public\n */\n\nfunction hasBinary(data) {\n\n  function _hasBinary(obj) {\n    if (!obj) return false;\n\n    if ( (global.Buffer && global.Buffer.isBuffer(obj)) ||\n         (global.ArrayBuffer && obj instanceof ArrayBuffer) ||\n         (global.Blob && obj instanceof Blob) ||\n         (global.File && obj instanceof File)\n        ) {\n      return true;\n    }\n\n    if (isArray(obj)) {\n      for (var i = 0; i < obj.length; i++) {\n          if (_hasBinary(obj[i])) {\n              return true;\n          }\n      }\n    } else if (obj && 'object' == typeof obj) {\n      if (obj.toJSON) {\n        obj = obj.toJSON();\n      }\n\n      for (var key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key) && _hasBinary(obj[key])) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  return _hasBinary(data);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"isarray\":49}],45:[function(_dereq_,module,exports){\n\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n *   - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n  module.exports = typeof XMLHttpRequest !== 'undefined' &&\n    'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n  // if XMLHttp support is disabled in IE then it will throw\n  // when trying to create\n  module.exports = false;\n}\n\n},{}],46:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],47:[function(_dereq_,module,exports){\n\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n},{}],48:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},{}],49:[function(_dereq_,module,exports){\nmodule.exports = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n},{}],50:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = INTERNAL;\n\nfunction INTERNAL() {}\n},{}],51:[function(_dereq_,module,exports){\n'use strict';\nvar Promise = _dereq_('./promise');\nvar reject = _dereq_('./reject');\nvar resolve = _dereq_('./resolve');\nvar INTERNAL = _dereq_('./INTERNAL');\nvar handlers = _dereq_('./handlers');\nmodule.exports = all;\nfunction all(iterable) {\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new Promise(INTERNAL);\n  \n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len & !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n},{\"./INTERNAL\":50,\"./handlers\":52,\"./promise\":54,\"./reject\":57,\"./resolve\":58}],52:[function(_dereq_,module,exports){\n'use strict';\nvar tryCatch = _dereq_('./tryCatch');\nvar resolveThenable = _dereq_('./resolveThenable');\nvar states = _dereq_('./states');\n\nexports.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return exports.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    resolveThenable.safely(self, thenable);\n  } else {\n    self.state = states.FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nexports.reject = function (self, error) {\n  self.state = states.REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && typeof obj === 'object' && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\n},{\"./resolveThenable\":59,\"./states\":60,\"./tryCatch\":61}],53:[function(_dereq_,module,exports){\nmodule.exports = exports = _dereq_('./promise');\n\nexports.resolve = _dereq_('./resolve');\nexports.reject = _dereq_('./reject');\nexports.all = _dereq_('./all');\nexports.race = _dereq_('./race');\n\n},{\"./all\":51,\"./promise\":54,\"./race\":56,\"./reject\":57,\"./resolve\":58}],54:[function(_dereq_,module,exports){\n'use strict';\n\nvar unwrap = _dereq_('./unwrap');\nvar INTERNAL = _dereq_('./INTERNAL');\nvar resolveThenable = _dereq_('./resolveThenable');\nvar states = _dereq_('./states');\nvar QueueItem = _dereq_('./queueItem');\n\nmodule.exports = Promise;\nfunction Promise(resolver) {\n  if (!(this instanceof Promise)) {\n    return new Promise(resolver);\n  }\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = states.PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    resolveThenable.safely(this, resolver);\n  }\n}\n\nPromise.prototype['catch'] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === states.FULFILLED ||\n    typeof onRejected !== 'function' && this.state === states.REJECTED) {\n    return this;\n  }\n  var promise = new Promise(INTERNAL);\n  if (this.state !== states.PENDING) {\n    var resolver = this.state === states.FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\n\n},{\"./INTERNAL\":50,\"./queueItem\":55,\"./resolveThenable\":59,\"./states\":60,\"./unwrap\":62}],55:[function(_dereq_,module,exports){\n'use strict';\nvar handlers = _dereq_('./handlers');\nvar unwrap = _dereq_('./unwrap');\n\nmodule.exports = QueueItem;\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\n},{\"./handlers\":52,\"./unwrap\":62}],56:[function(_dereq_,module,exports){\n'use strict';\nvar Promise = _dereq_('./promise');\nvar reject = _dereq_('./reject');\nvar resolve = _dereq_('./resolve');\nvar INTERNAL = _dereq_('./INTERNAL');\nvar handlers = _dereq_('./handlers');\nmodule.exports = race;\nfunction race(iterable) {\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return resolve([]);\n  }\n\n  var i = -1;\n  var promise = new Promise(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"./INTERNAL\":50,\"./handlers\":52,\"./promise\":54,\"./reject\":57,\"./resolve\":58}],57:[function(_dereq_,module,exports){\n'use strict';\n\nvar Promise = _dereq_('./promise');\nvar INTERNAL = _dereq_('./INTERNAL');\nvar handlers = _dereq_('./handlers');\nmodule.exports = reject;\n\nfunction reject(reason) {\n\tvar promise = new Promise(INTERNAL);\n\treturn handlers.reject(promise, reason);\n}\n},{\"./INTERNAL\":50,\"./handlers\":52,\"./promise\":54}],58:[function(_dereq_,module,exports){\n'use strict';\n\nvar Promise = _dereq_('./promise');\nvar INTERNAL = _dereq_('./INTERNAL');\nvar handlers = _dereq_('./handlers');\nmodule.exports = resolve;\n\nvar FALSE = handlers.resolve(new Promise(INTERNAL), false);\nvar NULL = handlers.resolve(new Promise(INTERNAL), null);\nvar UNDEFINED = handlers.resolve(new Promise(INTERNAL), void 0);\nvar ZERO = handlers.resolve(new Promise(INTERNAL), 0);\nvar EMPTYSTRING = handlers.resolve(new Promise(INTERNAL), '');\n\nfunction resolve(value) {\n  if (value) {\n    if (value instanceof Promise) {\n      return value;\n    }\n    return handlers.resolve(new Promise(INTERNAL), value);\n  }\n  var valueType = typeof value;\n  switch (valueType) {\n    case 'boolean':\n      return FALSE;\n    case 'undefined':\n      return UNDEFINED;\n    case 'object':\n      return NULL;\n    case 'number':\n      return ZERO;\n    case 'string':\n      return EMPTYSTRING;\n  }\n}\n},{\"./INTERNAL\":50,\"./handlers\":52,\"./promise\":54}],59:[function(_dereq_,module,exports){\n'use strict';\nvar handlers = _dereq_('./handlers');\nvar tryCatch = _dereq_('./tryCatch');\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n  \n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\nexports.safely = safelyResolveThenable;\n},{\"./handlers\":52,\"./tryCatch\":61}],60:[function(_dereq_,module,exports){\n// Lazy man's symbols for states\n\nexports.REJECTED = ['REJECTED'];\nexports.FULFILLED = ['FULFILLED'];\nexports.PENDING = ['PENDING'];\n\n},{}],61:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = tryCatch;\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n},{}],62:[function(_dereq_,module,exports){\n'use strict';\n\nvar immediate = _dereq_('immediate');\nvar handlers = _dereq_('./handlers');\nmodule.exports = unwrap;\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n},{\"./handlers\":52,\"immediate\":46}],63:[function(_dereq_,module,exports){\n/**\n * Helpers.\n */\n\nvar s = 1000\nvar m = s * 60\nvar h = m * 60\nvar d = h * 24\nvar y = d * 365.25\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} options\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {}\n  var type = typeof val\n  if (type === 'string' && val.length > 0) {\n    return parse(val)\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options[\"long\"] ?\n\t\t\tfmtLong(val) :\n\t\t\tfmtShort(val)\n  }\n  throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val))\n}\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str)\n  if (str.length > 10000) {\n    return\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str)\n  if (!match) {\n    return\n  }\n  var n = parseFloat(match[1])\n  var type = (match[2] || 'ms').toLowerCase()\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n\n    default:\n      return undefined\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd'\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h'\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm'\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's'\n  }\n  return ms + 'ms'\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms'\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's'\n}\n\n},{}],64:[function(_dereq_,module,exports){\nmodule.exports = typeof Promise === 'function' ? Promise : _dereq_('lie');\n\n},{\"lie\":53}],65:[function(_dereq_,module,exports){\n(function (global){\n/**\n * JSON parse.\n *\n * @see Based on jQuery#parseJSON (MIT) and JSON2\n * @api private\n */\n\nvar rvalidchars = /^[\\],:{}\\s]*$/;\nvar rvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\nvar rvalidtokens = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\nvar rvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g;\nvar rtrimLeft = /^\\s+/;\nvar rtrimRight = /\\s+$/;\n\nmodule.exports = function parsejson(data) {\n  if ('string' != typeof data || !data) {\n    return null;\n  }\n\n  data = data.replace(rtrimLeft, '').replace(rtrimRight, '');\n\n  // Attempt to parse using the native JSON parser first\n  if (global.JSON && JSON.parse) {\n    return JSON.parse(data);\n  }\n\n  if (rvalidchars.test(data.replace(rvalidescape, '@')\n      .replace(rvalidtokens, ']')\n      .replace(rvalidbraces, ''))) {\n    return (new Function('return ' + data))();\n  }\n};\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],66:[function(_dereq_,module,exports){\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\n\nexports.encode = function (obj) {\n  var str = '';\n\n  for (var i in obj) {\n    if (obj.hasOwnProperty(i)) {\n      if (str.length) str += '&';\n      str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n    }\n  }\n\n  return str;\n};\n\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\n\nexports.decode = function(qs){\n  var qry = {};\n  var pairs = qs.split('&');\n  for (var i = 0, l = pairs.length; i < l; i++) {\n    var pair = pairs[i].split('=');\n    qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n  }\n  return qry;\n};\n\n},{}],67:[function(_dereq_,module,exports){\n/**\n * Parses an URI\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\n\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nvar parts = [\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\n\nmodule.exports = function parseuri(str) {\n    var src = str,\n        b = str.indexOf('['),\n        e = str.indexOf(']');\n\n    if (b != -1 && e != -1) {\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n    }\n\n    var m = re.exec(str || ''),\n        uri = {},\n        i = 14;\n\n    while (i--) {\n        uri[parts[i]] = m[i] || '';\n    }\n\n    if (b != -1 && e != -1) {\n        uri.source = src;\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n        uri.ipv6uri = true;\n    }\n\n    return uri;\n};\n\n},{}],68:[function(_dereq_,module,exports){\n(function (global){\n\"use strict\";\n\n//Abstracts constructing a Blob object, so it also works in older\n//browsers that don't support the native Blob constructor. (i.e.\n//old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n  parts = parts || [];\n  properties = properties || {};\n  try {\n    return new Blob(parts, properties);\n  } catch (e) {\n    if (e.name !== \"TypeError\") {\n      throw e;\n    }\n    var BlobBuilder = global.BlobBuilder ||\n                      global.MSBlobBuilder ||\n                      global.MozBlobBuilder ||\n                      global.WebKitBlobBuilder;\n    var builder = new BlobBuilder();\n    for (var i = 0; i < parts.length; i += 1) {\n      builder.append(parts[i]);\n    }\n    return builder.getBlob(properties.type);\n  }\n}\n\n//Can't find original post, but this is close\n//http://stackoverflow.com/questions/6965107/ (continues on next line)\n//converting-between-strings-and-arraybuffers\nfunction arrayBufferToBinaryString(buffer) {\n  var binary = \"\";\n  var bytes = new Uint8Array(buffer);\n  var length = bytes.byteLength;\n  for (var i = 0; i < length; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return binary;\n}\n\n// This used to be called \"fixBinary\", which wasn't a very evocative name\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction binaryStringToArrayBuffer(bin) {\n  var length = bin.length;\n  var buf = new ArrayBuffer(length);\n  var arr = new Uint8Array(buf);\n  for (var i = 0; i < length; i++) {\n    arr[i] = bin.charCodeAt(i);\n  }\n  return buf;\n}\n\n// shim for browsers that don't support it\nfunction readAsBinaryString(blob, callback) {\n  var reader = new FileReader();\n  var hasBinaryString = typeof reader.readAsBinaryString === 'function';\n  reader.onloadend = function (e) {\n    var result = e.target.result || '';\n    if (hasBinaryString) {\n      return callback(result);\n    }\n    callback(arrayBufferToBinaryString(result));\n  };\n  if (hasBinaryString) {\n    reader.readAsBinaryString(blob);\n  } else {\n    reader.readAsArrayBuffer(blob);\n  }\n}\n\n// simplified API. universal browser support is assumed\nfunction readAsArrayBuffer(blob, callback) {\n  var reader = new FileReader();\n  reader.onloadend = function (e) {\n    var result = e.target.result || new ArrayBuffer(0);\n    callback(result);\n  };\n  reader.readAsArrayBuffer(blob);\n}\n\nmodule.exports = {\n  createBlob: createBlob,\n  readAsArrayBuffer: readAsArrayBuffer,\n  readAsBinaryString: readAsBinaryString,\n  binaryStringToArrayBuffer: binaryStringToArrayBuffer,\n  arrayBufferToBinaryString: arrayBufferToBinaryString\n};\n\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],69:[function(_dereq_,module,exports){\n'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar lie = _interopDefault(_dereq_('lie'));\n\n/* istanbul ignore next */\nvar PouchPromise = typeof Promise === 'function' ? Promise : lie;\n\nmodule.exports = PouchPromise;\n},{\"lie\":70}],70:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_('immediate');\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && typeof obj === 'object' && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"immediate\":46}],71:[function(_dereq_,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    draining = true;\n    var currentQueue;\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        var i = -1;\n        while (++i < len) {\n            currentQueue[i]();\n        }\n        len = queue.length;\n    }\n    draining = false;\n}\nprocess.nextTick = function (fun) {\n    queue.push(fun);\n    if (!draining) {\n        setTimeout(drainQueue, 0);\n    }\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\n// TODO(shtylman)\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],72:[function(_dereq_,module,exports){\n(function (global){\n/*! https://mths.be/wtf8 v1.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction wtf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte.\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read the first byte.\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid WTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction wtf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar wtf8 = {\n\t\t'version': '1.0.0',\n\t\t'encode': wtf8encode,\n\t\t'decode': wtf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn wtf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = wtf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in wtf8) {\n\t\t\t\thasOwnProperty.call(wtf8, key) && (freeExports[key] = wtf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.wtf8 = wtf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],73:[function(_dereq_,module,exports){\n'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n  , length = 64\n  , map = {}\n  , seed = 0\n  , i = 0\n  , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n  var encoded = '';\n\n  do {\n    encoded = alphabet[num % length] + encoded;\n    num = Math.floor(num / length);\n  } while (num > 0);\n\n  return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n  var decoded = 0;\n\n  for (i = 0; i < str.length; i++) {\n    decoded = decoded * length + map[str.charAt(i)];\n  }\n\n  return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n  var now = encode(+new Date());\n\n  if (now !== prev) return seed = 0, prev = now;\n  return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n\n},{}]},{},[1])(1)\n});"
  },
  {
    "path": "lib/client/arrayBufferToBinaryString.js",
    "content": "'use strict';\n\n//Can't find original post, but this is close\n//http://stackoverflow.com/questions/6965107/ (continues on next line)\n//converting-between-strings-and-arraybuffers\nmodule.exports = function (buffer) {\n  var binary = '';\n  var bytes = new Uint8Array(buffer);\n  var length = bytes.byteLength;\n  for (var i = 0; i < length; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return binary;\n};"
  },
  {
    "path": "lib/client/base64.js",
    "content": "'use strict';\n\nvar buffer = require('../shared/buffer');\n\n/* istanbul ignore if */\nif (typeof atob === 'function') {\n  exports.atob = function (str) {\n    /* global atob */\n    return atob(str);\n  };\n} else {\n  exports.atob = function (str) {\n    var base64 = new buffer(str, 'base64');\n    // Node.js will just skip the characters it can't encode instead of\n    // throwing and exception\n    if (base64.toString('base64') !== str) {\n      throw (\"Cannot base64 encode full string\");\n    }\n    return base64.toString('binary');\n  };\n}\n\n/* istanbul ignore if */\nif (typeof btoa === 'function') {\n  exports.btoa = function (str) {\n    /* global btoa */\n    return btoa(str);\n  };\n} else {\n  exports.btoa = function (str) {\n    return new buffer(str, 'binary').toString('base64');\n  };\n}"
  },
  {
    "path": "lib/client/base64StringToBlobOrBuffer-browser.js",
    "content": "'use strict';\n\nvar binaryStringToBlobOrBuffer = require('./binaryStringToBlobOrBuffer');\n\nmodule.exports = function (b64, type) {\n  return binaryStringToBlobOrBuffer(atob(b64), type);\n};"
  },
  {
    "path": "lib/client/base64StringToBlobOrBuffer.js",
    "content": "'use strict';\n\nvar typedBuffer = require('./typedBuffer');\n\nmodule.exports = function (b64, type) {\n  return typedBuffer(b64, 'base64', type);\n};"
  },
  {
    "path": "lib/client/binaryStringToArrayBuffer.js",
    "content": "'use strict';\n\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nmodule.exports = function (bin) {\n  var length = bin.length;\n  var buf = new ArrayBuffer(length);\n  var arr = new Uint8Array(buf);\n  for (var i = 0; i < length; i++) {\n    arr[i] = bin.charCodeAt(i);\n  }\n  return buf;\n};"
  },
  {
    "path": "lib/client/binaryStringToBlobOrBuffer-browser.js",
    "content": "'use strict';\n\nvar createBlob = require('./blob');\nvar binaryStringToArrayBuffer = require('./binaryStringToArrayBuffer');\n\nmodule.exports = function (binString, type) {\n  return createBlob([binaryStringToArrayBuffer(binString)], {type: type});\n};"
  },
  {
    "path": "lib/client/binaryStringToBlobOrBuffer.js",
    "content": "'use strict';\n\nvar typedBuffer = require('./typedBuffer');\n\nmodule.exports = function (binString, type) {\n  return typedBuffer(binString, 'binary', type);\n};"
  },
  {
    "path": "lib/client/blob.js",
    "content": "\"use strict\";\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor (e.g.\n// old QtWebKit versions, Android < 4.4).\nfunction createBlob(parts, properties) {\n  /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n  parts = parts || [];\n  properties = properties || {};\n  try {\n    return new Blob(parts, properties);\n  } catch (e) {\n    if (e.name !== \"TypeError\") {\n      throw e;\n    }\n    var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\n                  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\n                  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :\n                  WebKitBlobBuilder;\n    var builder = new Builder();\n    for (var i = 0; i < parts.length; i += 1) {\n      builder.append(parts[i]);\n    }\n    return builder.getBlob(properties.type);\n  }\n}\n\nmodule.exports = createBlob;\n\n"
  },
  {
    "path": "lib/client/index.js",
    "content": "'use strict';\n\nvar utils = require('../shared/utils');\nvar clientUtils = require('./utils');\nvar uuid = require('./../shared/uuid');\nvar errors = require('../shared/errors');\nvar log = require('debug')('pouchdb:socket:client');\nvar Socket = require('engine.io-client');\nvar blobUtil = require('blob-util');\nvar isBrowser = typeof process === 'undefined' || process.browser;\nvar buffer = require('../shared/buffer');\nvar preprocessAttachments = clientUtils.preprocessAttachments;\nvar stringifyArgs = clientUtils.stringifyArgs;\nvar padInt = clientUtils.padInt;\nvar readAttachmentsAsBlobOrBuffer = clientUtils.readAttachmentsAsBlobOrBuffer;\nvar adapterFun = clientUtils.adapterFun;\nvar readAsBinaryString = require('./readAsBinaryString');\nvar isBinaryObject = require('../shared/isBinaryObject');\nvar Promise = require('pouchdb-promise');\nvar base64 = require('./base64');\n\nvar instances = {};\n\nfunction close(api, callback) {\n  // api.name was added in pouchdb 6.0.0\n  log('closing socket', api._socketId, api.name || api._name);\n\n  function closeSocket() {\n    api._socket.closed = true;\n    api._socket.once('close', function (msg) {\n      log('socket closed', api._socketId, msg);\n      api._socket.removeAllListeners();\n      callback();\n    });\n    api._socket.close();\n  }\n\n  if (api._socket.closed) {\n    return callback();\n  }\n  closeSocket();\n}\n\n// Implements the PouchDB API for dealing with CouchDB instances over WS\nfunction SocketPouch(opts, callback) {\n  var api = this;\n\n  if (typeof opts === 'string') {\n    var slashIdx = utils.lastIndexOf(opts, '/');\n    opts = {\n      url: opts.substring(0, slashIdx),\n      name: opts.substring(slashIdx + 1)\n    };\n  } else {\n    opts = utils.clone(opts);\n  }\n\n  log('constructor called', opts);\n\n  if (!opts.url || !opts.name) {\n    var optsErrMessage = 'Error: you must provide a web socket ' +\n      'url and database name.';\n    console.error(optsErrMessage);\n    return callback(new Error(optsErrMessage));\n  }\n\n  // api.name was added in pouchdb 6.0.0\n  api._socketName = api.name || opts.originalName;\n\n  var cacheKey = '$' + api._socketName;\n\n  function useExistingSocket() {\n    // Re-use the cached one instead of creating multiple sockets.\n    // This is important, because if a user creates many PouchDBs\n    // without closing/destroying each one, then we could end up\n    // with too many open sockets, which causes problems like\n    // https://github.com/Automattic/engine.io/issues/320\n    var instance = instances[cacheKey];\n    api._socket = instance._socket;\n    api._callbacks = instance._callbacks;\n    api._changesListeners = instance._changesListeners;\n    api._blobs = instance._blobs;\n    api._binaryMessages = instance._binaryMessages;\n    api._name = instance._name;\n\n    if (instance._socketId) {\n      api._socketId = instance._socketId;\n      process.nextTick(function () {\n        callback(null, api);\n      });\n    } else {\n      api._socket.once('open', function () {\n        api._socketId = api._socket.id;\n        process.nextTick(function () {\n          callback(null, api);\n        });\n      });\n    }\n  }\n\n  function createNewSocket() {\n    // to force XHR during debugging\n    // opts.socketOptions = {transports: ['polling']};\n    var socket = api._socket = new Socket(opts.url, opts.socketOptions || {});\n    socket.binaryType = 'blob';\n    api._callbacks = {};\n    api._changesListeners = {};\n    api._blobs = {};\n    api._binaryMessages = {};\n    api._name = api._socketName;\n    instances[cacheKey] = api;\n\n    socket.once('open', function () {\n      api._socketId = socket.id;\n      log('socket opened', api._socketId, api._name);\n      var serverOpts = {\n        name: api._name,\n        auto_compaction: !!opts.auto_compaction\n      };\n      if ('revs_limit' in opts) {\n        serverOpts.revs_limit = opts.revs_limit;\n      }\n      sendMessage('createDatabase', [serverOpts], function (err) {\n        if (err) {\n          return callback(err);\n        }\n        callback(null, api);\n      });\n    });\n\n    api._socket.once('error', function (err) {\n      callback(err);\n    });\n\n    function handleUncaughtError(content) {\n      try {\n        api.emit('error', content);\n      } catch (err) {\n        // TODO: it's weird that adapters should have to handle this themselves\n        console.error(\n          'The user\\'s map/reduce function threw an uncaught error.\\n' +\n          'You can debug this error by doing:\\n' +\n          'myDatabase.on(\\'error\\', function (err) { debugger; });\\n' +\n          'Please double-check your map/reduce function.');\n        console.error(content);\n      }\n    }\n\n    function receiveMessage(res) {\n      var split = utils.parseMessage(res, 3);\n      var messageId = split[0];\n      var messageType = split[1];\n      var content = JSON.parse(split[2]);\n\n      if (messageType === '4') { // unhandled error\n        handleUncaughtError(content);\n        return;\n      }\n\n      var cb = api._callbacks[messageId];\n\n      if (!cb) {\n        log('duplicate message (ignoring)', messageId, messageType, content);\n        return;\n      }\n\n      log('receive message', api._socketId, messageId, messageType, content);\n\n      if (messageType === '0') { // error\n        delete api._callbacks[messageId];\n        cb(content);\n      } else if (messageType === '1') { // success\n        delete api._callbacks[messageId];\n        cb(null, content);\n      } else if (messageType === '2') { // update, i.e. changes\n        if (api._changesListeners[messageId].asBinary) {\n          readAttachmentsAsBlobOrBuffer(content);\n        }\n        api._changesListeners[messageId].listener(content);\n      } else { // binary success\n        delete api._callbacks[messageId];\n        receiveBinaryMessage(content, cb);\n      }\n    }\n\n    function receiveBinaryMessage(content, cb) {\n      log('receiveBinaryMessage', content.uuid);\n      api._binaryMessages[content.uuid] = {\n        contentType: content.type,\n        cb: cb\n      };\n      checkBinaryReady(uuid);\n    }\n\n    function receiveBlob(blob) {\n      if (isBrowser) {\n        blobUtil.blobToBinaryString(blob.slice(0, 36)).then(function (uuid) {\n          api._blobs[uuid] = blob.slice(36);\n          log('receiveBlob', uuid);\n          checkBinaryReady(uuid);\n        }).catch(console.log.bind(console));\n      } else {\n        var uuid = blob.slice(0, 36).toString('utf8');\n        log('receiveBlob', uuid);\n        api._blobs[uuid] = blob.slice(36);\n        checkBinaryReady(uuid);\n      }\n    }\n\n    // binary messages come in two parts; wait until we've received both\n    function checkBinaryReady(uuid) {\n      if (!(uuid in api._blobs && uuid in api._binaryMessages)) {\n        return;\n      }\n      log('receive full binary message', uuid);\n      var blob = api._blobs[uuid];\n      var msg = api._binaryMessages[uuid];\n\n      delete api._blobs[uuid];\n      delete api._binaryMessages[uuid];\n\n      var blobToDeliver;\n      if (isBrowser) {\n        blobToDeliver = blobUtil.createBlob([blob], {type: msg.contentType});\n      } else {\n        blobToDeliver = blob;\n        blob.type = msg.contentType; // non-standard, but we do it for the tests\n      }\n\n      msg.cb(null, blobToDeliver);\n    }\n\n    api._socket.on('message', function (res) {\n      if (typeof res !== 'string') {\n        return receiveBlob(res);\n      }\n      receiveMessage(res);\n    });\n  }\n\n  if (instances[cacheKey]) {\n    useExistingSocket();\n  } else { // new DB\n    createNewSocket();\n  }\n\n  function sendMessage(type, args, callback) {\n    if (api._destroyed) {\n      return callback(new Error('this db was destroyed'));\n    } else if (api._closed) {\n      return callback(new Error('this db was closed'));\n    }\n    var messageId = uuid();\n    log('send message', api._socketId, messageId, type, args);\n    api._callbacks[messageId] = callback;\n    var stringArgs = stringifyArgs(args);\n    api._socket.send(type + ':' + messageId + ':' + stringArgs, function () {\n      log('message sent', api._socketId, messageId);\n    });\n  }\n\n  function sendBinaryMessage(type, args, blobIndex, blob, callback) {\n    var messageId = uuid();\n    api._callbacks[messageId] = callback;\n    var header = {\n      args: args,\n      blobIndex: blobIndex,\n      messageId: messageId,\n      messageType: type\n    };\n\n    log('send binary message', api._socketId, messageId, header);\n    var headerString = JSON.stringify(header);\n    var headerLen = padInt(headerString.length, 16);\n    var blobToSend;\n    if (isBrowser) {\n      blobToSend = blobUtil.createBlob([\n        headerLen,\n        headerString,\n        blob\n      ]);\n    } else { // node.js\n      blobToSend = buffer.concat([\n        new buffer(headerLen, 'utf8'),\n        new buffer(headerString, 'utf8'),\n        new buffer(blob, 'binary')\n      ]);\n    }\n    api._socket.send(blobToSend, function () {\n      log('binary message sent', api._socketId, messageId);\n    });\n  }\n\n  api.type = function () {\n    return 'socket';\n  };\n\n  api._id = adapterFun('id', function (callback) {\n    sendMessage('id', [], callback);\n  });\n\n  api.compact = adapterFun('compact', function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    sendMessage('compact', [opts], callback);\n  });\n\n  api._info = function (callback) {\n    sendMessage('info', [], callback);\n  };\n\n  api.get = adapterFun('get', function (id, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    sendMessage('get', [id, opts], function (err, res) {\n      if (err) {\n        return callback(err);\n      }\n      if (opts.attachments && opts.binary) {\n        if (Array.isArray(res)) {\n          res.forEach(readAttachmentsAsBlobOrBuffer);\n        } else {\n          readAttachmentsAsBlobOrBuffer({doc: res});\n        }\n      }\n      callback(null, res);\n    });\n  });\n\n  // hacky code necessary due to implicit breaking change in\n  // https://github.com/pouchdb/pouchdb/commits/0ddeae6b\n  api._get = function (id, opts, callback) {\n    api.get(id, opts, function (err, doc) {\n      if (err) {\n        return callback(err);\n      }\n      callback(null, {doc: doc});\n    });\n  };\n\n  api.remove =\n    adapterFun('remove', function (docOrId, optsOrRev, opts, callback) {\n      var doc;\n      if (typeof optsOrRev === 'string') {\n        // id, rev, opts, callback style\n        doc = {\n          _id: docOrId,\n          _rev: optsOrRev\n        };\n        if (typeof opts === 'function') {\n          callback = opts;\n          opts = {};\n        }\n      } else {\n        // doc, opts, callback style\n        doc = docOrId;\n        if (typeof optsOrRev === 'function') {\n          callback = optsOrRev;\n          opts = {};\n        } else {\n          callback = opts;\n          opts = optsOrRev;\n        }\n      }\n      var rev = (doc._rev || opts.rev);\n\n      sendMessage('remove', [doc._id, rev], callback);\n  });\n\n  api.getAttachment =\n    adapterFun('getAttachment', function (docId, attachmentId, opts,\n                                                callback) {\n      if (typeof opts === 'function') {\n        callback = opts;\n        opts = {};\n      }\n      sendMessage('getAttachment', [docId, attachmentId, opts], callback);\n  });\n\n  api.removeAttachment =\n    adapterFun('removeAttachment', function (docId, attachmentId, rev,\n                                                   callback) {\n\n      sendMessage('removeAttachment', [docId, attachmentId, rev], callback);\n    });\n\n  // Add the attachment given by blob and its contentType property\n  // to the document with the given id, the revision given by rev, and\n  // add it to the database given by host.\n  api.putAttachment =\n    adapterFun('putAttachment', function (docId, attachmentId, rev, blob,\n                                                type, callback) {\n      if (typeof type === 'function') {\n        callback = type;\n        type = blob;\n        blob = rev;\n        rev = null;\n      }\n      if (typeof type === 'undefined') {\n        type = blob;\n        blob = rev;\n        rev = null;\n      }\n\n      if (typeof blob === 'string') {\n        var binary;\n        try {\n          binary = utils.atob(blob);\n        } catch (err) {\n          // it's not base64-encoded, so throw error\n          return callback(errors.error(errors.BAD_ARG,\n            'Attachments need to be base64 encoded'));\n        }\n        if (isBrowser) {\n          blob = utils.createBlob([utils.binaryStringToArrayBuffer(binary)], {type: type});\n        } else {\n          blob = binary ? new buffer(binary, 'binary') : '';\n        }\n      }\n\n      var args = [docId, attachmentId, rev, null, type];\n      sendBinaryMessage('putAttachment', args, 3, blob, callback);\n    });\n\n  api.put = adapterFun('put', utils.getArguments(function (args) {\n    var temp, temptype, opts;\n    var doc = args.shift();\n    var id = '_id' in doc;\n    var callback = args.pop();\n    if (typeof doc !== 'object' || Array.isArray(doc)) {\n      return callback(errors.error(errors.NOT_AN_OBJECT));\n    }\n\n    doc = utils.clone(doc);\n\n    preprocessAttachments(doc).then(function () {\n      while (true) {\n        temp = args.shift();\n        temptype = typeof temp;\n        if (temptype === \"string\" && !id) {\n          doc._id = temp;\n          id = true;\n        } else if (temptype === \"string\" && id && !('_rev' in doc)) {\n          doc._rev = temp;\n        } else if (temptype === \"object\") {\n          opts = utils.clone(temp);\n        }\n        if (!args.length) {\n          break;\n        }\n      }\n      opts = opts || {};\n\n      sendMessage('put', [doc, opts], callback);\n    }).catch(callback);\n\n  }));\n\n  api.post = adapterFun('post', function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = utils.clone(opts);\n\n    sendMessage('post', [doc, opts], callback);\n  });\n\n  api._bulkDocs = function (req, opts, callback) {\n    var docs = req.docs || req;\n\n    Promise.all(docs.map(function (doc) {\n      var atts = doc._attachments;\n      if (!atts) {\n        return;\n      }\n      return Promise.all(Object.keys(atts).map(function (key) {\n        var att = doc._attachments[key];\n        if (!isBinaryObject(att.data)) {\n          return;\n        }\n        return new Promise(function (resolve) {\n          readAsBinaryString(att.data, resolve);\n        }).then(function (binString) {\n          att.data = base64.btoa(binString);\n        });\n      }));\n    })).then(function () {\n      sendMessage('bulkDocs', [req, opts], callback);\n    }).catch(callback);\n  };\n\n  api._allDocs = function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    sendMessage('allDocs', [opts], function (err, res) {\n      if (err) {\n        return callback(err);\n      }\n      if (opts.attachments && opts.binary) {\n        res.rows.forEach(readAttachmentsAsBlobOrBuffer);\n      }\n      callback(null, res);\n    });\n  };\n\n  api._changes = function (opts) {\n    opts = utils.clone(opts);\n\n    if (opts.continuous) {\n      var messageId = uuid();\n      api._changesListeners[messageId] = {\n        listener: opts.onChange,\n        asBinary: opts.attachments && opts.binary\n      };\n      api._callbacks[messageId] = opts.complete;\n      api._socket.send('liveChanges' + ':' + messageId + ':' + JSON.stringify([opts]));\n      return {\n        cancel: function () {\n          api._socket.send('cancelChanges' + ':' + messageId + ':' + JSON.stringify([]));\n        }\n      };\n    }\n\n    sendMessage('changes', [opts], function (err, res) {\n      if (err) {\n        opts.complete(err);\n        return callback(err);\n      }\n      res.results.forEach(function (change) {\n        if (opts.attachments && opts.binary) {\n          readAttachmentsAsBlobOrBuffer(change);\n        }\n        opts.onChange(change);\n      });\n      if (opts.returnDocs === false || opts.return_docs === false) {\n        res.results = [];\n      }\n      opts.complete(null, res);\n    });\n  };\n\n  // Given a set of document/revision IDs (given by req), tets the subset of\n  // those that do NOT correspond to revisions stored in the database.\n  // See http://wiki.apache.org/couchdb/HttpPostRevsDiff\n  api.revsDiff = adapterFun('revsDiff', function (req, opts, callback) {\n    // If no options were given, set the callback to be the second parameter\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n\n    sendMessage('revsDiff', [req, opts], callback);\n  });\n\n  api._query = adapterFun('query', function (fun, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var funEncoded = fun;\n    if (typeof fun === 'function') {\n      funEncoded = {map: fun};\n    }\n    sendMessage('query', [funEncoded, opts], function (err, res) {\n      if (err) {\n        return callback(err);\n      }\n      if (opts.attachments && opts.binary) {\n        res.rows.forEach(readAttachmentsAsBlobOrBuffer);\n      }\n      callback(null, res);\n    });\n  });\n\n  api._viewCleanup = adapterFun('viewCleanup', function (callback) {\n    sendMessage('viewCleanup', [], callback);\n  });\n\n  api._close = function (callback) {\n    api._closed = true;\n    var cacheKey = '$' + api._socketName;\n    if (!instances[cacheKey]) { // already closed/destroyed\n      return callback();\n    }\n    delete instances[cacheKey];\n    close(api, callback);\n  };\n\n  api.destroy = adapterFun('destroy', function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var cacheKey = '$' + api._socketName;\n\n    if (!instances[cacheKey]) { // already closed/destroyed\n      return callback(null, {ok: true});\n    }\n    delete instances[cacheKey];\n    sendMessage('destroy', [], function (err, res) {\n      if (err) {\n        api.emit('error', err);\n        return callback(err);\n      }\n      api._destroyed = true;\n      close(api, function (err) {\n        if (err) {\n          api.emit('error', err);\n          return callback(err);\n        }\n        api.emit('destroyed');\n        callback(null, res);\n      });\n    });\n  });\n}\n\n// SocketPouch is a valid adapter.\nSocketPouch.valid = function () {\n  return true;\n};\n\nmodule.exports = SocketPouch;\n\n/* istanbul ignore next */\nif (typeof window !== 'undefined' && window.PouchDB) {\n  window.PouchDB.adapter('socket', module.exports);\n}\n"
  },
  {
    "path": "lib/client/readAsArrayBuffer.js",
    "content": "'use strict';\n\n// simplified API. universal browser support is assumed\nmodule.exports = function (blob, callback) {\n  var reader = new FileReader();\n  reader.onloadend = function (e) {\n    var result = e.target.result || new ArrayBuffer(0);\n    callback(result);\n  };\n  reader.readAsArrayBuffer(blob);\n};"
  },
  {
    "path": "lib/client/readAsBinaryString-browser.js",
    "content": "'use strict';\n\nvar arrayBufferToBinaryString = require('./arrayBufferToBinaryString');\n\n// shim for browsers that don't support it\nmodule.exports = function (blob, callback) {\n  var reader = new FileReader();\n  var hasBinaryString = typeof reader.readAsBinaryString === 'function';\n  reader.onloadend = function (e) {\n    var result = e.target.result || '';\n    if (hasBinaryString) {\n      return callback(result);\n    }\n    callback(arrayBufferToBinaryString(result));\n  };\n  if (hasBinaryString) {\n    reader.readAsBinaryString(blob);\n  } else {\n    reader.readAsArrayBuffer(blob);\n  }\n};"
  },
  {
    "path": "lib/client/readAsBinaryString.js",
    "content": "'use strict';\n\nmodule.exports = function (buffer, callback) {\n  process.nextTick(function () {\n    callback(buffer.toString('binary'));\n  });\n};"
  },
  {
    "path": "lib/client/typedBuffer.js",
    "content": "'use strict';\n\nvar buffer = require('../shared/buffer');\n\nfunction typedBuffer(binString, buffType, type) {\n  // buffType is either 'binary' or 'base64'\n  var buff = new buffer(binString, buffType);\n  buff.type = type; // non-standard, but used for consistency with the browser\n  return buff;\n}\n\nmodule.exports = typedBuffer;"
  },
  {
    "path": "lib/client/utils.js",
    "content": "'use strict';\n\nvar utils = require('../shared/utils');\nvar log = require('debug')('pouchdb:socket:client');\nvar isBrowser = typeof process === 'undefined' || process.browser;\n\nexports.preprocessAttachments = function preprocessAttachments(doc) {\n  if (!doc._attachments || !Object.keys(doc._attachments)) {\n    return utils.Promise.resolve();\n  }\n\n  var atts = doc._attachments;\n  return utils.Promise.all(Object.keys(atts).map(function (key) {\n    var att = atts[key];\n    if (att.data && typeof att.data !== 'string') {\n      if (isBrowser) {\n        return new utils.Promise(function (resolve) {\n          utils.readAsBinaryString(att.data, function (binary) {\n            att.data = utils.btoa(binary);\n            resolve();\n          });\n        });\n      } else {\n        att.data = att.data.toString('base64');\n      }\n    }\n  }));\n};\n\nvar b64StringToBluffer =\n  require('./base64StringToBlobOrBuffer');\n\nexports.readAttachmentsAsBlobOrBuffer = function (row) {\n  var atts = (row.doc && row.doc._attachments) ||\n    (row.ok && row.ok._attachments);\n  if (!atts) {\n    return;\n  }\n  Object.keys(atts).forEach(function (filename) {\n    var att = atts[filename];\n    att.data = b64StringToBluffer(att.data, att.content_type);\n  });\n};\n\nexports.stringifyArgs = function stringifyArgs(args) {\n  var funcArgs = ['filter', 'map', 'reduce'];\n  args.forEach(function (arg) {\n    if (typeof arg === 'object' && arg !== null && !Array.isArray(arg)) {\n      funcArgs.forEach(function (funcArg) {\n        if (funcArg in arg && typeof arg[funcArg] === 'function') {\n          arg[funcArg] = {\n            type: 'func',\n            func: arg[funcArg].toString()\n          };\n        }\n      });\n    }\n  });\n  return JSON.stringify(args);\n};\n\nexports.padInt = function padInt(i, len) {\n  var res = i.toString();\n  while (res.length < len) {\n    res = '0' + res;\n  }\n  return res;\n};\n\n\nexports.adapterFun = function adapterFun(name, callback) {\n\n  function logApiCall(self, name, args) {\n    if (!log.enabled) {\n      return;\n    }\n    // db.name was added in pouch 6.0.0\n    var dbName = self.name || self._db_name;\n    var logArgs = [dbName, name];\n    for (var i = 0; i < args.length - 1; i++) {\n      logArgs.push(args[i]);\n    }\n    log.apply(null, logArgs);\n\n    // override the callback itself to log the response\n    var origCallback = args[args.length - 1];\n    args[args.length - 1] = function (err, res) {\n      var responseArgs = [dbName, name];\n      responseArgs = responseArgs.concat(\n        err ? ['error', err] : ['success', res]\n      );\n      log.apply(null, responseArgs);\n      origCallback(err, res);\n    };\n  }\n\n\n  return utils.toPromise(utils.getArguments(function (args) {\n    if (this._closed) {\n      return utils.Promise.reject(new Error('database is closed'));\n    }\n    var self = this;\n    logApiCall(self, name, args);\n    if (!this.taskqueue.isReady) {\n      return new utils.Promise(function (fulfill, reject) {\n        self.taskqueue.addTask(function (failed) {\n          if (failed) {\n            reject(failed);\n          } else {\n            fulfill(self[name].apply(self, args));\n          }\n        });\n      });\n    }\n    return callback.apply(this, args);\n  }));\n};"
  },
  {
    "path": "lib/server/index.js",
    "content": "'use strict';\n\nvar engine = require('engine.io');\nvar Promise = require('bluebird');\nvar uuid = require('../shared/uuid');\nvar errors = require('../shared/errors');\nvar utils = require('../shared/utils');\nvar serverUtils = require('./utils');\nvar safeEval = require('./safe-eval');\nvar makePouchCreator = require('./make-pouch-creator');\nvar dbs = {};\nvar allChanges = {};\n\nvar log = require('debug')('pouchdb:socket:server');\n\nfunction destringifyArgs(argsString) {\n  var args = JSON.parse(argsString);\n  var funcArgs = ['filter', 'map', 'reduce'];\n  args.forEach(function (arg) {\n    if (typeof arg === 'object' && arg !== null && !Array.isArray(arg)) {\n      funcArgs.forEach(function (funcArg) {\n        if (typeof arg[funcArg] === 'undefined' || arg[funcArg] === null) {\n          delete arg[funcArg];\n        } else if (arg[funcArg].type === 'func' && arg[funcArg].func) {\n          arg[funcArg] = safeEval(arg[funcArg].func);\n        }\n      });\n    }\n  });\n  return args;\n}\n\nfunction sendUncaughtError(socket, data) {\n  log(' -> sendUncaughtError', socket.id, data);\n  socket.send('global:4:' + JSON.stringify(serverUtils.createError(data)));\n}\n\nfunction sendError(socket, messageId, data) {\n  log(' -> sendError', socket.id, messageId, data);\n  socket.send(messageId + ':0:' + JSON.stringify(serverUtils.createError(data)));\n}\n\nfunction sendSuccess(socket, messageId, data) {\n  log(' -> sendSuccess', socket.id, messageId);\n  socket.send(messageId + ':1:' + JSON.stringify(data));\n}\n\nfunction sendBinarySuccess(socket, messageId, type, buff) {\n  log(' -> sendBinarySuccess', socket.id, messageId);\n  var blobUuid = uuid();\n  socket.send(messageId + ':3:' + JSON.stringify({type: type, uuid: blobUuid}));\n  socket.send(Buffer.concat([\n    new Buffer(blobUuid, 'utf8'),\n    buff]));\n}\n\nfunction sendUpdate(socket, messageId, data) {\n  log(' -> sendUpdate', socket.id, messageId);\n  socket.send(messageId + ':2:' + JSON.stringify(data));\n}\n\nfunction dbMethod(socket, methodName, messageId, args) {\n  var db = dbs['$' + socket.id];\n  if (!db) {\n    return sendError(socket, messageId, {error: 'db not found'});\n  }\n  Promise.resolve().then(function () {\n    return db;\n  }).then(function (res) {\n    var db = res.pouch;\n    return db[methodName].apply(db, args);\n  }).then(function (res) {\n    sendSuccess(socket, messageId, res);\n  }).catch(function (err) {\n    sendError(socket, messageId, err);\n  });\n}\n\nfunction changes(socket, messageId, args) {\n  var opts = args[0];\n  if (opts && typeof opts === 'object') {\n    // just send all the docs anyway because we need to emit change events\n    // TODO: be smarter about emitting changes without building up an array\n    opts.returnDocs = true;\n    opts.return_docs = true;\n    // just send binary as base64 and decode on the client\n    opts.binary = false;\n  }\n  dbMethod(socket, 'changes', messageId, args);\n}\n\nfunction possiblyBinaryDbMethod(socket, methodName, messageId, args) {\n  var opts = args[args.length - 1];\n  if (opts && typeof opts === 'object') {\n    // just send binary as base64 and decode on the client\n    opts.binary = false;\n  }\n  dbMethod(socket, methodName, messageId, args);\n}\n\nfunction getAttachment(socket, messageId, args) {\n  var db = dbs['$' + socket.id];\n  if (!db) {\n    return sendError(socket, messageId, {error: 'db not found'});\n  }\n\n  Promise.resolve().then(function () {\n    return db;\n  }).then(function (res) {\n    var db = res.pouch;\n    var docId = args[0];\n    var attId = args[1];\n    var opts = args[2];\n    if (typeof opts !== 'object') {\n      opts = {};\n    }\n    return db.get(docId, opts).then(function (doc) {\n      if (!doc._attachments || !doc._attachments[attId]) {\n        throw errors.MISSING_DOC;\n      }\n      var type = doc._attachments[attId].content_type;\n      return db.getAttachment.apply(db, args).then(function (buff) {\n        sendBinarySuccess(socket, messageId, type, buff);\n      });\n    });\n  }).catch(function (err) {\n    sendError(socket, messageId, err);\n  });\n}\n\nfunction destroy(socket, messageId, args) {\n  var key = '$' + socket.id;\n  var db = dbs[key];\n  if (!db) {\n    return sendError(socket, messageId, {error: 'db not found'});\n  }\n  delete dbs[key];\n\n  Promise.resolve().then(function () {\n    return db;\n  }).then(function (res) {\n    var db = res.pouch;\n    return db.destroy.apply(db, args);\n  }).then(function (res) {\n    sendSuccess(socket, messageId, res);\n  }).catch(function (err) {\n    sendError(socket, messageId, err);\n  });\n}\n\nfunction liveChanges(socket, messageId, args) {\n  var db = dbs['$' + socket.id];\n  if (!db) {\n    return sendError(socket, messageId, {error: 'db not found'});\n  }\n  Promise.resolve().then(function () {\n    return db;\n  }).then(function (res) {\n    var db = res.pouch;\n    var opts = args[0] || {};\n    // just send binary as base64 and decode on the client\n    opts.binary = false;\n    var changes = db.changes(opts);\n    allChanges[messageId] = changes;\n    changes.on('change', function (change) {\n      sendUpdate(socket, messageId, change);\n    }).on('complete', function (change) {\n      changes.removeAllListeners();\n      delete allChanges[messageId];\n      sendSuccess(socket, messageId, change);\n    }).on('error', function (change) {\n      changes.removeAllListeners();\n      delete allChanges[messageId];\n      sendError(socket, messageId, change);\n    });\n  });\n}\n\nfunction cancelChanges(messageId) {\n  var changes = allChanges[messageId];\n  if (changes) {\n    changes.cancel();\n  }\n}\n\nfunction addUncaughtErrorHandler(db, socket) {\n  return db.then(function (res) {\n    res.pouch.on('error', function (err) {\n      sendUncaughtError(socket, err);\n    });\n  });\n}\n\nfunction createDatabase(socket, messageId, args, pouchCreator) {\n  var key = '$' + socket.id;\n  var db = dbs[key];\n  if (db) {\n    return sendError(socket, messageId, {\n      error: \"file_exists\",\n      reason: \"The database could not be created, the file already exists.\"\n    });\n  }\n\n  var name = typeof args[0] === 'string' ? args[0] : args[0].name;\n\n  if (!name) {\n    return sendError(socket, messageId, {\n      error: 'you must provide a database name'\n    });\n  }\n\n  db = dbs[key] = pouchCreator(args);\n  addUncaughtErrorHandler(db, socket).then(function () {\n    sendSuccess(socket, messageId, {ok: true});\n  }).catch(function (err) {\n    sendError(socket, messageId, err);\n  });\n}\n\nfunction onReceiveMessage(socket, type, messageId, args, pouchCreator) {\n  log('onReceiveMessage', type, socket.id, messageId, args);\n  switch (type) {\n    case 'createDatabase':\n      return createDatabase(socket, messageId, args, pouchCreator);\n    case 'id':\n      sendSuccess(socket, messageId, socket.id);\n      return;\n    case 'info':\n    case 'put':\n    case 'bulkDocs':\n    case 'post':\n    case 'remove':\n    case 'revsDiff':\n    case 'compact':\n    case 'viewCleanup':\n    case 'removeAttachment':\n    case 'putAttachment':\n      return dbMethod(socket, type, messageId, args);\n    case 'get':\n    case 'query':\n    case 'allDocs':\n      return possiblyBinaryDbMethod(socket, type, messageId, args);\n    case 'changes':\n      return changes(socket, messageId, args);\n    case 'getAttachment':\n      return getAttachment(socket, messageId, args);\n    case 'liveChanges':\n      return liveChanges(socket, messageId, args);\n    case 'cancelChanges':\n      return cancelChanges(messageId);\n    case 'destroy':\n      return destroy(socket, messageId, args);\n    default:\n      return sendError(socket, messageId, {error: 'unknown API method: ' + type});\n  }\n}\n\nfunction onReceiveTextMessage(message, socket, pouchCreator) {\n  try {\n    var split = utils.parseMessage(message, 3);\n    var type = split[0];\n    var messageId = split[1];\n    var args = destringifyArgs(split[2]);\n    onReceiveMessage(socket, type, messageId, args, pouchCreator);\n  } catch (err) {\n    log('invalid message, ignoring', err);\n  }\n}\n\nfunction onReceiveBinaryMessage(message, socket) {\n  try {\n    var headerLen = parseInt(message.slice(0, 16).toString('utf8'), 10);\n    var header = JSON.parse(message.slice(16, 16 + headerLen).toString('utf8'));\n    var body = message.slice(16 + headerLen);\n    header.args[header.blobIndex] = body;\n    onReceiveMessage(socket, header.messageType, header.messageId, header.args);\n  } catch (err) {\n    log('invalid message, ignoring', err);\n  }\n}\n\nfunction listen(port, options, callback) {\n  if (typeof options === 'function') {\n    callback = options;\n    options = {};\n  }\n  options = options || {};\n  var server = engine.listen(port, options.socketOptions || {}, callback);\n\n  var pouchCreator = makePouchCreator(options);\n\n  server.on('connection', function(socket) {\n    socket.on('message', function (message) {\n      if (typeof message !== 'string') {\n        return onReceiveBinaryMessage(message, socket);\n      }\n      onReceiveTextMessage(message, socket, pouchCreator);\n    }).on('close', function () {\n      log('closing socket', socket.id);\n      socket.removeAllListeners();\n      delete dbs['$' + socket.id];\n    }).on('error', function (err) {\n      log('socket threw an error', err);\n      socket.removeAllListeners();\n      delete dbs['$' + socket.id];\n    });\n  });\n}\n\nmodule.exports = {\n  listen: listen\n};"
  },
  {
    "path": "lib/server/make-pouch-creator.js",
    "content": "'use strict';\n\nvar PouchDB = require('pouchdb');\nvar Promise = require('bluebird');\n\nfunction createLocalPouch(args) {\n\n  if (typeof args[0] === 'string') {\n    args = [{name: args[0]}];\n  }\n\n  // TODO: there is probably a smarter way to be safe about filepaths\n  args[0].name = args[0].name.replace('.', '').replace('/', '');\n  return Promise.resolve({\n    pouch: new PouchDB(args[0])\n  });\n}\n\nfunction createHttpPouch(options) {\n  var remoteUrl = options.remoteUrl;\n  // chop off last '/'\n  if (remoteUrl[remoteUrl.length - 1] === '/') {\n    remoteUrl = remoteUrl.substring(0, remoteUrl.length -1);\n  }\n  return function (args) {\n    if (typeof args[0] === 'string') {\n      args = [{name: args[0]}];\n    }\n    return Promise.resolve({\n      pouch: new PouchDB(remoteUrl + '/' + args[0].name)\n    });\n  };\n}\n\nfunction makePouchCreator(options) {\n  if (options.remoteUrl) {\n    return createHttpPouch(options);\n  }\n  if (!options.pouchCreator) {\n    return createLocalPouch;\n  }\n  return function (args) {\n    var name = typeof args[0] === 'string' ? args[0] : args[0].name;\n    var res = options.pouchCreator(name);\n    if (res instanceof PouchDB) {\n      return {pouch: res};\n    } else {\n      return res;\n    }\n  };\n}\n\nmodule.exports = makePouchCreator;"
  },
  {
    "path": "lib/server/safe-eval.js",
    "content": "'use strict';\n\nvar log = require('debug')('pouchdb:socket:server');\n\n// TODO: this is evil and insecure\nmodule.exports = function safeEval(str) {\n  log('safeEvaling', str);\n  /* jshint evil: true */\n  eval('process.foobar = (' + str + ');');\n  log('returning', process.foobar);\n  return process.foobar;\n};"
  },
  {
    "path": "lib/server/utils.js",
    "content": "'use strict';\n\n// mostly borrowed from express-pouchb's utils.sendError()\nexports.createError = function (err) {\n  var status = err.status || 500;\n\n  // last argument is optional\n  if (err.name && err.message) {\n    if (err.name === 'Error' || err.name === 'TypeError') {\n      if (err.message.indexOf(\"Bad special document member\") !== -1) {\n        err.name = 'doc_validation';\n        // add more clauses here if the error name is too general\n      } else {\n        err.name = 'bad_request';\n      }\n    }\n    err = {\n      error: err.name,\n      name: err.name,\n      reason: err.message,\n      message: err.message,\n      status: status\n    };\n  }\n  return err;\n};"
  },
  {
    "path": "lib/shared/buffer-browser.js",
    "content": "// hey guess what, we don't need this in the browser\nmodule.exports = {};"
  },
  {
    "path": "lib/shared/buffer.js",
    "content": "//this solely exists so we can exclude it in browserify\nmodule.exports = Buffer;"
  },
  {
    "path": "lib/shared/cloneBinaryObject-browser.js",
    "content": "'use strict';\n\nfunction cloneArrayBuffer(buff) {\n  if (typeof buff.slice === 'function') {\n    return buff.slice(0);\n  }\n  // IE10-11 slice() polyfill\n  var target = new ArrayBuffer(buff.byteLength);\n  var targetArray = new Uint8Array(target);\n  var sourceArray = new Uint8Array(buff);\n  targetArray.set(sourceArray);\n  return target;\n}\n\nmodule.exports = function cloneBinaryObject(object) {\n  if (object instanceof ArrayBuffer) {\n    return cloneArrayBuffer(object);\n  }\n  var size = object.size;\n  var type = object.type;\n  // Blob\n  if (typeof object.slice === 'function') {\n    return object.slice(0, size, type);\n  }\n  // PhantomJS slice() replacement\n  return object.webkitSlice(0, size, type);\n};\n"
  },
  {
    "path": "lib/shared/cloneBinaryObject.js",
    "content": "'use strict';\n\nmodule.exports = function cloneBinaryObject(object) {\n  var copy = new Buffer(object.length);\n  object.copy(copy);\n  return copy;\n};"
  },
  {
    "path": "lib/shared/errors.js",
    "content": "\"use strict\";\n\nvar inherits = require('inherits');\ninherits(PouchError, Error);\n\nfunction PouchError(opts) {\n  Error.call(opts.reason);\n  this.status = opts.status;\n  this.name = opts.error;\n  this.message = opts.reason;\n  this.error = true;\n}\n\nPouchError.prototype.toString = function () {\n  return JSON.stringify({\n    status: this.status,\n    name: this.name,\n    message: this.message\n  });\n};\n\nexports.UNAUTHORIZED = new PouchError({\n  status: 401,\n  error: 'unauthorized',\n  reason: \"Name or password is incorrect.\"\n});\n\nexports.MISSING_BULK_DOCS = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: \"Missing JSON list of 'docs'\"\n});\n\nexports.MISSING_DOC = new PouchError({\n  status: 404,\n  error: 'not_found',\n  reason: 'missing'\n});\n\nexports.REV_CONFLICT = new PouchError({\n  status: 409,\n  error: 'conflict',\n  reason: 'Document update conflict'\n});\n\nexports.INVALID_ID = new PouchError({\n  status: 400,\n  error: 'invalid_id',\n  reason: '_id field must contain a string'\n});\n\nexports.MISSING_ID = new PouchError({\n  status: 412,\n  error: 'missing_id',\n  reason: '_id is required for puts'\n});\n\nexports.RESERVED_ID = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Only reserved document ids may start with underscore.'\n});\n\nexports.NOT_OPEN = new PouchError({\n  status: 412,\n  error: 'precondition_failed',\n  reason: 'Database not open'\n});\n\nexports.UNKNOWN_ERROR = new PouchError({\n  status: 500,\n  error: 'unknown_error',\n  reason: 'Database encountered an unknown error'\n});\n\nexports.BAD_ARG = new PouchError({\n  status: 500,\n  error: 'badarg',\n  reason: 'Some query argument is invalid'\n});\n\nexports.INVALID_REQUEST = new PouchError({\n  status: 400,\n  error: 'invalid_request',\n  reason: 'Request was invalid'\n});\n\nexports.QUERY_PARSE_ERROR = new PouchError({\n  status: 400,\n  error: 'query_parse_error',\n  reason: 'Some query parameter is invalid'\n});\n\nexports.DOC_VALIDATION = new PouchError({\n  status: 500,\n  error: 'doc_validation',\n  reason: 'Bad special document member'\n});\n\nexports.BAD_REQUEST = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Something wrong with the request'\n});\n\nexports.NOT_AN_OBJECT = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Document must be a JSON object'\n});\n\nexports.DB_MISSING = new PouchError({\n  status: 404,\n  error: 'not_found',\n  reason: 'Database not found'\n});\n\nexports.IDB_ERROR = new PouchError({\n  status: 500,\n  error: 'indexed_db_went_bad',\n  reason: 'unknown'\n});\n\nexports.WSQ_ERROR = new PouchError({\n  status: 500,\n  error: 'web_sql_went_bad',\n  reason: 'unknown'\n});\n\nexports.LDB_ERROR = new PouchError({\n  status: 500,\n  error: 'levelDB_went_went_bad',\n  reason: 'unknown'\n});\n\nexports.FORBIDDEN = new PouchError({\n  status: 403,\n  error: 'forbidden',\n  reason: 'Forbidden by design doc validate_doc_update function'\n});\n\nexports.INVALID_REV = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Invalid rev format'\n});\n\nexports.FILE_EXISTS = new PouchError({\n  status: 412,\n  error: 'file_exists',\n  reason: 'The database could not be created, the file already exists.'\n});\n\nexports.MISSING_STUB = new PouchError({\n  status: 412,\n  error: 'missing_stub'\n});\n\nexports.error = function (error, reason, name) {\n  function CustomPouchError(reason) {\n    // inherit error properties from our parent error manually\n    // so as to allow proper JSON parsing.\n    /* jshint ignore:start */\n    for (var p in error) {\n      if (typeof error[p] !== 'function') {\n        this[p] = error[p];\n      }\n    }\n    /* jshint ignore:end */\n    if (name !== undefined) {\n      this.name = name;\n    }\n    if (reason !== undefined) {\n      this.reason = reason;\n    }\n  }\n  CustomPouchError.prototype = PouchError.prototype;\n  return new CustomPouchError(reason);\n};\n\n// Find one of the errors defined above based on the value\n// of the specified property.\n// If reason is provided prefer the error matching that reason.\n// This is for differentiating between errors with the same name and status,\n// eg, bad_request.\nexports.getErrorTypeByProp = function (prop, value, reason) {\n  var errors = exports;\n  var keys = Object.keys(errors).filter(function (key) {\n    var error = errors[key];\n    return typeof error !== 'function' && error[prop] === value;\n  });\n  var key = reason && keys.filter(function (key) {\n      var error = errors[key];\n      return error.message === reason;\n    })[0] || keys[0];\n  return (key) ? errors[key] : null;\n};\n\nexports.generateErrorFromResponse = function (res) {\n  var error, errName, errType, errMsg, errReason;\n  var errors = exports;\n\n  errName = (res.error === true && typeof res.name === 'string') ?\n    res.name :\n    res.error;\n  errReason = res.reason;\n  errType = errors.getErrorTypeByProp('name', errName, errReason);\n\n  if (res.missing ||\n    errReason === 'missing' ||\n    errReason === 'deleted' ||\n    errName === 'not_found') {\n    errType = errors.MISSING_DOC;\n  } else if (errName === 'doc_validation') {\n    // doc validation needs special treatment since\n    // res.reason depends on the validation error.\n    // see utils.js\n    errType = errors.DOC_VALIDATION;\n    errMsg = errReason;\n  } else if (errName === 'bad_request' && errType.message !== errReason) {\n    // if bad_request error already found based on reason don't override.\n\n    // attachment errors.\n    if (errReason.indexOf('unknown stub attachment') === 0) {\n      errType = errors.MISSING_STUB;\n      errMsg = errReason;\n    } else {\n      errType = errors.BAD_REQUEST;\n    }\n  }\n\n  // fallback to error by statys or unknown error.\n  if (!errType) {\n    errType = errors.getErrorTypeByProp('status', res.status, errReason) ||\n    errors.UNKNOWN_ERROR;\n  }\n\n  error = errors.error(errType, errReason, errName);\n\n  // Keep custom message.\n  if (errMsg) {\n    error.message = errMsg;\n  }\n\n  // Keep helpful response data in our error messages.\n  if (res.id) {\n    error.id = res.id;\n  }\n  if (res.status) {\n    error.status = res.status;\n  }\n  if (res.statusText) {\n    error.name = res.statusText;\n  }\n  if (res.missing) {\n    error.missing = res.missing;\n  }\n\n  return error;\n};\n"
  },
  {
    "path": "lib/shared/isBinaryObject-browser.js",
    "content": "'use strict';\n\nmodule.exports = function isBinaryObject(object) {\n  return object instanceof ArrayBuffer ||\n    (typeof Blob !== 'undefined' && object instanceof Blob);\n};"
  },
  {
    "path": "lib/shared/isBinaryObject.js",
    "content": "'use strict';\n\nmodule.exports = function isBinaryObject(object) {\n  return object instanceof Buffer;\n};"
  },
  {
    "path": "lib/shared/parse-message.js",
    "content": "'use strict';\n\nfunction parseMessage(msg, numArgs) {\n  var res = [];\n  for (var i = 0; i < numArgs - 1; i++) {\n    var idx = msg.indexOf(':');\n    res.push(msg.substring(0, idx));\n    msg = msg.substring(idx + 1);\n  }\n  res.push(msg);\n  return res;\n}\n\nmodule.exports = parseMessage;"
  },
  {
    "path": "lib/shared/pouchdb-clone.js",
    "content": "'use strict';\n\nvar isBinaryObject = require('./isBinaryObject');\nvar cloneBinaryObject = require('./cloneBinaryObject');\n\nmodule.exports = function clone(object) {\n  var newObject;\n  var i;\n  var len;\n\n  if (!object || typeof object !== 'object') {\n    return object;\n  }\n\n  if (Array.isArray(object)) {\n    newObject = [];\n    for (i = 0, len = object.length; i < len; i++) {\n      newObject[i] = clone(object[i]);\n    }\n    return newObject;\n  }\n\n  // special case: to avoid inconsistencies between IndexedDB\n  // and other backends, we automatically stringify Dates\n  if (object instanceof Date) {\n    return object.toISOString();\n  }\n\n  if (isBinaryObject(object)) {\n    return cloneBinaryObject(object);\n  }\n\n  newObject = {};\n  for (i in object) {\n    if (Object.prototype.hasOwnProperty.call(object, i)) {\n      var value = clone(object[i]);\n      if (typeof value !== 'undefined') {\n        newObject[i] = value;\n      }\n    }\n  }\n  return newObject;\n};\n"
  },
  {
    "path": "lib/shared/utils.js",
    "content": "'use strict';\n\nvar Promise = require('pouchdb-promise');\nvar buffer = require('./buffer');\n\nexports.lastIndexOf = function lastIndexOf(str, char) {\n  for (var i = str.length - 1; i >= 0; i--) {\n    if (str.charAt(i) === char) {\n      return i;\n    }\n  }\n  return -1;\n};\n\nexports.clone = require('./pouchdb-clone');\n\nexports.parseMessage = require('./parse-message');\n\n/* istanbul ignore next */\nexports.once = function once(fun) {\n  var called = false;\n  return exports.getArguments(function (args) {\n    if (called) {\n      console.trace();\n      throw new Error('once called  more than once');\n    } else {\n      called = true;\n      fun.apply(this, args);\n    }\n  });\n};\n/* istanbul ignore next */\nexports.getArguments = function getArguments(fun) {\n  return function () {\n    var len = arguments.length;\n    var args = new Array(len);\n    var i = -1;\n    while (++i < len) {\n      args[i] = arguments[i];\n    }\n    return fun.call(this, args);\n  };\n};\n/* istanbul ignore next */\nexports.toPromise = function toPromise(func) {\n  //create the function we will be returning\n  return exports.getArguments(function (args) {\n    var self = this;\n    var tempCB = (typeof args[args.length - 1] === 'function') ? args.pop() : false;\n    // if the last argument is a function, assume its a callback\n    var usedCB;\n    if (tempCB) {\n      // if it was a callback, create a new callback which calls it,\n      // but do so async so we don't trap any errors\n      usedCB = function (err, resp) {\n        process.nextTick(function () {\n          tempCB(err, resp);\n        });\n      };\n    }\n    var promise = new Promise(function (fulfill, reject) {\n      try {\n        var callback = exports.once(function (err, mesg) {\n          if (err) {\n            reject(err);\n          } else {\n            fulfill(mesg);\n          }\n        });\n        // create a callback for this invocation\n        // apply the function in the orig context\n        args.push(callback);\n        func.apply(self, args);\n      } catch (e) {\n        reject(e);\n      }\n    });\n    // if there is a callback, call it back\n    if (usedCB) {\n      promise.then(function (result) {\n        usedCB(null, result);\n      }, usedCB);\n    }\n    promise.cancel = function () {\n      return this;\n    };\n    return promise;\n  });\n};\n\nif (typeof atob === 'function') {\n  exports.atob = function atobShim(str) {\n    return atob(str);\n  };\n} else {\n  exports.atob = function atobShim(str) {\n    var base64 = new buffer(str, 'base64');\n    // Node.js will just skip the characters it can't encode instead of\n    // throwing and exception\n    if (base64.toString('base64') !== str) {\n      throw (\"Cannot base64 encode full string\");\n    }\n    return base64.toString('binary');\n  };\n}\n\nif (typeof btoa === 'function') {\n  exports.btoa = function btoaShim(str) {\n    return btoa(str);\n  };\n} else {\n  exports.btoa = function btoaShim(str) {\n    return new buffer(str, 'binary').toString('base64');\n  };\n}\n\nexports.inherits = require('inherits');\nexports.Promise = Promise;\n\nvar binUtil = require('pouchdb-binary-util');\n\nexports.createBlob = binUtil.createBlob;\nexports.readAsArrayBuffer = binUtil.readAsArrayBuffer;\nexports.readAsBinaryString = binUtil.readAsBinaryString;\nexports.binaryStringToArrayBuffer = binUtil.binaryStringToArrayBuffer;\nexports.arrayBufferToBinaryString = binUtil.arrayBufferToBinaryString;"
  },
  {
    "path": "lib/shared/uuid.js",
    "content": "\"use strict\";\n\n// BEGIN Math.uuid.js\n\n/*!\n Math.uuid.js (v1.4)\n http://www.broofa.com\n mailto:robert@broofa.com\n\n Copyright (c) 2010 Robert Kieffer\n Dual licensed under the MIT and GPL licenses.\n */\n\n/*\n * Generate a random uuid.\n *\n * USAGE: Math.uuid(length, radix)\n *   length - the desired number of characters\n *   radix  - the number of allowable values for each character.\n *\n * EXAMPLES:\n *   // No arguments  - returns RFC4122, version 4 ID\n *   >>> Math.uuid()\n *   \"92329D39-6F5C-4520-ABFC-AAB64544E172\"\n *\n *   // One argument - returns ID of the specified length\n *   >>> Math.uuid(15)     // 15 character ID (default base=62)\n *   \"VcydxgltxrVZSTV\"\n *\n *   // Two arguments - returns ID of the specified length, and radix. \n *   // (Radix must be <= 62)\n *   >>> Math.uuid(8, 2)  // 8 character ID (base=2)\n *   \"01001010\"\n *   >>> Math.uuid(8, 10) // 8 character ID (base=10)\n *   \"47473046\"\n *   >>> Math.uuid(8, 16) // 8 character ID (base=16)\n *   \"098F4D35\"\n */\nvar chars = (\n'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' +\n'abcdefghijklmnopqrstuvwxyz'\n).split('');\nfunction getValue(radix) {\n  return 0 | Math.random() * radix;\n}\nfunction uuid(len, radix) {\n  radix = radix || chars.length;\n  var out = '';\n  var i = -1;\n\n  if (len) {\n    // Compact form\n    while (++i < len) {\n      out += chars[getValue(radix)];\n    }\n    return out;\n  }\n  // rfc4122, version 4 form\n  // Fill in random data.  At i==19 set the high bits of clock sequence as\n  // per rfc4122, sec. 4.1.5\n  while (++i < 36) {\n    switch (i) {\n      case 8:\n      case 13:\n      case 18:\n      case 23:\n        out += '-';\n        break;\n      case 19:\n        out += chars[(getValue(16) & 0x3) | 0x8];\n        break;\n      default:\n        out += chars[getValue(16)];\n    }\n  }\n\n  return out;\n}\n\n\n\nmodule.exports = uuid;\n\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"socket-pouch\",\n  \"version\": \"2.0.0\",\n  \"description\": \"PouchDB over websockets\",\n  \"main\": \"server/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/nolanlawson/socket-pouch.git\"\n  },\n  \"keywords\": [\n    \"pouch\",\n    \"pouchdb\",\n    \"plugin\",\n    \"seed\",\n    \"couch\",\n    \"couchdb\"\n  ],\n  \"author\": \"\",\n  \"license\": \"Apache-2.0\",\n  \"bugs\": {\n    \"url\": \"https://github.com/nolanlawson/socket-pouch/issues\"\n  },\n  \"scripts\": {\n    \"test-node\": \"bash ./bin/test-node.sh\",\n    \"test-browser\": \"./bin/test-browser.js\",\n    \"jshint\": \"jshint -c .jshintrc lib test/test.js\",\n    \"test\": \"npm run jshint && ./bin/run-test.sh\",\n    \"build\": \"mkdirp dist && npm run browserify && npm run min\",\n    \"browserify\": \"browserify -s socketPouch client | ./bin/es3ify.js | derequire > dist/socket-pouch.client.js\",\n    \"min\": \"uglifyjs dist/socket-pouch.client.js -mc > dist/socket-pouch.client.min.js\",\n    \"dev\": \"browserify test/test.js > test/test-bundle.js && npm run dev-server\",\n    \"dev-server\": \"./bin/dev-server.js\",\n    \"coverage\": \"npm test --coverage && istanbul check-coverage --lines 100 --function 100 --statements 100 --branches 100\"\n  },\n  \"dependencies\": {\n    \"argsarray\": \"0.0.1\",\n    \"blob-util\": \"^1.1.1\",\n    \"bluebird\": \"^2.9.24\",\n    \"debug\": \"^2.1.3\",\n    \"engine.io\": \"^1.5.1\",\n    \"engine.io-client\": \"^1.5.1\",\n    \"eval\": \"^0.1.0\",\n    \"inherits\": \"^2.0.1\",\n    \"lie\": \"^2.6.0\",\n    \"pouchdb\": \"^6.0.0\",\n    \"pouchdb-binary-util\": \"^1.0.0\",\n    \"pouchdb-promise\": \"^6.0.7\"\n  },\n  \"devDependencies\": {\n    \"browserify\": \"^9.0.8\",\n    \"chai\": \"3.5.0\",\n    \"chai-as-promised\": \"^5.1.0\",\n    \"corsproxy\": \"^0.2.14\",\n    \"derequire\": \"^2.0.0\",\n    \"es3ify\": \"^0.1.3\",\n    \"es5-shim\": \"^4.1.1\",\n    \"http-server\": \"^0.8.5\",\n    \"istanbul\": \"^0.2.7\",\n    \"jshint\": \"2.8.0\",\n    \"mkdirp\": \"^0.5.0\",\n    \"mocha\": \"^2.3.1\",\n    \"phantomjs\": \"^1.9.7-5\",\n    \"pouchdb-http-proxy\": \"^0.10.4\",\n    \"pouchdb-legacy-utils\": \"^1.0.0\",\n    \"request\": \"^2.36.0\",\n    \"sauce-connect-launcher\": \"^0.11.1\",\n    \"selenium-standalone\": \"^4.7.0\",\n    \"uglify-js\": \"^2.4.13\",\n    \"watchify\": \"^3.1.0\",\n    \"wd\": \"^0.2.21\"\n  },\n  \"browser\": {\n    \"./lib/shared/buffer.js\": \"./lib/shared/buffer-browser.js\",\n    \"./lib/shared/cloneBinaryObject.js\": \"./lib/shared/cloneBinaryObject-browser.js\",\n    \"./lib/shared/isBinaryObject.js\": \"./lib/shared/isBinaryObject-browser.js\",\n    \"./lib/client/base64StringToBlobOrBuffer.js\": \"./lib/client/base64StringToBlobOrBuffer-browser.js\",\n    \"./lib/client/binaryStringToBlobOrBuffer.js\": \"./lib/client/binaryStringToBlobOrBuffer-browser.js\",\n    \"./lib/client/readAsBinaryString.js\": \"./lib/client/readAsBinaryString-browser.js\"\n  },\n  \"files\": [\n    \"lib\",\n    \"client\",\n    \"server\",\n    \"dist\"\n  ]\n}\n"
  },
  {
    "path": "server/index.js",
    "content": "'use strict';\n\nmodule.exports = require('../lib/server');"
  },
  {
    "path": "test/bind-polyfill.js",
    "content": "(function () {\n  'use strict';\n  // minimal polyfill for phantomjs; in the future, we should do ES5_SHIM=true like pouchdb\n  if (!Function.prototype.bind) {\n    Function.prototype.bind = function (oThis) {\n      if (typeof this !== \"function\") {\n        // closest thing possible to the ECMAScript 5\n        // internal IsCallable function\n        throw new TypeError(\"Function.prototype.bind - what is trying to be bound is not callable\");\n      }\n\n      var aArgs = Array.prototype.slice.call(arguments, 1),\n          fToBind = this,\n          fNOP = function () {},\n          fBound = function () {\n            return fToBind.apply(this instanceof fNOP && oThis\n                   ? this\n                   : oThis,\n                   aArgs.concat(Array.prototype.slice.call(arguments)));\n          };\n\n      fNOP.prototype = this.prototype;\n      fBound.prototype = new fNOP();\n\n      return fBound;\n    };\n  }\n})();\n"
  },
  {
    "path": "test/deps/bigimage.js",
    "content": "(function () {\n  'use strict';\n\n  var bigimage = \"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yza2iXhidiYKdrPxJO9Y9+6JeBqzm8xE955Yimv8IbsoWUeRbqxd/w+/397yd3e0D/3u2WHPLMKP9xTHnOJqt213fb695Sd2tz//q0+3n1v99fajF76+/drZn2n/7XuPaPfd+YX2ln97Xbv4b/6+XfS0o9ttH/+19r0//+X2kStvac/efH/73R9+SXvZ2za2L//3723Lo9rH+5PHZ1a0733zb7XT/uS17bXv/mz7V+cd3w6Z/ad22Ze/0v5lFApj2u3euyLuT+1pf/6BT7f/uOqG9r+/6HXtV8/+XPvv37Oq/dG//3/aay/5cnvzRZuj8AhGMeeE0frTX9ne8wvnt/93z8+1d73xOfFakjvaW579g+22/+OP2q3v+8529+cvbs985TPb5igYX7hxd/vG59/dfuS+n2ifufKadtzmw3sYtbZu75faT7/zgvaxK69tk199T3vea1/cvuPZ32wvWf6p9oxXvKm978pb20Xrb2o/evbL2weec3175Zt/s532/72uve7dn27/+vwT2rrlz28/c+4H2hde8o72p2++oG1YvrX97Atf147+7b9r215xWPujH7mgveX9z2m//YNntL0P3dp+/z/9VnvLH3+s3fD2KCTHhZvilwvkU1yTN/30G9vH/uZv2lWXXdGWx1PFeyKfd2/fG/I3t//26/+1HXfiye2TH//b9tb/9Nb2X3/9v7Xbb9vaPvl3H28/9aafiXcOz7b/+eH/GQs2vjjGdX8g3kN8y423tnPPf1aLRdO+efft7Zgjjom1GeuFLOOJ7JxHkWvxBon23POfGzk+0b7whc93tegLX/CC9qxnP6ftjsI1frwvO9x6eRT9yOk9e2bb2c84u1119VXdP31x7fDLla1bt7ZN8S8TKJXzWhSeOp7klyzxBDsl2Ol40phfrozxPmbWXIwxHpjEiHFKe2MtTMaTyPwSIgq04dutGV6xwg0tjul47/POXXtifW/pXmnBP72huYbdY6DsPewTrF0O9w/slWVfZAutf26o7A3ZH5lydeLBHDiIS8POfQUZfSg2Nnjj6cs5wKtTbgzlxvI8ieP+i03e1+y7j2Zf/NB7Hs5HylzxE1vk+NucLzLHd/8nLs3x4fHnQMaBX54XOovD2Of933HxE1vOk35d/7r+5ih54rogh+j3c4d+rf/Y/efWYq3/+X2Z3AAX93jzB5lydeKW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1+tFawJyD08m9hs6NWlbTCQBEiABEiABEiABEiABEiABuwRUdPzlhKPsZmc+EiABEiCBdiZAdxbtDJTVkUC6Ejh8p+nIzsxK2D2XDVcWZuHWFtg7cPi+ZlZuSYAESIAESIAESIAESIAESIAESIAESIAEOjkBisidfALZfRJIhcDeO+yZMLvDaf/nQF1aJAo9swsxuvcOiZIZTwIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk0MkI2FeNOtnA2F0SIIGWBHYvmYje+b1aJkiMA/YWzIsUju8T+ZgxMyNZOnIv6LPU7vFYDnlAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTQTgToE7mdQLIaEugsBA4ffTCe+PhZY0Vcs88ul1Mk5PiisJkndhuQlXWdMdbLgwsHoyAzNzZrhxzvfNIteOrYpnDdGRkZ4X3ukAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJtB8BWiK3H0vWRAKdgsDgggEYVjzU0leH02U5tnMQ69LC6XDiuLEz7BRttzwqHJufdquUFZEACZAACZAACZAACZAACZAACZAACZAACVgIUES24OABCXQPAoePPgiuKOHY4UjVlQXEktnKatKACdYIHpEACZAACZAACZAACZAACZAACZAACZAACXQJAhSRu8Q0chAkkBqBwsw8TCgZZxRyuMQbcjA1VxaR1kJKcg9PJvYbOjUSzT0SIAESIAESIAESIAESIAESIAESIAESIIEuQ4AicpeZSg6EBFIjcPhO0+Fxe+ASNxRtDT6f3yh64PB921oFy5EACZAACZAACZAACZAACZAACZAACZAACaQ5gbarR2k+MHaPBEigdQIHjNwHjpjF8VovFckRCATRK7cXRvfeIRLJPRIgARIgARIgARIgARIgARIgARIgARIggS5FwN2lRsPBkEA3JfC3r+fhhJ2PSHn0u5dMhH62R1i26UfU+7ZgYt/R26N5tkkCJEACJEACJEACJEACJEACJEACJEACJGCTAEVkm6CYjQTSmUBbBOTtPZ6RvYZt7y6wfRIgARIgARIgARIgARIgARIgARIgARIgARsE6M7CBiRmIQESIAESIAESIAESIAESIAESIAESIAESIAESIIHuSoAicnedeY6bBEiABEiABEiABEiABEiABEiABEiABEiABEiABGwQoIhsAxKzkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEB3JUARubvOPMdNAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAjYIUES2AYlZSIAESIAESIAESIAESIAESIAESIAESIAESIAESKC7EqCI3F1nnuMmARIgARIgARIgARIgARIgARIgARIgARIgARIgARsEKCLbgMQsJEACJEACJEACJEACJEACJEACJEACJEACJEACJNBdCVBE7q4zz3GTAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgA0CFJFtQGIWEiABEiABEiABEiABEiABEiABEiABEiABEiABEuiuBCgid9eZ57hJgARIgARIgARIgARIgARIgARIgARIgARIgARIwAYBisg2IDELCZAACZAACZAACZAACZAACZAACZAACZAACZAACXRXAhSRu+vMc9wkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkYIMARWQbkJiFBEiABEiABEiABEiABEiABEiABEiABEiABEiABLorAYrI3XXmOW4SIAESIAESIAESIAESIAESIAESIAESIAESIAESsEGAIrINSMxCAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAt2VAEXk7jrzHDcJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJ2CBAEdkGJGYhARIgARIgARIgARIgARIgARIgARIgARIgARIgge5KgCJyd515jpsESIAESIAESIAESIAESIAESIAESIAESIAESIAEbBCgiGwDErOQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQHclQBG5u848x00CJEACJEACJEACJEACJEACJEACJEACJEACJEACNghQRLYBiVlIgARIgARIgARIgARIgARIgARIgARIgARIgARIoLsSoIjcXWee4yYBEiABEiABEiABEiABEiABEiABEiABEiABEiABGwQoItuAxCwkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk0F0JUETurjPPcZMACZAACZAACZAACZAACZAACZAACZAACZAACZCADQJuG3k6fZZFixZ1+jFwACRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSwPQjQEnl7UGebJEACJEACJEACJEACJEACJEACJEACJEACJEACJNBJCHQLS+SRI0d2kulgN0mABEiABEiABEiABEiABEiABEiABEiABEiABEggvQjQEjm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABbRCEcwAAIABJREFUEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IkAROb3mg70hARIgARIgARIgARIgARIgARIgARIgARIgARIggbQiQBE5raaDnSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCB9CJAETm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IkAROb3mg70hARIgARIgARIgARIgARIgARIgARIgARIgARIggbQiQBE5raaDnSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCB9CJAETm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IkAROb3mg70hARIgARIgARIgARIgARIgARIgARIgARIgARIggbQiQBE5raaDnSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCB9CJAETm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IkAROb3mg70hARIgARIgARIgARIgARIgARIgARIgARIgARIggbQiQBE5raaDnSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCB9CJAETm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IkAROb3mg70hARIgARIgARIgARIgARIgARIgARIgARIgARIggbQiQBE5raaDnSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCB9CJAETm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IuBOr+6wNyRAAiRAAiTQ+Ql4vd7mQXjg8XT+8XAE6UkgKOeZzzzTeKK1yyTxu9suGDu8Es5ThyNmAyRAAiRAAv/P3nkAOFFtb/xL3V7oSxVQpAoqAiJFRAUsWBGx9+7zj71XbKiABZ/6bE99IopdVBCl96L0pQnILrBLWbaXJJv8z51s6ia7STZbgG/eG2fmzi3n/u7NLPnm5FwSIAESqESAInIlJEwggSOIgOUg0jdmoFw+6eWIQ+cenREbQfeK8rKwa8sObNy+HeWmJjBYD8KQ0hqdOhyLjh3bIo4iWQRUIyjiyMe8L6bhj03/IKVZN1x07eU4NkUXQUUNs0jhgUxsWLNC5lkGCkrERl0cmnfqhfOH90XiYdTNzb++jInf73BDvujhCTinY6L7mickEBUCZVvw+P9NxEGHQ6uuxVlj8dxlXaNSdYOvpJaehenfjsPrMzO17jv0zfHIa8+hY0LtPXwKs3Zgd56lStw6eTmQkpyM5JSm/FtbQSrq4+Qoxu6tmSis+CxVOSBy0xyfgmQZkyYp8dVlrXw/5LZMSEiRcU+OR3J8BO1UbpkpJEACJEACJEACJFBjAhSRa4yQFZBAwyTgKNqBtx99BevK7E4D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gARIgARIgARIgASCEqCIHBQNb5AACZAACZAACZAACZAACZAACZAACZAACZAACZAACVBE5hwgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIISoAiclA0vEECJEACJEACJEACJEACJEACJEACJEACJEACJEACJEARmXOABEiABEiABEiABEiABEiABEiABEiABEiABEiABEggKAGKyEHR8AYJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkABFZM4BEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBoAQoIgdFwxskQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIUkTkHSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEghKgiBwUDW+QAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlQROYcIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCEqAInJQNLxBAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAEZlzgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIICgBishB0fAGCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAARWTOARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggaAEKCIHRcMbJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACFJE5B0iABEiABEiABEiABEiABEiABEiABEiABEiABEiABIISoIgcFA1vkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJUETmHCABEiABEiABEiABEiABEiABEiABEiABEiABEiABEghKgCJyUDS8QQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQBGZc4AESIAESIAESIAESIAESIAESIAESIAESIAESIAESCAoAYrIQdHwBgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAEVkzgESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIGgBCgiB0XDGyRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAsajAUFsbOzR0E32kQRIgARIgARIgARIgARIgARIgARIgARIgARIgASiToCeyFFHygpJgARIgARIgARIgARIgARIgARIgARIgARIgARI4MghQBH5yBlL9oQESIAESIAESIAESIAESIAESIAESIAESIAESIAEok6AInLUkbJCEiABEiABEiABEiABEiABEiABEiABEiABEiABEjhyCFBEPnLGkj0hARIgARIgARIgARIgARIgARIgARIgARIgARIggagToIgcdaSskARIgARIgARIgARIgARIgARIgARIgARIgARIgASOHAIUkY+csWRPSIAESIAESIAESIAESIAESIAESIAESIAESIAESCDqBCgiRx0pKyQBEiABEiABEiABEiABEiABEiABEiABEiABEiCBI4cAReQjZyzZExIgARIgARIgARIgARIgARIgARIgARIgARIgARKIOgGKyFFHygpJgARIgARIgARIgARIgARIgARIgARIgARIgARI4MghQBH5yBlL9oQESIAESIAESIAESIAESIAESIAESIAESIAESIAEok6AInLUkbJCEiABEiABEiABEiABEiABEiABEiABEiABEiABEjhyCFBEPnLGkj0hARIgARIgARIgARIgARIgARIgARIgARIgARIggagToIgcdaSskARIgARIgARIgARIgARIgARIgARIgARIgARIgASOHAIUkY+csWRPSIAESIAESIAESIAESIAESIAESIAESIAESIAESCDqBCgiRx0pKyQBEiABEiABEiABEiABEiABEiABEiABEiABEiCBI4cAReQjZyzZExIgARIgARIgARIgARIgARIgARIgARIgARIgARKIOgGKyFFHygpJgARIgARIgARIgARIgARIgARIgARIgARIgARI4MghQBH5yBlL9oQESIAESIAESIAESIAESIAESIAESIAESIAESIAEok6AInLUkbJCEiABEiABEiABEiABEiABEiABEiABEiABEiABEjhyCBiPnK6wJyRAAiRweBDYtSsDu/fsQXr6ZuQeygUcdixavFQ7Hso9JOmb4HDo0KNHdyQnJcFkMqJv3z7Q6XRISU1G9+7d0KpVK7Rr1+7w6DCtJAESIAESIAESIAESIAESIAESIAESOKwJUEQ+rIePxpMACRwuBNavX49pX3+HJUuXY/OmzbA7IKKwHjqHQwRju5w7UGaxip5sg9Eoj2a5t1HyodwOk1mPZctFZIYO5eXlmpis+t21axec1v80XHLpRTjhhBMOFxS0kwRIgARIgARIgARIgARIgARIgARI4DAjQBH5MBswmksCJHB4EMjNzcXSpcswc9Ys2X9HQV4hHNDDLuqxEokddruIx5Ki1yk1WTqlF7FYB6tV5xSVJbdO/qfuqTImKaNTeSVNlVPHjRs3yb4F773/ARqlpmDEsGEYPmIY+vbri9TU1MMDFK0kARIgARIgARIgARIgARIgARIgARJo8AQoIjf4IaKBJEAChxuBSRMm4v33P0ZufoHShjUh2KA3ifgrlyIEG2TX6QyaGGww6LV0cUaWcBZyX4nG5arH4pFsMIlwrNfy25XgbFeiskG8l+2w2sRrGeLBLPXrpI5D+YX45tvvMW3aN0hKSsQtt9yEsfeNVRVxIwESIAESIAESIAESIAESIAESIAESIIEaEeDCejXCx8IkQAIk4CHw5dQv0KdPH7w26Q0UFhVrHsdGvVHEXwP0EuNYL0JwudUKW7lNK2TQi5CshGDlYCyb0zNZicYGEZDNIjgbYDAaJPSFyqDyyiNbhb4QYVmFwLDLXu4od4rQUrcSmqUQcvPyMUFsGHjaIEz78iut7vr8T9amTViXni6xnl37NhzILYqqSbaMjbBu3ql8t303RxEs6zYCVt/koFeS/9BtN6Dkt21Bs0TjhrK3fF90GUTDLtZBAiRAAiRAAiRAAiRAAiRAAiRAAoEI0BM5EBWmkQAJkEAYBBbNn4eH7r0Hu/cfRLmIvUr8dWjKsDP0hHIyNijhV050Bo8HsvI8dqjgyKINK7FYiciqmM7ojH2sTCi3iVuyiMhKIDYY1K7XvJUdZpPIz3YRpMvFc1l2EZMNuhjotDbU+0GHtnjfA/c/hAkTXsekSa+i/4ABqsq63USUnf76q1hQ4hTOvRs3tDkLE56/Go1cKrr3zXDOpY2C51+FTjRZx6OvwNy9mad02T8oHi/3nn4bpk7xnvQqznSxUo/VUkWOGt5S9j76KsyjHkTCRd1qWBmLkwAJkAAJkAAJkAAJkAAJkAAJkEDtE6Ancu0zZgskQAJHKIF1q1dj9PkjMPri85G5ew+MOqMIubJYnhKC5VgucY81jbhioTzlQWw2m50eygajFutYskg+p3isQl2oaxWyQpUrl115IBuljBZDWa7KJdaFSlaitFqUzy6ezSoEhkEn4TJUPSIyq3aUR7LKpxfROltsu/KyMbj84kuxft1aSa3bLbWJxz+4ZVqKu/HyzN8xZe5u93VNTgytnKWLXnm/ktex4iB4GtSma9LwbGpQgGgMCZAACZAACZAACZAACZAACZBAgyJAT+QGNRw0hgRI4HAh8OtPP+LeO29DUWGhU+QVAdlqs6FcxGPliWwRT1YlJKtzk0mJwCL8Ki1VFE2rRYRfh/MdnhJ8y+0S4kLKKo9jpUCr83JRkGNizE4vY/FGVnXpNOFZQliIc7JWr+axLNGTRTw2G81aqAzRnOW+UqLVon16GE1GuVblDVi+bIWIyaPw3gcfoP/AwXWOusPIx/HMqOPhKNyMR//1EvaK3bu2b8RL3z8n53b0uuRx3HRGB82ufxZ8hBemrYbd0BnPPDIIkx+ZiD1og0cnjUPXVI8o7eqEPUeYdO4E++atKHh/PpLu9PSvUm7xBC75/g2UfbPVWbx5VyQ/cv1nz7cAACAASURBVBf0zRNc1fkcy3ctRtF/f4R9S7aWbjh1BJJuuxxQwrTyKp4wDqa+58Iy5zPYtzo9rs3X3ImE4X00Id+nshAugrZnLEL+c2NhGvww4s44TqvJtnUqCp5bjOSXX4ahtdPTumT6E7BuG4iUsUNRMvdjlH6wtKJVeckxdCSSb7zAaVdVHGqhXyF0nVlIgARIgARIgARIgARIgARIgAQaKAF6IjfQgaFZJEACDZfA+29Pxs1XXYGCggItbIVOFs2zi0hr1cJO6GC1OhAbE4u4mDgtTIUSdHUSZ0IJv0rfNcfGQYIeSz6beBGL0CsL6EFEZYPRJOdGEZ3lqIW3kDIiKqvYxzA6BWmDeDWbxDNZ1GYRm+0wi0BtlHqVF7NOjiKlSsgLicMs9ihPZovVLlXLudxxSB4Vq/n6K0fj6ymf1Tngfbt2Yf/+/RIbeR0KlHuwbN1O7IZeLe3Iy7di7ldzJF1uiIA579tFKMvLg65lZ8TnbdQEZ509A+v2FjoLBvivaeBoxN/TG+WLP4Z1a3GAHCrJgoJX79YE5NjbxiLx2Tuhi09HvixC6MgNXMS6/U/oEo9H4hMPIv7/hqJ86QwUTFnjzmzPzUbpfz6Gru1IJL30IMwXtIbls3+jZMV+d55wToK2p0uALtmGsl9WuWM/l0yfKR7pBShb7hTEdY79KJ26G4b27WD7Z4YmIMfceCsSn3sQcTf3l2njCulRPYdo9yscBsxLAiRAAiRAAiRAAiRAAiRAAiTQsAhQRG5Y40FrSIAEGjiBe++4Fc8+/rAItiLXKhdX8fbVyeJ5DvfidwbxGFaisMRDVmEmRNAtl4X01G6XUBQxsTFaiAmbhKFwCsUiMKugyOq/UpdewlGoRfMM4rZsEE9jnd6hib/KQ9kgQrJKVx7PKuSFXtpV3spKQDZK2ArldazOtVAXUpdUpnmc2sVOY0yMZqsSux3iQvvUQw/ikbtvr1PaRWs+wwMPPIDxk39CoYjF5aa+uODk1hh46TmaHfrieVh3QEJ0HNqAeTlOj95zRvZDk05n4brhgzFoxE04u0tiUJsdohub+9wASKiIwudf16j6Zy7fuxTlEtEj7oFXEDuoF4zH9kHqc88LExuK58oCfAG22CF3I+m+G2Hs0k3qvwbmS5JgW7nWLeSKhgu9tJskHr6Gtt0Qf9mjcIhTs31fZCJyVe3FDOkNR/ZfErNZpoB9J2yrxGBpq+zHBVp/7QVbNbtiTmwPhyVP6425s/SzYzfEDLkRSTecpc2JUDhEu18B0DKJBEiABEiABEiABEiABEiABEjgMCHAcBaHyUDRTBIggfolcOjQIVx63jlIX7dOE+GUNWqRO7M5VvNC1q41j18RdMWLWPx/UW6RkBYi5hpE2DWLiGuXkA168UguLbNoHsZK7RNtWERjETXj47SYxirmsVpET4W00In7sFE8j82yiJ7yQFYitEHEYpNZBGQp7JD27Q6bdt+hFtaTdlQoCxVPWdVnVycSysJms2pt6EXctpeXybmI1eL1/MO307B39y68+fHnSEltVOuAHfo0nNrnGOze9Bcy8ywwWJfjk1nn4t6zT8cpsT9jZWk5Fvy5Da3jFoukK6aLyHyGiMYOXRKGXnkThlZroSyGJ966yU/egPyxHyPvkzVIvibFPV6quKPwH62+GK/F9xz61ogZaYRl0TroLjymUiv2nK0omz8TZXO3ACUlQJGMTUvlDe7ZjMc19VzImVqcL9KtqvZMx/YT8XgVyvdJX60LRL1ujaTHh6HgsY9hE83alvmnvHRoAaMKbWEfJIL6bBQ8LKE6uvRG7EXnw9yjvWZWqByi2a9IebAcCZAACZAACZAACZAACZAACZBA/RNQ7m/cSIAESIAEqiCwWhbQG9i/P/5avRalEiPCtVtEsDWJGKvEZKPJIEKvAbHiaWyUcBQqhrEWlkJEZBWywlJaBuV9XFxUhHIRdSUosoi7FtF4ReAVcVjd02IhS4gLkxKKpS7lmewQQVkdRWuWXR7ZIgCreMkWiZMs0SykjHORPYPOITGXJTay2KEUY0tJKWxlZc62lKQtIrNddiUyW0XMdjjEI1m8pVctW4TrLjkPG9euroJAdG51PO923HnnnXjhzbcxso1zpbs189ehGE1xwehuWiObfv4U//naacuxZw5BI6Wyh7npmw5G7DWtUT7rdVjW7w2ttElCjATY7AcWI/+eF0VELkbcmGuQ9MRDMPQOkDFKSdW1p0/qpHk5l61PR9my+dB3Gijez+KdLO2Xrd8Iy/I1kjbEuZBgTHukvvEe4h+6QRT5VSh++VnkvfSjNpeCmhuEQ9D8vEECJEACJEACJEACJEACJEACJHBUEKCIfFQMMztJAiQQKYFc8UC+5bprkLcvC82SY9EiJRYtU2Pl3IRmjZKkWiXsqlATIooqz2ARaDW5V4nHsithWQnB5RKiQnkYK8FZeRM7xEtYnZeLEuwQb2FLcRnsIiCrvVwW3hPdV8RkEahVrGVLmdTpFJO1BfocEsbCECt1iOex1KN25dKs09yaJU6yVr9driUUhhRQcZXLNeFY6pD6xHUaZaod5agstm9O34DHxt6BPOlrbW5FeQckbrQFhfs2Y8t+FaVZNhWDQrZ2/Uaimdhpz8sQL2UliZpw3lldtXsqRvLGVQsxZ9lGlKhbIWxxwx7QwloUvfIfH9FU3+hYLYawdacnZrKKI1z2bQGM3Tv6eC2rZqzrftE8extPfAgxp/YRwVZE3PwQDAghi07iWftv1bXn0KUiZkRzlP3vQ1h+ssm5KNrifR07RtI+nATbAvFMH3qCVz/MMPccjOSnP5Z40V1h3/i7FgojXA7+dvKaBEiABEiABEiABEiABEiABEjg6CJAEfnoGm/2lgRIIEwCoy88F5mZGZpArJOYww6JU+yQkBQx4m1skPAV7tjIIhA7F7iTNJHwVFxi9YC1i0CsrrV4x0rkFQFXJ6KvJhyLWKxEZ4eouUrsLRe3YpVf3dMUXpvEB5Z7SgRWXsVWCY/h9Fi2orRUwipIWRXuQoWnkDOxyyjCsYS/MMVo9hmVN7QI0WrBPc2bWa5VfnVuE3tFXhbLRPyW9K0iJN97w5Vh0gkv+775siDh9bfgrgdfw+YyJbYDgy84A3GCRZfYGRf3cy36JtJ82wtwQlPnn6jibTMw/s338d9/j8evmyQAcQibEluTHrmqUk59k17QtZeYyc89Auvm3RLeYjcK3h+nCc1xZ3evnL95RxkvWThPwmzYD8midT+/CPtWZW+lrGEn2DasgmXdGljWrtB267qNMITQXsxJJ2lCuArz4QrLEXPyEGnfGUc65vjWmi32vfNR/NN8CX2xX7O9fHeO28ZwObgL8oQESIAESIAESIAESIAESIAESOCoJMCYyEflsLPTJEACoRB4+qHbxUt3PUzi/WqW8BPFJRIKQom8qrCIsDoJWhwfHw9TrAixookqAVgJsirEhQpnYZUQFSqkhVVCT0hxzctYFEnJI17CUotZvJSVJ7NU5dwk3ITou7JVpCvvZuV6LLGOHVqoCnlkiwCt1xbMk+AWIr6qhfTKrBJjWQqKPK3ZpcJnJCUkwCLtl5WVaPm0Bf7E+1iLz2w2o6S4WGIuq0X7lAXSotj017KFeOzu2/Di5Pec9tTif2NbdsYlV16H4T1buFs59YJL8J+ln2nXg2VBPSUuqy0mJc15Iv9t2USYBNhET620GVqehZgxc1E2dbczvIPKIV67KU8+j4I3n0HRuCe0MkqMTXj0FRhUHGHxetayxTu9hE3HDZfwEEtQPPEFLR0tJLbwFZ1QOtd56fqvriK/+zqAPa576qhvrCJMzECx7K5N2dHonYerbc+QpsJXzIS+21nQK5OlAkPLUyTMxVfSz1NhaOZMAyywfPm57K4WjIi//xnl5C1beBxcNQTi7LrHIwmQAAmQAAmQAAmQAAmQAAmQwJFLoOIrepUd9M7jOvc/Ot3F5Ou51OS9q3T/a1eaOgbbnQqKU0nxP1fCtyqn0tW5OgbaXXm6FxcXPy55uJEACZBAyAS++Hgy3prwJPbniIewRUJESKzh7AIRZVXoiIpNPdySEhMQHxcvHr5mEY7FC1k8fW0iGmtRLeRRpRawU3GI1aPQZFQew1KfxEF2eRFrkSgkrIUKeWGRBffELxlGg1nE5xiogA9KbNbiI8u5WrBPxU1W4rCq0yxicLK0X2qR+McSFqNMPJWVh7TyYlaCtjHGhILCAucDU8Rmze/YYERsjBKRi0RElpjMEpdZgkggBlbo5doqBj076d8YddW10mLdbv/Mfh1PffKXCNtt8fy749AuRhF2bnaxt0SEzwSPs7LrVsRHh0UEYxkKvQjunlENUp3Kq9RXYV4nWzTb0+oSq80JAU0Pi0PAGphIAiRAAiRAAiRAAiRAAiRAAkc3AXEwU55HG2RXX+WVCKCOgXZtHfmKPK5z/zKu8uoYbFdfY1331LlrV2muc9dRkrS86qjS1OZ/9E7TMvj/h57I/kR4TQIkcNQTmDNrOt6Z9KyIwmbRY8V7V0JY6EUA1uutEotYhYZQ0q48b1XoCHO85DOJwBsjR50seGdFYWG+iMLiF6w3ifhs1sJRKJdfm6SVqwXulDeziMZ2EYJF79Ue5TGxZi1OskqzO6zivSyirl0tumfX4gDrlbuyW1OVWMpyWVaiR3ZujvxVKhdPYrFJEsvEc9muVtuTth2Spv56xCjhU3k/i+0qr8Wi+iThL+R/OlnUT8VnFulaC9Ohk3yP33Mn2rVvj74DBtfJXPhnwWd4/+eVyNibq7WXdsYVPgKyStTHi4AcZWt0SlQVNGoIqt2CCLDVlos0QzTbq6ausDhE2h+WIwESIAESIAESIAESIAESIAESOKwJUEQ+rIePxpMACUSbwNZN6/H2q48jVjyPC4vtyC8oQZOURPEMNoqHsAGt2x6DlKapyD10EMXFNsTHNkZZqXgGi3BbWlaMUmuxFrfYaBDB2KY8hI0Sl9j5AwqLRXkoOwVkFXpCC2ohAq5Rib1WHWIlnwqFYRaROtakR4wIvWphPhWCQnk2K29jtUBeuYjF6twmZVVsYyUu2+02Tay2iUBt0VkkxIUsxidhLcSJGsWlhXKqF0FbhGXlHS3ncXFx8k5UXnaKuK1Cb0j4ZfGzFU9bnYjXEqbj/luuwX++/AFdTzgx2ogr1Xfo76UiIBdq6YY2Z+HRa7pVysMEEiABEiABEiABEiABEiABEiABEiCB+iNAEbn+2LNlEiCBBkjgo3cnSBzhYsTEmSVMhE0EVvGCFUFY/o+E2DhccOEFGH7+OThw4AD27t0v4SSa4vlnx6OwrBQlEk5CLZAXI+EiDOJxXCrxiJNS4kSETtE8j7V6RcBVi9spUVctmKd8mpVorERqk6SbzXEiIItns0GFsdBrIrKKdmyXBfnUInwWCZVhE7vKSss0j2LlQ+wKkWEXUVn51apwFwVy3yr5iy0OlEgs5GLZbaIoW5TXsWRTYTFUnGWThNIwS+ekeyIga/+VdKCoIB+Tnnsc/5n2c62PUpeLnsUT/fYjtmlLtG2WWuvtsQESIAESIAESIAESIAESIAESIAESIIHwCFBEDo8Xc5MACRzBBDanr8PWzRs0j11RgUXQVYvXiYCsPITNRsTZDejUrSs6dO2O1uLpG7duE7oedzxapSWjvCQHcRJCQrRa8fAVAddWho4djkHP7t2QmpwkYTBENBZxV4WlKC0qkvjFpeJVbBNv5TJNwFWicqyI1ElJjaQ9k+wiHUtk99jYWM0DWgnPyuXYruJYlNtQmJePQ4cOwVYmdYhgbZU0JQxLLAsRs0tRVCy7xFguKrUgr7gEMRKmoljcja3iCW0Tobu4VARyaVO1Lk7X4vWsR7yI16Iryy5Cs3gp/7l0EVYsmo8+tRzWIja1KTrJzo0ESIAESIAESIAESIAESIAESIAESKBhEqCI3DDHhVaRAAnUA4Epn30AvXgR6yQ+sIoVbI6xwyhCq1qZToWViDMbJPSEAbHx8cg/UCCL2InIXFaIW8ZciM3rN2LuH3OxZ18+EpLjEZeYis7dj0fTJilolJyMeFnkLq1xIxWCFyUFBZq3cKmlRLyLy8XTWeqVhfQS4hOlzXgRl8UVWNq0a17NsZqQnCAxgZWQLJbBIYvhWcXreX9WFg6JR3SpeB0rL2KriNR2zQO6TEJxFKNAxOp82fftz8HBnHzklpSiTIW7kLjLKmazFs6iQpiWopp4HGtWHtJyLu0rr2bljTxl5oJ6GA02SQIkQAIkQAIkQAIkQAIkQAIkQAIk0FAIUERuKCNBO0iABOqVwI/ffoVcWaTOHBsj+m2seAzLInkSCkJ56aoYwuIYLJ7JJhFYlVdyLJJFGLbLdcHWzeJFG49TzjsbFw87C1O++AIxSfHIKylAcpNGSEhKQnxcLFITEtCiRRM0ionRFtYrExHYJsqt0nINRgl/YYyVc4PmaZwrXsYWq0VCV1g0r+Wi/AJYk8vQuHFTicfcBCmJ8RJD2YpWzZtj/969YvchLVyGClMhhouXs1VCclhQUFyI/YdyER+/R1Th3Sg/5EBxuRUlEgpZZOQK3s6jFINZhGiTXhbYE1HboZeOS4VbN67Hj1P/hwvGXF2v48PGSYAESIAESIAESIAESIAESIAESIAE6o8AReT6Y8+WSYAEGhCB9//9Bjp17yICcYwIqRIWwgLx/JXwE0o9Vr7JSlhV7sEi9BpEYE0SITknPx9JItgmi2dyUXEu2rVtj3/deTPmzp+D/XmxsJvMWjiM8rIyGEREThYxWeXVi4exikrhkHpVeza5sFodiBNPZJOUKRHPYuWFXCQicEFuHrb/vQ3bd2dgu4i8zVukoUePHhJnORlJCVJXs2ZIlKNR7CwXD+NYacMiYS2USJ2Tdwhx2ftEENbDKm1BvKxLpd4DEuJCrrRdDUGiKOWpcbKsnhKxJRyGREuGXdpSoTdUvg9eH08RWYHiRgIkQAIkQAIkQAIkQAIkQAIkQAJHKQGKyEfpwLPbJEACHgJvThyP3Xsy0aVXdxF1TTAb47TF6kwmEX8ltoNexFW9xAw2iRcyRIQ1SKwHS6kVtrxiEYVjRRDWIbVZExTIYnSNmzbFeecMx9adO7B5x07s3ncAySmpaCx7YkysFhvZoEJkSB0Oqc8hR5OEyoiV0BiqLaOIt0YRgnUiCsdLPOTkxGSkpKZi/57dyDmUg3xpY+f2rShp3BhxEkM5RhbkUwJyUkKipgor0dssi+epY0yxWYTpeAmREYNE8Y6OzTMjJVnCYuzPFaFYRHJRiFPj5F6sCMgqRUJrlMtifNJFbXOIV7Ja+C9b2Lw38UXcdt9jHmg8IwESIAESIAESIAESIAESIAESIAESOGoIUEQ+aoaaHSUBEghEIFcWp/v0w/+IeCquwSLgGkQ41etEUDXIuYi7RiUeKyFZpauF8ySMhPLO1VyJ5cwkAq1NvJFjGzWGUWIeH9qXjWYtW6J71y44kHMImXv2wiaev0kS0zhO8saIfmyQdhxSr84o9SmXZKmn3CKxikvKJNxEIfIkZnJOYQEKZNG8/PxSFBbkwSAL8KWKENyiWVNNbM7NPYhS8VqOk/AbcbHxKFZxlcVeu8Q2VgvnHcg5gH9270bG3ixs+XsLtmzZhkKJiazaTDbpRSTXiQBu1ryPdeJ9LKW0finRWO0GFRtDOuoQW+USX378Dq648Q4kpzZSvQ9ry9q0CfulPvcfHF08Wndsh2RZuDDkrXQzHrnjJeyVcbrwkcm4pGtS5aJ+eS7tfAjP3/w0toiH9g3PTcaQYwKUcdXiVzZg/a68YRzzt36Dfz3/I9D0HLz72hjEhdFle+4urM+woFOP49zlSvfvwpa9ReKx7muEQ4awcccuSEuo3EDWpnXIS+6Azq3kRUO9bhbsTF+Pv3fth03mQKeTTkLHZr42FezZhEV/rkMhktGz3wAc73dfmR+Ii3+3HGUHsHLFNqT16Ie2qZWZ+OfnNQmQAAmQAAmQAAmQAAmQAAmQQNUE3N/pq87GuyRAAiRwZBJYtmSR5kEcExenicRKKNYrQdUsorGIsioeslqsTsUa1omgarGoUBMOTQQ2JSbALvdN4o2sFuSLS02WdANKJMyFUco3Tk1BaX4hmjVuoYWeMEkYDJOEjjCJl7BDjgYRgQ0icKqF8QpEKN6buReZIvxaxBNYn5SKZh064+9tf2HlggVIMljRLNGM7j26omVac1lszyQew+INbdVJbGZZDFBnR4mEzVAL6uVIHOTtuzKwbccO7NqVKUIw0KZtG+gl314RlS0WJRgrqVhJyTYRzTWdWEIgS8Nuvc0u6cpjWhLkUFxYiD+XLsKQEeeHNxEcRZj++qtYUKKEat9txB0v4IpT2/gmRvHKXlyCPerlgGz7iqNYcQRV6WPDK5S18Rc8PP5LGbsUPDX5DRyX6ByYv+e8iQk/7w9Y2QgR16/wF9eF/0+vvY7Vg+/F29f2CFiuLhLth9bjsfte014C6EwpcFjzgM+Bs+58Bdf0a6GZsHflZ3jkrd+1PichHz9NmyIvDCbJC4PGbhODcXFn0E4s+HXSI/gy3YrzHukuInIVLw98C/KKBEiABEiABEiABEiABEiABEggCAGKyEHAMJkESODoIPDbjOnSUREaldaoDkrAVV7CKkyECMI6FU9YPHUdKIdBxN/9Bw6gqKBQxGBxBY01i+Brk1ARSSgvLoJVxOaigiJYJI9JRF69CJhmo1FCVZi0sBNKtjUaZGE+8UjWxch9yWOWa4d4LFvKSmGUttq3bY9iseHYPv1hbtEWa7ftxb7cfMSmmnDMcV1Fzy0Xz+ZixMSnIjU5EUnJKYhPSNIWwsuRkBfbt+8Qz+OdyMw+gIISK8zJshhfYhyaN2ssgrdIxjY78g7man1SsqReLaAndomvtThXy1F2ccIW2yVdjjpdBRgRkxf89nP4IrLUntpEKsqUE9lSkk3Iyxd3adl+fe9d9DtpHDrGKEtC3zT2IWTXJXbG8y8+gsy8OHTxF1erKO+qX8JKy2KKVWQM4Va8KV7LZS8NIXNFljVfPYuJP293XunifAp2H/0aPhntk4Q989/Aox+uQ+emCb43Kq5iRENNknAp9bnp45Nx3AlDcNONV8hClDEy5Yrw4/j/w7RPfsOovtcg3rEXH/17Nszdx+DNB89BHCruv/YhzvjgATSS+VcVF+++7VnyX01AVmn8R443GZ6TAAmQAAmQAAmQAAmQAAmQQOQE+P0qcnYsSQIkcAQQmPXbTPHAFc9gJZ4qr2IJCyESsqinehGNVWgLkX5FWTZIuklCQajzRrKQXYzETi5u0xqFO7YhVQRhR2kJsrftRLGIwUrobZTWTERoEZolnnKceDmbRJhWIrGS8nRSl068kHUSI1knYTLE6Rht2jmQGCdicomI1XFSv+RLEW/lpgkmHH9MK3TtkIZ2rVoiSYTnpKQENGqUglTxfE5t1ARxTZujULyP8zdvwpJlS1FUVg5jcgs0T2uKZcuWwVCWJ/GYHWgsi/DlykJ9VpuIuJpntdgi1qpNScXK01p8rLVrUZMlboDzSjFQ/5s/e4bzXoT/bX/O43h2zPE4uHEq7hv/K3T2DGzIKETHtofw+sMTsa04FmMefxwDVdiJ0r/x+iNvaWlXPPMMBnicUbF69qdYPH4x9lhkzFoPwFOP34L2AcI4oGwXvnj3E+yyGHH+HQ9JvTFYN/N/ePeL+SiU8YZEgm7d5SSMHH0d+rf2dMq7fsS0xU333Y/BXZxhPHSOA5j+wWR8tXCHs4Dcv+ref2FYV6c3bfn+9Xj1+QlIz5XY0rGdMfxUJ19X7S6P3D1og0cnjUPXAKEWdCK4nn7LCxjdPh13PvGTq2jgoyMPP05Zg5gTr8PJzXzbClhAmEy653n0eHACzj6uwkNXE3Tvx66TH8bdwzo4Bd5XXkThKcNRNO9zLPzHqYCfdP7duG1UH3doDUjbsz+ZhE/mOFk07XkOHr77cjQP9FIgph1uvu96j0m6BHTt0QqOXc64HMW7NmhhR269enhF/Qk4/8Zr8M2DH2HNrjIJRSKflRC42A/9hSffXYSeZ5+L/X/86mmPZyRAAiRAAiRAAiRAAiRAAiRAAjUiEMI3zhrVz8IkQAIk0GAJrF69WjyLc1GuM0lMZBF25X/GitjCKgayEo4Nsvqc0ht1sgieEpVtNgkFoYmq4qWakoSichvsSmyVvUmr1jj2xJNkcb0WSGncVOIHp6K83LlYnVaJWq5PFq4T91+pQ3ZpQ040r+cEqatZ6zS0bNcSLVS4CvFwzlizEie0boYrLzwPvbt3Q7x4NTeSmMQn9z8NTSXucoJ4QKuwGTqJcay8pwsKxQtaPI3bHXs8rrrhFsTIonz5JUXQi2BtsdpQVlKCUnUtHtU68UAWk52isdig5GRNV60YLSUca+KxJKpwF0r+LpGQFpvXr4l4PNW6hGpLbdrR10PUUYLM3FyJAS1e1+6wEzZ3Wnae03PZWRrYtmiRJiCr6/Ldi/Dkg/9DifTFf3NYSySsx14J4bFLqzdv41d4bco8TUBOSUmR7Fbs3rQcB7w7Lqne9aMsAx+Mn4BdZQpWHj647yGPgKwalPufv/wQfkwvEFF8L15+2Ckgq1s6ibP829x0dereCvdvcIZ0EAF93d5Cd7r3Sc/z78WNA9vAXpLvnRzwPC99BpbIi4erRvcLeN8/UTHZVmZBgS9S5GZbse1gkTt7Xl4WZn76IXa1PA+PPvEIrjqjA/6aPhkfL8quyGPBrIkPiICcifNuvg8P/2s0dOtm4OFxPwUcC3fF7hML0tfvkRcmzgSr5aB408v8V17rFZs+uQ2ayTzMKXYaWy0XEcM/fu4tlLcbg7uu7C+xwV018UgCJEACJEACJEACJEACJEACJFBTAvRErilBlicBEjhsCXzx+f9ksTmLhJdIEC9hJZYq6ZtdugAAIABJREFUT2TlMaw8ciXchIjIehXbQdQobWE9EVKLioo00VhJXTHKIzkpWYRiEQxFEI5v2Rp6FR9ZwlkYxMtYhZmIjY2TRfMssIv4bLOJFGtW7+6ktNIkRcXVqdAZIk4bpS5jfCIc0pbDLov6ycJ6jYwSRMNahBJLMayWUgmJIR7P0lje/v0STkMvoRbMklc8Xq3lUqMeyeLS3KJFKzRr0hwx0o8hgwYgO/NvCQ1gQ9Gh/SI6JyA756AzbIWyQXb1P80YMUhpySp+srJNJauuK89rsUaOioEev377JTr36CUZwt92LpqFn2OWYO6Pc8QiqVtEw65pzoXVRKt3tutVbaA0dbv5qdfgudvPwj+z38NLny6Gvuh3LPrnIpyV5lVYTpVo7V1H5vrNWgYVZ/iiO57A0C4JyNyehxbHKs9nT1lj+3Pw2jOXw57+rXhM/6h5TK/cLrGt4xZjfo4MtsyNW1+ajAGtYrH4g/vx3oID+OmnZRhizNO8aVVNI+95BaNOjsW34x/GD+kl7spTOp2J64YXYruuE87u4ruonDtTqCcims76fBb0bS9FX7EllM0l5AfKK76+7mTR9WHqcSPG3XG6ltbluAexa+k9stCfisfcAuX7VuB/ay0Sc3gyRmuhQnrh2YcKcafw2lU0Ep0rYji7K/Q72bvyc3wjMYvPvf8MzfPYKobp7FmQCCzywXJltsFDzpUW/Jg+fQLmHUr8f/bOA0Cusu76Z+ruzPaW3ispFCMthBIpgiKvBZWiWBBfAbGAICL6qjQpChbsDfhEAUFRQEQBpRm6EkIKJIH03exme5u2853/nZ3N7GTabjaU7LnJndue+rtlZs/85zy49PITUBx+eUh5s5eqIyIgAiIgAiIgAiIgAiIgAiIgAkZAIrKuAxEQgVFL4MX/Ps++xxnB24Hi6krGCVPg9fgopnLmlod2FD5G+vZS2fJRQLUI3nDEVC6zeTB/Yx4vKWdEbx/XqTX3dtGDOAhfRSkilo77fYwetjjezp6QU0YJbSUchdYUWwYlW4Rz3KKJY9xPQZjuF46Q7C8NopK2E9EuRriGKxANB+hpHEdlXSUH6fM75ZrAS0MHlsG2cUDA2to6WmcEGXHcjeceewSl9Es+6sC3oal+M7a4wyin9UXspZdYKUVhtoLGx1znWuK/IxTbbmuay8KPjQHFcQvUtXaawvzCs09akmFN8eanccedO7Me+6nPJQaMSxFwdx7NvnbkcYc4wuO8dxyL8b9d5kT2thegNs5beixw36/Z5TbcfPVFuJlWFB8///M0lhg8nXjqiY4HL2YcgPHue5zyLcX29QkR2iKYf37JZ/DzlGzh+m3YuK7e2RPzHYxjFo1xQJ5w8nH48xV/GUgZd9Xi6NM/haMH9gx/pWfDMtyz2QaPSwixwy8pc87aSbWDDvgZNZwUmjubEn3963fPx+PBhO9zWxsHy+P0Ai1K5ubwoG5bdT8H0PsXxh5zPk7Zb+xAHSbuD+jH/XsHO0IPJN1lpXfzg7j6znV4H0VtE7BdfV5+eUIh3LzLNYmACIiACIiACIiACIiACIiACOw2AYnIu41QBYiACLwVCWx87TWse3klB7ajMEyxtp1WEOY0QTcIFHHgOxsUz6KPvSYCx8K0EGakLgcni4QZQxtjIiqvcYqq3ooqRFqb4S+rQDejfXvamhktHEdXOETp2ERYRi/39tKHOOZYSpgIHaAFRjxmqnMEcRtkj5HI1IKdiGKL+I3HQk4dZpvhp99ykAPjuSiJlVWXo7yuguuMhqWA3BdhG4uLHUHYGbCPgpkN/ud2sd4+tjnciQDLLWY47rgxYxBxIqwT7bb2J/yeHTmZZfIfxeg4Bwek+skl153AVFOUTQ+14y6sW70KWzdtwITJU4d82s2/+Ix3zaMFRw39cOfR79mpYFA5yTelODl1JJo26PjubLjHHIUbv12N//fTX+GpDS2OFYWJyfVfuhanz8lUssVL75zC/bYKFok8feE+KOH5czkiZQTuMTN5/tY7iV2+QMo3tAmBdWcpI7f2+O23I+ZfMqyIZl7ag6Zi++ZgCBO/Z3GmpR/6FBZWcMBGbhmLOL87mTYle4S1Ccifv/o2lC8+E1d+7ICBGuO0W0mf4txl3w3seiQtJSOy7/3Jbc7OFfTL3vpXF3pDa9DIe+nhm67EK3PehXPOOGynl3Nadm2KgAiIgAiIgAiIgAiIgAiIgAjkJ5D2Z2T+DEohAiIgAnsDgU0bNziRwZXlpWhp70JnVzdWrV6D2bMmsXuJKGMbaM9DuwlKhYwCps7LcOM+ehU7vsamsDKit6i6mp7KFLq6OywbijiInkUmR8I9jpjsp0gcYKRmV28IJRSEIxSgYxSUPZxdnoQYbKKzCbim1ros7NdaYEIzReji0hIEKCL7aY/hLaFVBgcti0cpMtMew3yQ4/Q2jvf7NHstHJq5bHDAItpmFNHyooh1uupq6I1chAYOvueU7UQfU0w2LZyeFVZz3KKZaaNhdTrtsLaYsm2v7J+Jy+aLHKfYWL9l07BE5CmLluIdR+yq1ppYmPSv3dFupshlWPf0g/2D33EzbXrkwedxwqyj0PjUowNRwoUEnIZatyFUsRDnXvY9nN2yAl+94DtO/pdfZgTtrs1KqxWYOHcG960ggyDe/YkLcHD/QHZ9XW0IBSsQWbuNx9fD3f1vPLfxQxwMrgwv0L950ETBc+Xz/0FDtBqHHjx/2MJmbPsT+O3KMA779HsTUdODKsm+YawtQndrAznP7h9YL7QZz7fklWoHFeoPmKc0EJyyEAfmiDpOzZQUkKedcD6+ddpOAdnSlE9eAF/8r3hqfQtm7ZcYRbFt3TPONTCrtiS1mF3XqWhPXLgYh04zaxeq2BYxHTbxnte7K4AAv/xxbE12zak9IiACIiACIiACIiACIiACIiACBRKQiFwgKCUTARHYuwisWrGcwi09faigmthKlRSPPPIYgsVLMW/WeHiosJrwVGRCLYVVFyN8TUiNMMI4ZlHAzBy3qF/OVVOnoXXdywjESygC02OZGb1+D9pbO3nch3A4hm7aWYQpAsdYj5lQuOlt3Eeh2OWIyQzrNPsIRj/HKTI7A/VRpPbQ87ikmD/wZ6Sy1e8KWPgnRTKKwHGGTFtai5J2MWrYLDM8JgSzbT622fL5aZNRVOSHm4Iyxw1EPUXkaF9ioD9rt/UhIVpTSKZVBmtmyyhiWzkU0NkiZ0rs4yrTW/TyulUvYdGhh/cfLXzhCHwZkrtLajCB7Wkki3/9+Mt44hfsJbuZPiWF5sZlv8ZZnJOTReMePpPRr6atp0Uvp26vuvsK3PBPRmePm4xZte4BAbquxgTHrl3yWvmp+UsoXB/ovQ/PRtvwows/id9PngJ/ez3q28I4gTYKp05e2G9/EcFv/u88/CbZwJRl99q/4ZofJOwtWspvxAcKFGBTinBWn/rzrTync/H+JbTNGMLkKpmE/ao8ePiuO7F0+ocwwdeBP914jcNiWlo5vXYtZJmKJy7GSZNuwz1Xnw/fOReQfx29utfgqZUefODkxbuI4yZ6WwRy3D0ZJ+zvxwvPPZfwxaZ2PXbuIkyunIOT5/lw2w3XYMalX8KM+Mu47oYH4Z70Lszjuco9+bH4tE9hcUoiV986fOnMy3HUxy/ASbOKU45oVQREQAREQAREQAREQAREQAREYDgE8v1lNpwylUcEREAE3vQE2tvbTSuliNqH0iIvqhmRHKVy+fjjy9DTbSa9FFIpmDrj4PXbV/hpbRGLhBHiQHkRisGMH0YbB9qLMgK4bMpUi3ukKk0rDAq3ZTXVtFdOfE/XGzI7i7Djp9zV242e3h5uRzjYHu0sOCie2WOYKEyFjWVSvGWEs8vDcvwlHKivlOJx/+ylI63Hn0jHfPHecEJMpvhsXhx+1hekeOyi2B0wEZnttQhnL8N0vfR3jjFPlHYcMaaNcrbo4z4Ti8nBGTiPqrHFH5tthU1uCtuJ9YSYaDxs8MHOjnbn+FBfisv7PRDSMppP8Flf/xjq+us1AXnWkuNw5NyE+FfmZKO1CJsVL56L97z70IESTEj98lUf74/GTaSxg4nI5MHbVTPf7uTrqd+EF1dscNYXHHMmzlw6ieuD0zoH0/ZZO8/7/jdx/H4TncPNmzY6AjLorTynwg9X6Vx89asfQWl/P2zgwPedcaLTL3e/jllUMS5RNF/H12TmMZDAVhhJS7vrwVPvOvzxiW7MP/mDGN9f1+AEg7fMqmJAEHaV4H1fOAO1Lc/gmq9ehC9cdBleDByKmUW8DtLCuWvKea2lTMFg4rpwdrGck//vahy/bxnu/sk1uPDCC3H5Nb/AExu7Mkb9drXVJ7L1bcJPr7kG1//gB/gB5x/++AdYtq2Tx/x49/mX4x2TG/HTyy/Cl6/4BZonHIbLv3rKLoJ0oqAMXJwDiRd+l+O0w/EmT9mvVREQAREQAREQAREQAREQAREQgeERSPmLMGsBqWmS6+nLpBht+1Nn25++ndxny2yz/Ybajtkyfd1UmeQxW0+mSV8m0yzo7u6+lOk0iYAIiMAAgeuvvhI3/+LHCIUoxPIp5aEFRMOODtNiMXvmJLz3Pe9AV1sjVry0Gi+trseit81FsKQMRSV1uOHHP0cFbSx6Qt3Y1rANUyYxIpW2Eu1NDVj/zJOYP2sGBWQXNq1fj789+E90UbydPHE8qmhLUUN7inG1NSgt4QB8RZzLKuHmYHhmS2GeGRYZ7AyYZ+Iyd5mQa0/ROKOPLUk83IVISzN9mNsoknkpWPO3+34qlGx/R2s7nnnmWWyi3cTEceOcQcVc3B+hUL6jvQ3PvPAi/vHwQ7TfMJHaxGpmY/lWhZvCcx9tNWImSBNIMW05nKpZr8tmytt+s8tg3o+ecz4+8bkLB1iO5EoXRXmXrwTBwfrlLlUYB7MoLinJY3WwS04GLJvwz/1+5k3XZzMkz7jL6u8xVFEf25De2DC6QxyMsShz+X3dzIsS8BLY8xMF52+dewV6jrsQV5+2YFB9hbIelCnDRvJc+HjeGDy/25O1y6bhnNvdrlwFiIAIiIAIiIAIiIAIiIAIiMAwCASDwSuZjSPZ2yBG/JlvYmnr6bP9OZpMk1xPbifTJvPbMtts0V7JY7aenG1fcj255C4nrS1tn03py9R9ToL0F9lZpBPRtgiIwKgg8PS/n3CEUYvKNdsHH6N4aytKGFkcwqq1m1D99HLsN38a4r5ihCmsWqCwReVSeoWXwqwJrBalXBKgTzGjeR1FlmLuFd/7AU5797tQESzGli0bnOjg+uYd6O6tQoAWF129bg76FUaA0cq0S6YlBaOR6WlMI+OEkGxhwZxcnsRzP+7iewgtK2yO0RbDBOTO7Q0oopgbZwQ19WEWYvHDbkf4nTFjJjZv3uj0zUMzYxpx0D45iq7uHjQ0NjntdPxh2W8Tka0/tuTC6Z+9ryQkYxZLQZvqMrf72F8PrThM1Ab++8zjzLBnRORChUMXo7R30W7ZqkKmIorHRL9bk9XvaMAZC/IjyPObbXIH2fZsB0dof89r9+O8b95FOw4q7Zw+e8zMXUoulPUuGdN27M65SCvK2RypdmUqW/tEQAREQAREQAREQAREQAREQASGR0Ai8vC4KZcIiMBbnIDpplRJnUHjTETto1ewCahVFJJ7mlrx+JMvIGS+wzQT7gpFsWnrDmxvop9uSQ/+ct/fUVVejoqKYkxl1LEJsTZ7GCq8sX47rr/xR0C4F8e981hUVpYnrCRYV4TlWeRzmJYSfWZhQV9kGyDP2mFyroeWE/SesJbR6oJexxYWTZW4LxxBrLsVLtpo9DQ0wsfd/jL6LxcXU3g2v2TWz7BWN9OXMNK5tLSMoncURX0+x/c4RH+IHta5dZtZCljPEwKyh8KwTbYnTiHaEY0dRdnZTW3axGmLRE7YbDgKMqOSNb35CRRVzMD/vPNodKAcBx+3FHPq+v003vxNVwtFQAREQAREQAREQAREQAREQATehAQkIr8JT4qaJAIisOcJbKPlQx9F1z6KtGYfYZMJptWVZYza7UVzZy+eZjRyclq5blNCbKXY+++PnUk91YNpk2vx14f+ZpJsIhnDdG2wOnNUjlPYDVGYbuvqpNtEABEKxi4OkBdhOG+UArLZLLtYhlMrI51dFJPpVOykMVHY8Sk2EZnCcZy2GejuZsQyo5Hpyeyj73KEwja8FMFNc2bZXvofRyJRWl4wQpn/zAs2xlDnMIXrXorQjU1NjERuZjqTu2OMLLbo6USzbcXRjrltu/ooatt2YqZAzaQmMrsS/hbo7hyeJ3KyNi33PAF31Vy89/S5e74i1SACIiACIiACIiACIiACIiACIjAqCEhEHhWnWZ0UARFIJ7B58yYUF/kY7Ruj9TAH0aNISgnYXCVQV8WB7JihsyfkiMVhCrwBWiC0d3ZTpPVi//32xbpX1tEneX9GGlc6RTuxxBSF/YwODod6mJ8WEj098NPWIExBt6Ojm57I5QgE/BSRY9wXo/ZLkZgCstu8MijsutwUhs26giOpuWxQvjiFZUYURzkYH0fE424fo4PdaGlpxQv/fQEvrVmD/Zcsxsx95qG0vROd7R1oaW7Gtq0bMXXqVJbPvJE4unu6sXlbA316wyj1+p2+srsUkvujj1m7EwxtPbGOM9o4To9kE8qTA+uZNO0c4sv6V1ZbSk0iIAIiIAIiIAIiIAIiIAIiIAIiIAKjhIBE5FFyotVNERCBwQRMtrXZom0dGwduOYG2jLotolhbVVKE8qAPZVVV2LBxM6ZOn4wXVrxMoRk4YvES9LS3Y+7cWQgwytjUVac8FuajiBzppBJNKwnzWS4u9qO+oYkuFRx0rKiYSy86ujspYPtRVlEBnyPUUoI2Ow0KxnD5nShkK9NxIzZbC67RiBluPwdxq6tFc1ML5h1wAI74n/fStiKO1RSTV61+BfX19di26VXU1FY7eU2s7qEA3tkbwobNWx3nfifo2qKQbWIdCZHYVmlZYUoyyzNFObk/4bfsJGWGxP6EnOyUoBcREAEREAEREAEREAEREAEREAEREIFRQKBfSRgFPVUXRUAERCCFwMQJk0w2dfaYgOqIqCa9moDKpZsDynlMYe6LwBwjQh20cKACG6Mw++yzz9GOgoPcMZrYTeXZ7DBilJGtNBORza7CPJZL6FNcQxG6u6uLkcgdtJWgIEwRORSNoLWrAyFaU0Q4x6MxBhqHWHwU8UgPt7nOGZFeBgXTooJParefA7UxithfVoYpCxagbvp0WlVE4S0uQh9Hylu/eQOeevYpeDhoW4C+yBZNbFYdYZbfuKOVfs47GBvNLrhM7raWps7cZK9dVpGxYL/NBzmxJJmUdcs3Y45sEoyYJhEQAREQAREQAREQAREQAREQAREYLQQkIo+WM61+ioAIDCIwccoUxMzTYWCiqMr/iQjchMuxz8fB7igq+xlYXBosArVaSq19mDt7Bm0nQhSHO2kV0YMIheYYBdsQBWaOjucIuH4ua2tqMWHCeHgZbdzZ2Ul7i1709IbhLylFmEJzL20uopypODtCsUUAm1CNcE9ijkWc6Gg3I5jdvgBitL3o6upGfcsOvLLhNaylJcfyNatRTwuL2Qv35Wh7ReiiaOwJBhGjuN3DKOZ2einX0w+5h37Jzk9PWFe8f3A8xwva1g0DZ0dCpoDsppic8Gtmc9gmZyYcR2CnoBwsqxigphUREAEREAEREAEREAEREAEREAEREIG9n4DsLPb+c6weioAIZCKQ1I/NC9kijk08tQHtKJKauGq7vBykziYPl17u4GFHeHZEVUYa91IUjjCquIjCbMIz2MU8XgQDQdQFAxhXNwbjxoylkDwO6zfWo5e2EhaFHI0XUZQucSKJI+a3TIHWooBNoDY7CdO24/QzRh/9kbneyUjmro5ObGtoQG8ohJbWdnRQlPb5i9G4fTuCjDz2+PwoCgQYcdyEyuoqVJeXOX3opB/y1oZtTv9shw385zbLCqevLJyT9dUUdOuXeTNzjS2hV7RFIPcft0H1nIH1uE1pna+aREAEREAEREAEREAEREAEREAEREAERgsBRSKPljOtfoqACAwiMH/Bvo547AiofHGibJ0UZvdAwZjCsQ2iZ4HBHkYSO6HCTGeRyh4Kvo7cShuKcg6W5+dAeD6mDRQVobKiEtXVdYwajmFsbR2qOSDfgn324XYIrW0ttLVgRHJ3L8XgCKOKexi47KEQTbGYA9n1mbUFReI4lxbpbFYavT1d+M/zz+KFF5dj85atjGjuhY+2FlMmTUUFI5oDHh/GVtegktYZY+iXbKrva4xSfmnVKrS0daCppQ3NLS0mTzt2x9S7nf45QrijVtvbgOO6nBCvnc3+aGSDY/8dJdnycaKwfMDBSxLrehUBERABERABERABERABERABERABERgVBBSJPCpOszopAiKQTqCiqpKiasw00YHJIm0tGNf8jJ2gXDviCKlMRMHVxOMIRViLHrY0UYq9FqtrdhUuHjfBeeL4SVjX2IhiCrzljEYuKfJR8B1Pf+RibNm6GSUBP8op+LbTXsJNobk50Iya6mr4/d5EvTEPLTRYnydR/o7mJkYgb6fg7cHUydNRW1ULT58bMdbd0htF9ay5cFHw3rJtK8ZXj2X0sAet7S3YsWM7BwWsRsP2Jvoim92GRRebJswW99tZ2NJF7+e4icnMZ32N2+x0m4K5/XNA2NKUZEtijCyFJhEQAREQAREQAREQAREQAREQAREQgdFCQCLyaDnT6qcIiMAgAuXl/b6+TpQtxWSzbqB4a9YWJpKa4GrewDaQnofWD3EKzhadTAUZvfQZ7qMlRG9vL5dMyTxWzIZXX8X2+gZEGGm8cM40BGim7Gek8YQxY7D4kENw3/0PoI3RyS0l7RhH4ThA72Kr18qIRRiBzDI8XkY/m7UFB8CLhhmt3N5F64sy9NDComtrA7pfrUe8J0x7DbaNQ+W1d3Zw7kIL5y30Si4dU41a2lmwM/RBjqG+sZl9sfKcjvYvrXdWGyOq+7if4rlNNqQgMzprzsJJQ5GZQnMiv6UCSsrKEyt6FQEREAEREAEREAEREAEREAEREAERGBUEUmLwRkV/1UkREAERcAjMW7CQy4Ro6qYdRWIgOYqt9Ps10TVO8TfKJ2SfbXksEpmD3JkpMsXZEK0pfCYwW0QyB8izcjo54N1Nv7kl4Tcc6sF+C+ehmNHFHgq0AZ8XByyYh4njxmHD+tfQ2tqGYvom29Tb24MQ05sgbWXH+6JcUMSmANxD64qWxiZaXIRRZJHQPVHU+EswsbwW5aCFRmcIFVxOrKihr7IHpRxYb/o02lyUlWHc+InwFwfRsKOF7aY1R79o7HZ52VqK5SaMs/441y0K2YlAZv1RhlObZbIJypbC8UK2blsyW1K6njV3ntN2vYiACIiACIiACIiACIiACIiACIiACIwOAopEHh3nWb0UARFIIzBx8hRaPHBAPFNSbeKyz8RbmykQ0zGC2qoJxUzDdYvWtW0edjyM4zFGInNgPYtUDlPkve22O9BYX48xFVWomTUL4xkRbBYVNtCej8LtWNpnHHbIQbj99j/SYqIRzZPbUFYagMtLQZf1uanStnBQvIrKKvRx8D0P6/JStA0x0njf+fMxdtwE9NS3wNPNiGhvMaORe9DB+sIx+iazHy09nYgUg8K1G2U1HMhvayOmzZ2F+INPsGuJwfKsjyYDmxqcsK1gn0wd7heMHcsOZ9tJ1R99zPTMb1MyGnnshMnOtl5EQAREQAREQAREQAREQAREQAREQARGBwGJyKPjPKuXIiACaQQmT5kGG1xv9UvLHb9gt/khc44wEriPsyPsUl8172MbYM9cK5wB9lhOT3cI1TV1KC+vwi9++gtsqW9E/bZtqKZFRhsHsStjOUXFjA32MbLZxGfqsKX0RN5nziwsOnB/PPXUcxgzlvlpC2F+ysEw66RvsZshwOHuLvjoo+xhpLKJ1/P3W4Dq2rFUcN0Uj+sQbWxFrD2EmIvCcGkxutsj6GEEMcqCFJ174S7yI+b2oqiyGtMX7IcwBeIgB9/zsBFsCsVyRjs7LCzSmBXYPpv6PY/NezkxyGDigKVizzmTD/POmD0f4ydNsRyaREAEREAEREAEREAEREAEREAEREAERgkBicij5ESrmyIgArsSOOiQxVi9crljWeFYGzMiOCGw0sKC2mliK07x1uVYPBT7/Jg5bTz8bj9mzJoNn9+Hpx9fRpHZ74jGkRB9janLRuifHDWxluW5aBthPsdeWkrU1lbhsMMOxYaNm/DksmUoKipGeOJERBl5PKayAi7aY/gYmRymiN0boiDM/GUVldYQCtFxeIsZsTymAuHibjQ3NGFDxw40t9Mao6wUsRI/heAgujhY36ZXN+Hdp56BkjET2DZadTBa2QTjOIXnPs4mKFvotQncpnCbiYdZV1i8sR1xBs9z1rhOcdnqdoRlHly89PhdQWqPCIiACIiACIiACIiACIiACIiACIjAXk2A0oQmERABERidBN73odMYakyRl3YTSZHUBFQTb30WvcsIZLN7cHuKOAheBQ7Y/wBMnzyNxykq08aio62D9hEBlARLUV5aTtnVZGcXejgg3raGRlpV+OHm4Houis0sDFUVZZjACOQTTjge4XAYy558Cps5EF8bB8prbOPAeeEQehmN7KJY3d7RhbaOboR6Qxyor4uWzCHaXNA+I9KF1q5mNHHe0LgFm5rr0RHpZr4w3Ix+3tHWjc5wHL6SCgrZFIBNGI+HqRmbd3P/ZAK3qeUJxTyx4ujJJiFTOHZClhNicuq6RWUfuvQ4J41eREAEREAEREAEREAEREAEREAEREAERg8Bicij51yrpyIgAmkEFuy7P8o4CJ0F3drgc4nJQxuJYnh9JdR9g6iumoQ5+yzC2LFTKK4GKP5G6XVchCJ/Mfw+Ln2M9KW4GmLksIm2fbQcRufwAAAgAElEQVSn6PMVY826V2mTwQHtKCS7OEif+SmbNltdUY7pU6bg/R94PzYxIvnRJ/6NZ/7zArY2t6CPgnSEonVbZxeKS0rRwcH6mhp3IEL/ZQtHNkHYU1yE2rFjMXPmDMydOxuzZk5HZRWH12M7rP6N9dsxlnYTtWPq0EprjUgkzDbFEWG8teOM7KKYzIZYMLJJxk4UMiONnW3bQWXZBHXzaHb2MW9SSC6hUD573r6WSJMIiIAIiIAIiIAIiIAIiIAIiIAIiMAoIiA7i1F0stVVERCBXQkc864Tcf99f6KgSqGX/7y0pujzeSge18FE02CwDBFG9kZoOdHHKOFyisAB+hXHGb3sZZRxDwe481Ak9nEQPUqvtL2gkExf4S1N7WhobMeYmlqqtRYFTIsMCtUl9CweV1eFBfPm4qilR+Lee+5DT2+YgnMMra0tmDNjKsqDxejr7UVLRzsmTZgIHyOMqWpTzDXhl+JuEX2OXX5GNY9FSUkJ6pkvxqjp3jhtMJjipJM/iAkTJlCM7qaI7WObGMXMFphG7AjHLMdEYttia519bHYiMtn8lS1MmdsWhW0mF5bKIrQPW/ouJtIkAiIgAiIgAiIgAiIgAiIgAiIgAiIw2ghIRB5tZ1z9FQERGETgmONPxMP/eJB2FbSkKK+keFxDX2I/Zx/CEYqyPVFGJnsRpHDcwsheLwVdP6N+yyqq0dbejhgtKCwKmNouLS5MqjUPZR9C9DVevmINZs+chgB9jh2lluWwaBQzXQUH2jvu6KMQY5Tx44xGfuTRJzBnzkzWGcGMqVNQZNHL3mL6K7vQ2NyKcePHOxHBHkZBx2h/YcJzNz2YW+mJ3NyyA92MkK5vbMZcDqY3ffZc1uem1UYxfFx6LPiYDWBQsTO5KBKbVuyERlvkMQXiuKMim1zMgfVMWHZEZqZjMls3EfnwY+SHnCCoVxEQAREQAREQAREQAREQAREQAREYXQQkIo+u863eioAIpBFYvORIHHLoERRvY/AVlaC6shodFIdtoD1fcRzh5mZnUD2LUy6iOOyht7D5GW/Y8CqtMMopChdR7KVoTFHXV0zrCuYzKdlFwXg1LS02b6vHrBkTaI1BcdZG3eMge8W0pKiuKoeH3sdHLlmM6dNn4MmnnsWK5SvR3trKgfbimDFjOsVrN7a3dqCSlhvu5g5GOzOSmUHJHbS+2NHQgBDb0dzRiU7WvWFzA1auXY9Djn0XPObBzPaauE0JmXbIJgsn2mWdcbbNq4J9schpF/eZ+O0MoGcpecjtdnrBvTYgH1BaWob9DjqU6TSJgAiIgAiIgAiIgAiIgAiIgAiIgAiMNgISkUfbGVd/RUAEBhEopUD7rpPeh7vu+CPc1F43b2ugzuujAFtMIRWorK5FS/MORiT30OrCg+IiL8VfLyOIY4kB9qi1hqK0fKCFhTtGoZZRvmYBYSYQ25vbsHzlaowfW4Wy8lJTlik4MxqZLQgW0xKDg/pNmzieA/vRnmLpElRUlOKZZ55HKPIk1m/cirqaKkyaMgkd3WFsotdxWTBIIdvLQf+8jE5uQVd3JxrbO9Hc2o31r21G4/ZW1NSNcfpnvsYxzhG2z0+fZgssNqnYIorNG7mP9hn0wKCAbAMHmnBsXshMw9nSmLjsZLLSuPP9H/kUrTyqnLL1IgIiIAIiIAIiIAIiIAIiIAIiIAIiMLoISEQeXedbvRUBEchA4N3vPQkP/P1h7KBthBk6+Px+9NIqwmwfeinU9lEwjkSjqKmuovhbjCYKuFF6JJu4atG7dryI0cU2xTnIHhVmHqJFBCOKV614BfNmzcDs2bTBKOLgfaZMUwj2FxU51hUBRhePra1irX045MBFHBBvLJ588hk8++x/MHbcGNpZMBI4vsmx0CgvCTIquRQtO3Y4dYUiIdQ3NHKAvs1Y++pmNNMD+fbf3eaI3Y2Njdha34ieznZE+7oQp02Gz5MQkE0o7qOA7eLAfyYUm82Fy14YmcwGct1NAZr+zgzHtnaNHTcBnzjnC06dehEBERABERABERABERABERABERABERh9BCQij75zrh6LgAhkIPDBUz6M3/z6/yFOv+JQKELxlBPFYCqr6Ozqol9yOUrpmdzW0UEf4g5GJPt4JAoXo5N99C/2UBsG8/oowNoAejYIXyQawjZGNq9YsQrVjCo2Udg8h53CGU1cVBRAcSBMQTrmRBnTHhkTx9XgsMMOwQv/XY6Nr21AK32YAyX0a2bE9PjxNpBeMTrbOli3y/FkrmeE8qYNG9HSTqHYW4T7/3IPnlv2BKK0umhjO4tYZoxicJSFuxlhTNcOREIUxakXu90hRin74aag7PVa5LGHbYkyCtuN3nAfI6QZbc245Y9LQLarQZMIiIAIiIAIiIAIiIAIiIAIiIAIjFoCEpFH7alXx0VABFIJHHHkYtx1118Y5duSGCCPUbkRRiOHQ70Uib2oqKqmZ3IAUXoUt9NCom76JEYh91GINdGY+isFV6+P9hCmPlNM7jPRlsqy6dAbN9fj1fWbUVlZxQH8GLFs7hGexAB8gUCAwnUUkQjtLpg+zno9FJhdffNRV1uJV199DZs4W4zwqjWrEGQ0soe+GxYl3EsvZPNQDoXC8BTRfoMD8XnYph62ryQYwJRxdRSdA6isq0WMDXvl5bW0vGhENB5FW2+3NZRSdCRhpxHgIH7RsOMNXeSPoSMURYBi8v4L5+M9J5+aikrrIiACIiACIiACIiACIiACIiACIiACo4yARORRdsLVXREQgewEzjrrDFx52bXwUzSORMJOwigF3qqKClQwErizs4MD6PUg1NPrCL1mZ+Hj4Hg2Lp35DLuciGSL6qWw7OtDV1vYObZlaz3WrX8NdXU1HERvMu0mLBjZIoPjtKmgvzIF3FJzk6AAHQmHGPnsRmU5BetoJfqi42FBwt2MHu4J9ziRyWHaZJjtRB/F6mg4SrHa50Qah8NdLJuWFRSMffR1NqG5h0Jza3s3xk6aiEMPPQzd3d147oUX0LJ2rdM/P8XnEIXyLvY3zvTmoxylKB1h2WXBcnzpa5dnB6YjIiACIiACIiACIiACIiACIiACIiACo4KARORRcZrVSREQgUIILNx3PhbMn4M1L61mFHKPBRRTUPYhEAgyErkc2xob0NbaAq+fg+NRPLagYze9g8eOHcsB+CoRCkcYuRxyPIZ9FIfjY8aguXE7B8PzYO26DRhDEbmsLIjq6nJHGHb8k02BpiDsYRov85gfcymjjU3Y7aB1hg2kN475bPC+enoh+31F6OoJo5OzhTTzMD2M2RJGPrsYxWyD4nnpzzxu0iQKzvR45jGzy9jKaOi2lg6MoSXGxAkTsYoiss8foMhtPhxw0pgonpxM5D78sCVYfMQRyV1aioAIiIAIiIAIiIAIiIAIiIAIiIAIjFICEpFH6YlXt0VABDIT+OjHT8cVjL7t7uqjIBxGHQe6CwRL0NXd41hXNDfvYJRwOSOVo7SbqEEpI5TbKfZu377d7JMd32HzHrYI5jB9iUM9PYxiLqU9RYSD322iGF3BiGOXs49SNKOG+7htNhY2WxSz1/FUdmKVKWKXUMAu5iB8O+iNbNHQ/uJyNO5ohT/Qix5GREdD9hjvQ3dnF6OjKQjbwH2c65t2YOqUydixvZliN602GB1tYnL9lnraYbhRR3/nVno9xylis2ZHPzYJ2aw7ovTgKC8twwVf/VpmSNorAiIgAiIgAiIgAiIgAiIgAiIgAiIwqghIRB5Vp1udFQERyEdg2oxpuOCSC/D1iy51/CW8HKxuwoRJ9DReyyjkNnRQrJ23zz4YN24so4VD9BhuoABLb2QW3Ed7ikjUBqSz6N8I/BxgL0SBtpfroKj86sbNqKgs42B6AXgp5AYoDpuHRZwD2/XROzlMa4qurl7H6zjGyOJAcQDuCjfaaaPhotA8dep0eikXIcRR8SxKmu4Tjh1GqKeLfs2MfDaLC4tEpjezWWO0NLc4g/Ft27KVwjH3MdKYhx2ReJ9Zcxm8TKGbfeju6XRsOhooPFvEs4vpfnfbbZi3cN98uHRcBERABERABERABERABERABERABERgFBCQiDwKTrK6KAIiMDQC8/ddgM+efx5++cNfoI+CrTvuZdRvCM3NzfRA9jHa2M3I40b4/T5G7no4eB4dkSm8erjdS8/k+qYmRgs3UmDe7gxU56JnsZe2GMcesRjbtu9AeflWCshe1FRWUvZ1O+JxiN7FFu3cS0sMt9uLIg7iV1YOLiP0NG6jGDwedRSz2zt6UFzfyAHzSmhV4XdE4g3rXmY7KVRTKI6xLhvszwRs81c2gbu6usoRwG0gQJeLbSnyO6KyK0b7DK8fVYys9rqimD1lIjq6e/GZL16AJUceOTRoSi0CIiACIiACIiACIiACIiACIiACIrDXEpCIvNeeWnVMBERgdwgcffyxWPvyWrz6ymY01NdT4O2iiNyCstJSRgDH4KcQa3bG3SbUuuOM5u3CimdWYMvmLXSicMFN+4gwo3qLfUGMqapy0oaiwEZ6E1fS3qKqLAAfxV4Ti6O0xujpDTGymUKwRRJTcC4rKaV/cik2b9rEiORizN5nDopKKtC3dTtFYA7E5/IyKrkXTfRJDkejbE8xs1I4psDd51hUsByPF02NjZg8eTLaW9spdtOuoj9iOWZeyExvvswxRkl7KYbHaYtx3HtOwgdOO3130CmvCIiACIiACIiACIiACIiACIiACIjAXkZAIvJedkLVHREQgZEj8L+fOxu333In/vyn+7BtW73jdxwsCTAC2PyL446dBfxurFq5GqtXr2Z0cTFqq+tQysje4tIgLS360EKLiPLSAErpbbxh/XrMmzsLDY07mK4SxcUcRC8YoZALtFOkDtFD2fyKA0E/B73zOVYTcQq88xbMxeQpU9ATdWFTww5EKRLTOcMZgO+pVSswjd7Hoc5OishuuOhzEWFUcpxLt48D9lFsNvG7ktHITazXhGYTruPcX8pQZ7PViMc5UF9zE/Y94G248OvfGDmAKkkEREAEREAEREAEREAEREAEREAERGCvICARea84jeqECIjAniLwPx96Dx74+8OMFO5FkFHINoco7CJOMZaC8rInl2FbwzZUV1ajrroaNeVVFGmLGBlcxOheL7ZRtI3RE3ls9Rj6KXfScsKHzVu2YyLtKcpLu52oYYsQ7uzgwHgMDq4oL0MlI5eLGOm8edNGTGEU8aSpU1BZUY2Wrgj9kOMsu4TF9LHerdjaWI/Zs2YjUFOMIIXqxqZGdHYyppgCtnkteylUe2hx0cNBAmvHjkNNTS16GfFswnLLjmaKzTGwhZizz2xceJkE5D11HalcERABERABERABERABERABERABEXgrE5CI/FY+e2q7CIjAHicQCBTjK187H1+58Ovo6umhD3Ix66Tay5Hrmk2EpUfFGAq8pfQorqGQXFlR4UQse+hJbNYUtbW12LG9iXYYvaiuGUNbiW4EfHE8/58XURI4iAPk9SFMH+U4rS/GjqnD5IkTnAjhULgX5bSzqBszlrYWlQjHXFjzysu0y6hHUaAEMR5ftfplZ4C9dg72ZxHIDI5GeWUVXSr8aG1pA2hnQV8NVHJfL9ve0d6JraFtFJU94FB+jKhmtDIjkWfMmIGzv/Q51lu2x3mqAhEQAREQAREQAREQAREQAREQAREQgbceAYnIb71zphaLgAi8zgQsSveW236JH97wM0f89VCkDYcZjcxp8uSJjOaNcoA6H2rrxqA4EEAfBd2+eMwRaE2EtsH4Nm3ahnEUiFspPLtLitDS1oLnXlyD+XNnoNjTh/JAEX2SS1FBEdpPKwxPyONEIPfBy7Td+P1td6GDgnUnxWiPj1HKW7bR/oJRxBSJX9v4Gt5+wCJGPrvR3dnhDO5nlsd9FIsrx4yhrUYYrRzsjxozShjpHI1x8D6m7YvGMX/fhfjqZZdIQHbOpl5EQAREQAREQAREQAREQAREQAREQAQyEaDMoEkEREAERCAfgVLaWFzy9S/h5JPf6wjGxcVBWk4E6W1ciwkUjyuCtLrgtkX52iB15jXMWGS4OHBdaTCAsXU1aGluRoSD4HV09dLfOI6V6zbikX8/g7bOMCqqailAlzKvnwJvEYrLK1DOKGYXReI/3n0PWrvD2NbUju2NzRSFY1i77lVaWvhQUVrJqOQInnr6Sbz62gZ6MZfB6/PSV7kEU6dPd3ybexjpbIPsmWeyh+Kxz7yS3S6c8J4TcNUNV0lAznfydVwEREAEREAEREAEREAEREAEREAERjkBRSKP8gtA3RcBERgagVM/8n5MmjwO99/3kCMKeygSx3q6GZkcp8OFiyKylw7DUUYju2hrwYHuKNbS+Jg+xxXo6uhGNBJCkS+IClpSRBmt3NLcgWeffZGeyrW0spjCCGaWw5Bhl5e2GRxA7/EnH0E9heOuKCOHWX4xBenOjjaKw10oCQYRi/nhdZUyyrgPXbS12PjaRkyYMAEtLR3YvHETgrTZKGKb3H4/rTfCCNA3mQXjo//7KSw97pihdV6pRUAEREAEREAEREAEREAEREAEREAERiUBicij8rSr0yIgArtD4PAjF2P8+HF46B+PYkdDA0JdXQhToJ08faojJHcx8jfSE6LncbEjCkdpb+GmALxjxw6sDa2h/UUEJWUlzsB7nqJaRidH8NDjT2IMI4/9HFCvlpHMZlnx/PPL8Sj39zK/l/u9tM1obmnEa+vW0ye5lP7M/sSAf8UBjB83llHGPjTRLsOipGPhFvgZ0eyziGhGLEfCPgrTcQQYUX3uBZ/DvH0X7A4C5RUBERABERABERABERABERABERABERhFBCQij6KTra6KgAiMHIGZs6dTrC3CHb+9Ha+s3EiRNoxuDl5H3wh0h3so4sYcSwsbXM/r9aLIX2SrmDhlItasWIlAsQ/lVdUc/M4DH48FS0vwxLP/RbAswKhhD15+bjn+8td/IGLmxowkXvPyaqx5aQ3rLObgfeUUoSkUM1LZ7DGKi4oZkdyHnlA3k3rRSCHZ4/FRRPbxWABe1sXYZrz9kINw+idPw7QZ00YOhEoSAREQAREQAREQAREQAREQAREQARHY6wlIRN7rT7E6KAIisKcITJw8Aedfcj5WvbgSv7rxZ2AYMrXaOIpoY9EZ7UWc3sQ28J2LdhaRnl709nTQqoIeyRVl6KPYW8No5rKycseruKGhHtvaW7Hi5fVooHfyQw/9i5HDRWhua8d//vM8I51DqKuqondypeNh7Pd7EYnFEOkNM8o5jioKy23t7RSni9hdFyK+KKoZ2ez1+zB56mR84EPvw4J95+0pFCpXBERABERABERABERABERABERABERgLyYgEXkvPrnqmgiIwOtDYN6+8/Gdn30fTz6+DH+/92+ob9iOuHklx2gl4YlTV445A9n5PImxTMtKGDnMYffWr3+Vg/MV8ZibEcNFCEXCeJ5RymZNEWMk8eZNm7Fx42YKxBXOYH5FtLQIlpRyAL4g3PRaDkUi9Ff2UzKOIkwLDTfFaq/Vx3pKqytQN64OJ73/PTj8yMNeHxCqRQREQAREQAREQAREQAREQAREQAREYK8kIBF5rzyt6pQIiMAbQeDQwxfD5rv+cDfu++O96GX0sNvtQR9F3b7uXmdQPT+tKbwuD8rLq9DS3gYOvQcf99lgeh0dHY4n8muvbcJT//63Y01RWzsGFfRPrqmrRU0NI4vpbxymeNzW2gp3by9tMvy00og6nss+Rj37KT4H6Zd83HtPxPs+/P43AoPqFAEREAEREAEREAEREAEREAEREAER2MsISETey06ouiMCIvDGEziZ1hHHn3AsXl71Ml584SU8+/wLaKVnsoticZRWFwxRpl+xn4KvH92d3XDRB9nn8qGCEcevvbYRGzdscHyPA/Q/9jG5RRm3NTchGg45InJJaRlq62o4sF6R45G8ZuUKJ/r4yHceg4OWHIK58/ehZ3LpGw9CLRABERABERABERABERABERABERABEdgrCNDAM++Umia5nr5M/EbbjDgHz7Y/dZ9tJ/cl1zMtPf3pbJm+bsK35bH9tp5Mk75MplnQ3d19KdNpEgEREIE3jMBr6zdg2eNPYtXyl7BtyzbU1Y1FU0szojGLIgb6YhG8RCuLLkYXT6RXclVFKQfni9DGgoPycYC80vJSFFFUjppNBgfUs+XEqVOw7/77Yd8D9sOMWTPesL6pYhEQAREQAREQAREQAREQAREQAREYzQSCweCV7P9LnGOc+/qXtp4+R1PSJNfT8yTz2zLbzN8zDxyz9eRs6ZPrySV3OWltaftsSl+m7nMSpL8oEjmdiLZFQAREYA8QmDZjKmy2qbGhEe3tnVj7yjqEQhyAj/v+8fcHMWXWTCfSOEIbDK/Xg7qx4zCmro52F27s+/YDOG6fC8FgABMnT0ZNbTVqx9Q55elFBERABERABERABERABERABERABERABPYkAYnIe5KuyhYBERCBDATqxtZRIK7DzNnTB46+lwPgaRIBERABERABERABERABERABERABERCBNyMBs3zQJAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIZCUhEzohFO0VABERABERABERABERABERABERABERABERABERABIyARGRdByIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAlkJSETOikYHREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEJCLrGhABERABERABERABERABERABERABERABERABERABEchKQCJyVjQ6IAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIBFZ14AIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEBWAhKRs6LRAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAYnIugZEQAREQAREQAREQAREQAREQAREQAREQAREQAREQASyEpCInBWNDoiACIiACIiACIiACIiACIiACIiACIiACIiACIiACEhE1jUgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQlYBE5KxodEAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAisq4BERABERABERABERABERABERABERABERABERABERCBrAQkImdFowMiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAISkXUNiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIZCUgETkrGh0QAREQAREQAREQAREQAREQAREQAREQAREQAREQARGQiKxrQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREICsBichZ0eiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiARGRdAyIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAlkJSETOikYHREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEJCLrGhABERABERABERABERABERABERABERABERABERABEchKQCJyVjQ6IAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIBFZ14AIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEBWAhKRs6LRAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAYnIugZEQAREQAREQAREQAREQAREQAREQAREQAREQAREQASyEpCInBWNDoiACIiACIiACIiACIiACIiACIiACIiACIiACIiACEhE1jUgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQlYBE5KxodEAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAisq4BERABERABERABERABERABERABERABERABERABERCBrAQkImdFowMiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAISkXUNiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIZCUgETkrGh0QAREQAREQAREQAREQAREQAREQAREQAREQAREQARGQiKxrQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREICsBichZ0eiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiARGRdAyIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAlkJSETOikYHREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEJCLrGhABERABERABERABERABERABERABERABERABERABEchKQCJyVjQ6IAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIBFZ14AIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEBWAhKRs6LRAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAYnIugZEQAREQAREQAREQAREQAREQAREQAREQAREQAREQASyEpCInBWNDoiACIiACIiACIiACIiACIiACIiACIiACIiACIiACEhE1jUgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQlYBE5KxodEAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAisq4BERABERABERABERABERABERABERABERABERABERCBrAQkImdFowMiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAISkXUNiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIZCUgETkrGh0QAREQAREQAREQAREQAREQAREQAREQAREQAREQARGQiKxrQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREICsBichZ0eiACIiACIiACIiACIiACIiACKHn95AAACAASURBVIiACIiACIiACIiACIiARGRdAyIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAlkJSETOikYHREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEJCLrGhABERABERABERCB3SQQ6upCd3g3C3mTZd8b+/QmQ6zmiMAbQkD39huCXZWKgAiIgAiIwFuegKeAHrhS0iTXcy3t2O7OJm5bGbZMX8+0nUyXukzmH3PppZceyXI0iYAIiECCQLwLr65Zh/rGJjQ1pc/b0NTuQl0VcNO55+D23nk4dn5NZnIs57E7b8M692RMrwtkTpNt7+7kzVbm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bdhJwdYKSTM4R3Ird93JVLu3zFVH7vNRWL9ylW8tz12HpRiZeqykbJNZJfz4x4/CPfMj2CfDr30s3+73I1vtQ98/Em0Zzv059JYOL0e+/mUrtZBnr+Udbvnp9Y5EObnOQ7byi0oq05uibREQAREQgT1IQCLyHoSrokVABERABHaDAH/ieMLZx+Gf19+Gsz9x26CC9j3pfJzUb8sx6AA3Qh1ARyT5pWr60ddn+83Qhnw9nX38FzE7XyIdF4HdIPBWuA92o3t7R9ZhPmf3js6rF4MI9P/Kx76kjbvH4cJzjsnw66VBObTxJiWgZ++b9MSoWSIgAiKwFxBI2lLk6kpqmuR6+tKsI2yy/amz7U/fTu6zZbY53cLC0iXtKmRnQRiaREAERGC0ELCfMG7ZuMkRhv3BCowfPyHnzxYb1q5GvHY6xlUOJ356ZKi+GdowMj1RKSIwfAK6D4bP7vXOOdTn7OvdPtX3ehAIo2HDJrREvJgwZQrK/ck/916PulXHSBLQs3ckaaosERABESicwGiwsyjk00FqmuR6+tJEXptsf+ps+9O3k/tsmW2WiEw4mkRABERABERABERABERABERABERABERABERABN7cBEaDiGwiriYREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERyEhAInJGLNopAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiJgBCQi6zoQAREQAREQAREQAREQAREQAREQAREQAREQAREQARHISkAiclY0OiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiARWdeACIiACIiACIiACIiACIjA/2fvTOCjKLI//ptckIRTghBEbsIVEJFDEAERARfRXeUQ/COsggJGEAQCIipiMAEBlSCoqOAKqMCCXAoiyLVoVNSABJRDrnAkIIEk5CCZf1X31ExPT18zmYSArz+fpLurq9579a1X1T1vaqqJABEgAkSACBAB6JvycAAAIABJREFUIkAEiAAR0CVAQWRdNHSBCBABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQAQoiEw+QASIABEgAkSACBABIkAEiAARIAJEgAgQASJABIgAESACugQoiKyLhi4QASJABIgAESACRIAIEAEiQASIABEgAkSACBABIkAEiAAFkckHiAARIAJEgAgQASJA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IkAEiAARIAJEgAjoEqAgsi4aukAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAhREJh8gAkSACBABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAFdAhRE1kVDF4gAESACRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgILI5ANEgAgQASJABIgAESACRIAIEAEiQASIABEgAkSACBABIqBLgILIumjoAhEgAkSACBABIkAEiAARIAJEgAgQASJABIgAESACRIAIUBCZfIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgQASJABHQJUBBZFw1dIAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAkSACBABCiKTDxABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIgC4BCiLroqELRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgQASJAQWTyASJABIgAESACRIAIEAEiQASIABEgAkSACBABIkAEiAAR0CVAQWRdNHSBCBABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQAQoiEw+QASIwN+awNlDe/HNxo3YuHELkpJTcD4r7/rjYc/CjuUfY0vKBX3bWZ5FI57EpOW/6efx1xWha8Xv+hKt2KxfutRdKbx4HMl7D+GKXW1aHv5M2SP72KYdOJKWqc5A5zcSASu+X9rqWxr74vXIkbXruWMHsDclBSmOvyOpaSXX2haZuduYzGw9hPQsj4HLoy4HDh1Dhka+YqugqE8J3LPOHjqAg6l+GpvtGdi/NwUX8jyZFhsrfwgWvI3u2/7QY1VGcdkj5Or5lbheFA5WZLA8ps9tVln5K58Vu33RJeTqMfdFJpUhAkSACBCBa0Yg6JppJsVEgAgQgWtKIA/fvDMaH3+f7WbF1TLdsPDdQQi1uSWX6hOb/TzWb9iCy1daoWuTm3RtDSgL2K/qXvb5QsahXdh9qQF6tqrmlCHpys93nqsPrNqsLlcaz8/s34DYhM9gt1XES4lvoUE52XkK/9qHF8a+gdOFdtiCK8KenwEsAbqNnIFB7VysvKmTFmtvylNeYwL+4Gvm+8YWlPzV0toX/cFRqz210vxCnQVK1rw+EzuuuA+y9rLReGnWOOe44BddOkJMmenYyMVF94xBzKNt5HufQb67H5uM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9Udp5JVBpms/Ml1/rqbJo9mHRmQBh4EESIAESIAESIAESIAESIAESIAESIAESIAESKBkE7gYjMjSiMtAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAoYEaEQ2xMJEEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABSYBGZM4DEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABUwI0IpuiYQYJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkACNyJwDJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACpgRoRDZFwwwSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEakTkHSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAETAnQiGyKhhkkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAI0InMOkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJmBKgEdkUDTNIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARoROYcIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESMCVAI7IpGmaQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAnQiMw5QAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkYEqARmRTNMwgARIgARIgARIgARIgARIgARIgARIgARIgARIgARKgEZlzgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIwJQAjcimaJhBAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAIzLnAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgCkBGpFN0TCDBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiARmTOARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAVMCNCKbomEGCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAAjcicAyRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAqYEaEQ2RcMMEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABGpE5B0iABEiABEoHAXcaMtwaUcV5eqbmnNGSR4BjVvLGhBKRAAmQAAmQAAmQAAmQ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I0B3FqVvzCgxCZAACZBAERCQRlZpbD2dk4Gc3Fyxy7J0706ULizkDuTyIeE0IBfB/GATfgKVqtRCpSr+89IcqxrbuDSLT9lJgARIgARIgARIgARIgASKkQDdWRQjXDZNAiRAAqWZgDQkVwwpV5pVoOwkQAIkQAIkQAIkQAIkQAIkQAIkQAJFQEC6iWAgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAUMCNCIbYmEiCZAACZAACZAACZAACZAACZAACZAACZAACZAACZCAJEAjMucBCZAACZAACZAACZAACZAACZAACZAACZAACZAACZCAKQEakU3RMIMESIAESIAESIAESIAESIAESIAESIAESIAESIAESIBGZM4BEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABUwI0IpuiYQYJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkACNyJwDJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACpgRoRDZFwwwSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEakTkHSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAETAnQiGyKhhkkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIhREACJEACJEACdgRy3Dk4nZOBnNxcuF1uu+LnNd/ldiE4KAjlg8MR7Ao+r7KwcxIgARIozQRK09pvx5n3BjtCzCcBEiABEiABEiABawLciWzNh7kkQAIkcNETkEaEE1mpyBbHkm5AloMlZZSySpml7AwkQAIkQAL5J1Da1n47DXlvsCPEfBIgARIgARIgARKwJkAjsjUf5pIACZDARU9A7kCGqxRiEDIrspdC0SkyCZAACZxvAqV27bcDx3uDHSHmlwICZ9PSkJ5ZCgSliCRAAiRAAhcUARqRL6jhpDIkQAL5IXB071ZsTEhAgvhsiY/Htr1HkZWfBgpT1p2Gjx99GM/M2+5pRX/upO2C1HHSrq5Mdu753c176lgyTp7J60Ij5Ugy0rLzpmvFl+43SlwQ47Zi7mwsTjhe4kSjQAYEztF1ZtDzhZ2kcp27uVj0PLJjK7YdTPW1rV3vExLixbq/A8lp1uuHr3J+I6pu6vqe3/olpPz5XvvtMFxw9wY7hZlvTkC95oppPTHv+NznuNzJ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pDuhW3IKW8riVrKwHJN9rel0nDwQiUT2cjlfjaX2terMKKfc2pdbnY3qVdDpcmt3QetF8okAESACRIAIEIGSQYCcyCWjnslKIkAESiiBer3eQL0SajuZffcSKJbt2jFDkzvYbOZAjBvRLc9PNBip4bTbwO0McZKBkRySNIWks0QDChZVAmxpid7De2DHnOUYPnS5m5ZN+45BX8dyT24nCvugOOpc2MyofCJABIgAESACRIAISAiIy1JIonIEpWnEsHzPl47gG4+Xfni8/FiM43u1j3wJC55OXK6ClrNgMGgjAkSACBABIkAEihOBdFw9dwE3M7xRtUYNlPMRf0oVrA1XT5+ALaA2AsvrzeVX0qNwdFbShOKKJgG+vMLF8xeEGxU+Vn9UqVJVf5mVQjalOOpcyMioeCJABIgAESACRMAAgZKwnIWRfzDSNGJYvudOXr7xeOmHx8uPxTi+V/uQE5nBoY0IEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgQgaJNoCQ4kbkTlzYiQASIABEgAkSACBABIkAEiAARIAJEgAgQASJABIgAESACigRoTWRFLBRJBIhASSCQZcvC7awUZGVnw2bK5ZqhJQEU2UgEiECRJmCymeBlNqOsly+8TPxhLtqIABEgAkSACBABIkAEiAARIAL5S4BmIucvT5JGBIhAMSHAHcg3MxKRyfbkQC4mlUZqEgEioEiAj2F8LONjGh/baCMCRIAIEAEiQASIABEgAkSACOQ3AXIi5zd5xvOxAAAgAElEQVRRkkcEiECxIMBnIAsrthcLbUlJIkAEiIABAuwtFMLYZiApJSECRIAIEAEiQASIABEgAkSACHhCgJzIntCitESACNw1BDKzabbeXVOZZAgRIAJOAnx5njxttiTsWfkttkfdUBfD0iwe8SImrTqlnobOGCdghLlxacop70QZyiVTLBEgAkSACBABIkAEiMBdQoCcyHdJRZIZRIAIeEiAzdhT26J/+wW7fzujdhq2zGTciIvD7aR01TTqJzJw63ocblxPUklil61+ns00jE9AYmKyYn6uG5efO90URXoYqWeftri0VLv+avYB+ny0Ssir/ILnq8dPz36988hj+9Vuf1rsjZ3T1z8tkfUf1v+SMnOuY65fv8a00Eql1f+08tnP6dunJ0N3fMrj+u4m23Vs3LQdq3+/5FQl4XQk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4k5Y2ogAESACJY8AHy4993EJnEzeVrbecW6RMeevY61kJQlGZGvlV5J5Z+O07dPTxYex9dFga4SPVhkFLV+rbGPntPnp2a93nutgJI2Wrlrtr5RwY0Urt/Y5I7ppla9Xv9qlGzurVb6eBCP26cnQO2+y5XJg0xMMH+b49NAz65BpYktgaGXVd6gaK1uvHC0T85JXKlfPFr3zUlla4eQU+4xhtnPMzE7HyQOR7AWNNvgqeepVhbmzLeWnMQCryqATRIAIEAEiQASIABEgAiWBADmRS0Itk41EgAjkIOBt9mKP6/KbfLQRASJABO4eAl5m/iAWbXc1AbZ8Ru/hPbBjznIMH7rczdSmfcegr2O5ELcTdEAEiAARIAJEgAgQASJABPJIgJzIeQRI2YkAESieBMp6+eJmRmKuZyMXT6tJayJABO5qAmxWallv37vaRDLOTiCw+dNY/GVfXDx/AbczbPCx+qNKlaq0DAU1ECJABIgAESACRIAIEIECI0BO5AJDS4KJABEoygS8TF6oYCmD21kpyMrOZi98EpcDKspak25EgAgQgZwE+BIWfAYydyDzsY22kkGAL8ERFNywZBhLVhIBIkAEiAARIAJEgAgUOgFyIhd6FZACRIAIFBYB7mwp712msIqncokAESACRIAIEAEiQASIABEgAkSACBABIlAsCNDCecWimkhJIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIQOEQICdy4XCnUokAESACRIAIEAEiQASIABEgAkSACBABIkAEiAARIALFggA5kYtFNZGSRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgQgcIhQE7kwuFOpRIBIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQASKBQFyIheLaiIliQARIAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAoVDgJzIhcOdSiUCRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgUCwLkRC4W1URKEgEiQASIABEgAkSACBABIkAEiAARIAJEgAgQASJABAqHADmRC4c7lUoEiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIABEoFgTIiVwsqomUJAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAkSACBQOAXIiFw53KpUIEAEiQASIABEgAkSA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IUZQlzAVh59B/olZsJcC2wee2AtRH3lqKo9TgAIUoAAFKFCwBTidRcHuP9aeAhSgAAUoQAEKUMClQABuq1IDt7k8lr2dMggrg7HxGcnIyMwUN8pTp1fLXj55lVpOYSFHIIf6i5tgFoIAsnQraH3gqa8LYx95ajOPU4ACFKAABShAgfwuwOks8nsPsX4UoAAFKEABClAgnwvIIGaEf/F8XsvCXT32QeHuX7aOAhSgAAUoQAEK3GoBOU0EFwpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCASwEGkV2ycCcFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpIAQaReR1QgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCArgCDyLo0PEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIMIvMaoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAV0BBpF1aXiAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGETmNUABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAK6Agwi69LwAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCjCIzGuAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFdAUYRNal4QEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhRgEJnXAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCugKMIisS8MDFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUowCAyrwEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhTQFWAQWZeGByhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIBBZF4DFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUooCvAILIuDQ9QgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAAg8i8BihAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUEBXgEFkXRoeoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQaReQ1QgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCArgCDyLo0PEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIMIvMaoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAV0BBpF1aXiAAhSg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ZHv9ZTcO3r3ts3/x5nb9vv3t1Ac/ub36Zx43JD63/dUn/6x908PPaHtvura9+q03DXmt7dt7S/ufL3lm+4FXnt4+etWn2m99z4faT//R4mszPvHmf9e+7dmXtT/92HXt6re+sD3m5M+2Kya+7vjLv+sZ7Zn3P7s977WXtvf98ve1e1z51vaoJ/9g+97XXNr27r+hveyp17VveOLPtquGA3Dme+1Lf6r9t888oX3iY3/cHnbaod+dafxln310u/yaT7U/+skd7Z989y+0Tw2H46znKT/2jnE9e275eHvCZT/XvvE5r218ecaeWy5vn7htvddNH/lgu2W4/x37P9V+5onf2V55wQ+2y6+/pV3/mU+1J150r/He77//L9r3Pe1N7aff/4n27pf/UPvJn3rt+BUfl//pC9q3/exV7W2fvK5d9db/3J70lWcO+WuHyDuGPxj1jue237/6MYetb2y69rLv029oj3rS09oX/+pb2nW33tqu+sAL2oX33LH0Htptn24v/Il/2C5/1M+0qy57XTvhN/9le+y3/WH7D5d+sv35b/zT9hM/9uZt/QqSut7oIRACIRACIRACIRACIRACIRACIRACIRACIXBnJnB3OEQuv+a6eKt2nvvI9rQzLm9ve+e72jtef2p7/Fd+VXv8F5zR3vOud7U/e+Vft+983EWtDb+x/Hlf+MD27v/xwvbz/+XV7d67dg6nwvvHBjvb4kD1QLtHO/3M81u74Jx2jx37264ThoPVE4fYjsX3OOxou1u78EfbJb/3I+3UE05qD774Ee2c04bj6eE3Zt/5R69oT/yZn2+ff+redlM7uz3l27683bjn8Ldj947T2zkX7mon3/PUdsIJ+9rH3/e61h72n9q3POq+7dprbm+P+/s/3B53/Yvbuz9267CqYb7hQPvlP/0d7Z479g2rO3SM8Qf/XPutH/+OdvL+k9rXfMe/aO2WT7Trbtvb3vf6PxzW8wvjeq67+ZT2Q//uWe3yP3ptu/zWA8O83NP62k5e02/92Pvbr33muvYf//XfayfvvrntHg6Bzzxl4DSMT9+2u73h/7y0ff4ZO9u593/w8DUVZ7Sdw5H0pW96eXvis36iXXyPPe3Wdv7wFR1f3m7wL+kdGNY/sb5rbzv0Pv56OMRv535/e9q3PqLtuemmdsJJJ7V7nbj8Htqem9sXPOst7aee+kVt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QAABBBBAAAEEEEAAgYYqQBC5oY48/UYAAQQQQAABBBBAAAEEEEAAAQQQQAABBGIQIIgcAxJFEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBhipAELmhjjz9RgABBBBAAAEEEEAAAQQQQAABBBBAAAEEYhBIiaFMnS8yd+7cOt8HOoAAAggggAACCCCAAAIIIIAAAggggAACCOwLAWYi7wt1rokAAggggAACCCCAAAIIIIAAAggggAACCNQRgQYxE7lbt251ZDhoJgIIIIAAAggggAACCCCAAAIIIIAAAgggkFwCzEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAqn1DPwAAIABJREFUAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJpCRXc2gNAggkk4DL5fI3x+l0+tdZQQABBBBAAAEEEEAAAQQQQAABBBBoOAIEkRvOWNPT+ijgKZJ1K9dKgcdTTe+ckpWTLdnZmZKdmVlNWe/h4l+myZWT3vKXHfn3B2V090b+bVYQQAABBBBAAAEEEEAAAQQQQAABBBqGAEHkhjHO9LKeCniK1spDDz0UQxA5CMCWLT2PHCajRg6Rrs2zgg6ErpZJUegOthBAAAEEEEAAAQQQQAABBBBAAAEEGqQAOZEb5LDT6foiYNOvgRrZ4uyNZ6csm/2e3D/x7/Lom99LWZynUxwBBBBAAAEEEEAAAQQQQAABBBBAoGEJEERuWONNbxuAgC0lRVLCHtG6vfSzZ2TSu8uiHWY/AggggAACCCCAAAIIIIAAAggggAACQjoLXgQI1CeBpsfKI/eMkfQIfSrM3yiLZ0+V59+bF3L0948ny8LBj8tBzflOKQSGDQQQQAABBBBAAAEEEEAAAQQQQAABS4CoES8EBOqRgD1S9Liif1k5reSIEy+UJ++8RFNgBOfAKJPPvvu1HinQFQQQQAABBBBAAAEEEEAAAQQQQACBRAoQRE6k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AhSgAAUoQAEKeASOhSAyy1nwbqcABShAgWNWQP2pf5PW7Y+p8z8Wz/mYusA8WQpQgAIUoAAFKEABClCAAtUgoDKBOVGAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFggowiByUhSspQAEKUIACFKAABShAAQpQgAIUoAAFKEABClBACTCIzPuAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFQgowiByShhsoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAQWTeAxSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKBBSgEHkkDTcQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAgwi8x6gAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKECBkAIMIoek4QYKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhRgEJn3AAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCoQUYBA5JA03UIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAIPIvAcoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClAgpACDyCFpuIECFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUYROY9QAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAiEFGEQOScMNFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUowCAy7wEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhQIKcAgckgabqAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEGkXkPUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgQEgBBpFD0nADBShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKMIjMe4ACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAVCCjCIHJKGGyhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIBBZN4DFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoEFKAQeSQNNxAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACDCLzHqAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQIGQAgwih6ThBgpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFGAQmfcABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKhBRgEDkkDTdQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAAg8i8ByhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUCCkAIPIIWm4gQIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABRhE5j1AAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACIQUYRA5Jww0UoAAFKEABClCAAhSgAAUoQAEKUIACFKAABSjAIDLvAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFAgpwCBySBpuoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQaReQ9QgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKBASAEGkUPScAMFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQowiMx7gAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABUIKMIgckoYbKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgEFk3gMUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABSgQUoBB5JA03EABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIMIvMeoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAgZACDCKHpOEGClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUYBCZ9wAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQqEFGAQOSQNN1CAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoACDyLwHKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQIKQAg8ghabiBAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGETmPUABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIhBRhEDknDDRSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKMAgMu8BClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUCCnAIHJIGm6gAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABBpF5D1CAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoEBIAQaRQ9JwAwUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCjCIzHuAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFQgowiByShhsoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAQWTeAxSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKBBSgEHkkDTcQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAgwi8x6gAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKECBkAIMIoek4QYKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhRgEJn3AAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCoQUYBA5JA03UIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAIPIvAcoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClAgpACDyCFpuIECFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUYROY9QAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAiEFGEQOScMNFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUowCAy7wEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhQIKRATcgs3UIACFDhCBfKzM1HoAAxmK+qmJhwhZ2GHAxaYq3m0R6ZN5ChuewEO5NhkRzPq1UuNvIPDeg87MjNztBEm1q2HeMPhM9iaur8iO07NfLYOn6sQ/UiO7s9N9C7ckwIUoAAFKEABClCAAhQAGETmXUCBI1ygKHMLvvj4M6xM34x9OXYJnJqRUq8lTu59JgaeeQrqJhxGEaaasHYX4MP7pmLJwRK4EvrjufmjD6sgWzCC3N+/xoQHX0eJbDzj6nsx5vTjgjU79HVHoE20J73x/Xsw+8tMuA0puHve42idePR8DnJ/+wgTp3+m0QyaOg/DOyRFy1S1+9XU/RXBcar/s2XHslfmYsleJ+ICNNV3cb20ZujctQe6dm5x2H8PqeFH9bkpzsALc55Gpjs+QEBfNKN+s2bo0qUbOrdvA6tFXx/wXmE/ZqTWTUPrLp3RrUvXY+9/1wKouEgBClCAAhSgAAUoQIF/Q4BB5H9DncekQBUJZPz0GqY+udivN7fDgey9W7H4PfV6ERfeNh0XdG3g1+ZoX7BaJWB4UH4lq1Xdeb1VI7n9x2VaAFn19v03WzDytOOqLeB0pNlEK2wwJ8uumZKOHiqwFW3Ph8F+hrL/6S6bOwzGJUOoqfsr3ONU+2fL7cCOtVuxQ360CjZtTk/Hsq8WwW1siLHT7sTprQ+TgH+wwcq6aD43bkcutmzZKUFkd4heIds9DuovA84cNQFXnN2pXNvK+0nHqu+/wuuy5+mjpuHqs9uW64MrKEABClCAAhSgAAUoQIHqEzjc/vuz+s6UPVPgKBNw7l+DO30CyHGNOmNA766w5OzCl19/j3ztP+gd+HTJH8dcEFm/1K4ife7wfk9ILgt2m+LNiKmBpNkjxebwvnIcXSiBmrq/KjtOTXy29IC2yno/Y0BPb0ZyfsZW/JD+l0ZkcO3DCw9MQOwjz6FHvaPrcRTqNw3tO0tiyMaUpujdrTncPjH1nMztSN+6t/RWceDbN2Zhxa9D8cTkIX4/lvn1k9oOA04t68eesw/fr17v/bFt+RvTUbvpPFx4uGThh/ogcD0FKEABClCAAhSgAAWOIgEGkY+ii8lTObYE0hcv9P4HdXfJyrrBJytryCUj8cui1zF/4T+YMrbXsQVzBJ5tm0G3YXLdNdhdmITuvU+q9rrIRyARh0yBqARq8rNlatIfl40a4vf5HVuQgVdmTsPSv5wyfgeeX/ANuk3u79cmqhM7THdq3ucyXD0sSIawlCDZ8M3bmP3qMm3k9k0fYNJzaZh3bfegZ9L89GG4JKCfK8cVYMkLM/Dq97u0fRa+8S0GPuAfiA7aGVdSgAIUoAAFKEABClCAAlUicHSlw1QJCTuhwBEgIP9Bnr7Bk9nlsp6Bywe08R+0IQEnnn8tXnz2jqOqFqz/SYZYMpRl9YZocfitluvV6ZQzcc6ZJ6O2pRrTkI9Em8PvanFEoQRq6v6K5Dg19dkSE1ehDSUBFR2MCWm4YvIUpBk9n+vC37Yiu4KyD6Foj5T1qpxS0EmuQ+d+V+HJOy/1Powj74d5+G5P8D8XCdqP9NFv9GjUM3gslTcnClCAAhSgAAUoQAEKUKDmBJiJXHPWPBIFqlTAXVjaXfE+ZNmBpNjwu8/fvwWf/m8RftnwF0xJVhTk2tCkS2/85z+D0LZeYtCO8vZuwaJFi/Br+hb8Y3PDaLUirXk3nH/BIHRvXd9vH9X/ks8+kz9Z3gFjvBU2mw2pUm6j33ln44yuLfzaZqz/DC8vWodabYfguqGdsGH5+/jfouX480CBFOi0onH7Hhh12UUyrvInuG/zCrz/8adY+4fUvpUpQR4oOGToIOS5XH7HKFuw48/1K/Dlom+xYfteFKk/v7bWwYmnnI3hw87yC+Dq40o9biDGjTgBW5e/hZfe+0Y7d0NCS4y/43Ls+PAd/FHgQkLj3rhiRC+/P83Wj5m7YwWefXul5CBa8Z+rxqFjvfJBYmfmBjz14hcokjb9xlyFE+t7zlUfQ83YAOHeF1u+eQkf/3IQJvmT9VOGXVuuzqs7/w+89OzHyHLbkdxhCK4ZVFb/NNxj6H55e9Px8ceL8OPmbbDJPW9NqIvjTuyNQXIvBbsn9P30d1ViwAw7tixfiA/Cuq/CuEfcOfj0xRexJduFxBb9cdWwE4JmlpZd+2RcdN1YtEn1XPtIDfRzCe89jPGXdnS43l++5xn5Z9x3b6A6Plv+R6h8yZB4HE5uFIOFux0wOnciR77afL9mI/m+/Om9Z7F4x0GkNBmAq0eeXO6+q2h7JN/hkX9uKndQLZLbDMCt56/ErE//0HZ4+cXvcerdkWRmx3hLZ0DqUXOiAAUoQAEKUIACFKAABWpOgEHkmrPmkShQdQKSkdW6UyqWLD8gQYmtuPe+Bbhr8igcl1o+0Bp40C1LnsWMV38oW52do83nfP8ZNsqr//hZGN3T/0F8m7+Yi4ff+rVsHzWXk4Md65dinrya97sB91/m+bPkbd88iwdeCdJ/zgq8JEHfV1sMxCP3Xoxapdlkf29YqT2USf7BL0uB4lzfw6hjfI3pE5fi+oBaoj+9cR+e/Gq7b2PtgYKvPrnVb52+oAKb8++cjh+z1J+V+0xSa3Pll69qD7R7bP541I/1BPr0cRn210HjwvfwwdLdZTtlb8W2f2Jg2L0J6RIYgjw8q8Op3dC3eVxZGzUnGeNfPb8AG6SNerCWJcQz3vIzN+Knzenavq3+Ge0NIutjqG4bdeBI7ou0hinYnP6dNt71M55B6xcmIq30ekICtgvnzcCyzZ4Az3lnj9HaRXoM1f7Aurdx22Ofe/dXMznZGVj7zfvaa/R989C/RcUPKlOfj7uvv8avD+kl6H0V9j1iiYFzl1z7HZ5rf+IZC8rXuQ249vqz8CJxDhh0pYthjz/gHj/c7i/9RCP9jOv7+b5X9WfLt++w5yXYWRgi+zii70u5pzb9sAab1UP8MprID1cSRPb9TaqC7ZF8h6vziuRzE7ZDacNOgy9G2mczkOFyw/nnUmQU90Oz0nuysr5ytq/V9lPtktq1D/rDXWV9cDsFKEABClCAAhSgAAUoEJ0Ay1lE58a9KPCvC3Q+41TvGJx7vsO9N1+DW2c8h6U//w6bZCYHm3I2veMNIKtMswtvnIIZM2bgzluv8P659ddPT0d6dtnfZKt9fAPI3c65DLffdT+m3HQFOqR6vkIOlmZFq7a+AeRTz78Kd9x/P6beOsrbf8mOzzF57krv8MzmsvITKoDsjmuHEeOm4M6pN6NnI1NpO08tUT3vLPOnBX4B5DMvuREPz56ByeOGe4/jPUDpzG+fv+INIMekdcaVN03BXVPGo1stzzFMjjV4+pNN3t30cbkPrvAGkGs164wu7RpJQLgpujWrjwGjBnjbv//5L955fcaZuVbLPlTLDU4fGbK0iMEc/Pc8fQxq/+q0ifS+SOk4FBPOaaaGBWPJBsx46SdtXv2zd+XL+KA0gFy/zw24uKvnB4lIj2Fw7cT8x78s7deMsy+/1XuNG2klP8yonZDgPW5lM+HcV2HfI/IjTt+Ly679osWbyx1eXfvP1Q8MMunXPlKDcp1WsiLs8Zf2c7jeX2p40XzGg/FU5WcrWP/hrLNtW4bFezxPmnPHd0aD0ts2mu9L7SF+6qAhSnoE266OE+53eOD5hPO5Cdyn0uXYJlpmtqedA3b9i91nx8LSshh2ux3qVZCfKTWVX8WtMz/RWqn//brmwpN99uAsBShAAQpQgAIUoAAFKFDdAsEjF9V9VPZPAQocskBym6GYOnKXX3Dgny0rsEC9pPdOErS8bOQ5aJhQmqomf4L//vOeoJwKgt795ANlQc1GjTDjiXqYdOMjyJR2H369CV0ukhIEktn2v+e/8o516NR5GNJBz/xsjo4n9cb+jBwkNayntdX7Vztccdc8nNm6tG3z5pj5Yhc8MW4afipywr72JazJPKVc9mazPmNwx5gzvNllbR+aBdOEyfhBsoeLN3+Nv/L7oXVCLj58fXnpmMxynDne46TVb4SHu3XB9HH34Denf0mL9sNuwijHIhjbnYH+J7Uo3R+Y8Fga7r36HmyX9ttX/oLCYZ28x/c2kj8aHzV1Fs7uULtslcwZOvRDr/gvsbLQidzV/8PWS3uhXWJZauD6zz8qbW/GRYO7+u0b6UK12URzX8jgu428Gb2WTdbOPWfZPCw841mc32Abpj/ryUJ3mnvItSwN8kRxDJfUrsiTTEU19Rw7HaNO8wSj1TWeccogCSwBFou2udJ/wrKT6xbJPZIq1/74mC+xrsSJ7Ys/Q+aIjt5arWpA6Yu/8D748r/q2kdhUOmJBTSIZPzxZbep1ktYRtF89qI5b9knms94AEfYi2Gdu8/nuqKOY/xc7di1bjEenvOud5eWp5+IJJW1L9+tEX9f1vV2E/5MJN/hAb1WpYtf1xIAT6ktPx7KjywG1z/ILZTPeYDv30vm4PIlfnt5F1QA+a65j3vLw3g3cIYCFKAABShAAQpQgAIUqFYBZiJXKy87p0D1CnQ49xbMn307LjzzeO/DivQjbpQavpNvmIrNpVnFzsyt+OGgp5RDymnDygLIpTsYkjpj+Gl1tKUda9Plz6/lQVHZv2F1afkHS6fRPgFk/SgW1E+rpwVdVeal3n/sCWO8gV29pduYhstuPqt00YHA7E1V7uHKS/v4BXDdhro4rXcLvQvtXdU4XVM6ptgTRpc7Dix10C5Nz2Au21X1dfYll/sFkNVWt7EZ+p7sqTNhjC/Lii7bUwKmo6aVCyBr+0qfQy45XmtqcO3Dh9/9XrZb0R94Z+kBbdnUcii61Yv+67Y6baK5L/RzH3v/Vd777v2Z92DqtEeQX/pn++Nkm16yJNpj6Jg/ffY//JZZrC9q7+EGkMO1088p3HtE3U9DhnfQxqKysb9Jz/KOz+DKkPvbU/7E2GQgutU1Sm3eyD9/3g7DnIn2Hg/XKJrPXjTnHc1xwiQq1yzccy+3Y7AVBz7HpKlTMVW9ptyEqy4fizsfe8f7mXBZe+MW+bFBTYf6fRns8MHWRfId7rt/lbr4dqzNW+DNmJZlT452uUYhVxjkR4ann3kDuws8PzKFbMgNFKAABShAAQpQgAIUoECVCjATuUo52RkFal4gsX57XHCFetnx97at+OLjtySgtUcbiApszn78Czx7z0DYDuzy/sd67jLJ8loWeqyuIs+2vIzfvAGQM/qdGHoH2ZJ/YJ+3//7nBm+b0rK7lJtY7K1pGdihS/1ZcyVlnX2P069fl8Auwl4uKMhGgdR1zpWH/uVB1TIugH7evp2oYMr5p7bwXeU336jH+Wj58lotk3njR18j67w2WvB0769LvOd5/vDTyj0Ay6+TMBaqyyY/ivtCH66pfm9MveRHPPim1Mu278O+0jIqKujeu1FZfehojmFMqIPmJiMyJdPXuWeF1MVeAVVO5JxBg9D7xA5I1kpa6COp+D0cu2A9VHaPtDp1IBLf2qh9Rr78aDUu7DpQu86Z6Uu8mfD9LjxT+2Ek5xCcg40tnHWVjd+3j3CMovnsRXPtozmO77lEOh/OuYfbZ1ZGRtCmzU8fgQlXnev9YcX3HKP9vgx6oICVkXyHB+yKqnTx61uyo7fv8vwo5DbWQe3AtHhprErh3HdpR7h9IszZGVvxySvPYNXOYvwjf5ky9RYbnnxurNfU7xhcoAAFKEABClCAAhSgAAWqXIBB5ConZYcU+LcELGjQugsun9gF/92xFBPuWaAFdUtk/q/8c1E/IMk2JSUFNgmg+k5Wq1XW5cDcIEVb7VtPNNka0IHvjjLvW6KzOr9YfI/jW9M1YDhBF935O/H1++/jf0vXe4PjQRtGsjKuFS7o3wRzvtwJVVf5s/TLMKqLEZ+/u0rrRWUfntk+MZIeo24bjY3vPurA4dwXvgNsO+BCCaSu9XqqoPuQM9r4NvG7N8I9hsqqvf6RKXhm1kys3uvJoM/auQFvPy0v6eT0UZNx9dlScqWKp0juEZW9/58u8Xh9vQ0lf36OLdnnokuqAys+XKqNymVqh34n1tfmD9U53NOMZPzh9qm38z2HcD97vvuofsK5v3z3Cfc4+hj/zXd1719w8Vk+lRnMqN+sGZo2a4W6elmh0gH6nmP1fl+W9V7Zd3hN2RlQiOx/Ks4iVv9bZI2V4tE+PyomtD4R4+6fg8Yzb9bqrpvsK/DtlpG40FtiqabOgMehAAUoQAEKUIACFKDAsSlQ9l8Xx+b586wpcFQKJLfoixvOWoK53+z0np/bUZbSNUzqWPkurAAAIABJREFUFQ/W6xV7W5Sf8X3gUdne5duFv6Zqv3J8nslX6RByNn+Omx5W4UfPZDCnoF2HzjiubSPsWPyBlP3wr6GstwvnvetACaR+9bgWSF3y0fc4r3Y8lpWWDjll+Hn/SqZcuDbR3Be+Jhs/K/tzfbVeZb8/tmAl5l13qrdZtMcw1mqH8TNewoi/tmD5t9/iq6WrvcHq5W9IveyUWbiyp6dWsvdghzATzT3Sc8gQCSK/DfUn9gt/2IPOp2fikx2eJ4W1HHAB0lT9W5miNYjkdKIZfyT9+7atzvvLo+c5WrjH8R3bvzVvatwbQ84955D/6qBs/If+fen2waya7/Cy0UU7t2fVh1ptfLW/oXY3NA4IsFfYrzzUsv/QgfjgwU8qbMaNFKAABShAAQpQgAIUoEDVC0RfpLPqx8IeKUCBKhQodPhnGSc1PM5bv/bHlWXB5YoOmVS37ElOS3/YUlFTmCUoq0+rfgzef+G+P70lHvwr3Op7Vv7uGxTZsNVTc9hvL98Uv9INqkbt3Nmeh1upbMGrps7Gyy88gdtvuwYjBp+PEecd59dFpAvGWt20jFS1n3P727hl2gKtC/UAw8GnNo60u6jbR2MTzX2hD9C5fwVmvrfBsxjbFE1SPAHTvJXP4sPNeXozefBi5Peed2eZqd1clWsZh/kvP4eJl5QFp7duD3L9fXeMYD7aeyS59anycEVPDe7fvv4Mn//vq9KyLmYM6u+pmayGcagGlZ1KtOOvrF/f7TV1f0VzHN9x/lvzrkLJSK84wdY7tGi/LwtLa44b47xdlc0E+e6L5Du8rKPqm3Pnb8UTz3kevqmOct7lZ/vVwQ/nyNkHcsNpxjYUoAAFKEABClCAAhSgQBULMIhcxaDsjgI1IlC8E9PHXInLrn0I6fvzyx2ycMdivLjcE2DTM71MtVrihDhPsGvHkmexPjNItENqVWZmZnr7M9Vti7ZSl1ZN2ctfQ3rpQ/q8DWQm70AmbFIL19r8BBwf4+l/37dvYVt+YP92fPvOB95dTz2hmXc+kplkqYtbrzS7c+NHnyGrNKii91G450d8u8c/585ly0WeyzOeloOuQ58OnhIDnn3s2LwheB1Tvc9w3k8bOrRcs4ZnjkSzWE9gtdzGalgRjU0094UausF9AM/f/WLpWZhx/fT78cC9470/VHw0+0nsLPaYR3uM8kQWdDl7BE4uvY99/tK9fNMI10R9jxhSMHB4V+1o7oMr8M7Xm7T5wIcpVp1B8BOLevzBuwu6tqbur2iOE3TAh/HKqL4vJUjcsI5FOyvn3l+xJ+DBcu78P7Exw1P6RT/1SL7D9X0O5d1QQep43p41uP3GGd4fEo1Nh2JIl9pBDxeqHxWEfv75Zd59Kjictw1nKEABClCAAhSgAAUoQIGqEWAQuWoc2QsFalRg4/+e1x7cZSjaikcmXY/7nnoHv27ehh3bNuPrd5/Bdfe85n3I3YBLPA/2UjVmh15xijZO9af3j0yeiiXrd6CgwI6C/ExsXPk+po65HhMnTsTj3+7W2rmNaRh1safurNpn9oS78MPm/RI0tiM/cyc+fWoabrhtIsZNfQ25qIOhl3T09O/ahftvm4Eft+2X/guQn52BDx+dgnc2lWZH1+mPAe2TojIzJB6Hs9p7/sxb1SCeeu/r+H3/fmRJ8HvDN6/ihjue85Y8CHaAnb9+j4N2T3AzP/MPLLj7RrwtNW0PdYpv3gv9avv++bkZwwaWZaIeav/h7B+NTTT3hRrLr289jpWFnoBV++GT0aOeEcbaPTD1os7aUI3OrZjx1EptPppjqGDR1CuvwBi5nmv/ytL6gfzIsX7Rc94/ha9Vx+pZX8X/RnqPNOsx0PvDhj6Uc/7b06+sQTQGel+Rvkc6/nD7r6n7K5rjhHsOh0s77X6I+PvSgrYntNJOQZWNeeihBdiemY9ieUio+v6+4YYZ2gM+fc8xku/wvIAf5Hz7CXc+I301fln3M1atWiWvn/GTvC/59E3MnHqNfDfP9waQXTGdcc/tg0NmIe/fthrpm9Zj/XrPa93Pq/DJG0/j6usf8p6jsclA9G8V3f+OhHs+bEcBClCAAhSgAAUoQAEKlAn4RjzK1nKOAhQ4rAU6njcWvX+9FytKHzi2ffVnmCuvwKl+n2tx8UllNWMb9boCV23Yihe/P6DVrn310XvwauBOslwnuewhei3OHofBP9yMhVLn1SDB4WcfnlRuD0vpg/ianzUOI9ZO1IKyKsA974HybVWJh9vvvrQseOD7t+vleg62woJzxlyDDybN1wLlRZJ1/eCkxcEaetcZEprg+EYmLJYMZefuxZgwtuL22o6RjktqdZ53xZlY8tjX2u6WTiPQTQKrhzRFOgZEbqPGF+l9kbfja+1Bgtq5yQ8Ct5zX1nuabQZdg16fTtACzLa1z+Kd9e1xcdfaER/jrxXveAJOe1Zgzt0rpH91T5YVeHWae+DyAS28xy03E6FdVPdI6UENie3w355WPLeqQFujxnZWl1rlhhSpc7kOKlgR1fgjNEIN3V/RHqcCnvKbIj738l3oa/QSE/pyuO/RfF827/1fpL2+QftsOPd8h/smflfp4SL5Dpfi3ZX2F6yBXsZDfR8//ljF368JHQbiwVsvRm1L+b/S0Psp2LwYj8gr1OSO64xpt19c9r8joRpyPQUoQAEKUIACFKAABShQZQKHGOGosnGwIwpQIAIBQ2IzXDPjGdwx7mK0TfP8ebPv7pbUdhh5032YfdWpftmQKjjTZ+yjuOemi6V+beB+ZrTsOQDTHpmPS30Cz5Dg6LB7H8fNF/VBYmkZCf1YxpSmEjidgqemDEGS2iZtB972NG6/erC3Pq7eVgUBO50+ErPmPYAOqWXBg9iU5NImZYHrsn2A2OR473ZjaRNT/R6YP/sWnNTIv6BBXKPOmDh7PmZc11vbx5RUmqkq47r0jjvQM6A9LA1x/vjpmD/rGq0MgzG+LLO1snH5jlGfdzvKAjCDB/tnouptgr371kf1/fPsysZQJTbagCK5L+z4ZsE72l6qvvRtt/v8IKDWSnmHy++6ynuvfPbyIhRqid+RHANocc7dePC2S9E6Vb9Py2xbnjIMTzw1vsIHFkZsF8U9oiGU/nPSkOHexU7/HVAuM9mzMTIDb4cBM0HvlyjGH7GRjCPiz5429sjPO7rjBEDJYlArWR/NuZfv3bMm3uz5PvP9/gjV1m99FN+XiGuF6bMmlvvug9Qkv/quuXgg8LtPHVCOE+53eHQuMYgp+0r3O0V9oVZaM/Q6ZyTumDEXT00dETSADPkWrqgfVeKicfseGDFuCp59ZhJaJ1ZyUP3gfKcABShAAQpQgAIUoAAFqkQgnP8fuG8bfT7wXQ9Gq/W+L7U+cFlfp95DvVRhVbVNvQfOq+xpfZua19sEvuttOtlstmnSjhMFjloBt70ABTaHZOaaJWhiRkKCHnir+JTtsp8n7hn+Pqo8hZrUf9BbLRUfp1jalpQOISEhoXSuat/KjhHeOaj2hRKPjMQprBFLuY8Xb52AZQedcFnPwFNPXekJrIe1c/U0itRGH0U094W+b7jvkRxDnYdDblSnuufkPgr+c0O4R668XbXdIwGHjsQgYNcKF2tq/DV1f0V7nAqRDsONZecJ+Q6v/PvSc50dpd9llbfXTzmS73B9H75TgAIUoAAFKEABClCAAhULWK3W6dJio7xU3UdX6buaD3ypMIneRp/Xl/W2+v7qPdRLpWvp29S8/lLr9Hn9XVZpbdW7WqemwHffdVqDwH9YziJQhMsUOAIFDJYEJFYczw16VhbZr5I4cLn9wglu6DvFSiDEP1dY31J175EeI9L24Y40Z/MXWgBZte81atC/HkBW44j2XKO5L9TxIpkiOUa05xHJeHzb1tTxIjHwHV9l8zU1/miPE+l5R3ucypwOt+2Rnmek7fXzjeQ7XN+H7xSgAAUoQAEKUIACFKAABVS2LicKUIACFDgUAXng29fvfK31oGo+n9+9/qH0xn0pQAEKUIACFKAABShAAQpQgAIUoMBhJcAg8mF1OTgYClDgSBRwZm7UHjyoxt7qvJFoFqtX/DkSz4ZjpgAFKEABClCAAhSgAAUoQAEKUIAC/gIsZ+HvwSUKUIACEQuoh4A991QnrSZ1uPWoIz4Id6AABShAAQpQgAIUoAAFKEABClCAAv+SAIPI/xI8D0sBChxdAtHWJz26FHg2FKAABShAAQpQgAIUoAAFKEABChyNAixncTReVZ4TBShAAQpQgAIUoAAFKEABClCAAhSgAAUoQIEqEmAQuYog2Q0FKEABClCAAhSgAAUoQAEKUIACFKAABShAgaNRgEHko/Gq8pwoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClSRAIPIVQTJbihAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKHI0CDCIfjVeV50QBClCAAhSgAAUoQAEKUIACFKAABShAAQpQoIoEGESuIkh2QwEKUIACFKAABShAAQpQgAIUoAAFKEABClDgaBRgEPlovKo8JwpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACVSTAIHIVQbIbClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAJHowCDyEfjVeU5UYACFKAABShAAQpQgAIUoAAFKEABClCAAhSoIoGYKuqH3VCAAseIwM6du7Bn715s3rwV2VnZgNuFFT+s0t6zsrNk/Ra43QZ07twJyUlJMJtj0KNHdxgMBqSkJqNTp45o1KgRmjVrdoyI8TQpQAEKUIACFKAABShAAQpQgAIUoMCRLcAg8pF9/Th6CtSIwIYNG/De+x9h5ao12LplK1xuSFDYCIPbLQFjl8y7UWx3SDy5BDEx8rUi2zZJOzhdMFuMWL1GgswwwOl0asFkNegOHdrj1F6n4sKh/0GXLl1q5Dx4EApQgAIUoAAFKEABClCAAhSgAAUoQIHIBRhEjtyMe1DgqBfIzs7GqlWr8eXXX8trMfJy8uGGES6JHqsgsdvlkuCxrDEaVDRZPIwSLDbA4TB4gsrS2iD/p7apfcyyj0G1lXVqP/W+adMWef2GZ59/AbVSU3Du2WfjnHPPRo+ePZCamnrUG/MEKUABClCAAhSgAAUoQAEKUIACFKDAkSLAIPKRcqU4TgrUkMCcRx/D888vQHZunooNa4Fgk9EswV9ZlECwSV4Gg0kLBptMRm29JCNLOQvZroLGTjVQyUg2mSVwbNTau1TA2aWCyibJXnbBUSJZy5AMZunfIH1k5ebjgw8/xnvvfYCkpESMHXsVbrn1FtURJwpQgAIUoAAFKEABClCAAhSgAAUoQIF/WYAP1vuXLwAPT4HDReCdt99C9+7d8cicx5FfYNMyjmOMMRL8NcEoNY6NEgh2OhwocZZoQzYZJZCsAsEqwVgmT2ayChqbJIBskYCzCaYYk5S+UA1UW/m6UaUvJLCsSmC45OV0Oz1BaOlbBZplJ2Tn5OJRGcNpp56O9955V+v73/xn35YtSN+8WWo9669tOJBdUKVDKtm1CY6tO1Tutv/kLoA9fRPg8F8dcknaZ117JQq/2haySVVsUON17q9ag6oYF/ugAAUoQAEKUIACFKAABShAAQpQoHoEmIlcPa7slQJHjMCKZd9h8oSbsCfzHzgl2KuCv24tMuwpPaGSjE0q8CszBlNZBrLKPHar4sgSG1bBYhVEVrsZYjy1jxWAs0TSkiWIrALEJpN6GbVsZbfFLOFnlwSknZK5LC8JJpsMsTBox1C/bbm1h/dNvG0yHn10LubMmY1evXurLmt2kqDsp3NnY3mhJ3Due3BTk/549MFLUUuPovtujGRejpH34GwYJCbrvn0WLJ3qle1d/BdsM2XbPfNhbmMtW1/BnCFO+nHYK2hxiJvUeG+fDcuwSUj4T8dD7Iy7U4ACFKAABShAAQpQgAIUoAAFKHAkCDAT+Ui4ShwjBapBIH3tWgw//1wM/+/52L1nL2IMMRLIlYflqUCwvDul7rEWIy59UJ7KILZYLJ4MZVOMVutYmkg7T/BYlbpQy6pkhdrPKS+VgRwj+2g1lGXJKbUu1GoVlFYP5XNJZrMqgWEySLkM1Y8EmdVxVEayameUoPXfMrZLLhqBi/87FBvS18vamp1S65TlB6c1TPEe3Ll7Md5cuse7fCgzpkaevQtmPV8u61g5CM9hNRnqHH5jOqyAOBgKUIACFKAABShAAQpQgAIUoMBRJsBM5KPsgvJ0KBCOwOcLP8GE8deiID/fE+SVALKjpAROCR6rTGS7ZLKqQLKaN5tVEFgCvyqWKhFNh10Cv27P708q4Ot0SYkL2VdlHKsItJp3SgQ5NtbiyTKWbGTVl0ELPEsJC0lO1vrVMpalerIEjy0xFq1UhsScZbuKRKuH9hkRY46RZbW/CWtW/yjB5GF49oUX0Ou0PuGcZpW2OW7wNNw7rC3c+Vtx+40zkCHj3rl9E2Z8fL/Mu3D8hdNw1ZnHacf8a/lLmP7eWrhM7XDv1NMxb+pj2IsmuH3OA+iQWhaU1gfoOigm7drAtfV35D2/DEnjy86vXGvJBC78+HEUf/C7Z/f6HZA89XoY6yfo3fm9O3f+gIKXP4Hrt7+19aZTzkXStRcDKjCtsooffQDmHufB/u1rcP3uybi2jB6PhHO6a4F8v87CWAh5vJgC5N5/C8x9piD+zNZaTyW/v428+39A8sMPw9TYk2ld+OmdcGw7DSm3nIXCpQtQ9MKq0qPKjxxnDUbymCGecVXkUA3nFcapswkFKEABClCAAhSgAAUoQAEKUOCoFWAm8lF7aXliFAgu8Pz8ebh61Ejk5eVpZSsM8tA8lwRpHVrZCQMcDjfiYuMQHxuvlalQAV2D1JlQgV8V37XExUOKHku7EskilkCvPEAPElQ2xZhlPkaCzvKulbeQfSSorGofI8YTkDZJVrNZMpMl2izBZhcsEqCOkX5VFrNB3iWUKiUvpA6zjEdlMtsdLula5mWLW9qoWs1XXDIc77/5WvCTq8a1+3fuRGZmptRGTkeeSg+WqeMJHXF8mgs5uQ4sffdbWS8bJID53YcrUJyTA0NaO1hzNmkBZ4NrF9Iz8j07BvnXfNpwWG86Cc4fFsDxuy1IC7XKjrzZN2gB5Lhrb0HifeNhsG5GrjyE0J0dfBfH9l9gSGyLxDsnwXrzWXCu+gJ5b67zNnZl/42i5xbA0HQwkmZMgmVIY9hfewqFP2Z620QyE/J4hgQYkktQ/NnP3trPhZ9+KRnpeShe4wmIG9yZKHp7D0wtmqHkry+0AHLsmGuQeP8kxF/dS24bvaRH5Q5VfV6RGLAtBShAAQpQgAIUoAAFKEABClDgaBNgEPlou6I8HwpUIDBh3DW4b9oUCdhKuFaluEq2r0Eenuf2PvzOJBnDKigs9ZBVmQkJ6DrlQXrq5ZJSFLFxsVqJiRIpQ+EJFEuAWRVFVv9KX0YpR6EemmeStGWTZBobjG4t+KsylE0SSFbrVcazKnlhlOOqbGUVQI6RshUq61jNa6UupC/pTMs4dck4Y2JjtbGqYLdbUmjvnjwJU2+4roIzrfpNBetew8SJEzFz3kLkS7DYae6BISc2xmlDB2oHM9q+Q/oBKdGRtRHfHfRk9A4c3BN12vTH5ef0wennXoUB7RNDDswtcWNL9ysBKRWR/+BcTTWwsTNjFZxS0SN+4izEnX48Ylp1R+r9D4pJCWxL5QF8Qaa4vjcg6dYxiGnfUfofDcuFSSj5ab03kCsxXBjluEmS4Wtq2hHWi26HW5KaXfujCyJXdLzYvifB/fevUrNZbgHXDpT8LAOWYxV/slw7X1fe79q4Yk9oAbc9RzsbSzs5z5YdEdt3DJKu7K/dE+E4VPV5BaHlKgpQgAIUoAAFKEABClCAAhSgwDEjwHIWx8yl5okeywJZWVkYOmggNqena0E4ZaEecmexxGlZyNqylvErAV3JIpb8XzjtUtJCgrkmCexaJIjrkpINRslILiq2axnGKtonsWEJGktQ0xqv1TRWNY/VQ/RUSQuDpA/HSOaxRR6ipzKQVRDaJMFis0UCyLKzW47vcpdo293qwXpyHFXKQtVTVv251IyUsigpcWjHMEpw2+UslnkJVkvW8/8+fA8Ze3biiQVvICW1VrVfXrexIU7p3hx7tvyK3Tl2mBxr8MrX52HCgDNwctwi/FTkxPJftqFx/A8S0pWhS5D5TAkauw1JOOuSq3BWpSOUh+FJtm7yXVci95YFyHllHZJHp3ivl9rdnf+X1l+sz8P33MbGiB0cA/uKdBguaF7uKK6Dv6N42ZcoXvobUFgIFMi1SVPZ4GVTTOu6ZQsypx7OF+1U0fHMrXpK8PhnOPfLuTqWS/S6MZKmnY28OxagRGLWJbt/kR8dGiBGlbZwnS4B9W+QN0VKdbQ/CXH/OR+Wzi20YYXrUJXnFa0H96MABShAAQpQgAIUoAAFKEABChwNAiqFkBMFKHAUC6yVB+id1qsXfl27HkVSI0J/2SVga5ZgrAomx5hNEug1IU4yjWOkHIWqYayVpZAgsipZYS8qhso+thUUwClBXSmKLMFdu8R4JcArwWG1TauFLCUuzCpQLH2pzGS3BJTVu8Sa5SVfNxIAVvWS7VInWapZyD6eh+yZDG6puSy1kWUcKmJsLyxCSXGx51gqpC1BZpe8VJDZIcFst1sykiVb+ufVK3D5hYOwaf3aar+CLQddh/Hjx2P6E/MxuInnSXfrlqXDhroYMryjdvwti17Fc+97xtKqX1/UUlH2CCdj3T6IG90Yzq/nwr4hI7y9zVJiJMjkOvADcm96SILINsSPGI2kOyfDdFKQhlW0qrLjGZPaaFnOxRs2o3j1MhjbnCbZz5KdLMcv3rAJ9jXrZF1fz4MEY1sg9fFnYZ18pUTkf4bt4fuQM+MT7V4KOdwQDiHbcwMFKEABClCAAhSgAAUoQAEKUIACYQkwiBwWExtR4MgUyJYM5LGXj0bO/n2olxyHBilxSEuNk3kz6tVKkpNSgV1VakKCoiozWAK0WrhXBY/lpQLLKhDslBIVKsNYBZxVNrFbsoTVvFMiwW7JFrbbiuGSALJ6OeXBexL3lWCyBKhVrWV7sfTpCSZrD+hzSxkLU5z0IZnH0o96qZRmg5bWLHWStf5dsiylMGQHVVfZqQWOpQ/pT1KnUayOoxKVZexbN2/EHbeMQ46ca3VOBTkHpG60Hfn7t+K3TFWlWSZVg0KmZj0Ho56M05WzS7KUVUjUjEH9O2jbVI3kTT9/j29Xb0Kh2hTGFH/2RK2sRcGs5/yCpsZarbQawo4dZTWTVR3h4g/zENOppV/WsjqMI/0zLbO39mOTEXtKdwnYShA3N4wBhNHEIPWsA6fKjuc2pCL23Poofv1F2BeWyLxEtCX7Om6ErHtxDkqWS2b6WV18zsMCS9c+SL5ngdSL7gDXpsVaKYxIHQLHyWUKUIACFKAABShAAQpQgAIUoAAFIhNgEDkyL7amwBElMPyC87B79y4tQGyQmsNuqVPslpIUsZJtbJLyFd7ayBIg9jzgTtZJCE/VJVZfDi4JEKtlrd6xCvJKANcgQV8tcCzBYhV0dks0VwV7nZJWrNqrbVqEt0TqA8s2FQRWWcUOKY/hyVh2oKhIyirIvqrchSpPIXMyrhgJHEv5C3OsNr4YlQ0tgWj1wD0tm1mWVXs1XyLjlfCyjEyC37L+dwkkT7jykmq9NvuXyQMJrxiL6yc9gq3FKtgO9BlyJuKFxZDYDv/tqT/0TULzTYegS13P16tt2xeY+cTzePmpmfh8ixQgDmNSwdakqaPKtTTWOR6GFlIz+f6pcGzdI+Ut9iDv+Qe0QHP8gE7l29dvKddLHpwnZTZcWfLQukUPwfW7Gm+5phGvKNn4M+zp62Bf/6P2cqRvgimM48V266YFwlWZD70sR+yJfeX4njrSsW0ba2NxZSyDbeEyKX2RqY3dueegd4yROnh35AwFKEABClCAAhSgAAUoQAEKUIACUQmwJnJUbNyJAoe/wD2Tr5Ms3Q0wS/arRcpP2AqlFIQK8qqhSxDWIEWLrVYrzHESiJWYqAoAq4CsKnGhylk4pESFKmnhkNITsruWZSwRSWkjWcLSi0WylFUms3TlmaTchMR3ZSpdr7KbVeqx1Dp2a6Uq5OtGAtBG7YF5UtxCgq/qQXrFDqmxLDtKeFoblyqfkZSQALscv7i4UGunPeBPso+1+swWCwptNqm5rB7ap0YgR5Qx/br6e9xxw7V4aN6znvFU479xae1w4SWX45yuDbxHOWXIhXhu1Wvach95oJ4KLqspNqWhZ0b+TasjJkEmiaeWm0xp/RE7YimK397jKe+gWkjWbspdDyLviXtR8MCd2j4qGJtw+yyYVB1hyXrWmlk9WcLm1udIeYiVsD02XVuPBlJbeGQbFC31LOr/Gkrbe5eDjEffpt6NtVWFiS9gk5c+qXHUenpKpcczNVTlK76EsWN/GNWQpQNT2slS5uJdOc9TYKrnWQfYYX/nDXnpR4iB9bZ7VZK3TJE56D0Ec9a38Z0CFKAABShAAQpQgAIUoAAFKECB0AKlYY7QDWSLbxt9PvDdk3Lnaau26S+1Xp9X72pZX6fPB3v3RKE80ajAeRX4Vvuo9WpevQd76W062Wy2adKGEwWOGYG3FszDk4/ehcyDkiFslxIRUmv47zwJyqrSEaWT+kAmJSbAGm+VDF+LBI4lC1kyfUskaKxVtZCPmXqAnapDrD7G5hiVMSz9SR1kPYtYq0QhZS1UyQu7PHBP8pIRY7JI8DkWquCDCjZr9ZFlXj2wT9VNVsFh1adFgsHJcvwiu9Q/lrIYxZKprDKkVRazCmjHxJqRl5/n+bBLsFnLOzbFIC5WBZELJIgsNZmlLrMUkUAsHDDKskMGdN+cpzBs1GVyxJqd/vpmLu5+5VcJbDfFg888gGaxStgzuWS8hRL4TChLVtY3Rf3utkvAWC6CO0q9AAAgAElEQVSFUQLuZVc1RHeqrYq+inmNTFV5PK0vGbUlIejQI3II2gNXUoACFKAABShAAQpQgAIUoAAFDk1AkvRU9tZGealwiAqkqPdgL/VnuHobfV5f1tvr+6v3UC8VCtC3qXn9pdbp8/q7rNLaqne1Tk2B777rtAaB/zATOVCEyxQ4wgW+/fpTPD3nPgkKWyQeK9m7UsLCKAFgo9EhtYhVaQgV2pXvClU6wmKVdmYJ8MbKu0EeeOdAfn6uBIUlL9holuCzRStHoVJ+S2SdUz3gTmUzS9DYJYFgifdqX0OxcRatTrJa53I7JHtZgrou9dA9l1YH2KjSlb0xVamlLIvFhUb8nX1QvjmdkkksY5KVxZK57FJP25Nju2Wd+uaLVYFPlf0sY1dt7XZ1TlL+Qv7PIA/1U/WZJXStlekwSLtpN41HsxYt0KN3nxq5kn8tfw3PL/oJuzKyteM1PHOkXwBZrTRaJYBcxaMxqKCq0KhLUOkUIgBb6X7RNqjK41XSV0QO0Z4P96MABShAAQpQgAIUoAAFKEABChzjAgwiH+M3AE//6BL4fcsGzJ89DXGSeZxvcyE3rxB1UhIlMzhGMoRNaNy0OVLqpiI76x/YbCWwxtVGcZFkBkvgtqjYhiKHTatbHGOSgHGJyhCOkbrEnuR/u11lKHsCyKr0hFbUQgK4MSrY6zAgTtqpUhgWCVLHmY2IlUCvejCfKkGhMptVtrF6QJ5TgsVqvkT2VbWNVXDZ5SrRgtUlEqC2G+xS4kIexidlLSSJGraifJk1SkBbAssqO1rm4+Pj5Xc7+YFOgtuq9IaUX5Y8W8m0NUjwWsp03DZ2NJ5753/o0OWEar/AWX+skgByvnYcU5P+uH10x2o/Jg9AAQpQgAIUoAAFKEABClCAAhSgAAVqUoBB5JrU5rEoUM0CLz3zqNQRtiE23iJlIkokwCpZsBIQlv+HhLh4DLlgCM45fyAOHDiAjIxMKSdRFw/eNxP5xUUolHIS6gF5sVIuwiQZx0VSjzgpJV6C0Cla5rHWrwRw1cPtVFBXPTBP5TSroLEKUptlvcUSLwFkyWw2qTIWRi2IrKodu+SBfOohfHYplVEi4youKtYyilUOsV4iwyVBZZVXq8pd5Ml2h7S32d0olFrINnmVSETZrrKOpZkqi6HqLJullIZFTk5OTwLI2r+yHijIy8Wc+6fhufcWVbM40P4/9+HOnpmIq5uGpvVSq/14PAAFKEABClCAAhSgAAUoQAEKUIACFKhpAQaRa1qcx6NANQls3ZyO37du1DJ2JQosAV318DoJIKsMYUsM4l0mtOnYAcd16ITGkukbn74FHVq3RaOGyXAWHkS8lJCQWK1k+EoAt6QYLY9rjq6dOiI1OUnKYEjQWIK7qixFUUGB1C8ukqziEslWLtYCuCqoHCdB6qSkWnI8s7wkdCxVyePi4rQMaBV4VinHLlXHwlmC/JxcZGVloaRY+pCAtUPWqcCw1LKQYHYRCmzykhrLBUV25NgKEStlKmySbuyQTOgSCXTbiiRALsdUR5eka8l6NsIqwWuJK8tLAs2SpfzLqhX4ccUydK/mshZxqXXRRl6cKEABClCAAhSgAAUoQAEKUIACFKDA0SrAIPLRemV5XsecwJuvvQCjZBEbpD6wqhVsiXUhRgKt6sl0qqxEvMUkpSdMiLNakXsgTx5iJ0Hm4nyMHXEBtm7YhKVLlmLv/lwkJFsRn5iKdp3aom6dFNRKToZVHnLXsHYtVYIXhXl5WrZwkb1Qsoudkuks/cqD9BKsiXJMqwSXJRVYjunSsprjtEBygtQEVoFkGRnc8jA8h2Q9Z+7bhyzJiC6SrGOVReyQILVLy4AullIcNuRJsDpXXvszD+Kfg7nILixCsSp3IXWXVc1mrZxFaWBadtWCx3EWlSEt83J8ldWsspHf/HL5MXcv8IQpQAEKUIACFKAABShAAQpQgAIUoEBVCjCIXJWa7IsC/5LAJx++i2x5SJ0lLlbit3GSMSwPyZNSECpLV9UQlsRgyUw2S4BVZSXHIVkCwy5Zzvt9q2TRWnHyoAH479n98eZbbyE2yYqcwjwk16mFhKQkWOPjkJqQgAYN6qBWbKz2YL1iCQKXSORWxXJNMVL+IiZO5k1apnG2ZBnbHXYpXWHXspYLcvPgSC5G7dp1pR5zHaQkWqWGsgON6tdHZkaGjDtLK5ehylTIwCXL2SElOezIs+UjMysbVuteiQrvgTPLDZvTgUIphSxh5FJpz7vsBosEos1GecCeBLXdRjlx6fD3TRvwyduvY8iIS/+lK8PDUoACFKAABShAAQpQgAIUoAAFKECBI1+AQeQj/xryDCiA5596HG06tZcAcawEUqUshB2S+SvlJ1T0WOUmq8CqSg+WQK9JAqxJEkg+mJuLJAnYJktmcoEtG82atsCN46/G0mXfIjMnDi6zRSuH4SwuhkmCyMkSTFZtjZJhrKpSuKVfdbwSWXA43IiXTGSz7FMomcUqC7lAgsB52TnY/sc2bN+zC9slyFu/QUN07txZ6iwnIylB+qpXD4nyHiPjdEqGcZwcwy5lLVSQ+mBOFuL/3i8BYSMccixIlnWR9HtASlzIkvZSlz5RIuWp8fJYPRXElnIYUi0ZLjmWKr2h2r0wdyaDyAqKEwUoQAEKUIACFKAABShAAQpQgAIUiFKAQeQo4bgbBQ4XgScem4k9e3ej/fGdJKhrhiUmXntYndkswV+p7WCU4KpRagabJQsZEoQ1Sa0He5EDJTk2CQrHSUDYgNR6dZAnD6OrXbcuBg08B7/v+BNb/9yBPfsPIDklFbXllRgbp9VGNqkSGdKHW/pzy7tZSmXESWkMdawYCd7GSCDYIEFhq9RDTk5MRkpqKjL37sHBrIPIlWPs2P47CmvXRrzUUI6VB/KpAHJSQqIWFVZBb4s8PE+9x9osEpi2SomMWCRKdnRcjgUpyVIWIzNbAsUSJJcIcWq8bIuTALJaI6U1nPIwPjlFbXJLVrJ68N/fYvPsYw/h2lvvOFwuGcdBAQpQgAIUoAAFKEABClCAAhSgAAWOKAEGkY+oy8XBUsBfIFseTvfqi89J8FRSgyWAa5LAqdEgAVWTzEtwN0YFj1UgWa1XD86TMhIqO1dLJZY5swRoSyQbOa5WbcRIzeOs/X+jXloaOnVojwMHs7B7bwZKJPM3SWoax0vbWIkfm+Q4bunXECP9qZRk6cdpl1rFhcVSbiIfOVIz+WB+HvLkoXm5uUXIz8uBSR7AlyqB4Ab16mrB5uzsf1AkWcvxUn4jPs4Km6qrLON1SW1j9eC8AwcP4K89e7ArYx9+++M3/PbbNuRLTWR1zGSzUYLkBgmAW7TsY4NkH8te2nmpoLF6mVRtDDlRt4xVFvHOgqcxcsw4JKfWUmcf0bRvyxZkSn/eL0uDFY1bNkOyPLgw7KloK6aOm4EMuU4XTJ2HCzskld81oM3Qdll48Op78JtkaF95/zz0bR5kH72XgH2D9q+3jeA99/cPcOODnwB1B+KZR0YgPsxTztu7BSt+SUc+ktG1Z2+0rSc/EgRMruyd2LDLjjadW1fY7/6/tmBfjhv1W7VHw4TyA1DH+vOAXbZ3Cbo94LBRLNqxY/MG/LEzEyVy7dt064aWAedTVefrLj6An37choade6JpavlzjWLw3IUCFKAABShAAQpQgAIUoAAFKFAlAt64SJX0xk4oQIEaFVi9coWWQRwbH68FiVWg2KgCqhYJGktQVtVDVg+rU7WGDRJQtdtVqQm3FgQ2JybAJdvNko2sHsgXn5os600olDIXMbJ/7dQUFOXmo17tBlrpCbOUwTBL6QizZAm75d0kQWCTBDjVg/HyJFCcsTsDuyXwa5dMYGNSKuod1w5/bPsVPy1fjiSTA/USLejUuQPSGtaXh+2ZJWNYsqEdBqnNLA8DNLhQKGUz1AP1Dkod5O07d2Hbn39i587dEggGmjRtAqO0y5Cgst2uAsYqVKxCySUSNNfixFICWQ7sjbu5ZL3KmJYV8mbLz8cvq1ag77nnR3Z93AX4dO5sLC9UgWr/6dxx0zHylCb+K6twyWUrxF7144BM+21V2HEUXRnjwt8p46fXMPXJxXLdUpCEXCx8700JnM+RwHltbyf7Nn2GKTPf0drcPe9xtE70XjhvG21G/D+Z4fGvde4kzB3Z2W+7wX0Az981C+tKnBgkwfnhwYLzfntEtuDK2oA7bn1EC/4bzClwO3KAN4D+42dhdM8GWmdVd752fD5nKt7Z7JBz6SRB5Ap+NIjsNNiaAhSgAAUoQAEKUIACFKAABShwyAIMIh8yITugwL8n8NUXn8rBJdCoYo3qTQVwVZawKhMhAWGDqicsmbpuOGGS4G/mgQMoyMuXYLAZiLNIwLdESkUkwWkrgEOCzQV5BbBLG7MEeY0SwLTExEipCrNWdkKFbWNM8mA+yUg2xMp2aWORZbdkLNuLixAjx2rRtAVsMoZW3XvB0qAp1m/LwP7sXMSlmtG8dQeJ5zols9mGWGsqUpMTkZScAmtCkvYgvINS8mL79j8l83gHdv99AHmFDliS5WF8ifGoX6+2BLwlZFziQs4/2do5qbCjUT1AT8YludaSXC3v8pIkbBm7rJd3g6EURoLJy79aFHkQWXpPrSMd7ZYZmVKSzcjJlXRpmT5/9hn07PYAWsaqkYQ/afZhNDcktsODD03F7px4tI8gOKr3L2Wl5WGKYRyogiZWs1Xb6iqqoJHPJoMrAy899Q0snUbgiUkDEQ8JAs+8Ge898iLOfGEiasl1WPfufXhs0XbPXoZ4n72Dz6Y2EN8dwIEl3yFzRCfUUz8MlE45237UAshqMYI4t757pe9GazJad+mLq8aMlAdQxsqtVno+r3yFYT1Gw+quuvPdu/JlLYCsBsX/Ya700rABBShAAQpQgAIUoAAFKEABCtSwAP9btYbBeTgKVKXA1199KRm4khmsgqcqq1jKQkgIWaKnRgkaq9IWEvqVyLJJ1pulFISaryUPsouV2sm2Jo2R/+c2pEpA2F1UiL+37YBNgsEq0FurYT0JQkugWeopx0uWs1kC0ypIrMJ3BunLIFnIBqmRbJAyGZJ0jCbN3EiMl2ByoQSr46V/aZci2cp1E8xo27wROhzXEM0apSFJAs9JSQmoVSsFqZL5nFqrDuLr1ke+ZB/nbt2ClatXoaDYiZjkBqjfsC5Wr14NU3GO1GN2o7Y8hC9bHtTnKJEgrpZZLWOR0apJhYpVprXkWGvLEk2WGsmeJWWg/m/ZN194tkX5b4uB03DfiLb4Z9PbuHXm5zC4dmHjrny0bJqFuVMewzZbHEZMm4bTVNmJoj8wd+qT2rqR996L3mVJuFj7zav4YeYP2GuXa9a4N+6eNhYtgpRpQPFOvPXMK9hpj8H54yZLv7FI//J1PPPWMuTL9YZUgm7cvhsGD78cvRqXnZRv/4htiqtuvQ192nvKeKjM3U9fmId3v//Ts4NsHzXhRpzdwZNV68zcgNkPPorN2VJbOq4dzjnF46v3rmfm7kUT3D7nAXQIKLlg27lRK79xzaXnlJaoSMD5Y0bjg0kvYd3OYinJIfeMBGbPGDsdw1tsxvg7F+pdh3wvlIc2Wps2hX3XGny75TK/bONfFi6Ue9GTIeybK5771xq8/OJH+PmvvVq/dbsOxKTrLkbDmF146MZ70OSyB3DZaWVZ5AfWvY0Jj2/HPU/c7p8VHdsMV996RdnYDAno0LkR3DvlsyFTVZ2vK+tX3PXMCnQdcB4yl3xedjzOUYACFKAABShAAQpQgAIUoAAFDhMB/wjBYTIoDoMCFKhcYO3atZJZnA2nwSw1kSWwK/8XIwFelYGsaiCrwLFJnj6n4o0GeQieCiqXlEgpCC2oKlmqKUkocJbApYKt8qrTqDFandBNHq7XACm160r94FQ4nZ6H1WmdqMf1yYPrpHPpQ15yDJnRsp4TpK96jRsirVkaGqhyFZLhvGvdT+jSuB4uuWAQTurUEVbJaq4lNYlP7HUq6krd5QTJgFZlMwxS41hlT+flSxa0ZBo3a9UWo64ci1h5KF9uYQGMErC2O0pQXFiIIrUsGdUGyUCWIXuCxjIGFU7W4qqlbCpwrAWPZaUqd6HC34VS0mLrhnWVw4ZooZ5LqKbUui39M0XdhdidnS01oCXr2lt2osS77u8cT+ayZ29g24oVWgBZLTv3rMBdk15HoYoJB0xuR6GU9ciQEh47tX5zNr2LR978Tgsgp6SkSGsH9mxZgwO+Jy5rfftH8S68MPNR7CxWWDl44dbJZQFkdTzZ/sbDk/HJ5v+zdx0AUlVn90zfmdne6W0pSxcFBBt2LMTEXn5LLIkaY6KxlyRqUNFEY42JJkpiiyUxKhbEAqIIAgoCS28L7ML2OjszOzP/+d7sLLvL7MwsIKJ8N3nz3rvv1nPfeytnzpyvjqR4Ce6/OUwgyyUTfZZnflIkh62pvmx52NqBBPo3JfWt+ZEDv6+CqnLeB6Lebknm1J6GeriyMYzDyFOvw6UkcIOe2kiRmHvCi/xRp+G0QhvefXU+Zx1OofpVeHVpIyZfeia6ySK3SZXrvsZG1yBcc/MtuOnKyahe+i6mvsy1d+Rj7AArPnhhJuoiuFFdPPeVWTBn9EePaGR+m3YBH4qWbeMXJeHMvTJf9v/s3Y8h0Ptc/OL8CfQEb9ehnigCioAioAgoAoqAIqAIKAKKgCKgCCgC+wUCSiLvF8ugg1AEuo7ASy88z2BzPga3Y2A7BrgTD2DxK7bSz8Fmod0ESWSzeDuQbTUC65FIbWhoMEhjodwcokhOSWVdFiEh7OrZkxYUubSpcMJClbHYTCTxOEBfhCDJ52b6zoo9hhC2IvgV4tkgkUlOW9mWKysT7hwqi+nl6qLFQ4Y1BLe/AW5fI6wkgF20xQixs5qyMiPwnZ1eCyGS0iE/2yXNm0pJc15ed+Rk5cLBeUw64jCMHT2CQf4Go2ePXsjNy0czy4ttRZj/CyuMjcFwQC1cchhIDpFNEBPxTWYJVpCxv/uff4ev78bnxs8+wIy3puOW25+kEzPbJFlamB8OGEeufpcULU8K5R56IZ56bjpuvWiiUcfcMAufbarbpb6Q1m3b2LJslVFGvIZ/fNUdmP7ck5j62/swuaC9d66170n483PP4aGbf2SUF8X0wvX18Gz6HHMqudhUMP/svr9i+vTp+PkR2UaZt96aj5p1nxsqYsmYcu0DbP9RErft7SbSBh6Li088EkdMvgzHD9k1WB4jH5KMLgWdSNqkZpAH3qPkd2XhsCmTEFz3MtbXh1nWksVvodYyDCeM6L4L8dr3mJ/hoVt+irFDCzFswnn45QlUsS/6hmS9HeNPnwxz42wsojJaUrB6Nd7a4seks4+OGeBPypYsfAGv07P45Itbyu6F+Ra9/SfMrkrGrTdPRpLPs8dYyTg1KQKKgCKgCCgCioAioAgoAoqAIqAIKAJ7G4EWbd3eblbbUwQUgW8bgW++XswuQlTw1iEpM506YbKmJI9NVCYzXB1VyDbYqPRtIqNnI4EqCl6fX9g9sXkQf2Ned6eSYw7yGPQqbqAHsQu2tGT4pRzzbVQPi4633uM12nDTVsIgkYWxpShZFM4hUROTxCY7Le4XCFFKaU92IZ22E80NVLj60tDsc5KoDiE9J51B+uxGu2KtQUMHtsGxMSBgdnYOrTNcVBw3YtGns5FMv+SjDjkI5aVbsNXsQyqtLwLLl7NTC+vJsGQAPAr/3yCKJVuGZjKUqcSA5LgQzjJOidC3ZOEXUmS3UqhyAV55bWfV4y77Zdj6IEG/4EjNI48fb5CVhUcfh27PzzOUvbUJsKyFk44DZvyDU67B9PtvxHRaUVx83bU0lmifTjn3FMN7GP1HU6H7ltG+lNixPkxCi4L5b7f+HH9rU81XWoLN60qNnIBtHI4dk2sAOfmM4/G/P7zZWjJkysYx51+GY1pzdj0QklvsTNqm9lR02yuJHftrm5FdeCTnMwv//Xwrbjk+A++8WISs425CFtXDHeFrKluHj2bOxCcLilDZ0MgvKvwwZ4ctKNIKjsIh1hl4ZdY3mHTZWGxe8CH8/ELgqNGcc4xUU/QuAwZ+grxjr8M5I/NaS+7JfJu2zML9r63DjxkUcDCDC5qCVvpIk+YXz3JNioAioAgoAoqAIqAIKAKKgCKgCCgCisB+hICSyPvRYuhQFIFEEdi8cSPWrV7BwHYkhknW1tIKQpwm6AYBBwPfSVA8UR9bhQQO+GghTCWuzQS/jxraAAuReQ2RVLWmZcBfXQl7Shoaq8rgqamkWjiEBp+X1LGQsFQvNzXRhzhgWEoICe2kBUYoIKyzHyEJskclMrlgQ1Esit9QgApP9iG2GXb6LbsYGM9EaiwlMxWpOWk8phqWBHKQXrfmpCSDEDYC9pE4k+B/oh62BDlmXz2cbDeJctz83FwSfWHPYxm3jD/s92zQyWyT/yMZHWJwQLKf3PPYUAcLoyx8qFw3Yd3KImwr3oTuvfokCnVrOfEvvvCkQlpwZNEXt5B+z0YHrdflIPJCFdKyLjy0dtf35MScexQevy8T/3rq75i/qcqwohAyufQ3D+D8QdFaFr30zuRrsZMQJXK/4UPg5vqZDLKSBGvuAK7feqOwyeZsnQcQDqy3s5XYRyHajnRMIWYJybvrlY4lOz/nnUvl9yD8aKILf3njY5QN7YdPPc34xXEDEfKtaVcxsGMBfnHjEwhmDMdZZ16E/t3SseaN+/FaSbiYEOFTzh6KL1/+H8p+OhSfvFEE1/grYwZIFAL52vtfRuqESzH1otGt/e3RfGlj8fZfXjbaWkaf7G3vmNDkXYUyPkMfPTcVawadhKsunBhXHd06GD1QBBQBRUARUAQUAUVAEVAEFAFFQBFQBL5FBCKcx7fYhTatCCgCexuB4s2bDGVwemoyqmobUE+1ZdHKVRhY0JNdhVXGEmjPQq9hUoVUAZPnpdw4SK9iw9dYGFYqeh2ZmfRUJsHXSDsFkp4OBtETZbKfP6sXMtlOktjpcpFI9sJNQthPcjhAQtki1haWMBks5YTAFbbWJLJfGYEQzSShk5LdcJJEttMew+pOgpk2F6Fmksy0xxAf5BC9jUMtPs3i5SyDkOCADrsZDnolO9iniRYZtR4HtjP4ntG2oT4mWS1cOO06pOeQqJmDQjJLpkEp81Pa4yfnJ+Sy+CKHSCSXbi3eLRK595hJOPqIXdlaIUkjPrYVtWKKnIJ1C2a1BL/jaYc0e9ZiWlAchbL5c1pVwokIT73VJfCmDcfVd/8ZV1Ytw23X/9Gov3p1DbDrsDr0CvQY3J95y4iBCydfcj3G5QhyFJA31MDrSoN/rbCs62n18DmtHs5iELwULPnsM6NM6weJzxWLv8L25kwcOm7oLgRnaq9hsIXewfz1VSgYGY4mWLPuSwOLgmx3azO7e3DQ8afDPPdfuOF2tpB9EkZkcw5hV4rWJjcsfs9QFk996Ab0avFKXtfBvrnPYVOQ8tJ9ePGFF7G0sRnnHjektX7HgwiB3HfydbjrvJ0EspTbo/nyFwM9hk/AoX3F0oXKf0qQk3xC2vM+Nznh5Jc+be1MOo5LzxUBRUARUAQUAUVAEVAEFAFFQBFQBBSBfYmAksj7Em3tSxHYSwgULVtK4pbKV3JoQraSJcXs2Z/ClTQJhQXd6DlMiwpedwhRS2LVRIWvEKl+KowDogJm5ZCofrll9OmL6nWr4Qy5SQL7aDVB8spuQW11Pa/b4PMF0Eg7Cx9JYPEjFhMKM72NgySKTQaZzJ/eC1lH9XOIJLMRqI8ktYWex+4kGhtQqSz9m5zyE32SZSSBQ5RMS1lRSZuoGhbLDIsQwRybjWOWenbaZDgcdphJKDNuIEpJIjcHw4H+ZNwyhzBpTSKZVhnsmSMjiS3tkEDniIwUzuMhy4t6eV3Rcow59PCWq4nvDKIvSnGzOwvdOZ4yYvHJkzfhs6c5S06zY4oQzWXz/oHLuUVSwH4YDh9Af2Hh1juol9ueF73xBzz8MdXZ+b1QQPK0RDypmXKyhHhs2KWuXGtb391i47CwuQZP3PBTvNSrN+y1pSit8WEy7RTO7TW8xf7Cj2d/ew2elQY6pMa172Hao2F7i6rUx3F6YXs/ZlPKIJzBAHgvPzwN/W//DfqHVuPBhxm0rudJKBTCdw+Ts89YTHC+iHmeQKcexjm9+9MW4gN8sWANkgZkYNXHz+KVDVRby/crLcmUPBhnj3PhH7PmIuiivYXgHyUFdnxmKJBD5l6YPMqOJYsWhf2w+cVB3uAx6JW+J/O1Y8J5l2FCm35NwXX4zaX34KiLr8eUgqQ2V/RQEVAEFAFFQBFQBBQBRUARUAQUAUVAEfhuEdjzf9V/t+PX3hWBAxKB2tpa4UpJogaR7LAik4rkZjKXc+fOg6dRTHpJpJIwJf/aal9hp7VFwO+Dl4Hy/CSDqR9GDQPtNVMBnNK7j+gfyUrTCoPEbQqD5Fls4e+YmrxiZ+Ez/JQbmhrhafLw3M9ge7QYYFA8sa4QUpiyYqGXydXS59jCduxumF3JJI9bNmsS8+3hcqwXavKFyWQhQ+nFYWd/LpLHJpLdTiGROV5ROFsp07XS3znAOs204wiwrATYE/VxUMhizlFsNITHNjTInLckMzPEwoJXw+c8luCD9XW1xnlXP5JSo/vUij3C5XdehJyWfoVALjjseBw5OEwCphjVaC3CoYSSBuPUkw9t7TpoGYyb7r047GFME4mI8jSsTG5/njHgYKOep7QY3yzbZBwPO/ZSXDpJ2NH2ZcMdtM+TcV7zyO9x4sgexuXK4s0GgQx6Kw9Ks0OI1dtuuwDJLfOQwIE/vvAUY17mFj7TkZYfbpqf3bKi4WHHydfdg6N7leGpe27ETX94GpXdJ+Ke287ZRbVsNETFLe2wYyaXK7ye4fJpOOmsobzVeuHYVg9jK1LaFEkbcCxV1Em0ipiKG264Ac/Mc+PMk/XeFE0AACAASURBVIci2MG7etzJU4wmh556dAv+uw6joaY03C2DEz41bRoeevRRPMrtsScfxbwSkTfv3fnyOxzjHjA8yXcdjuYoAoqAIqAIKAKKgCKgCCgCioAioAgoAt8ZAm3+6d3pGNqWiRx33EfIaMlvu0l+x/NInuw72+R36HJN9h2PhdmKXJPjSJmO+0iZYY2NjbeznCZF4AeDwEP3T8X0p5+E10silk+YhRYQ2yvqhIvFwAE9cRqJsYaaMixbvhLLV5ZizEGD4XKnwOHOwcNP/g1ptLHweBtRsr0EvXtSkUpbidry7Vj/5RcYWtCfBLIJxevX471ZH6OB5G2vHt2QQVuKLNpT5GdnIdnNAHwObinpMDMYnthSiGeGKIONgHlCLjNLiFx5A4SoPpYiIV8D/FWV9GGuIVlmJWHN3/DbyVBy/HXVtfjyy4Uopt1Ej/x8I7iYifl+EuUVtTX4csk3+OCjD2m/ISS1kNWsxvalCzOJ5yBtNQJCSBOQJNpyGF2zX5NsJJLtYpfBuv931XW45Jc3fCv3QgNJeZPNDRe58lhJcBCLYre76xYPXiH+2biddePwr50OQfr3CFTNNo6h42B9aPQyGKMjevvBRtaFG7wFYibBQtLuzDFmwwleDOMUbX7hBsoWPosbHvsMNzzyNEak8ybaw/Rdz3cPh6/VFQFFQBFQBBQBRUARUAQUAUVAEVAE9gABl8s1ldWXc5NgTWRnjL0cd9zkn/SRMpHjyHmkbKS+7DvbRDEXuSbHkU3yIseRPbOMsrKXPEkd923zjAIdP9TOoiMieq4IfA8QWPD5ZwYxKqpcsX2wUcWbneamstiLorXFyFywFCOH9kXIlgQfiVURCosql9QrrCRmhWAVlbLbSZ9iqnkNRpZk7h/+/CjOO/kkpLmSsHXrJkMdXFpZgcamDDhpcdHQZGbwLx+cVCvTLpmWFFQj09OYRsZhIllkwUwmS/idFTLx/UfLCtkCtMUQArl+x3Y4SOaGqKAmP8xGRD9sNojf/v0HYMuWzcbcLDQzphEH7ZOb0dDowfaycmOchlqX8xYSWeZjCGd5HFYdi6WFUMZsloQ22WUeBzlfC604hNQGvv5yLq9+OyRyooSpiSrtXbhbjiqR5CB5TOj3KEn/BgcctSE7XFzfzpLZxbF3drFNfqJYtKmyVw9j4RSqX4Unn5wD84ALMGQvEMgy8O96vnsVPG1MEVAEFAFFQBFQBBQBRUARUAQUAUVAEeiAgJLIHQDRU0Xg+4CAoZskSSpB44REDdIrWL5UyiCR7CmvxtwvlsArvsM0E27wNqN4WwV2lNNP1+3BmzNmIiM1FWlpSehD1bEQsbJZKBXeXLoDDz3+BOBrwvEnHIf09NSwlQT78rM9UT77aCkRFAsL+iJLgDyytexbgvhRFyubjIT2FyaRRZMlDvr8CDRWw0QbDc/2MtiYbU+h/3JSEoln8Utm/5S1mlneTaVzcnIKSe9mOII2w/fYS38ID/vcViLWAjLzMIFsITEsSXJCJKIN0thglI1sctNCTosSOWyzYTDIVCVrOoARaFqFX1x5nxHoT+w6brjq2N1Wcx/AKOrUFQFFQBFQBBQBRUARUAQUAUVAEVAEDkAElEQ+ABddp/z9R6CElg9Bkq5BkrRiHyFJCNPM9BSqdptQWd+EBVQjR9KKdcVhspVk7+cXXUo+1YK+vbLxzofvGWpfoxxluhKsTqxjQyR2vSSmaxrq6TbhhJ+EsYkB8vyU8zaTQJaYeCa2YfRKpbOJZDKdio0yQgobPsVCIpM4DtE2A42NVCxTjUxPZht9l/0ktmElCS6cM9u20v/Y72+m5QUVyvyfeMIGKHX2kbhuIgldVl5OJXIlywndHaCyWNTTxqiNMRjcMc8NipmktpyHNxLULCoksynsb4HG+t3zRI70pvvvMQJJ/fDbu+5Eld+K7r17I9XeehN9jyelQ1cEFAFFQBFQBBQBRUARUAQUAUVAEVAEvn0ElET+9jHWHhSBvY7Ali3FSHLYqPYN0HqYQfRIkpICFlcJ5GQwkB17rPd4DbLYR4LXSQuE2vpGkrRWjBo5AuvWrKNP8igqjdONsRlaYpLCdqqDfV4P69NCwuOBnbYGPhK6dXWN9EROhdNpJ4kcYF6A3C9JYhLIZvHKILFrMpMYFusKRkozSVC+EIllKoqbGYyPEfGYbaM62Iyqqmos+XoJlq9ahVGHTcCAIYVIrq1HfW0dqiorUbJtM/r06cP2WdcfQqOnEVtKttOn14dkq92YK6dLIrlFfczeDTG0zEQmTrVxiB7JQpRHAusJNW1c4sf6NSulpKYDEgE78voMQN4BOXedtCKgCCgCioAioAgoAoqAIqAIKAKKgCKw+wgoibz72GlNReA7Q0BoW9lEbWvYOPDMENpSdesgWZvhdiDVZUNKRgY2bd6CPv16Ycmy1SSagSMmHAZPbS0GDy6AkypjYVeN9tiYjSSyv55MNK0kxGc5KcmO0u3ldKlwk1BO4t6KusZ6Eth2pKSlwWYQtaSgxU6DhDFMdkOFLG0absRia8EjGjHDbGeQs5xsVJZXoXD0aBzxo9NoWxHCSpLJRSvXoLS0FCXFG5CVnWnUFbLaQwK8vsmLTVu2Ga7zhuhaVMiS2EeYJJZDWlYIk8z2hFGO5If9lo2irBDOD9PJRgv6oQgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIpAAAi1sTAIltYgioAjsNwj06N5TaFNjPEKgGiSqUK9CoHJvZkA5izDMQb/h+eqto4UDGdgAidmFCxfRjoJB7qgmNpN5FjuMAGlkaU1IZLGrEI9lN32Ks0hCNzY0UIlcR1sJEsIkkb3NflQ31MFLawo/t1BzgEJjL5tvRsjv4TmPucHfRFEwLSr4ljHbGaiNKmJ7Sgp6DxuGnH79aFXRDGuSA0FGylu/ZRPmL5wPC4O2OemLLGpiserwsf2yimr6OVdQG80pmITulpG23XjKWZukI8GC8xYf5PCeyLQ5lnr9Bw2WCpoUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEEkRASeQEgdJiisD+hEAP+rkGxNOhNZFU5f/DClwGnmO+zcZgdySV7RQWJ7scIFfL/CAGD+xP2wkvyeF6WkV44CfRHCBh6yXBzOh4BoFr5z47Kxvdu3eDlWrj+vp62ls0wdPkg92dDB+J5ibaXDRzI+NsEMWiABaiGj5PeAv4DXW0mQpms82JAG0vGhoaUVpVgTWbNmItLTmWrlqJUlpYDBw+gtH2HGggaWxxuRAgue2hirmWXsql9EP20C/Z+NkE+wq1BMczvKDlWCbLzaCQSSCbSSaH/Zo5HI7J2AiOQbCTUHalpLWipgeKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgC8RFQO4v4GGkJRWD/Q0CIU0nihSyKYyFPJaAdSVIhVyXLyiB1kizcW5nBywbxbJCqVBo3kRT2U1XsIDEb9gw2sY4VLqcLOS4n8nNykZ+bRyI5H+s3l6KJthKiQm4OOUhKuw0lsV/8lknQigpYCGqxkxBuO0Q/YwTpj8zjeiqZG+rqUbJ9O5q8XlRV16KOpLTNnoSyHTvgovLYYrPD4XRScVyO9MwMZKamGHOopx/ytu0lxvwkQwL/mcWywpgrG2eSubJHgyQWb2YecST0ihYFcst1CapnBNbjOal1qaBJEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFIEEEVImcIFBaTBHYnxAYOmyEQR4bBCo/DJWtMUCxeyBhTOJYguiJMNhCJbEhFWY5USpbSPiShqUyOIBUBsuzMxCejWWdDgfS09KRmZljXMvLzkEmA/INGzKE515U11TR1oKK5MYmksF+qoo9FC5bSESTLGYgu6BYW5AkDnEvSmex0mjyNOCrxQux5Jul2LJ1GxXNTbDR1qJ3zz5Io6LZabEhLzML6bTOyKVfsrC+G6lSXl5UhKqaOpRX1aCyqkroacPumHy3MT+DCDfYanmFGa7LYfLaOG1RIws48n+DSZZ6TCSWR487LHysn4qAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAIJIaBK5IRg0kKKwP6FQFpGOknVgHCirUmUtuIoIX7GsjeSQaSyEAlXIY/9JGFFPSxlmkn2ilZX7CpMvC6Ec49uPbGurAxJJHhTqUZ2O2wkfLvRHzkJW7dtgdtpRyoJ31raS5hJQlc6K5GVmQm73RruN2ChhQb7s4Tbr6gspwJ5BwlvC/r06ofsjGxYgmYE2HdVUzMyCwbDRMJ7a8k2dMvMo3rYguraKlRU7GBQwExs31FOX2Sx2xB1sXDCHHGLnYXsTfR+DgmZzHrCFodkk3LcG/8zgOCRlGnJFwJakyKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCikDiCCiJnDhWWlIR2G8QSE1t8fU1VLYkk8W6geStWFsISSqEq3gDSyA9C60fQiScRZ1MBhlN9BkO0hKiqamJe5Y0CFdg04YN2FG6HX4qjYcP6gsnzZTtVBp3z83FhPHjMePd91FDdXKVuxb5JI6d9C6WfqWNgJ8KZPZpsVL9LNYWDIDX7KNaubaB1hcp8NDComHbdjRuKEXI46O9BsfGUHm19XXcGlDFbSu9kpNzM5FNOwsJrOdh4L/SskrORdoLy4kjns9iXyHGFKEg80meS5KQgqxoHBk7owxJZhLN4XpSCnCnpIYP9FMRUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUUgIQTa6BgTKq+FFAFFYD9AoHDYcI4iTJqaaUcRDiRHspV+v0K6hkj+NvPpDsqZRZTIDHInpsgkZ720prAJwSyKZAbIk3bqGfDuuWf/GfYb9nowcnghkqgutpCgddqsGD2sED3y87Fp/UZUV9cgib7JkpqaPPCyvBDS0nYo2MwdSWwSwB5aV1SVldPiwgeHKKE9zciyu9EjNRupoIVGvRdp3PdIy6KvsgXJDKzXry9tLlJSkN+tB+xJLmyvqOK4ac3RQhqbTVaOlmS5EOPsP8RjUSEbCmT230w5tVgmC6EsJQwvZJm2FJM9qeuCwYXG2PVDEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFIDEEVImcGE5aShHYrxDo0as3LR4YEE+YVEncB4W8lY0EMR0jyK0KUcwyPBa1rpzzsuFhHApQiczAeqJU9pHkffnlV1BWWorctAxkFRSgGxXBYlEhgfZsJG7zaJ8xcfxY/Pvf/6HFRBkqe9UgJdkJk5WELvszk6WtYlC8tPQMBBl8z8K+rCRtvVQajxg6FHn53eEprYKlkYpoaxLVyB7UsT9fgL7JnEeVpx7+JJC4NiMli4H8tpWh7+AChGZ9xqmFg+XJHIUGFjY4bFvBOQk73EIYG5YdxrlRqkV9zPKsLymiRs7r3ss41w9FQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBSBxBBQEjkxnLSUIrBfIdCrd19IcL2Vy5cafsFm8UPm5qcSOMjNIHbJr4r3sQTYE9cKI8AeZ+Fp9CIzKwepqRl4+qmnsbW0DKUlJcikRUYNg9ilsB1HErXBNiqbhXwmD5tMT+Qhgwow5pBRmD9/EXLzWJ+2EOKn7PKxT/oWmykB9jU2wEYfZQuVykJeDx05DJnZeWRwzSSPc9BcVo1ArRcBE4nh5CQ01vrhoYIYKS6Szk0wO+wImK1wpGei37CR8JEgdjH4noWD4FBIllPtbKyEKI3ZgeRJavE8Fu/lcJDB8AUpxZlzIz6s23/gUHTr2VtqaFIEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFIEAElkRMESospAvsbAmPHT8DKFUsNywrD2piK4DDBSgsLcqfhsxDJW5Nh8ZBks2NA326wm+3oXzAQNrsNC+bOI8lsN0hjv5e+xuRl/fRPbhaylu2ZaBshPsdWWkpkZ2dg4sRDsWlzMb6YNw8ORxJ8PXqgmcrj3PQ0mGiPYaMy2UcSu8lLQpj1U9LSZSAkokOwJlGxnJsGX1IjKreXY1NdBSpraY2RkoyA204i2IUGBusr3lCMk8+9EO7c7hwbrTqoVhbCOETiOchNCGWRXgvBLQy3mHiIdYXojeWKKI7FzkKSBNSTvg1imVkTJp1o5OuHIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKQOIIkN7RpAgoAt9HBH581nmUGpPkpd1EhCQVAlXIW5uod6lAFrsHs8XBIHhpGD1qNPr16svrJJVpY1FXU0f7CCfcrmSkJqeSdhXa2QQPA+KVbC+jVYUdZgbXM5FsZmPISEtBdyqQJ08+ET6fD/O+mI8tDMRXw0B5ZTUMnOfzoolqZBPJ6tq6BtTUNcLb5GWgvgZaMntpc0H7DH8DqhsqUc5tU9lWFFeWos7fyHo+mKl+rqhpRL0vBJs7jUQ2CWAhxkM+csbi3dyShOAWtjzMmIcPDD65hTg2JMthMtkgmllCcBFV9qGTjm9pRHeKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCiSKgJHKiSGk5RWA/Q2DYiFFIYRA6Ed1K8LlwstBGIglWm5u8rwuZGT0xaMgY5OX1JiHrJPnbTK9jBxz2JNht3Nuo9CW56qVyWEjbIO0pgrYkrFq3gTYZDGhHItnEIH3ipyzcbGZaKvr17o2fnP4TFFORPOezz/HlV0uwrbIKQRLSfpLWNfUNSHIno47B+srLKuCn/7LIkYUQtiQ5kJ2XhwED+mPw4IEoGNAP6RkMr8dxSP+bS3cgj3YT2bk5qKa1ht/v45hC8FNvbTgjm0gmcyDkhA2tsaFCptLYODc45LDqWDyajTzWjRDJbhLlAwtH7GerqMNRBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRWD/R0DtLPb/NdIRKgKdInDsSafg3Rn/JaFKopf/s9KaImizkDzOgZCmLlcK/FT2+mk5EaRKOJUksJN+xSGql61UGXsY4M5CktjGIHohEr1BIZLpK7y1vBbby2qRm5VNtlZUwLTIIFHtpmdxfk4GhhUOxlGTjsTbb82Ap8lHwjmA6uoqDOrfB6muJASbmlBVV4ue3XvARoUxWW2SuUL8ktx10OfYZKeqOQ9utxulrBegaropRBsMlphyxpno3r07yehGktg2jokqZo5AOGLZyEWTR5bvv2TGQSOPww4rk8VfWWTKPBcVtphcSClRIk+cdBILaVIEYiPgbWhAgF/CuOiwokkRUAQUgf0JAX0/7U+roWNRBBQBRUARUAQUAUXgwEMgIl+MNXOhZyIpchxrL9f2dAszRCJfDG/SXuS447W2+W2PI3Vyb7/99iMjE9C9IvBDQkA0vrM//JiK5Ezk5vZEfn5P5NFLOC01k8SplQpjBtYjKexwONBIcsxKUtbtciEtPQs+fzPtJXz0Q3aA/hcIkGQWJtZM1bEQzkkkXgcNHECVMB8r42myCgVsWGc0s15eXj4VyjasWrUKW7aWoIkWFxYSzTZ6JTc3k/Zlv06X27C+cDNoHxtm4DwnAs0heGh3IaRzJbcdleWoo4VGcWkF+g4ehslTTiN5bEU9y7z8r+dhDdImg0R1kH7JDo5ThkOBsdG+qI1FmRwyWGSeGHvAzjGIctogmTkOIZQvvPJX6N1/ICsknrYUfYMSvxvZKTsZxWBDOZYu2wQ7CXYnPaMjqW7bSqza6kVelgWfvvYy1pl7oV8OCfRoKdSA566+Cv9uKsRxQ7OilUgsb2+1k1hvsUvtT2OJPdKoV02hcvxn2vX44/T/YcZbb2BL9liM75ParuyOTSuxvqQMleXlKOdW5wcyUtztynxrJwni236MJRxnHUyuDJLiO+9VGWP7cuWGlYzNkUaLm/bl2s/Hh41FS7Bo8VKsWV8Cc2oWMsTPvNPU1fKAPEcfz/4YX6/eAmtGPrJitt9px7t/IVSDFcs2wJLR/vne/QZZM8G126M+9tfKnHvc9+G+HntkPTwFOG5Y7r7ufbf6S+T9tFsN70+VIuuyp38XO87p23imO/ah54qAIqAIKAKKgCKgCBCBqVOnfspdGbcwudL5XnRykTJtjyN5ie7ZTGs7chxJUj9a6iw/WtmoeapEjgqLZioC3w8EJhx2JMYfegQJ4QDJWzcy0zNRV1tLEpi8cFIIvspKI6ie6JQdJJAt9BYWP+NNmzaQeE6lGtlBuwobvYt9LE/rCtaTN5jJbMVKWlpsKSlFQf/uBjkckqh7JHeTSDpnZqTCQu/jIw+bgH79+uOL+QuxbOkK1FZXk0AOoX//frTVMGNHdR3Sablhrqyj2plKZnKqdbS+qNi+HV6Oo7KuHvXse9OW7Vixdj3GH3cSLOLBzPGKxQUNMGiHHDLGJOOSyRjnwh5zLqKcNrWQ30YAPSnJS2azMQu+TSUgH5CcnIKRYw+VFhJP/AftrEf/jNlZp+Fvf/gRZFSSVvzvETz0/maMv+IBXH14XjiTZf/74IP40Hw8/vrgRMx45yPUecbgmMJM43rN2s8wr7YAk8e0lGcuXUfoFU0Wsgtpb7XThS67VHR35tSlDr7Fwls+fg7/K2rGBTffi1H2Oli69WjfG9f4zfsexKee5nb5oaTh+O2fbkBBcizytV2V3T6Ji28nY5QOh0++BtecOxZOGWaMckdccDsuP2HQLmMMVi3Dbdf/ESV83ky2NN67NcALwHFXP4ALx++8ryMVu1pe6pUs/BdueWwWn9k0pKAWb736Ik675WGc3vIcRdr+Nveh+mJM++ODmHzL4zivkHZBeynFXbu91M/ebibaO6crfZhCFbu8DxOpv6f9xuvDWI/2j3K8Kt/p9bjvp90Y3beNcbwhRet/bzwnHdv9tp7pePPT64qAIqAIKAKKgCKgCPwQERDlriZFQBH4niKQTIL2pCk/JnFropIYJH23o8HbjGbQnsJsQ3pmtkEiN9G2wkqVsNNhoxeyFQEG1jMC7JFx9VLha6Ja1xwQXpYkLa8F2NiOyhosXbESDQ0eg4wVPwoTSWQryWNXkou2FU707dGNWz6OmXQYDj7kYGzcVIKP5nyBWZ98hsVLlqN4ezm3Cnyzag3WrNuMopVrsL2iGiUkkoup5NxeW4+y6kas37gFZTuqkZUTVoVJoMAAN79wwVQwi3uFfGUmthQcJv2TA+CwqWoW1bRwyyGI+Fnsl8XgwrDlIIFMEw5j/j+54DJaeWR0bZVNbhx2Sh8Eti5AibflCzuSb19+s9Vo56vPv6FXc0vybsHSqgDGnHo4ksy9cdfjT+DPFw2PXMXi15/DW8vkC8n2yUSivCtpb7XTlT4PlLL15dsRcB+HE4b2QF7BEGS7dyWFafuNjMk3Yvr06dyexrSb/w8p3uW4/y9z9hlM8e6Z9mOcjr89+Secf3hPLHvvcdz8jy9bx9mx3NNP3I/TCp2Y89LfsbZ+1y+oza5UFIyYhDse+Ruee+ZRTH/uSZxRaMPM6TPh2bU4ulreFCzBP578CPZh5+Kvzz6KJ559wmj/v3/8O6r4fO+rJPgm8z0zJH/vK8zjrd2+mmNX+unsnZNoG6Eo78NE6u5pvzH7MNmMX9rELLOfXUzk/dTVIX+rGCcwmM7639PnpGO73+YzncA0tYgioAgoAoqAIqAIKAI/KARUifyDWk6dzIGIwMmnTcH7Mz9CRWU16VMqeO12NHm9MJF4aWqsR5CksL+5GVmZ/El7UhLKSeA20yNZvINFvSvXDUsLghdikD0yyIY9RIiK4qJla1BY0B8DBzppEUH3GzEkJpFspz2GjypaJ9XFedkZQtti/CFjGBAvD1988SUWLvwKefm58FO9HAoVk7i2IdXtoio5GVUVFcYyef1elG4vY4C+LVi7YQsq6YH87xdfNsjusrIybCstg6e+luRwg6HYtdE6wgiuRz4pGORMGfhP2GWxtjDJB5XJHCCPzSSThVw26GSOozsuuepXu3Vr9Bo9EaZX/4XVJfXo3TcFwerVmLstgJ6DuqG46BMUe49Ff3o81xYvQxnxPH14d46jAe8/fid2jLselx+di9l/uRXPrfBRwvwgLifXaB10IR67cYIxnpo1c/HUfU9i3soqnttw+NnX4JJTRreqnncO2rdn7fDnvB9NfxjTP95gNJk98iTcfM05yOXYd0kc/xt33wvzjy+AadYzeG0pbUYm34S7zhvGuXWhHWk4TvnaTQvw3N//i0WbthnDkHHdeOU5yDcIXB++ef95PPXSHNQbJKIN/Q89DddeeSoyDCV6V8fSgI9ffALPzVxu9GXOGI5rbroKB3e3Y+GrT+AvM3ZQ9/4uLr74XQyccjvuOHNXNa5UTOLdHk70Bx96PM4f/yr+trbEIFKd6KyPZMC7GQ9f+wcMv/FPOL6gReEqiuBpv8HmMTfjmhP6hZtl3kf/fALTPwqPM2TOxy+m3oXx3cKXE7lndo4RcLizceIVU5FpvxOPf/Q4Fkz5K8blhNtqW86e3A3HnDQeb6z8Knyx46ejNy6//pKdufySpZD3e2hzJ1+EdLF84+blWM0vr372fyeG1dJw49RLL8TrN/4DSzZ7MakPpfvREvF67fe/QTGft+tOCa9ZzYrXcf0Ds3HuHVNbsV7yyl14auM4PHTjSXCi83uH1uz0ZrcixcZ1Ztt77Vng2OOtXczngWN584F7UX/IMaie9QLm8z0k74wTL78J5x/Rcq/GK8N78N5f/g49L7oHF/GLhUgqX/IyrntkPX736K1tFPWdvHNuOg429hP9WeJ93jGx7M73IftsHeOJaJj9AuZuajJqHHTqNfj5maKU76RfvjNndPpeij2ekLccLz3+EN5fGv4CcMwp5yHYIH8vWtKePpvd5Wclnd9TkW7a7mOudduC8HX+forTZ+d9+KP/Pbl2EB7/VZx3FNdvz5+JztdYpr77z0n0eT16Vc+dzzTxjPl3pR32eqIIKAKKgCKgCCgCioAi0BEBC6Nw9gAAIABJREFUMkKaFAFF4PuOwJnnnE1i10l+104fZAbRC/jpd+zltEKopxeygx7ByanpqOO16to6OIxAes1iW0wbDAutJ0jEkoS1kYBNIgktamWhykqobF62rIgEdY2h7g2RZjNkwQyE52B/Sc4kuGlvkUKf5fTUZPTIz8LEiePpl5yLzRs34dPZs7Fo0ddYvnwlNhZvxZpNm7CR/skbtpaiaO0mFK3ZiKLV6+mNXGOond998y1cf/XVuOfWW/HQPXfBEfSRGw5SdUySmCOiawfqPQHUeIKo9dErmRlN5MP9AV4jqezxi3rZTH9m2nZQqizk+cW7SSDLPeHsPgj9Cc685SVyitKVc+CzDMYVl5+PlNAWLFxfb+QXf/U1gtbhKMwOE4zVpTVYVlrNa3YMmPQTow1r3+Nw7bXX4uofjTRIYpfLhIaVs7Eu/RjcesctuODonpj7ysN4fv52o832H3vSjg8fPHQDCeQtOOXy63HzL8+G6Zv3cPM9b0VVkEq/dd5SvP7QNPy3YgiuuPJynHKQsI5dbSd++cp1X2OjaxCuufkW3HTlZFQvfRdTX15iTN2z8UP88cXZGH3mz3HLLbfg5+cdCYfJ1ULixm/baKT1w4d3pv3KIJBPuPh63HHLrzDWWYRHb/01FpdZkT/8KBw5hAEhubY/4xqdGWFZW+t3flBTE0TAI9dj9RHkFyEerPX6DB/ltq1Vb/djbUVDS1a4DSGQDz/rSlx/7RU4ckQBslLpW87UtXumpcmW3SFn/J+hsN1S0aqfN54XuewP+dBQtZm2A3MZmHM08hIS4fr4JdM2WDqx/W7fu5zFLu/3VfDXE/nolhV+hqSGObUncviFQWXjzjFLfrtEMjstNYCvP1rcej9/9d57/LVCDd7+fJ1RVPxk57xPH/P8XgZJGet5MLnzcfoxJyK1hRvfO89CYmsX63mQidTUlOL9f/4TFYPP4jPxG/yENiLvPzMVzy/a+c6IWcaRj7EDrPjghZmoM76YYaMkBee+MgvmjP7o0U5939k7J/Z9bgDe4WPn+zB8ITzGv2Nzt1Na3n398NXbj+PZz2QenfXb+Xup82ebRDHn9/rdt5BA3oFTr7oZd958Barf+ze+bgrA2SKj2PNns6vvIyDeWu+EkF9WRX0/xe+z8z6iY2xtTuQd1fk6xHquds5HjqL3L49cIu+4rs5LviCLPNOx/660H6WeKQKKgCKgCCgCioAioAjsioAqkXfFRHMUge8dAkccOQGvv/4mVb5VJJDlH85B+KlG9nmbYKNyOC0jk2SxE830KK6lhUROv55UIdPsgaQx3SJ4HKBNhQSg49RZP0jSVgLsUZSMzVtKsWH9FqSnZzBQHsksNm+ykE6ml7LT6aT9RTP8firQWD7Efi0kmE3BocjJTseGDRtRzE00X0WriuCiGtlCmw1RCUuwPPFQ9pJYs0ggPGsSLByTh+Nz0yqjd34O3DRRTs/JRoADW7N6LS0vykgONaOmqVEGKrQy65jgIpntb/YZ3tAOe4AkaDOcjMA3avhQnHrGubu9nvJT7ImDrXhx3kqAKsflc5bB2vcc9M0bgvEZFnw0eyXOLhyFRfO2IWn4SS0K2XB3EZVnz8JxKEx/Dk0jxmPkyJ2KwcbGEGzDL8WDVx1lVBhScCM2f3Etvl5VBkTxmN3ddgI7vsTzS304hR6vZxser6Nw1031uHram9jcMAWDO/HyNfc8CU/84dwWVSjR3vFZ7HY6EI+J9Nv3mJ/hoWMiy1OIX65fhD999g08l46Gr7HWuDBwBMn5PlTuFhZiYkvRRNqOtCp7Kf/vIj8m0b/3ghZsB02diqrLb8P0d1fgkYvG4NBlefiguD/GHXxwFCX4ztYaasohSvn68lLMm/EPvM92J15xNOxlsfsYc3Ynil02HblXIuMUv+0rWvy2Rx18eLhzfo/S1Xtm56h5FPKjicRhTa08O8kGWVP94YO4+MN2pXDVffyCxHgRtM/veFay8AW8zrmf/JujW++RjmXansctz0CgpmApiW3WCnPmPGiGwc+3bSjK8fCjxiL0xFfY2nAOBrqKMXsZvyDjf91UzPkMVReOQlrVeizkl0qnjaU9TdznIQ2nXHRWuBf57oqpy89ClGcqkbWL9TwIVx8iGK4JP8edl4SfhMLCIWjeejVm/Hc+zhjzIyqs45cZf/pkPP+HN7Fo8/mGult+XfHWFnk2dl3HaO8ceQ/EepbGtLHxEewiKXKPy7nMQ95993R49y0r5rsPeYjWr5DBkqKtRazxjDq2wpjfCb95GGeNDHvU3/knN6749Z8ZrNVo0rhXwke7fkbGHevZjH9P7fxiJNJDzLXuULxn4a7vp7jvY96DsfqIinGT/CImeorgELkabR268ncmav9c4z19TqK2y0FHnumaGH9XInPTvSKgCCgCioAioAgoAopA5wgoidw5NnpFEfheIXD55Rdi6t0PwE7S2O+nfQJTMwnejLQ0pNE7ub6+jgH0PPB6mgyiV+wsbPQ3lrh0YhNhsooi2UQ1M4llWxANNT7j2tZtpVi3fiNycrIYRK8X7SZEE0ySmVYYhr8yCdxktiEB7PxUB9c3mKlKJmHdnM5/pHeDlfmN3gA8Pg+qq6qoEBZmhnYTJKubfc0kq22G0tjna2DbtKwggWUjQS1Es4dEczVJr7yePXDooRP5D8xGLFqyBFVr1xrzs5N89pIob+B8RbEsPsrNJKX9bDuFHq6/ueMeo9yefAybMBzNzy3D1rpR+HxVM8ZeOoLN2THh2D6Y+cYCBgfMMPyQJ547IHo3LeRdtCB62T2z29URn1qn/Iw+WtrNdoTslPTOn67DXCrGJdXU1Bj7JcX1GBwleJiQPPmHjWlHDsZtZ0j7H7bELc9+m8rW4aOZM/HJgiJUNjQatiXm7DDZmjZgAsZmvI9nf3sNXu4zDuedeQqOGtnXGHcibRsFWz7qy7cYwdqOGBb23JbskLkbTjnShYeXLKOClWscEnJV/LZJcHWyBKKSq533D9wwzyjK2yAfP77q9/jJoXmoWfFJ7D7OHt1SqfNdZJwnjN45zo6lu3TPtKksvqBiA+JyhvEVsiZ1wqW47YyhBu4N5esx69V/4K+3/w6ZD9/PLz46AYFt1hS9ywB4nyDv2Otwzsi8Nr1EP0y0vATUa+WPW5oSYjReyhswFrbgZ/im1IvuoXlYF+qBm2+ZjIemPo1vyq7CyM1fGyrnQ/ono35d156H3XoWojxTMod4axfreYhgkMb3+c5kR+GobvjfJ+HnOZIfq0xawVE4xDoDr8z6BpMuG4vNCz6Enwrwo6Ldc1HeOZF7NNazZARvjAymk300LFqJyij9SjPR1yL2s11+sNS0YWTvDDkwkjl9ECZQhhz+KxLJjb2PzDvas9nV95H0lMhatx1Rx/dTIn3G7KMTjNv22dlx9HXo2nMV+VJrd/4u7sm8Yv1d6Wy+mq8IKAKKgCKgCCgCioAisBMBJZF3YqFHisD3GoHhI4Zi2NBBWEXrCL/XYwTasxtqYReVyKkoKduOmuoqWGllIcHxhCIy0zs4Ly+PAfjS4fX5qVz2Gh7DNtpZhHJzUVm2Aw6yxmvXbUIuSeSUFBcyM1MNYtjwTxYGmoSwhWWsrCN+zMlUGwuxW1dH2wwS2vmsJ8H7SumFbLc50ODx0ZJCSO6g2CvTHYMjofJZ7DQkcJ6V9hj5PXuScKbHM681s+42qqFrquqQ2y0PPbr3oBXGWvblJMkdJi6ljJDikSQk9+ETD8OEI46IZO32Pm/IIQw6+Dd88vHHWB+w0Pc4TPANGHcULCTd3v3YTj9kKw4Z3Dnxt9ud74WKjCFlpElnXYbhacSTZ0IokkNA395RPExb+uz4j/v47YRJ2Jbq7CN81Fm/gR0L8Isbn0CQ3sRnnXkR+ndLx5o37sdrJS0t0FP3mj8/hQ1LF+Bt4vyPPy3A9H5n4JHfTYnbdmQMcfe2RCjKna0I8ZpO4vSRi6iU9vlg5/0eN3Xow9zhr24S7/lIMvEZksS7ea+nxuL1hm+3jWsfSe60bHTLyQmfdu+Ogn5uLLzmz/iGHuCF6S2+zZHCLXshhK+9/2WDgJ5KHOKlRMuH/C2y0DYNij8xv88w7tk22bscmtP7057EgqVfrUR+w2yqVadg2MCDcAh/XTGHX1BYS7428ro5TPDEuS93aZwZXX8WorUSOy/u8xCjOr8OjHE1fClSJmTKxpSzh+LLl/+Hsp8OxSdv8Bci4680vN3jNhKrQIf7PFbRPbnWcS06batlPMa7jjY4EeuKSPlUfiHUMe3usxnvXdexnz1Z60hb8frckz5i4RDpv+M6xBtPpN6e7vdkXkbfMf6uJPILjD0dv9ZXBBQBRUARUAQUAUXg+45Ah3/Oft+no+NXBA5sBP7v4vPxB6pvGxk0yEdFbg4D3TldbjQ0egzrisrKCqqEU6lUbqbdRBaSqVCuJdm7Y8cOMiWkg0loySYKZiHJvB4PVczJ/Jk5fVs3FJOMTqPa0mTkkYqmapherwxuFzIC6ImK2UplMaXKolWmh4XbSQ9bBuGroAJZ1ND2pFSUVVTD7myCh4roZq+8goJorG+gOpqEMO01ZCstr0Cf3r1QsaOSLdFqg+poIYpL6aVs4fUc+jtX0+s5RBKbvRv8sVDIYt3RTA+O1OQUXH/bHXvlZrDmDMYhSRbMfP1jIOs4FJCIlWTJGdaSP5f5R6FvW4FglJ6FzNgbqavt2J3hgbl6D8chnSgkExlX3HZ2cvhGc/HKr/30PUMBOZV+zb3kiwSmdWGLaeM4/GFHv5GH45fcts17BLf8dRa204KjZxfnlJzdj19SvIPFVF4XtGAgPrmfflQJ59gB7RTXbTqPeuhsWceOBHK8PpKaTYbdwLbtJNsHthC03i1YXLWTPLXZ0jjOGnSmEI86oCiZEcIwcilUvw5//eOrhm/3EUPki4Mw4d+xXNDTGJOwjRDCfSdfx0CLiRPIiZRP7TWMAdvewfz1VShosR2oWfelEVSxILuDV0pkYpE9FcyHHtkDD9Fe5Bn+JH7cFWP4CnJj4gnMe/VhbKDtzUGXjDCo1kAX751IF2338e7ttmUTPd6wOJHnYeevCCLtblpfQl/qYZFTYx/5pUEks2OZPodNQcpL9+HFF17E0sZmnHvckEjRqPu275x493kiKuSonUTJbNtvlMtGVrzxpNjLjWdqaZtnH3zuFlQ28y9YOMmXFfJ10u4+m129HxJd65bhRd3F6zOx92v4C8VIB4ngECnbcR9vPB3LR84TWeNIWdknil3sdqP/XeF/6mhSBBQBRUARUAQUAUVAEYiDQPvfH8cprJcVAUVg/0agb/++uP7W60kIiy+ykLoOdO/eE+Xby6hCrkEdydpuVBzm5+cZZGvZju1oaqw3iFgyxfQV9pOs5UZ7CLtBBofQxHMPSecNm7dg7fpN2L6jAg20HvCJdzL7CAVNtKZg2CxaUzQ0NBlexwEqi51JTqSlZVCh7KDC2Iw+ffpxLN2RShI7yZ5kBPtzJbsN8tjmoIrZYYPFUElbZOioqqxCNyqPhV+00LiZJhuGZ7OQxEMKBmPsyJEYQ0/Qof36ooDlUqniNPOaiYrkF19+GYXDxXZiz5Mo9w4+JMloqB+DBkZIEsk/fGLYYzNv9PhdfGSbhJWXRIlWWqoJJZ99gtXbdqCsPOztKZday8hJvLSb7ST1mIApPW2Ycf91+O8XKww/37Ur5uKF1+a1BiKL1nXHsSXaTqRevPI5vfsbHrhfLFhjjGnuKw/glQ1+mMNQw7P1Mzzz0hys31ZmXF+3XvxSwyle25Fykb0Q/oLB29Nux0dFW1FfXYK3/nKv4ZN7RhwCLdJGvH28PkzunhhJH+0Fr7+GFVt3oHrHOjx77zSU8IuQiIWDs88EHJlpwdsP/AEfr9hID/BNWEC7j9VlEiQznCL4Rs6j7au3rURRURG3pXjnhYdwyS/uNgKJXXjjlUagukidneWKsHDOq7j5pqf57KVhRLdd2RTxYBUFcsjcC5NH2bFk0SIGzVyEhfMXobia97p3M+669Ke44oFZpGzFh7pr5U0pg3BGoQ3vPzwN89buwPY1c/GHhxnwjd7chdn8T5Wmdbjhkktwy0vLI8Nvt+8/drRBFvo5/mNbrBkGTzyKZfg+4+eE4d2N8l29d6RSR8x3p41o7RgDavmI9zxIMbFTaZz3Vzwzczlq6suw+K2HDX/iMace3vpeSqSMKXkwzh7nwuJZc+Fz0d5iwK7rbQwryjsn3n3eMp1ddh0x7HjerkKUfiPXO9aLNx5nn4m0rrDgvw8+hi95X5XxuXv+3gcMVX7kudvTZ7Or90Miax2Zb2f7eH3G7SMKxongEBlPx3WIN55IvdZ9lP4j1zq2HcmX/e7Mq239WH9X2pbTY0VAEVAEFAFFQBFQBBSB6AhEhBjRr2quIqAIfO8QGDpiGH5x3TV45rGnEfQzeB6tFjweLyorK+mBbCMpa6byuIw/xbdRuWth8Dw6IpN4tfC8iZ7JpeUMHFZB4o7qZJ+fpCw9i620xTjuiAkoIYGcmroNTpK+WenpBrEr5LGX3sWidm6iJYaZv4V1MIhfSirjYzn89DSuIRncDTkks2vrPEgqLWPAPDetKuwGSbxp3WqOk7QTieIA+5Jgf0Jgi7+yBOrLzMwwCHAJBGjiPzytDrtBKpsCJJ6tdmSQlLaamjGwdw/UNTbh57++HocdeeReXbdB4xjIau4HmDS2d7t2B0ycAHz0Jg7tkC+FslIjVgd2HH7O6Xhz2r8x9dbPEHQfh789cbrRzs4y4WaFAOo87WY7VGSe8dv74XtsKt74yzS80dKBe9SFODtGdx3HJsrOmO20cOat9eKUdw44loG9PsXbf5mKtzkmU+Y4nHnyULy2IDxACZr46XvPcosgYsOUq3+PAiNoWZyxRKpE9hzLmb+9Bw0P/R7T72cwPeYLWXr6rx7A8QUR2wYnFZ2RCtH3MdcngT5+/KsLsfT3z2HabeFJZg05DAMc8xCMqNTZxqX33I7gAw/guWm/ax3EhYMmYJAQqUyt+LZc7Tgm+cKiaenruH9pSwHqb4cdcR7OP+9E9HTvXPBdywEZfQ/DzT8/P6ofckNN2PPUFCzGU9OmRRo39hK0sVc/P+pIiDfTw1x8pf1dLG8z2XHydfdg+9Tb8dQ9NxrtWnochntuO8cgSJvKNxjE32mj2z+DkYGk9hqNbua3sKPPcejdMk9nj9H8tcCLWGA+FAOzW+Ye576MtNd23xHzuM9C28ptjju203bt0uI8D9KM2KnkDB+HlS8+iGtfCD9wBSdeg6uP7tnaSyJlpPC4k6fgH/NfxtBTjw4HBG1toe1BtHfOhQk8S23bCB93nHvH87ZYiOd8ou9MWYt4z/bP7rsZlTffj8db7qvsEZN4j89BU5vnbo+ezZyU2O/GDnAkstYdqvC0w/spzn0c7/0aHeMLEReHloF1XL+uPxOJr3HbeyM+dtHavbD1S5bYf1d2RV1zFAFFQBFQBBQBRUARUATaI7DzX5Tt89uetS0TOe64jyiaJb/tJvkdzyN5su9sk9/DyzXZdzwW4jtyTY4jZTruI2WGMRjX7SynSRE4oBD422P0k12zBXSmwMYt67F67RqkJCdj4ID+SHI6Df/hAH+/GjKHSE40YNkyBo/bspVPLC0taB/ho31Eks1FL+Q8I8DeuNEjkOIwY2RhAZXAvdGD6l8hiyU4Xn1tHSqrq6laZjA+EklB8SjmE7iluBjlZeUYOGQQHO40FFOJ+9WS5WHVMglfH4niqvLtCPi97JbEMQluqe+gqtjOf+CLdUWvXr1QvLGYHs8cj8vJ8YpSmZvIlZknBLLDyj5puTHhmGNxw507ybf9a8FJtDf4DQJ9z8a1++2EGLywkXy9zebmlwi7P4quthOrvJe2JM0kOt3u6ANq4HVJ8sVDtBSr7Vjl7Wxv7xiM7NpLZEyd9SFzMnENXNGnbDQYxoVUz7c4zl1Hvmc53oZqBGzpMefVtofOykdb800f/hF3vBjCo8/cEIP0bNt6/OPIOu3J87A32mg70k6fB9p0/PP6a1F02M2478xBkHKBjvdQImVaOitb+CxueOwz3PDI0xgRI4hiuHj0d05k7t/ePRq937Z4tT2ON57wfdX5u0ba2tNnMzKGRO6pTte67aQSOI7VZ/w+omOcCA6dDS3WeHatE73/Xcu1z9ndeUVaifaOiVzTvSKgCCgCioAioAgoAruLgMvlmsq68tNJCXPDn4cbeznuuMmPJSNlIseR80jZSH3Zd7aJsiRyTY4jm+RFjiN7ZhllZS95kjru2+YZBTp+qBK5IyJ6rgj8QBD42S+vxL//+Rr+998ZKCkpNbyOXW6SxyRmRXnsZRA92M0oWrESK1eupLo4CdmZOUgWu4lkF20tgiR4qTxOdiKZ3sab1q9H4eACbC+rYLl0JCUxiJ7Lbzhn1JKE9tJDWUhfJ5kxG1XNEqQvRAa7cNhg9OrdGx56whZvr0AzSWITX1USgG9+0TIGd+sFb309SWTaVdAiw09Vcoh7s40B+0xWKqirGPgvg2R0hUE0C3EdYn4ypc5WYy4M1FdZjhGjD9qPCWS5qeydEqVdu+V2vx2T3Y1OuNouDaGr7cQq7yBJGvlZebRBdEYeR8rGajtSpu2+q+Xb1k30OF4f8eYk/cTDJdGx7MtyDnd6l7rrrHw0fHzNVow/57S9RiDLQOOtUyKT2RtttO0n3rpHAppJuc5SvDKh+lV48sk5MA+4AEPiEsjSS/R3zt6e+67zid7vruXCOfHGE+2+6thWImVirVG8MbTtL1Y7bcvFO47VZ/w+omOcCA6djSvWeHatE73/Xcu1z9ndeUVa2ZP5RdrQvSKgCCgCioAioAgoAgciAkoiH4irrnM+YBD40Vmn4v2ZH8HT1AQXVciyeUWaHLKQpHJi3hfzULK9BJnpmcjJzORP5TOoLnbAzk2C5JVQ8RugJ3JeZi79lBn1zGzDFvq59qA9RWpyo6EaphsG6usYGI/K47TUFKRnSBt2qpA3ozdVxD379EZ6WiaqqML1+kNs281mgux3G7aVlWJgwUA4s5LgIlFdVl6G+npRMjNgH72WrSSqLbS48DBIYHZePrKystHk9RvEclVFJcnmAH+KEMCgIQNxw92/O2DWVSeqCBxoCAw88dcYeKBNusN8vXVAHd+hsVLMMk2r8Isr7zOCFYbM+bjhqmO/NTV+rDHqNUVAEVAEFAFFQBFQBBQBRUAR+H4ioCTy93PddNSKQEIIOJ1JuOWO63DLDXeiweOhhYFELSPbSyuISiFhvc3IJcGbTFVbFonk9LQ0Q7FskaB6tLXIzs5GxY5y+h03ITMrF7XVjXDaQlj81TdwO8fSYiIIH32UQ7SvyMvNQa8e3Q2FsNfXhFSGOs/JzUNKSjqD8Jmwas1q2mWUwuF0I8DrRStXsz5Qy2B/okCmOBqp6Rn0YLajuqqGRjV8PdFfOZ15TRx7XW09tnlLSCpb6JFDf2Qz1cpUIvfv3x9X/uaX7DfibZsQNFpIEVAEFIHvDwL0wP3RLTdiSna/zsccr0xSP/z2rjtR5beiO38dkmoXtzFNioAioAgoAoqAIqAIKAKKgCKgCCSGgJLIieGkpRSB7y0CotL958vP4LGH/2qQvxaStBIMT1KvXj0MywkbA+dl5+QaXslBErrBUMAgaIWElmB8xcUlyCdBXE3i2ex2oKqmCou+WYWhg+mvbAki1elABknjNJLQdlphWLwWQ4EchJVlG/HSy6+jjoR1Pcloi40q5a0ltL+gipgk8cbNG3Hw6DFUPpvRWF9nBPcLkecOkixOz82lrYYP1Qz2J/o7N5XOzQEG72PZIKN3DR0xHLfdfasSyMZq6ocioAj8kBHIKxgSd3qxy9iR12cA8uK2ogUUAUVAEVAEFAFFQBFQBBQBRUAR2BUBUjWaFAFF4IeOQDJtLG698zc444zTIIRxUpKLlhMuehtnozvJ4zQXrS54Lipfq5UbFb4SqdLEwHXJDGaXl5OFqspK+JubUdfQRH/jEFas24zZn3+Jmnof0jKySUAns66dBK8DSalpSKWK2USS+D9vvIXqRh9Kymuxo6ySpHAAa9dtoKWFDWnJ6VQl+zF/wRfYsHETvZhTYGVQPafLjT79+hm+zR4qna1UJYtnsoXksU28ks0mTD51Mu59+F4lkH/oN6/OTxFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBL5zBFSJ/J0vgQ5AEdh3CJx7wU/Qs1c+3p3xoUEKW0gSBzyNVCaH6HBhIolspcNwM4K0nzBLoDuStTQ+ps9xGhrqGtHs98JhcyGNlhTNVCtXVdZh4cJv6KmcTSuL3lQwsx1Khk1W2mYwgN7cL2ajlMRxQzOVw2w/iYR0fV0NyeEGuF0uBAJ2WE3JVBkH0UBbi80bN6N79+6oqqrDls3FcEnQNY7JbLfTesMHJ32TJaDo//3sMkw6/th9B5z2pAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAorAAYyAksgH8OLr1A9MBA4/cgK6dcvHhx/MQcX27fA2NMBHgrZXvz4GkdxA5a/f46XncZJBCjfT3sJMAriiogJrvatof+GHO8VtBN6zOLKpTvbjw7lfIJfKYzsD6mVTySyWFYsXL8Uc5jexvpX5Vgb0q6wqw8Z16+mTnEx/Zns44F+SE93y86gytqGcdhmikg74qmCnotkmimgqlv0+G4npEJxUVF99/S9ROGLYgbl4OmtFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBL4DBJRE/g5A1y4Vge8agQED+5GsdeCV5/+NNSs2k6T1oZHB6+gbgUafhyRuwLC0kOB6VqsVDrtDDtGjdw+sWrYCziQbUjMyGfzOAhuvuZLd+Gzh13ClOKkatmD1oqV4850P4BdzYyqJV61eiVXLV7HPJAbvSyUJTaLOzd+sAAAgAElEQVSYSmWxx0hyJFGRHITH28iiVpSRSLZYbCSRabvhcMLKvqhtxsHjx+L8n56Hvv37ftfwaf+KgCKwHyAgX4AFbG647PvBYHQIioAioAgoAoqAIqAIKAKKgCKgCPzAEVBP5B/4Auv0FIHOEOjRqzuuu/U63PjbG5GXn03SmISxKQQHbSyCVBeHJLgeiWMT7Sz8nibUVpShrqoCyWkpCJLszaKauTfVy3369GJ5eh6XlWPZ6vVYsKQIr7/5Lk0xLKisqcOcT2Zj89r1yMnIQM/u3ZCfn48sEtAZ6elwkkA2s88MEstJNgtSSUan0MIiOdWNzDz6LJNs7lfQn8HzbsNt99y67wnkUAOeu+oy3Pra6s5g/OHlc87PXHkZXimq23VuvPbpq//ER0WVu177vuXs67Xd1/11th4/gDU0hcrxn/uvxM+uvhpXXXExHvt0S2ez/eHn/wDWc58vUuRZfHX5vut6b63TdzH2bxslzqnTvznfdt/aviKgCCgCioAioAgoAopAlxBQJXKX4NLCisAPD4HCEUPxx78+gi/mzsPMt99D6fYdCIlXcoBWEpYQTCSTJZCdzRL+zinFTeUwCeL16zcwOJ+D18xUDDvg9fuwmCplsaYIUEm8pXgLNm/eQoI4zQjm56ClhcudzAB8LpjZntfvp7+ynRrjZvhooWEmWW2V/thPcmYacvJzMOUnp+LwIyd+p6Cbae8c4lgPpGTllwfRkilUgRnvfIQ6zxgcU0gl+vco1az9DPNqCzB5TF7rqPf12u7r/lon2ubg+7yGkWls+fg5/K+oGRfcfC9G2etg6dYjcukHv+94H/8Q1vO7WDTjWWzedz3vzXXa12PfFyh19jdnX/StfSgCioAioAgoAoqAIqAIJI6AksiJY6UlFYEfNAKHHj4Bsr3+6huY8Z+30eT1kuy1IEhSN9jYZATVs9OawmqiYjg1A1W1NWDoPZLLViOYXl1dneGJvHFjMeZ//rlhTZGdnYs0+idn5WQjK4tqZ/ob+0jI1lRXw9zURJsMO600mg3PZZvZCjvJZxf9ko8/7RT8+Oyf7Dd4N+HAelU2MzhitBQy98Zdjz8BM9Xi37e0+PXn8Fa3X7UjkWUOJt6TB1L6Pq9hZJ3qy7cj4D4OJww9cMjjyNw73sc/hPWMzG2f7U20ShJ/pn2Y9to6fQdj3xcwdfY3Z1/0rX0oAoqAIqAIKAKKgCKgCCSOwIHFjCSOi5ZUBA5YBM4468c4cfJxWF20Gt8sWY6Fi5egmp7JJpLFzbS6oESZfsV2Er52NNY3wkQfZBv/YZtGxfHGjZuxedMmw/fYSf9jG4uLyrimshzNPq9BIruTU5Cdk8XAeg7DI3nVimWG+vjIE47F2MPGY/DQIfRMTt6v8M8JrMZf7pyGLzYHGHwwDZMvvw7nH95v5xhDNfho+sOY/vEGIy975Em4+ZpzkOtoISpiXedPed984F7UH3IiGma/gLmbmow2Djr1Gvz8zLFwdsZ1sN5H/3wC0z8K/yQ7ZM7HL6behfHdRTrdgI9ffALPzQxfM2cMxzU3XYWDu7fgGu/6zpkZbb310J14fcsQPPinCzDv8TuxY9z1uPzonsa1RMYu6sn7pz2NbT5hp20M7JiNutJSDDz/d/j1CW1wjPQba3y8lkifkaZ4B2L2X27Fcyt8wIoHcfkcWn8PuhCP3TjBKFKzZi6euu9JzFtZZYzt8LOvwSWnjOYoW1KstYuUad378M37z+Opl+agPhSea/9DT8O1V56KjNYybQ46m2c3E177/W9QTJyvO2WQUaFmxeu4/oHZOPeOqTi+IMXIW/LKXXhq4zg8dONJHe6TWONoxPtR1/AYVM96AfO3he/xS26+AwMb5uD+x9825iL30HW3X4uROY42696FOjLiWFgSizfuvhfmH18A06xn8NrSCvSdfBPuOq9tEE0fFr76BP4yYwd/C/EuLr74XQyccjvuOJMYdYal3PMJtS0DjIGbkI5x+gjfl3sRExlSa+r8Pt7j9ZQ+Yq2NdzPuuup32DLkbDx500k7n402Y+v0vjdwi/d+3M13GdcjkXdByFuOlx5/CO8v3WqMeMwp5yHYEGwdvRzUblqA5/7+XyzatM3Il3f4jVeeg3x3eN073pv9jr0Y9rn/Qs+L7sFFh/Nd2JLKl7yM6x5Zj989eisKktu8vDnW6OsU+72fyNhjrd2Ktx/E/W8Bv/3TDS3j8WHOM3fj7yv6489/+infS7Ux/nbFeR4ik46yj4lnlPLtsohV69+ch65ATgfCf4/abteRnigCioAioAgoAoqAIqAIdBUBSwIV2vxXMGWH4RRrL9f2dJPfzUsbsu94HO08Uq7tPlI/9/bbbz+S7WhSBBSBBBGw03qiW49uGH3wKJx86gkYM2Y0CV8nvE1eNDR46FmcxgB8XgbNMxsqZK+3CV9/tQTby8qQn5eH7KwMKpbF5oIWFvQ9Tk1NgdPpZO8heKlwrqGK2U1vZVE+X3rVz/DTq67AIRPGoVvP7oaaOcFh7oNifqz59D3M+3oZLCPPwVXnnwqGFsSbb7yJht4TMdIgZX344KFf41/za3HK5b/G6Yf1wtdvv4k3v7bgxKMHk2CPcx1+LHjnVXwwdxFQeBquvuQ09LFsxcyZM1GWMxFje0cj1H14Z9ov8cKXpTj8rCtx5nEHweYJYujEcci0+8PX5pfihIuvx3knjUPTinfwnzfeR5/DT0U3d5zrrmYsnvEuHIdOxrDsZrz70K/wylIvrr7zRgxKNWH+629gSdpBmDwil/gnMPamVbjjpkfgGXsO7r7hEhyUSxLzs+XoceLPccXxQxgUreOfoZa5dTZ+jq9reFlgpdf2xnlfo67PsfjVT0/F2KGD0D3bbqztsvXr4Ss4BdcauBdjBude230iDuopuMdZO/kr0yZ5Ns7EbY/NwDiuyfk/Og7DetmwtSYLhx/Sn8SbH0vefxdlPSbgOAO7WPM8HcGVb2LmUicmnzCc9xDwxb8exuLSRmy2DcZJo/JpM1OOVx5+DTXDJ2PKaFmLnSneOKKv4Vdwjv0pfn7BMcCmeXiLOHy0YDUm8R4669jB2DpnFt5Z5A+Pp3Xdu1Angefgy5mvYsbMT7HKOgaXX3AiCvv1Ro/stqp3/jLC7ECwfAnWVQ3Az395AQ4Z1BPZaZbY9zzvmfhtAzFx4/iNZy7ufbkXMWl3f3V+H+/xesZbm+ZyvP3WbNSGBuOU4+WdtvNek6N4uMV7P+72uyyRdwEJydd/dwPeWdOAU6+6EeccOxRf/vNfKPIHkTvkMEwaFn52ShbPwPs7cnHZZedi0ohkfDzjPXxR1w8nj8nnDP273D9DBgxEVtkc/PdTH47nl06Oli8ZZj72JFbZDsb5p47ogJO/6+/OhMYe+x3VrUc2Frz9H7xXlITTJg1E2cJ/YtqrS3Hy1b/GIfnWmH+7mjfFeJ91uAfa3xFAbDw7lvbH+JvDL606pK613aGynioCioAioAgoAoqAIvAtIjB16tRP2XwZN1EUxdpE0RC53vY4kpfons20tiPHkST1o6XO8qOVjZqnSuSosGimIqAItEWgb/8+DGrXx8gq216G2tp6rF2zjoRwk/HG+mDmLPQuGGAojf0kia1WC3Ly8pGbk2N4KY84eDQVvCa4XE706NULWdmZyM7NadvFfnvc2BiCbfiluPvyo4wxFhZOhanicrz80nycMeZHsJd9ieeX+nDKLY/j7EJRiI7CXTfV4+ppb2JzwxQUNMa+PpgcWchDfS77uOeqcB9DCm7E5i+uxbJi+fuz08M3AlJgx5f4d5Ef4694AFccHr4+6uDDjcuRa5OufgAXjA9fGzR1Kqouvw3T312BUZNrjLqdXR9zYT+jHZe1EZ///QG8vNSPn979OMb3CCs65WJS6/eJ8cdes/5rlIWsuO3/2XsXcLuq8l5/7IQdSIIkCBSo4X5XRIqKohzFu61S+6/3trQWi6UWtVoRPJ56OYICKmqFqj3ej3fpo6ei1RapojzYWFGRYlUuAoJKEIkmARKS/Z+/ufZv72+PjDnXXGuvneyEdzzPXN/9G2O+c6wVHaysnPTUtFf1zby9nnBSetoXrkjfHqt+4mTponqu+NJv/VrfoLxWHHFsOmL5h9LdD35EOuqo3jd79a1SP9u3ZNy/+8OKe8VOa2l7tofFbxpWN7F+3a/rWznkwUemI/ar9sIRR6SpX/TO/rjud59nPvbhaeLC76Rb1j43HbLk5vS1q+9NY9Wf2L+87PL0q5Mekpb96vr0n/duTM94eO99GRl2WUf+DBcd/Zfp7/6st9pDT/uj9I3TP5DiHjnllB+nM/+xt56DJ/fsIDUHdHgf6B4WrPjddOFZz8u+WT19dyuOOCY98uo907/dfGA69qEPrb8Vu/G2yzvt6X6927j1e17elyNlku2vpn0sOrN5nn2fzc4HpbMvfEfaOF79Y6iFw8N+3NreQ/p8HPazzMzbPjs33vqf6fM/3ZCe/LdvT88+qvc77n/3tqXplL95R/UPwk7vq/0f/6J0fvXfT3rjiPSS67+d3nb599NdJx+d9J8/NfL98+sdnpo+etY/p2/f9EfphP12Spvu/FE91wkvflyRk3rkz2m2a+//GXVYevXpJ6aXnvvJ9Pef+nW69UtfS8sec1p6bsVC75u2Z7NX2+eZbqZltPIs7CG1Kv6ZU5hjmN6FNrggAAEIQAACEIAABIYgwCHyENAogcB9mcAee+5RHRDvkQ46pHfYKBbPqP4BvO157L5i9xm3t9+Be6eJm1bXvjW3/7yWX3zby9M3liyp9dWre7Hv3bwm7TXRHj/scP0FipTyORZVJxfxwKFOmnxZc/tP65/VeHL2DVSFHfsfk9+wk29iwd7paY9Zkt7+vavT7Q+t7OonOZrid1WHtDtWZy0Xnfua+h8U1EH1CToQbRlta995d+2TDek7P7wtHfbQPdPEmhvSlb+6t/o2e7lhv/VrfRptc27WeWJDurv6eYnSP5BY6rN48quW/Z7tYfV/NJiebdlBx6WH7/rl9MHXnpY+ud+x6fnPelp67FH7TycErd997vL0h6XxTZen7//8nvTbE1ek6yYekM4486np/LP/T/r+qr9KR9303eq57pUeduDm31QfZB1e0m57LbOaFuyyov4r5Mt26e1nBZbvvlu1ca6eypEySE1fltX7QP9xYK9HH9N4AOfJ751YV6v6HVU9qn4stWe69G7j1mWOkTPJ9le1gRv3sdlYjvTZVOvYcelyt95MtnNr//zba2L4z7IunwVrVmv+8XTUvtM/KLNg+aHpuMU7pGvDndy96rp0afW3P7668gfpjrXr6s+KBbtP/ahNcf8sO/ix6WE7fCF9+pLvpxNe+PB008qvpA3Ve/Kxhc/lMNUMtfT548/9Lmvv+76qnt2yBz4zveJpV6fzv/DFtHHRo9O7Tn5YvYa+tQN8ns24qcroxzPPH+TPnEF753NhQwACEIAABCAAAQgMT4BD5OHZUQkBCNyHCVTfT67vvvo56Hqc8OwXpiOXjSV9uU3/WFt13pP2r36KYqz3E5upKZ5S70Cs16Xb69h476N7Y7f0Xta4v0/XUBTii6tvjWv9muWbH70oPfvRL97sdykbumzmXvhbR6eTH7l7+sDfv6r6FdvJsdtj01ueeIitbjKsr1vB7LP6PdvNZthx33TaO96TbrhqZbr4Mx9IH3jbyvThA56Z3vm6E1P7MXzoNHmfC5cfmB6+eGG66jv/nfZa+7XqW5Anpgcd8jvpYeML02XVQdcOP/tu7dvbv7sdWqRZr+PeVJ3nzhjhS5sz/NNGe01/lr33Qemgf3qOAbVsz/Tt3cKtceZsjpl5s2Uys9vw1hyvo4Vbv+c+duscfJYFUPqsnBhbkqoz4xljlyXVf32YHBtvW5n++vQL06bqd7+f/aw/TQfuvTz9+HPnpIt+5oyezPfPRPW3KU58TvXzGJ/8f2nVnz8wffVzP0hLHnFqOrD0npzZqpPVZe39+HqiiXsn38H6YJ8cfWt3vF/z51n2O8XuKdmVZ6zp+mfOML3jPOgQgAAEIAABCEAAArMjkP3P6tk1oxoCEIDA9kjA3yz2vd1688/TwsUPqs1Fi3vf4Fyy75HpYfk3B6uMu/vE698DceOOcnx8WfWbuKuTvumcfxtW3/wdm/hiurKKHTy5Hv1+7tcvvaP6zduDqn/UcKKK/0tjXEfNa+6YSE898x3peSuuTX9x2jvSa95+WLrwFU+cPDbvuMiQtv7Xv06LHvS89OZTqm/AVQc6uy+vfg+hYfRbf5+j8IauPbcO9wcZ/Z5tudeidMBRx6eXVNetV7wznfneS9Ivqp81uV92y/3uc6cFy9MjH/OA6tuDH0jvq35649hTjqnYLU2PenLl+8zb0w3Vt7t/5wXV766WF1F5u62jsXzEgb4ss5/7GGT6fiwH2zNlbgf0eV8NNkfv7voyaYAw6D5uaDPlHnYdUw1qpcxtRZ/Pv7tm8VnWhfn4+JL6s/Kq8HmY7vlpWnnHvfV/JNPSb7jyS/U3iM8+/5VpnwW9w+Xr1sy8uyZrv0dX7+1PvDl9/GMfT1etuzc974mHN6UO7O+y9i7PbvU1n0pv//JN6dG/93vp+i/9S/qf770ivfvUR6UutY2fI5v/BYip+xuGZ9c/c4bpPbUwFAhAAAIQgAAEIACBWRPo/T3qWbehAQQgAIHtk8CS6htr6654b3rfv/5XWr3mzvT9L7+3/h3JY55+fP3X7neq/qG0E1eMpy+c8/L02W9ek1ZV/7jgtdd8I33soivSXdXBWL+4qfV+XdpWu1y833HpMfdfmC4+76z079f8JK267ca0svqr2D9adU9auMeD6vVcXP0cxaU/uCWtufNn6fPvflP9+7nPrA44+sU1s34mQP/c3dj9fied9ZIT0j3f+7/pHy69YWpR+VpzeypxUvnVLybSvbdenb72H1emb379C+mii7+Srl9VPqXpsj617TfnjDVUX7lbVv2jgD+7/KvpR7fellbdvnYq3Nan67Nzs7tuuTy97xOXpetvXVXvg+uuX+XQlPR8Xe7zwIcfXR+Abah+fuQJk39F/rBHPbbqtaH+xvtxR/72VN+oDLIO13ldtrvIQWq6shykp9fYhaVy+/Vu4zaqObxmya5MpmoG2Mf97nWqZ5d13HNTesPJf55OOe+SaudtPtq49bvH2XyWeSVt97p4v0dVP12xMH32Le9K37q2eu/fdl366JvOq36nfSL5n2zbY98D09imn6dvrvxx/b79xqfPS5++YUNasJNn6MnSPGM7H5aec+ySdOUl30jrl1Q/b3FQy+lq1Sbvkdtxxi5r78d3Ys0P05vf8i/Vf8Q7Kb3ouc9Nr/ybJ9Z/nn3027/ou//anmu6+7r0yhe8IJ35if+KS671vjwL+6nxz5wsd5jemy0QBwQgAAEIQAACEIDA0AT4JvLQ6CiEAATuCwTumliYjnnSo9N/f/wt6aUfq05Xq3HwU05LL37cit7tV98OfeZrz0nr33V2+ty7z02f63nT0oeclJ5Tf6mtT7zXMu22y8x/ZE6H142jmvPkN74mbTrvvPShc183lXbSocelQ/e4X3rWa9+Y1p7/+vThc6p/TK+K6jeQ//Bl56UnHdz7UYXWePWt1x3C1Hs/7M/TqY+7Lr3nw2enbx35jnqufK25Hdd+1y3fTV/+5Ya0cezm9K2v/jJtumtd+sWdq9PnP/OJ9Mp3/p/04OVhMnWv7q3f+pTWNqfiM8eidPxz/zD987mfSme/+vK0aekT0z9e+Id1Smufvs925ixj1RHb17/0weqyfzyd+OLXp4P1D6Tlz7nffVYtdtnn6LT3gs+n2/Z7Ytp3aY/T4gccnR6208fTygWPTIfsnrGbnHagdUzW5Bz0Lc/Nvrg9tjgtCF99HqimH8ucz+S6ymJx9TcBQqQfy2pPa+TrDR1qtZVbGm5ftnLsxyRfYPXt8q77OL/XWa2j+gmE32yq/kPQr9fV/4Fp8ifDp1bXj1u/z8ehP8sanmv8/EnVZ9+L3nxGuuOMc9IFbzy9XvPuDz6h+oc2L0t3T27wZQc9ofrd96+ni999drq4yhi7/7HpWb/3wHTRyqlbrJWcqaPH/t6J6QP/8cn0wKc/Lu3a8jMPys975Paga9fnZRvfS9771nTL2KHp7Jc9oV7u7g/5k/TC47+T3nfBu9Jj3vPG1tqNLZ9nd//0hvog/hlH72sMU7Ivz3w/VZVNf+asPPSMGXtv4N7lj8iptaJAAAIQgAAEIAABCAxGoMv/vIo51nPpbzTLHy/5c9s+yaZLX4JTTDLXdfDtmHTn5NI5D1q3bt1rqjwGBCAAgVkRWLt2bfV7x0vTkpnnvVM9J9avTeuqr+qNVzmLCjn94lONBlDuqdakX7tctHTpZj9t4PlKMU3RLz7AMsqp1SHPp//2ZemSfU5K//jyx07n3P3D9Nenvjk99ox3pecUfgLEiaNf3/q0du2GtLRiNejwWpqebeynfaLRdR73bnpOsfcg+qDrGKT3bHJ9v11YDjqPe8+GZT9uo5gjvy/37MZk+H2cz5vbTeu4Z+2daeP48sbPPvXpyq3pHmfzWZbfR8nurW+8el8WPpyrgt78zfFST/lW/ecH0yvfdXn5P4o1FQ3o77d2tWt6dl2maqstPdcbv/LW9L8+PpH+/n2vbDw4b+PZZT953aXcUfX2HEgIQAACEIAABCAwCgJLliw5u+qjv6qlf75o06SUnl/6v/DOsW7bua6XbLr0VRzHpPuSz7pl5apzJeXTyGX01Qn5C99EzolgQwACEGgg0O9QcGzR0tRwPlF37BdvmLbVvWN1IOq/lp0n9puvXzzvN4y9rvpND32DUT/tsbj+z4/r0w9XXp7WVH+dfHH4Vmup9+jXt6jxAKk0f/QNspZ++yT2lT5I77y2zR50HW29Rhmbq/vVGkfRux+3UcyR8xys5/D7OJ83t5vWsePS5XnqZvZsuc3ms2yzxRQc/dbXNn+hXe3Sz0X8wz9clhYc9Mfp8PxvVTQVDeHvt3a1bHp2XaZrqy3Nvf7eHdIjnvuMxgNkzdnGs8t+8rpLuaPq7TmQEIAABCAAAQhAAALdCHCI3I0TWRCAAAQgMCiB6q9aP/XUJ6V/P/+T6dQXfHJG9YNPfHk6cfLnNWYEMCAAAQjMdwKTf5tC/zFsYsFe6ZV/9YTN/ibIfL+F2azvkKf8TTpkNg2ohQAEIAABCEAAAhDYJgnU3wvrs/KYYz2X+ukIDfnjJX9u2yfZdOU/YaE8/1wFP2dRwWBAAAIQ2FYI6K9K33LTzek3GybSoiXL0t57/3brX4vfVu6LdUIAAvdVAuvTL268Of1qww7pt/fdN+2yyP+z+L7Kg/uGAAQgAAEIQAACEODnLNgDEIAABCAAgVkS0F+VXnHw4bPsQjkEIACB+UJgUdpzv4PSnvNlOawDAhCAAAQgAAEIQAACW4CAvuHLgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQgUCXCIXMSCEwIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABESAQ2T2AQQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCDQS4BC5EQ0BCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ4BCZPQABCEBgvhGYWJu+/pmPpEt/cMd8W9m8W8+mtben7135g/SbiYnRra3i/6G/emF69Wf+a3Q96QQBCEAAAhCAAAQgAAEIQAACENiGCXCIvA0/PJYOAQhsnwTGJn6ZvvDFS9M/fevWTje4+trL05eu/EWn3EGS5qrvIGvol3vV516X3nrBZ9Pd/RIHjC/YKaWJewcsIh0CEIAABCAAAQhAAAIQgAAEILCdEuAQeTt9sNwWBCCw7RKYWLBvesMFF6Z3/OmRnW7iyn/6UPr81as65Q6SNFd9B1lDW+7YxO3pC19Zl1b87jPSHmNjbamDxcbG006j7DfY7GRDAAIQgAAEIAABCEAAAhCAAATmHYEd5t2KWBAEIACB+UKg+lmDfz7vTWnNwx6f7rzkY+k/bt1YrWw8PeUvXpX+6H8cOr3KidXp0g+/PX3432+ofbsf9bvpjNOem35rx+pgs+rxuf/9prTgD/44jV3yvnTRVb9M+z/1VekNzz8kff/LH03v+cRlaU39Uwzj6cBHPiO99NSnp13TuvTlC/4u3XbsK9JfPG5F1XN9Q+5T0lXveXX60DXrU7rmLekvLktph0NPSu961RPTeJ819e7rKWnt1z6WvnFj73u8v/P009JfPuvhafHY+vS1dzf0nb7r+t5yPhNjy9ILzvhf6ZC1l6VzLri4vrcFux6ZXv6al6aj9tixrv71jSvTh97/2fTtG3vftBav0099btpraY9X3rPIvOp05w++kn60cVP66xOOaOH8oCrW8nyqPhP33J4+ccH56ctX3VKv75inPT9tWrup1uuXe25Kb3/pWenI09+WnnTw/Xp+7Y1z/zbddMwZ6bQnHzDlu/QjF6YPX9r7GYyJBXulvz77DekRv62vNbevYXoyNAhAAAIQgAAEIAABCEAAAhCAwPwjwCHy/HsmrAgCEJhHBFav/nm65CMfSQc/7nnpzD99QPrhv38qffZ9Z6dNS85Lf/LQPauVrk//dv4r00evmkhP+4tXpCMX/zR94ILPpDPeuCT9wxt/Py2uMn5zT9Xj/HPTwgc8Op1y6hFp0a57pLt+8pX01o9/LR3/7FPT8QctT7+68Vvpsp8sSTul3jdq7/z56nT1z++sqle05C5KB53w/6UDv/X+dNM+j08vfeYDU1q0T3XM3X9Nvft6f9r3kc9Mrz7pkHTT5Z9KH7v4gvTBvc9LLz5+z4a+mz+YKT6PPzm9+uRd09f/b3WIes7pdeKT/+wV6Zjd7kiffudH0tvO+Wx6z1ufVx1Qp3THdd9NP1lyaDrtjD9NS9PjEZsAACAASURBVFZ/N53/nn9JZ3/y8PSuFx5d1031bGTeW8d3vnRJSrv/bnrw7r2/VFPi3P/5rE3/9L/PTF/+aUpP/6sz0u/sckf62Fvfn66vDqcPnPwTcmLDXenae9an/TbMvP87f7EhXfvLtZPO9emL574sfeoHG+pneuzeG9O3vvaDtNsuOjjv8zx6j3xmcywIQAACEIAABCAAAQhAAAIQgMA8IsAh8jx6GCwFAhCYfwQm7kppyXF/mf7uBY+qF3fEEYene295cfrCZ/8jPfOY30+LVn2rOkBen5525gXpOUfoW6oPSW941Zr04nP/Od209sR02NLePS1Y8bvpwrN6h6jyrL7m13XgkAcfmY7Yr6o74ojUm6FyT/4bcT5QXr+uOXfFEcemI5Z/KN394Eeko47qfTt6422X912T7mv8yJPTG//qsfU6Dj/49HTTN1+arr5ZP4uxZyr1rROzF/VZdHTF5896qz/0tD9K3zj9A+mEF5+X/vgROmRP6ZRTfpzO/MfvpFvWPjcdvPNY2v/xL0rnP96Njkgvuf7b6W2Xfz/ddfLR9aF7P+Y6iJ5Y88N08VUb0nGnPq4+mDaznHM/Fgev/s/0+Z9uSE/+27enZx91/3pRf/e2pemUv3lH2jT5m8hjLX9S+hltvO1b9QHyI045L51SHcJrPOShx9dSsdY9UjFhQAACEIAABCAAAQhAAAIQgAAE5jOBlv9rPJ+XzdogAAEIbDkCy5YtC5MtSkc8ZO/0/766uvatuf3ntfzi216evrFkSa2vXt2Lfe/mNemwwxckHYru9ehjeoedk52WHXRceviuX04ffO1p6ZP7HZue/6ynpccetf9kdKZozZ3YkO6ufg5jYsP012S7rEkz7L5i9xkTLaq+Nu1D0arhZn1nJAdjt72m+SzYZUX9+8TLdumxUNry3XerTn2vnqq4e9V16dJ//df01ZU/SHesXVevfcHu41NxKW3MFf/Z97+UbhvbM5165G/JrEeJcz8We03o+Y2no/bddbJLSguWH5qOW7xDunbK019Zc/tPk37K48lHT6/HVf3WcFj9Hx+cjYQABCAAAQhAAAIQgAAEIAABCMw/Ahwiz79nwoogAIFtgMBEdfCoUf0bbPU44dkvTEcuG0v68urY+LjOYNP+++5cWevqeDzkrR077ptOe8d70g1XrUwXf+YD6QNvW5k+fMAz0ztfd2Ka/NXdOm3g3Kqg65qmJxildm+qzsxnjMkv9Na+jbetTH99+oVpU/U7yc9+1p+mA/denn78uXPSRT+bUVI0zFy/M33Jp69KOx71wvqbzTE559yPxditO1SHv0tSdWY8Y+yyZPNvBy/IcuI/vjc23gvqV7Pz0W8NeT42BCAAAQhAAAIQgAAEIAABCEBgvhHI/i/xfFse64EABCCw9Qn4m8VeyY3X/ywtXFz9g23VWLS49y3cJfsemR5W+kbp5E9TuHamXJQOOOr49JLquvWKd6Yz33tJ+kX1Exj3m/wJjEFydXDtMbs1uUtPxr4zI8NZN1z5pbSh+gfnzq5+R3qfBb2D2uvWbN6rjfnGVd9NX7nj3vSMFz1488LM04/FXeNL0lj1j95dVX1r/GA/v3t+mlZW/f0H5ER1Cq7ftr71F9V/EDhk8oi/yrnyV9PH4+Pjy+o+9bfP3WdyLf3WkC0ZEwIQgAAEIAABCEAAAhCAAAQgMO8I9P41onm3LBYEAQhAYH4QWFJ9I3XdFe9N7/vX/0qr16xKV37+7fVv3x7z9OPrn6fY6QHHpRNXjKcvnPPy9NlvXpNWrVqVrr3mG+ljF12R7goHyHf7R3snb+uuWy5P7/vEZen6W1fVNdddr98injlc05pbfc112S5j6WeXfzX96Nbb0qrb16Zh1zRj9kLfGfFgeJ3B1ajuse+BaWzTz9M3V/64vu9vfPq89OkbNqQFO02X9GN+9Ve/lDbtcGR63OH6pvfMka+lH4vF+z2q+umKhemzb3lX+ta1Fb/brksffdN5aVX1EyH6J/E0xpauSEftujCt/KeL0jW33JburHI++KZz0882Tecs3u+49Jj7L0wXn3dW+vdrflL1uTGtrH6y40er7un/PO65Kb3h5D9Pp5x3SZr+UZLe3LxCAAIQgAAEIAABCEAAAhCAAATmAwF/0Wo+rIU1QAACEJh3BNatm0h7HHls+u+PvyW99GO9U+GDn3JaevHjVvTWOrY0PfO156T17zo7fe7d56bPTd7B0oeclJ6jL9pOHiTvtsuiGfc2Vh0Xfv1LH6wuu8fTiS9+fe/nGbKa1ty0KB3/3D9M/3zup9LZr748bVr6xPSPF5401Jp0eDs9yn31j9rlI783fWs3fDG6lz62OC2oviy97KAnpBP2+3q6+N1np4uryNj9j03P+r0HpotWTndtZV59a/iKS29JD3ji89KuY5svJl9LdQLcziItSy968xnpjjPOSRe88fR6Ebs/+ITqHyu8LN3tm6h6/MHLTkpXvf5D6dz/2Vvoboc/Oh204xVpU8g5+Y2vSZvOOy996NzXTd3MSYcelw7d437ta6h+++Q31YH0vb9el+6tnv345rc11Q8FAhCAAAQgAAEIQAACEIAABCCwNQh0+b+qMcd6Lv2NZvnjJX9u2yfZdC2cjEnmug6+VSe/dOfk0jkPWrdu3WuqPAYEIACBwQhUv737kVe8NP3g0WekNz/r0HTP2rVp4/jStGTmefBUz4n1a9O66quk41XOooacqeRJZW3VU2Pp0uJvWExm9UR77vq0du2GzfoMs6YZk6Zy35k5g1tieW/1u9JLl2agBmQ+yMz9WPT4FtYUJlHOWMseUGrv3qqfOqme6fSPjPSaNK3hnrV3VntreePeCktAhQAEIAABCEAAAhCAAAQgAIF5RmDJkiVnV0v6r+rSP5WzaVJKzy/9LqJzrNt2ruslmy59/cwx6b7ks25ZuepcSfk0chl9dUL+wjeRcyLYEIAABDIC/sfaduxz0Du2aGnKz0SzVpuZXQ6PXdSeu2jzA9mqcJg1eb6eLPedmTO4JZb+uYhSdVfmpdomXz8W7Xx7XbvktN1b0xp2XLq8adn4IQABCEAAAhCAAAQgAAEIQAACW52Avq3LgAAEIACBBgL3/Cal32zwf6BrSMI9UgIwHylOmkEAAhCAAAQgAAEIQAACEIAABGZNgG8izxohDSAAge2WQPVbuL9/5unpxN0P2G5vcd7dGMzn3SNhQRCAAAQgAAEIQAACEIAABCAAAQ6R2QMQgAAEWgjsefDhLVFCc0EA5nNBlZ4QgAAEIAABCEAAAhCAAAQgAIHhCfBzFsOzoxICEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwHZPgEPk7f4Rc4MQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABIYnwCHy8OyohAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCCw3RPgEHm7f8TcIAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIACB4QlwiDw8OyohAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCGz3BDhE3u4fMTcIAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGB4AhwiD8+OSghAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC2z0BDpG3+0fMDUIAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQGJ4Ah8jDs6MSAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMB2T4BD5O3+EXODEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAASGJ8Ah8vDsqIQABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsN0T4BB5u3/E3CAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgeEJcIg8PDsqIQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhs9wQ4RN7uHzE3CAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgeAI7DF9KJQQgAIHtnMDE2rThhzfWNzmxIaXxgx6YxpYMds/33nxNqtqkiQ0b0sI9D04Lf2vpYA3IhgAEIAABCEAAAhCAAAQgAAEIQAACW5kAh8hb+QEwPQQgMI8J3HNjWnvWW6YWuPNZF6Yd9h/gFLk6PV773rekiZ/0Wow/6/S09A8eONUPBQIQgAAEIAABCEAAAhCAAAQgAAEIbAsEOETeFp4Sa4QABLYagYlq5vsNenjs1Y4tTcvO+mD1NeS16c6/OS2NjTuAhAAEIAABCEAAAhCAAAQgAAEIQAAC2w4BfhN523lWrBQCENgKBMa2wpxMCQEIQAACEIAABCAAAQhAAAIQgAAE5hMBDpHn09NgLRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5hkBDpHn2QNhORCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5hMBDpHn09NgLRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5hkBDpHn2QNhORCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5hMBDpHn09NgLRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5hkBDpHn2QNhORCAwDwncM9P0q/+5M/Tr995SRrTUvvZ8/x2WB4EIAABCEAAAhCAAAQgAAEIQAACEOhHgEPkfoSIQwACEIgEJjbU1sTqdT1vPzvWokMAAhCAAAQgAAEIQAACEIAABCAAgW2QwA7b4JpZMgQgAIEtRmCimmnT2rUprZ9IY4uWpomdDknL3/P2NLbj8qRY6mNPrF+bxibWpYm7t9iSmQgCEIAABCAAAQhAAAIQgAAEIAABCIyUAIfII8VJMwhAYHsjoJ+sWPfmVyV973jp6y5M44csSWM7L59xm432xNp058mn1T97oT6TX1qeUYsBAQhAAAIQgAAEIAABCEAAAhCAAATmOwEOkef7E2J9EIDA1iOw0wPTsvecV80/Xh0Ab0gLdl4y2FrGltbfWu4dHqt+j8HqyYYABCAAAQhAAAIQgAAEIAABCEAAAvOAAIfI8+AhsAQIQGD+EhibPPit/xG9IZapbykPWzvEdJRAAAIQgAAEIAABCEAAAhCAAAQgAIGRE7gv/MN69c+WjpwcDSEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIVL9gub1D2BYOkZsegvy+/JxsR+kYEgIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAXBCI55HWPY9tydJo8pdyt4pvPhwit0HMATo3h9Xkz/OwIQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhsCQJNZ5Ylv3z5cF4plufOqb01D5ENId6gfSUwJV+sRYcABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsK0QKJ13Np2P2r9V7m0uD5GbbqwEZ65uvmkNczUffSEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIH7FoEtfQZZOl+d0zXMxSFy04JLNzeb7eR52uRs+lMLAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQKArgbZzSse69uqSp575mIt50qgPkedi4b7xXOaAmuz1TQH8EIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAARmSWCQ88f8jNP2sEtoqpd/ZGNUh8gjXVR1d775rn1jXqyVvnrnnXc+a2TEaAQBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAoCIwee64ulLzM0nzieeW9pVkrC/Fh/V1nb+1/6gOkVsn6RAcFFLMNwj78ul+s2nTpnXVA31THsCGAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIDAMAZ036tyxqv1NoT6eVVq3LKRv5nKu5FYfYx1WEHOsl2T0SdelQ2rrkguDv1LruHLipRzZllGXb4cQy3XnulZS1+Lq2rW6llfXjtXlPEmv075oe+3qYb0kq3DdU1Jxj6jbh4QABCAAAQhAAAIQgAAEIAABCEAAAhCAAARGTyAeuFrfNDlNPJTN9Y1Vjn3K1yVb/mhLt++eSr+juvQt5Lsm/Y5JWr+30l2X686xdF6U0uNVmTPW53VLKi/ayrVtvSSjT/pmQ4ewsxlaxKAHpV54vzrnta0v5kjPh+N3V4FfVNft1aXD4qZLa9IVD5RtO1aSVckUB8U91IcBAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzD0BHaJ6+KwwSp8V5jIevvpA1znxADfX81zPbZnPbX9Jer5SLPq65sUa6V5L7u9kD3uIrEnjYWmnyaqkfnWG0HRTpXj05brWlfvabN+Tc3xfsocZceMOU08NBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQg0I1APMOzHqX0Lpdn65LrHNVYL8lST/uijLXRn+vKG2YMVTfsIXLXBWpRPphtq2lbvGJ53L7otx5j9mlu63k8t71OHQD7m8SudQwJAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzC8C8QzPepTS2y6dB7bFY0x3Ltsjxuy3VE6Muyb6oy/qsUf053rXvLyukz3Xh8hehG6idJjcdHPy5zH7oj/3ORb91jW/NoJ+39i+kqzC9VDMB8nSGRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMD8JRDP8KxHKb3pGvQAWfkapX72WzpHtoZtyTjsjz7reW4/v+MjkXN1iKybKh0ae9GluEHEmHRfsTb6rEep3Gjnels8ziNdG6LtXpyPhAAEIAABCEAAAhCAAAQgAAEIQAACEIAABLYeAZ0BeliPMj8jtD3IAbJrmqTmL8Vyf1yn89t8MWa9JNVr5GPQQ2QtYjYHqqX6phuLfum+DCHa1qPUOqNtXZtCP1NhO0ofGDse57KeS9VrmItl9NUJvEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAJzRsDndJrAuqV9svtd/Q6Vm+JNc0S/dI24hp5nes22Y1702Z/7BrEjl751gx4i9204YEJpsdFnmLFt7nO+/cNKHy5rLvfwvPqXFnU4rMNlyfyqXAwIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgKxLwOaGWYD1Kn/lZNh0Gd407r03GtVhXfhyuty+Py1/yOX/O5SgPkXUj8Vu4Xrz9lvJLj7Z9sV5xD+fLtj5K6QNkzykpnw+L/Q/sOU/rYEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALzh4DP9rQi61FK9xUPkKPuuGVbzDnDSK9RtR5Rl69kR591S/exbPI73lmO6hBZC4oHwF5AyZ/7oi3dl/pJ97B/WKkH7p7qYVvSP1/h+eyLc1svfStZMd+/ZfS5FgkBCEAAAhCAAAQgAAEIQAACEIAABCAAAQjMDQGf7am79Sil69wv98n25bhtSfssHctt+weRVft6qEYj1vY80+ttsl3neJTuG30D66M6RC5NrAXGA1XlRF/USzHfoGTUnWtftJ0rqYcYD41jnmI6OLZ0nWt8qOwaSfXyJTvWeh75/a1l6XGNspXHgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABIYnkJ+5lTrp7M7D+fL5HDBK59pXyrPP0rlRNsXiOpSvEWVJjzl1QagpxZp8rp2VHMUhsm6y3+GoQZTyFHMP674p19lvqbj1Jhlz9AB9MBx118qn4QNg21qvLuVpSNpnv6RGXiufY9I13Kdn8QoBCEAAAhCAAAQgAAEIQAACEIAABCAAAQiMikA8e7Pucz7Z+aV5c5/y7ZMe7egv6fa1ydKc9klquD7X62B4iXnBvZmqvFmNLofIniQ/EG2aWPkxt82OsVxXf/nsl/TQw9McjudS8dKhce53v5irvrYV97zyl+7LvpinOg0fLPcsXiEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIG5IqCzPw+f1UWZ67J1uS7a1h1Xji77u+jOjdJzVa2mzh0dj76uep5XsuVrGpq77+hyiNy3yZAJWqAOYA3Jutq1+fI62Rqu0YNwrzbdB8XxwfnQ1z710eU+ti2r0NTDlk/DUrrXJp0BAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzB2BeBZn3VKzSu936RzQOdJ9Rd8getViqp/qNFwf7ei3bpnnyb9Fx2wOkbX4eGCqhUdf1POb6hJTTrzcP/qinsd98Ksc6TogltRo0hXTPTku3bZi6mVflI5Jyu8RdfuQEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwOgJ6OzOI+ryyc4v+3VmGGO2JbvornWu7WGk1yRZGurZNGIs6s4v+RxrlbM5RM4baxGlQ1MvzrGYZ13Seeobdduqj3nS9WDkl1yY2fEgOOquky/q6qHhdUr6avKX4urp4V62kRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMDcEIjncp7BPsn8Uo58+eGv7VzmuTEedeepf+6Xz+uwLumhmIZzot2L9GJRd459lk1+xzvLUR4ix0m1QB2gWjpm29L+KB2TbLoE34fAMUd9FPPcjjlfUsOHytJ90GtftFVvW1KXfbZjvArPGI7NcGJAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACIyegc7t82CcZL+XZ1pmh86Tbli/a9pd87uWaaEfdPaIv6tWUU2uRng/lalj2rGk79zs+KzlXh8ilRekG4qGqbyhKxWWXLvWM/tzWA9C3kZUj3UM94wGxY16LY8qXz371UUxSI8asW/YypmubbPuREIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwGgJ+BzPXaMtPV7Kse3zQkn5LKMun/0l6bhjVfpUvueRz7qkRrSj3hSriyZf3CP65kQf5hBZi/NBa9dFuSaXeX288VyPtdJ96cFoPbKl++A3xiv31EGyD40tFfP9uNY+9XBMMtejrRoN+3K9DvICAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzAkBneV5lHSfFzpm2we/0VYf+R1rk465XjL6ou4c9Y+6bUvFSsP+XJZym3yubYpv5h/mEHmzJsGhBcRD1BCqoSjmnJJUfswRYPdTfrwcky/qtit3PVSveBzuaRkPlJ2nmK+Sz7VNUjWOuR4JAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzA0BnQt6WC9J+XwpX2eHtiV9lmi/ZNSdk/uj7X6uc439uVSehvwajltvk4rlw31y/1D2bA+RtZi2g9Kucd+Ue8l2raVAKu6Ypf0GrRxd0e++lbsetuPhsX0xRz5dXoNt5ViX1Mhlz8srBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsKUJ6DxPI0qfJ9pvO5c+Z5RULMpct+0895bfMcumeeTXcLxnzbSd41guZxvP+82wZ3uI7GZapA9Rrecyz41xxVQvny4N65Yln2Kq04NwvXSNeEAc9TzmOuW4n3LkL115TLaGcjUsc70O8gIBCEAAAhCAAAQgAAEIQAACEIAABCAAAQjMCQGd7XlYt5Rfuq/ctl8yHvqWdPl8OV+2RvQ7Jn/s31WPddajlK6hfhq5jL46YdiXUR0id5nfcHTIKj1K18eckk8PwXXKta1cPyjpypEdD4/l81CtYhryO2bdcfuVa9050XafKKUzIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgS1PQOd7GiUpX/T7XFE+6Y7ntmKO53rMdcy5MebeimnY7lm91yaf8y2Vt0XGljpE1g350LV0YwajHOuWyi/pAq18SR8Wu96xKjQjJlvDa1HftgNi5ypPNb7sdx9L+yU1or/n4RUCEIAABCAAAQhAAAIQgAAEIAABCEAAAhCYCwI6w/Mo6fLZbz1K1epcMfpsl6R9ypcebftKMvZv0qt2U+uQ3jRUP+dj2ENkLS4/ILXPC3fcft2MdefkPtfYH/NLuh6Mhup02Y4+z2XpmKX8Oki2lN+2+1oqZl1SI5c9b+/VsehDhwAEIAABCEAAAhCAAAQgAAEIQAACEIAABEZPIJ7/ubt9UUov2fb7jNGHwpaKW5fUpRHrnBNjpdxYl+uyNdRLw/0t7auDk/Goxzr7LR2z3UkOe4gcm2vipsNSxyxVF3XbkhqKaTjHsOM3je1Tng977XOeY/ZrfbqirTmUL791z2u7CtVx11tGv3QNxTQse9bM17bYzEwsCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAoERAZ3f9hnMslS/dtvUolaPzw+iLdpOufMckS7pz8nj0V6Uz5o7rUMxDfg/rlvZH2RaLeY36IIfImmw2h6BxserjfpZapHXJXFdckBdOxpwjXxzxINl+zafLMdvqkR8kq0Y+z+9cSQ3buV4HJ+Ml3T4kBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgMHoCOs/ziLp8su0r6fZJ+rxR0v6ol3yK+3IP23ltlTp10Oxe8uW6fBrya0QZc3vRwV/dr2/lIIfIfZtVCZpYh6xegA9e89qY53xL1wquDnM1Yr79kqpxnWwP1W2cNFTrg2K5lB8PiWM8zuPeuXQPS8U9oi5fbjsPCQEIQAACEIAABCAAAQhAAAIQgAAEIAABCIyWgM724oi2dNtR2t8mde7ouPrbzqXPI+X3FefK89XLfSUdt8/xkpQvH6W6PGcoe9SHyKVFaPE6TI1Sebkvxh2LPukaktYFVsOHzbblUw89OMdka7i3pA+TPU/MjbpyY31uu69kHK6JPnQIQAACEIAABCAAAQhAAAIQgAAEIAABCEBg9AR8Zhg72xel9CbbB7nqYd250ZbPtqR1+9ts5cSrMqds65bKs25Z8vWy5uh1NofIWuygh6SxxnqUvs3ok64h8DrYldSIum1Jx7U256iHdEsfAnsex2wrbr1S6/t0jW1L+a1PqlPCsSkHCgQgAAEIQAACEIAABCAAAQhAAAIQgAAEIDAnBHSelw/7JKOuPPuiP/rsjwfCjttnKb91S/tk25fr7iepEe3oc6xOmsyz3lW6X9f8qbzZHCJPNakULSA/MPWi5M/jjsUe1pUvmDrY1Yi6QMFIsAAAIABJREFU+8inod9Hti7bh8HSvR738beS3UNxxeL6pLsu6u5RitlXldYj2lF3HAkBCEAAAhCAAAQgAAEIQAACEIAABCAAAQiMnkA8c4y6ZrItGXXFfL6Yx2xbKs+6ZKyT7rj99uV2lbpZH/d1ru2SVL2H4hrO61nTr45Pe4bQBj1E1qT9Dkbbcrxo9Yh51iWj7jz5NAzRh8WypduvHNXI9jpV68Ni59n2XMptuqpQvSZJ94zSuuIaud3z9l7bYjEPHQIQgAAEIAABCEAAAhCAAAQgAAEIQAACECgT8FlhOdrz5jmy7WuTzmuTPmN0jmzpltHvXMe0Oum2nSu/dI2Sz35L58rOR1vMuV1ynJsGPUSeKpxUNJkPRqPuvOiLeoxLVw/HJT0E04fE8eA3+pWrevk0pCtXI//2sXvkuarxpTrrUdov6aG4hmWu10FeIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgS1KIJ4xWrf0QmxL5pdyok/niXm+ffL7vNF6lFF3jfu7zn7l6tKI0nov0nuNvqg7J/qi7nhnOdtD5KaJtCgfrEZd+V6w4tblz4fjrpcUTB8QW5dUrvzWK3XqINg+95OMl/vbF2vl0/CctnOpHPukMyAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIGtTyCeP1rPpc4PNeT3ldv2d5Hq57x+epwn6q6PMsaleyjHI+r2zVqO+hBZiywdptofpRaf58a4APtg2Ie4qrFfuRqKWVc/2foGsnXJrleVWo+YL4fmlE+jScZYnRhybSMhAAEIQAACEIAABCAAAQhAAAIQgAAEIACBuSHgM0J3j7b1kow+6bbVx3YX6QNj1VmX1JCMeuyX+5Uf1yBbwzXWo5QeR6k+xgfSR3GIrAX5YDVObn8unVO6EfWJ+dYFsnSQbMCqk+51WPrnLGTHqzJn2E0x5Wk4br0k5dNQLgMCEIAABCAAAQhAAAIQgAAEIAABCEAAAhDYegTys0fbJWmfVivdtvVcxjzHfE4ZbeuSjkuW/Pa5t6X9lvJ7yKeRy553+tXxac+A2jCHyJp00IPSWBN1L7d0I5pDUHV4HHXXOCapuA+Z84Njx1XnXsqP65DtS3nWJTVs96zpV8edE+V0FhoEIAABCEAAAhCAAAQgAAEIQAACEIAABCCwJQn4vNFSc0fda5HPfutttvsoR+eOGrEu9yvH/aw7P9ZH3XHLepLw4n5yRT2ktKoD18RD0NbOWTCva7NjzAe9ame/ZK7bZ78Pf1VX0mN+m676prhiGo5bt5Tfw7ql/FF3HhICEIAABCAAAQhAAAIQgAAEIAABCEAAAhDYegTigal1S61Kuu0orccc51q2xZwTZTwobtJjvvQ4h/Wed/oQO/e7znn9bOc1ymEPPkt1uc+2pRYhPbdzv3OiVE7p8Dj63VfSh9WxR9RVpxF91u2vEyZzok95Hk16KW4fEgIQgAAEIAABCEAAAhCAAAQgAAEIQAACEBg9gfywVDNEX0m3zzLWyJdfimvkftuK6YBYtob9TYfG0e9cy1hvXVIj5tiOUrqG8vJR8uU5M+x4CDoj0MHIa9vsGJNu21LT5f78INg50R9111sqX/F8jrxGeRqxrknvZfZeY1/Xx3iTL8/BhgAEIAABCEAAAhCAAAQgAAEIQAACEIAABGZPoHQ4mvtyW7PKZ3+TnufFg2LH+h0Ix5qoxzmb/J7D0uu1LakR/V3suqjfS34Q2i8/xku1uS/a1geRyo2X5pedHwTHnvHg2LWui3ny5X3k08jzcjvm5LpsBgQgAAEIQAACEIAABCAAAQhAAAIQgAAEIDA/CMSD1ZJuXy61evnsj4fEeSzmSS8dBsc+1l0XpXsPImOudA3P0bN6ryVfjBd1H44Wgx2cpfroi7ra2W6Szolx6fGKOdHfVKN8jVKu/ZZ5D/k9HJPdpOcx1yIhAAEIQAACEIAABCAAAQhAAAIQgAAEIACBLUcgPyyNdpOu1SnmeK579fZbtvmdk0vV5D7ZGvb3rJnrcTzKPK8Ua/K5tlXu0BqdfVA3HA9c3dH+XJbi9lmqn+ricB/PFW37lG+/dPndy9J+S9fm8Xx+5Xu4xjYSAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ2LIE2s7vtJIYty4Zda84+qIe+7g2xu1zXpOd+z2v60oy5sR47h+JPdeHyPkiBcSHrFFXnm1L18qOI8at5z1zW/Xy2S/bfaNfuns6rlzXWUafdA3HYl3010m8QAACEIAABCAAAQhAAAIQgAAEIAABCEAAAiMnkJ/JeYLcH23rlnmN/ZLWY070O25fP1t98tzY23H7ctv9Y3zOdB98zmaCUo/c12YrFuPWSzLmlnTX6H4cL/kcjzLqrrGMMelxxJzol94Wy3OxIQABCEAAAhCAAAQgAAEIQAACEIAABCAAgeEJtB2sNsWi33outaLcJ9s+x/v5Yty6ezTJ2Fu6hnN7Vn+7VOPaTnJUh5ylPrmvzVYsxnPdtvNy2zebx+W3z3rMjb7Y0zkx3qY35Uc/OgQgAAEIQAACEIAABCAAAQhAAAIQgAAEILBlCOQHrZ41+pt05TrWJPMc59kvu+QrxUu5ytNoizleJ06+xDntL/kc6yR9cNopuSWp1KeLL+ZIz21PGWPOyX32qyaPtfWJMddGmevOt4zz2mfZFnMOEgIQgAAEIAABCEAAAhCAAAQgAAEIQAACEJg9gbbD0q4x5+XSq4t+64pZl7Ruv+0YK/mcL6kR823XgckX9xjGF2v66qM65Gzqk/u72DEn10t2yecbd0zSeikmX1O8XyzvZxsJAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIbF0CXQ5aY07UtXLbufRdyV+KRb/7NPlir6i7b/RZl+wXd26eZ39nmR+cdi4sJDb1yv1d7ZiX67ajtK6lWbcs+WKsFI8+6fnI6x1v8juOhAAEIAABCEAAAhCAAAQgAAEIQAACEIAABOaWQNPBaZNfq4kx65Zere1cxnrH7LMdpXXnNPXP/V3tpjz7B5KjPvAs9RvG5xpL3VSu57ZzmvwRjHMsXRtzcl/MdV7J5xgSAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQmD8E4sGtVxV9UW+L53m2LVUr3bZl7rctqeE8y+irEyZfYtz+rj7nDyRHfQja1q8Uy33Rtm7pG4u29NxWnn2WTT75NUp5ub9OzF5iXRaaMrvkTCWjQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAgMTKB2i5k365cR4k+6ejlvKbz2XjtlvW9LDMUv5o16ym3zya+T1Pe8Qr3NxwNnWsxTLfU129Jf06BMK27k0JvtjrmMlX8x3XsnnGBICEIAABCAAAQhAAAIQgAAEIAABCEAAAhCYPwRKh6q5L7e1+uiLeozZb+m7tm0Za6Ie49Gf97Fdyukai3md9Lk6BG3q29Wf59m29M2V7NynXPsso8+9cl/MjTlR75IT89EhAAEIQAACEIAABCAAAQhAAAIQgAAEIACBrUMgP6gtrSLmRN250Wfd0jmS8uX+JrvJ7355fFi/6waWc3kI2tR7EH+ea9vSN9xk537lR1+T7r6WMa/N5xgSAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQmH8ESgeyJZ9XHmNNep4b8xRrspv87leqdSyv7ed3fChZOhwdqlGhqF/vpnjuz21NZZ+lp8/tmJvrrin58z65HWvb9GHr2noSgwAEIAABCEAAAhCAAAQgAAEIQAACEIAABDYn0HSwunnmTE9e1892dcyLeikun3MsnRdj9pVySnnOt2yqc3woOdeHnP36N8VL/jZfWywHE3OjnufJboo3+fMeXfPyOmwIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgMAJdD1Cb8pr8XkWMR91xyZLfPsuu+TGvqXfMKfWP8aH1LXHI2W+Otngp1uYrxQSnyW9weTy3ndcmh6lp60cMAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQmB2BYQ5W85rczlfUFLffMtZ19bmmlO+YZL94zB1Y35IHn/3maorPxt9UK1BtMYNsy2mLuR4JAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzB8CbYetbTHfQVtOjEXdtZKj8rtnUz/HRyK39EFol/macgb1C1Bek9sliF1ySnX2zbbefZAQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAcARme7japT7Pye248qbYoP4uPWPOSPSFI+kyWJMuh6xtOcPGmlbZ1m+UNU298EMAAhCAAAQgAAEIQAACEIAABCAAAQhAAAJbjkDTwW3bCko1JV/s0RYfNub+bfXOGZkc5gB1VJN3mbtfzmzjvpe2Pm0x1yMhAAEIQAACEIAABCAAAQhAAAIQgAAEIACBbZdA26FsWyzecb+82cY1V78ecT0j07f2Aekg8/fL7RcXtC45JbjD1pV64YMABCAAAQhAAAIQgAAEIAABCEAAAhCAAATmD4FhD2a71PXL6RePlAbJjXWz1ufL4egg6+iS2yUnhzdMTd4DGwIQgAAEIAABCEAAAhCAAAQgAAEIQAACENh+CAxzcNulpkuOKQ6S65qRyvl4cDrImgbJFbhB85tgj6pPU3/8EIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwNwQGNWh7KB9BskfJHduKIWu8/kwdNC1DZofMNTqbOvzftgQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAtk1gtoe5g9YPmr9F6G4rB6fDrnPYuq7w57p/13WQBwEIQAACEIAABCAAAQhAAAIQgAAEIAABCLQTmOsD2mH7D1vXfrcjjG6Lh6CjWvOo+ozwcdAKAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQmMcERnXgO6o+WwTV9nCQuqXuYUvNs0UePJNAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACaUsd5m6peebkkW6vB6Pb633NySagKQQgAAEIQAACEIAABCAAAQhAAAIQgAAEIDAyAtv0gXGJwn3xsPW+eM+lZ48PAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQGI7AdndQ3IaBA9U2OuUYzMpc8EIAAhCAAAQgAAEIQAACEIAABCAAAQhAYFshcJ86BN5WHgrrhAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEOhGYKxbGlmBAMwCDFQIQAACEIAABCAAAQhAAAIQgAAEIAABCGyDBCa2wTVvtSXfFw9E74v3vNU2GBNDAAIQgAAEIAABCEAAAhCAAAQgAAEIQGA7JHCfOoTeXg9Ut9f72g7fb9wSBCAAAQhAAAIQgAAEIAABCEAAAhCAAAS2KwLb3QHz9nDYuqXuYUvNs129Y7gZCEAAAhCAAAQgAAEIQAACEIAABCAAAQjMYwJb6sB3S80zJ6i3xYPRUa15VH3m5MHQFAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEJh3BEZ1GDyqPlsE0LZykDrsOoet6wp/rvt3XQd5EIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQDuBuT64Hbb/sHXtdzvC6Hw+BB10bYPm5xhnW5/3w4YABCAAAQhAAAIQgAAEIAABCEAAAhCAAAS2bQKzPeAdtH7Q/C1Cdz4enA6ypkFyBXTQ/KaHMKo+Tf3xQwACEIAABCAAAQhAAAIQgAAEIAABCEAAAnNDYFQHtYP2GSR/kNy5oRS6zpfD0EHW0SW3S07AUKvD1OQ9sCEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIHth8Awh7ldarrkmOIgua4ZqdzaB6eDzN8vt19c4LrklAAPW1fqhQ8CEIAABCAAAQhAAAIQgAAEIAABCEAAAhCYPwSGPaTtUtcvp188UhokN9bNWt+ah6Nd5u6XM9u4Abb1aYu5HgkBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhsuwTaDmjbYvGO++XNNq65+vWI6xmZvjUOSLvM2ZYzbEzQSrUlXz/Aw9T060kcAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQmHsCwxzElmpKvrj6tviwMfdvq3fOyOSWPgztMl9TzqB+QcprcrsEsktOqc6+2da7DxICEIAABCAAAQhAAAIQgAAEIAABCEAAAhAYjsBsD1m71Oc5uR1X3hQb1N+lZ8wZib4lDzz7zdUUn42/qVbw2mKG25bTFnM9EgIQgAAEIAABCEAAAhCAAAQgAAEIQAACEJg/BJoObbXCtpjvoC0nxqLu2rY5Bs13z6Y6x0cit8RBaL852uKlWJuvFBOoJr8h5vHcdl6bHKamrR8xCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYHYEhjlkzWtyO19RU9x+y1jX1eeaUr5jkv3iMXdgfa4PPvv1b4qX/G2+tlgOJeZGPc+T3RRv8uc9uublddgQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAYAS6HqQ25TX5vYoYj7rjkiW/fZZd82NeU++YU+of40Prc3nI2a93Uzz357Zu1j5LA8jtmJvrrin58z65HWvb9GHr2noSgwAEIAABCEAAAhCAAAQgAAEIQAACEIAABDYnMOwhal7Xz/bMMS/qpbh8zrF0XozZV8op5TnfsqnO8aHkXB5yNvUexJ/n2rb0TTfZuV/50deku69lzGvzOYaEAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5h+B0iFryeeVx1iTnufGPMWa7Ca/+5VqHctr+/kdH0qWDkeHapQVNfXt6s/zbFt6upKd+5Rrn2X0uVfui7kxJ+pdcmI+OgQgAAEIQAACEIAABCAAAQhAAAIQgAAEILB1CDQdvMbVxJyoOyf6rFs6R1K+3N9kN/ndL48P63fdwHIuDkHbepZiua/Jjv6SHn0CYTuXhmR/zHWs5Iv5ziv5HENCAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC84dA6TA29+W2Vh99UY8x+y1917YtY03UYzz68z62SzldYzGvkz7qQ9C2fqVY7ou2dUvfULSl57by7LNs8smvUcrL/XVi9hLrstCU2SVnKhkFAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQGJhAfghbatAvJ8abdPd13FJ+67l0zH7bkh6OWcof9ZLd5JNfI6/veYd4HfUBZ6nfMD7XWOrWcj23ndPkj3icY+namJP7Yq7zSj7HkBCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMD8IVA6VI2+qHvV0WfdMs+Jfum2LZUf/bYlNZxnGX11wuRLjNvf1ef8geQoD0GbeuX+rnbMy3XbUVoXAOuWJV+MleLRJz0feb3jTX7HkRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMDcEigdqmrGJn8ec56lV2s7l7HeMftsR2ndOU39c39XuynP/oHkqA48m/rk/i52zMn1kl3yGYJjktZLMfma4v1ieT/bSAhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGDrEoiHtV5J7ot21JVvO5exVykmn/3u0+SLvaIe693D8S62c/M+9neW+cFp58IssdSniy/mSM9tTxNjzsl99qsmj7X1iTHXRpnrzreM89pn2RZzDhICEIAABCAAAQhAAAIQgAAEIAABCEAAAhCYPYG2w9KuMefl0quLfuuKWZe0br/tGCv5nC+pEfNt14HJF/cYxhdr+uqjOuQs9cl9bbZiMZ7rtp2X277RPC6/fdZjbvTFns6J8Ta9KT/60SEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIEtQ6B0wKqZo79Jj3nOyWWe47j9sku+UryUqzyNtpjjdeLkS5zT/pLPsU7SB6edkhuSSj1yX5utWIxbL8mYW9Jdo6U6LjleXTtPXosqqeFc50VfnRBy8phrc7/rLGOefUgIQAACEIAABCAAAQhAAAIQgAAEIAABCEBg9ATaDktjrIuu1TlPMuqK3VNd66rrN9W1obqc47zKtZnPOU0x+6O0nveV3yPG5MvtJp/r+8rZHnKW6nNfm61YjFsv+aOvpOe1tnes5rj/a1/72qNPPPHEJ+6zzz4nLFmyZN+JiYk0NuaUaU72S+ZD+TEebeW6xv68vsl2T69n2D6et0l6fsdtt0nnWirXuqXrZW/atKnI1TlR6j4XLFgwxc0x982l401S+RrmaY7yuZf0fqMp1/6SVE/P53i/eRz3elWnMWwfz9skPZ/jttukcy2Va93S9bJ5/tN8zKWf5PnP/Kz1vsplP47K1zBPv4/kcy/p/UZTrv0lqZ6ez/F+8zju9apOY9g+nrdJej7HbbdJ51oq17ql62Xz/p/mYy79JM+f97/eO7o0eP+X/3d2v/dR5CfdHFWX2229mnLtL0n183yOt80RY7z/ef9rz+jSGHYfed81Se85x223SedaKte6petl8+f/NB9z6Sd5//P+13tHlwbv//n/53/Te3rdunU33nLLLZddfPHF//a6173uqirv9urSobKGNrqvNrsUiz7rkhqxp+06MPky8w3Wy4/xUk0eb7R7u7Yx3DdQqs990S7p9rVJxeKlhXW1d33961//iJNOOullu+yyyzH6Q06Xht6sCxcunPqDr+0PRf/hKKmDzzjyujwmO34wxLj/AMmlcvyh4rld517Ose11lKRynRfrPId8TcN1zpU0Q9c4Jlv5tl2b5zknSudIqj6vFXeziHXy6TlquMZx98lt5/L8/bar8RVfzNTPVJLnP43Ke2zaM62ZWc7QGd6XuVTctd7zscZ6nNt6SSrfa5Aec2S3DdepRkOS5z9NzCynPdOameUMnZE/d9uKu5bn36PF53+Pg/eS94ht78OSVK7zYp33mHxNw3XOleT9P03LvKc905qZ5QydIb/ro1Tctbz/e7R4//c4eC95j9iO+yffV8p1XqzzHpOvabjOuZK8/6dpmfu0Z1ozs5yhM/LnZFtx1/L+79Hi/d/j4L3kPWLb+7Akleu8WOc9Jl/TcJ1zJXn/T9My72nPtGZmOUNnyO/6KBV3Le//Hq1t4f2vZ6YzpTVr1nznwx/+8Duqs8f/qFb/q+qKB73WfbjbZjsmCDG/zY6xXC/ZTT75+47eyVvftMaE0glU9EVdTWw3SefEuPR4xRz7daqrK7fl+62zzz77+XvttddT9Wb0G1JvXl0l2294TeShzeE3taU/AGKOfZaKKd89NZ902+5l6fWozrp7ucY9Y1/5NGKO69zH+ZL2Od9Sfvexr3ZUL653XDK+sWVrKE/D9a6L/hirk8OL85Wj/hr2Rem1Ose2cpynWvmVI590x9S/ZHttqvVwT9nSNZRnXbb7Rhn90jWf6jyH6y29HufGXq5xT8dke8Qc6cpxT+dHn/Mtlash2z73dr3jkjz/3l4QC/OJMvql8/xn7i2xyof5af/5vW1flN6rzrGtHOeZOe//aSZiI1aRkd/rZsj7f+au9J6SV7qGGFmXbZ5RRr908Y1sXW/p5+Lc2MvPyD0dk+0Rc7w+93S+pH3Ot5RfQ7Z97u16xyX5/J/+/DKfKMXItnTxjWwV07D0c5HPuvJjD+fnPvnjM3Od+zhf0j7nW8rvPvbVjurF9Y5L8vx5/t5L2g8a2ica3j/eN9EfY3VyeHG+cvxnu31Req86x7ZynKe28itHPq9VvXWVbK8tLKmuVb2GpfKs22+fZfRL13yK6XIsSq9HPuvu5Rrna+7okz/arnMf50va53xL+d3HvtpRvbjecUne/7z/vZe0HzS0TzS8f7xvoj/G6uTw4nzl+L1tX5Teq86xrRznqa38vP+nmYiNn5mfg6UZyrbPjyYydYz3/8z3v/iJzfj4+N73v//917z//e//XsVPP2uhxOnkzW1jlox5bX7n5TLWtPXL84ayPfkwxaXa3Bdt64NI5cZL65TdO1lsjsU5Drzxxhs/UT3UffRwtekl/UZSQ/k2btw49YHlN4hyPFzjmP35G0v/FcK9Yq7rXWeZ18svn+d2j5gXdb+JJTX8IVAbky/Kl185eV/1l1/SOV6rpHW18ryWjlk6Z3LautZ6LtXDnByLfaKuuPK1PkkP5Xjt9rsuStfn+WalHnEtynNNnEtzOGZ/9CnG85/5fMwpl+IWmSsufvlzdJ38PP/pfel9qL3r961YeU+bm6TZKTfyVUx9/B5yHz8HSevuYzvG7HOOpIb8TUPr4PlPf6ZGXmKTPyfZ5hl1nv/0n+dmaD6W8lv3Xpft94p8cS9GzqrV8B53rOed7uscPv/5/PdeinvF+8f7xtL70vtHUj5duc/9Yg3vf97//nNb+8WfafXmmXzRfnFOvq+0p/yZ6BzvVUnrauV9Z+mYpXMmp53688p2lOrh94n9sU8t/QAVAAAgAElEQVTUFVe+1ifpoRyv3X7XRen6PN+s+Pzn///Fvah94j0T95r2mGP2R59i/Pk/8/1pTrkUt8hccfHL38euk5/3//S+9D7kz//5++f/hg0bbt5vv/2eX+3h67W9J/eypP5LXbSl226KxRzndpWa2rnSNXK7yVcnt71Mv+PbssqxvLbNjjHpti01Q+7PD4qdE/1Rd72l8hU/8NZbb73M/4NBTg2/Cf2HgGTU/YFlX69q5v+Qkk95eiNrqKcu/w+bqCse82RreB09a7q//JpbQ9LzON/rckxSl4ZzJL0W+50Tbee7h+9dtdLzuOw81zmSulSrnLhuz21faQ3yaTjXvVTjoZjnc57i9kfpXs53D9sxN+ruZ5/rbEtq5Pfi9UpGXbk8/zIzMxUjD/M1Q55/73NGPDTMTDLuVcWcY3bRNlfnuY9s6bEf7//pPxPER8O8JDV4/09/7oqH9pr3nfeS9pF8TczMVPUeznUv3v+8/+Pe0L7Q8D7xZ6D3maVznF8XVS+2vfcko+5+9rnOtqQG73/e//F/12lf+fMu6torMU+2hvdhz5r+80V+7zFJ7zPnx30Y92rsmc8fezrPfWRL91ySWq96xzmdn+c6R1KXat3LPGRr+F6kK9c9ZXs4171U4xHznWcGsZ9jMd89lKfhmGTU3c8+19mW1MjvxeuVjLpyef5lZmYqRh7ma4Y8f/78j3tD+0LD+8TvV/m9nxyz7XrJWO8a50m6n32utS2pwfufP//j57r2kv+80/5YsWLFYypxvbaK7Gpo4+aX/Ir3NvVM3bl5TvQr5tomf8yRruGanrW5bX+r7L0TWlOKwVJd7rNtqUbSczv3OydK5eik1rUl3THJ3qluL/+gm2+++at+uGqUf4DIp+EPBsd73p5fPl3+EIkx1+Z/0Dmnq4y9o+76ks8xrU2b1x9+9uc1tp3re3K+7fhGsE/SI/rUMw7PEX2eTz7ne62yzS7O6/oYl27buV6L/NJtq966pPLtk3R+7Zy0pSs3DufFXo4rpiHpe7BdBwZ48Tyub1pHqaXvz0ydE3vGvn4evifn2zZb+e2T9Ig+M3Asn1N+zyfd+V6rbLOL8ypXI8al23au1yK/dNuqtS6pfPsknV87J23pyo3DebGX44ppSPoebNeBAV48j+ub1lFq6fszU+fEnrGvn4fvyfm2zVZ++yQ9os8MHMvnlN/zSXe+1yrb7OK8ytWIcem2neu1yC/dtmqtSyrfPknn185JW7py43Be7OW4YhqSvgfbdWCAF8/j+qZ1lFr6/szUObFn7Ovn4Xtyvm2zld8+SY/oMwPH8jnl93zSne+1yja7OK9yNWJcum3nei3yS7etWuuSyrdP0vm1c9KWrtw4nBd7Oa6YhqTvwXYdGODF87i+aR2llr4/M3VO7Bn7+nn4npxv22zlt0/SI/rMwLF8Tvk9n3Tne62yzS7Oq1yNGJdu27lei/zSbavWuqTy7ZN0fu2ctKUrNw7nxV6OK6Yh6XuwXQcGePE8rm9aR6ml789MnRN7xr5+Hr4n59s2W/ntk/SIPjNwLJ9Tfs8n3fleq2yzi/MqVyPGpdt2rtciv3TbqrUuqXz7JJ1fOydt6cqNw3mxl+OKaUj6HmzXgQFePI/rm9ZRaun7M1PnxJ6xr5+H78n5ts1WfvskPaLPDBzL55Tf80l3vtcq2+zivMrViHHptp3rtcgv3bZqrUsq3z5J59fOSVu6cuNwXuzluGIakr4H23VggBfP4/qmdZRa+v7M1DmxZ+zr5+F7cr5ts5XfPkmP6DMDx/I55fd80p3vtco2uzivcjViXLpt53ot8ku3rVrrksq3T9L5tXPSlq7cOJwXezmumIak78F2HRjgxfO4vmkdpZa+PzN1TuwZ+/p5+J6cb9ts5bdP0iP6zMCxfE75PZ9053utss0uzqtcjRiXbtu5Xov80m2r1rqk8u2TdH7tnLSlKzcO58VejiumIel7sF0HBnjxPK5vWkeppe/PTJ0Te8a+fh6+J+fbNlv57ZP0iD4zcCyfU37PJ935Xqtss4vzKlcjxqXbdq7XIr9026q1Lql8+ySdXzsnbenKjcN5sZfjimlI+h5sS+6zzz4nVOK66nLTeFgsn654wNykO9eyKqtrZWtYWs9t+yU9Yk6bz7Gi7BEohlqdeV2bHWO9p9hrbb9krttnv+ra9Jif6zpEvlRTxk3gjeGH7w2pPOveFPnmU443j3L0V1icq5iGavTXNTxPzzvd2/Vxw3otrvG86u189ylJ5XhO57tXlKr1vJKax3NIyrZfUlde7x72x/XY57/aI1uX53A/95D0vbqPcjy8JtuuV08P50h6lHp6bVG61nP6/t3LfRxXf8+tHJ7/9LMyG7Hi+fP+j59Heq/E9532it9Tfo/Jp2G/dL8/pWsopj5+D8rnHEmPUs84v/u41nPy/ufzX3vBe8n7yPtD+8t7Tzl8/vP5770SP3v82Rf3jT9bvH9iTD718WeU95197t0kVec53d+9olS955XUPJ5D0mu0VE5e7x72xzXZx5///Pkf96P3mPeT95Ck97r3kfenbO/JGNMe0+XhHEmPUk/vzShd6zm9793LfRxXf8+tHD7/+fz3Xol7z3s/7hvvLe+fGJNPfbw3ve/sc+8mqTrP6f7uFaXqPa+k5vEckl6jpXLyevewP67JPj7/+fyP+9F7zPvJe0jSe937yPtTtvdkjGmP6fJwjqRHqaf3ZpSu9Zze9+7lPo6rv+dWTtvnf/VzFo+v0n2IrA/KpssLV7xJz2ur1Kl+1iU13EO66jyiLl8/23WNcvopNKYUA3ldtNt0x6LMddm+NHnpANlxH0rLbso7+Cc/+cm/6aHHjeMNIWm/JrMeZfRL11BcwxtQ0jXyW5d0bj6X8vLhfl6f4q7z5nbMfV3jXo67zmvwGmOec+xTrutjf71R7LfUemJPr88+1ytfV3wzxpjntnRf2cqLH0Qxpnm8LuVpDvm8DtfLr7hzLBV3TDLPdyz666TqRT00PJ/vudTHue7nnLpB9uJ+Mcd1vi/H3Nc1buW465Sny2uMec6xT3muj/3NWXmO+1k4z+vzPPYrX5firo+x2hle3Fcu5fH8e/vXfM3fDHn+05/hZhEZSRcrXdYdz+08x4zt9za13/N5z7uv8yWdm8/lXlG6n/so5jqe//RfsRYXsfLnknnn/Oz3czBL883tmO+Y5rJfuoZsDc8nGXOsSzrX/Tx33SB7cb+Y4zqeP89fe8F7w/vKe8ZbyXHvG+9B79GY5xz7lOv62N/vM+U57j+nnef96XnsV74uxV0fY7UzvLivXMrjz3/+/Nc+0BX3hvaZ96Vi2mN+L3iP2u96+e3T/sptx6L0PnRP25Kez3veObFeukY+V+3MXtzPfWKd31+Oua9r3Mpxz6c8XV5jzHOOfcpzfexvzl6PpJ+F87w+z2O/+ulS3PUxVjvDi/vKpTze/7z/tQ90xb2hfeZ9qZj2mN8LcQ9Ld711x3PbfaL0PnSNbUnP5z3vnFgvXSOfq3ZmL+7nPrHO7y/H3Nc1buW451OeLq8x5jnHPuW5PvY3Z69H0s/CeV6f57Ff/XQp7voYq53hxX3lUt62/P7ff//9n1TdxrXVpQMmXT7ctd47eOr5neNYlb5ZTcxxrX3Ot3TctqRGkz+P1cn9Xnq7u1/WzHipJvpKun2S1tXVdkkqrl3nfOvO7e3I6Zzot64eh1SHyF8uvVkU9BtGujas87Rx42Z2XD7HnJu/idVHPtc4T1L1krocl4w9vA75nSfdb6gddtihXoN86qfhOV3reergZFy9/AbP/Xm+4p7bPV0jf5xXtnI0xMYfOM6LLJwXe8c1leaKNe6puTyvfe6pmEbs5dxepBeTHmucL+ln7LUrV37dt2PuqRzzcJ7rYk/lm7PnVVwj9nCN/M6TLr/m5vn39rz5R67i5JFzNGvFred83dPP2M/RNTz/3p70fjdj8xQ33v98/ut95Pel30PaI94nft/JVtx+Scf0npPumHRd3nuO2ScZR+zlXMdjz+hzHu//6T97IkexMm/pjpkn7/8ek7jnvafMTVKX+Ukq3/vaTOV3nnT5xZc///nzX/tAI+4Zf47GfVYnVS/eU87J/eoT95ritl3rGveX7ZikBu9/3v/87z/+958+I/w5Ef8s9OdE/GyJn0n+PKk/TKoX5cUa91TcMfsk44i9nOt47Bl9ztPnmD4TvXblqEY+x5yrHH8OO891XoOlP2e9Vq8j9nCuejnPfTU3f/5vO3/+H3DAAU+pnt2P9fyqoQ2qS4eD1m1XrkZ/zIl1ua4eGvZbj7JNV0xD9Z3Hws6Z04m9/7XQ33Zem1QsXura2yE9v3XJmBf9jkn6cq7ub7eXvOQlf6I3oy+/SW3rDWxdMo6mDwfnu5ekLveybqme0lUXfbL1wRCHe8gXddmujetyT+c7R34N9ZfPfsk8pnnk94ec6txXMs4nPa7Zca9Vdoyrl4b8GsrLpdfkWJ0w+aL53Nu68jU8t3t7Xtnu5Vr5dHku23l8ctpaxPtWnXu61r0kHfccyrVPzWJu7OM1e16vR3bUZbtfXJfnc75z5NdQf/nsl8xjXqv6Oua+knE+6XHNjnutsmO8XkT1Ir+G8nLpNTlWJ0y+aD73tq58Dc/t3p5Xtnu5Vj5dnst2Hp+cthbxvlXnnq51L0nHPYdy7VOzmBv7eM2e1+uRHXXZ7hfX5fmc7xz5NdRfPvsl85jX+v+z9y5wdlXl3f9zzpmZzGQmmVwmd3IBAiHhDpabgAiIgFZpK/bVVkVt/XipvWrVWv1Y29f39bW+rVbrWytFaq3oH6VatYiiRUAQFMIt4ZqEW8gFcr9NZuac/++79vwyK5tJSAAVdK9kn7XWs57betaz1t7nOWvWhq/bzJc8l0c519nt1pV63p6U0AdwEnjl3Dq5LSEMfyDPvF0Gn2TZ5m251M3LtMC4LMv1cvuw2JTl/YbOPE1rXuRutwxwDYNZjpvzsc6Wa32o52Xq5pfrZXnGNw5wEvyBGU5ebrOu8HWb+ZLn8ijnOrvdulLP25MS+gBOAq+cWye3JYThD+SZt8vgkyzbvC2XunmZFhiXZblebh8Wm7K839CZp2nNi9ztlgGuYTDLcXM+1tlyrQ/1vEzd/HK9LM/4xgFOgj8ww8nLbdYVvm4zX/JcHuVcZ7dbV+p5e1JCH8BJ4JVz6+S2hDD8gTzzdhl8kmWbt+VSNy/TAuOyLNfL7cNiU5b3GzrzNK15kbvdMsA1DGY5bs7HOluu9aGel6mbX66X5RnfOMBJ8AdmOHm5zbrC123mS57Lo5zr7HbrSj1vT0roAzgJvHJundyWEIY/kGfeLoNPsmzztlzq5mVaYFyW5Xq5fVhsyvJ+Q2eepjUvcrdbBriGwSzHzflYZ8u1PtTzMnXzy/WyPOMbBzgJ/sAMJy+3WVf4us18yXN5lHOd3W5dqeftSQl9ACeBV86tk9sSwvAH8szbZfBJlm3elkvdvEwLjMuyXC+3D4tNWd5v6MzTtOZF7nbLANcwmOW4OR/rbLnWh3pepm5+uV6WZ3zjACfBH5jh5OU26wpft5kveS6Pcq6z260r9bw9KaEP4CTwyrl1cltCGP5Annm7DD7Jss3bcqmbl2mBcVmW6+X2YbEpy/sNnXma1rzI3W4Z4BoGsxw352OdLdf6UM/L1M0v18vyjG8c4CT4AzOcvNxmXeHrNvMlz+VRznV2u3WlnrcnJfQBnAReObdObksIwx/IM2+XwSdZtnlbLnXzMi0wLstyvdw+LDZleb+hM0/Tmhe52y0DXMNgluPmfKyz5Vof6nmZuvnlelme8Y0DnAR/YIaTl9usK3zdZr7kuTzKuc5ut67U8/akhD6Ak8Ar59bJbQlh+AN55u0y+CTLNm/LpW5epgXGZVmul9uHxaYs7zd05mla8yJ3u2WA+8lPfvLfxWhDxrNQXEM5DHOOcVw2OvUyfDSY8fPcvMp5jkPZ7WX4PtefDoMyTV4frQzM8Dwvl43nPA8UG0buoPG+lg954IEHvulB9uCT20FcZtDtFLZguW5c5zitf3k1DXzMOy/nTmZc8OBFMk9yLutMjpycJ7DRkuG5XPfLbZZHPZcDHilvp16mA0ai39YLGsss84TeOkBnfpTBNT79M55h5LaR26DLYTkdbeCVxwSZXJZnvuC7bP7UnUzjunGdV+Nf+CX2wH4eF9vbNnWOHWlzgo4LWD6OhpGbZ84jh+V08AWvGv/d1yCPB/bBpiRgtjNl7EbK26nTRjI8VfRRzf/iYarsa9gRnyTlZds4t6P9GFzgrlMG35fXWfP0mFDPk+G5XMrmA67lA8vlgFdup26epktI+qjGvxp/+yW+YZ8r+xT+Yx/M/YkyuMbP13HDyD0nch45LKeDJ3jlOWn/tzzztQ45D9qcPEdcN53z6v5f3f/LvuZ5gM/kZc+D3L/sx+Dap8i57LPknmfmCWy0ZHgul7J5QWP5wHI54JXbqZun6RKSPqr1v1r/7Zf4hn2u7FP4j30w9yfK4Bq/vAbbPz1Hch45LKeDJ3jlOQkv87NM6EjUcx7UnUzjunGdV+t/tf6Xfc3zAJ/Jy/gS9dy/7Mfg2qfIueyz5J5n5glstGR4LpeyeUFj+cByOeCV26mbp+kSkj5+mdf/zZs3x6WXXhrk7PzO044dO+IDH/hAWjOeav4fdNBBLxctO5FZVLgw8v6UTSOy3WjNwznt5fKeYIaTk6DLU7metz2pPLonPgltN0CZJq+77BxCB4MpA/dVrhtezk1PzuV2l50Dd9k5Mg5VEPkbTAAuHN+TKp8UlD3RaPfCYDi5yzAF13zIfUPK4ZShIZnWi4ZvWrkTmo9pTE9u/sYnNz78rS9lJ+tn2fDhgtZlt5HnZesJL3BJ8COBt27duli5cmVs3bo1BgcHE9xt5k3dOuxC2EsBviTorYvRDcvb8/4bL2/PYZThmfcrb8/l7QkvxzE/9CrrUcbLcd0Pj39O6zL0JOOSc5GMQ57LGa1fbncOPXygNT9gTsZzbrjzMty6uJ3cOOa/J1k5jcvQkqA1H7cZlrePJj9vN61zeI5mJ9pp42Yxfvz4mDZtWkyZMsVku/TJdUIf9y3XI4fnOpvW8j3+ns+0mw9lkunJwScZ/xc1/9HFCX3zdYc22yTXN6cxrWHuK3CXbRvj0GaYy+DaFsCoG5+cuvnl9Wr9f2brv22MzavxL9ZRz1tsgn08B+x3wO2f+DFl+7N9GJj5lP0WPuCTjF/N/2r+21/wi3wdpk6yH9r38CMufMdlt5HnZfspfMAlmV+qDNdzueAZJ/dX05uO3DBkOrnsuWEc2g1zGVzPBWDWnTJ01M0vr1frfzX+9lH7R+4/+Art9mv7lf3JPmk85/Z318m5LMN8wKNsf7YPA0Ou23M/ho/5G5/c+OBaX8pOeT+tDzm0rlsv8rxc1gOe5pfzz+XC0zi5vsDLyTBkOrkMrfm4zTDq1s22AGbdKcObuvnl9Wr+V+Nv37J/5P6Dr9Buv7Zf2Z/st8Zzbn93nZzLMszHvmt/tg/Tjly3534MH/M3PrnxwbW+lJ3yflofcmhdt17kebmsBzzNL+efy4WncXJ9gZeTYch0chla83GbYdStm20BzLpThjd188vr+zr/29vbE/3VV18dlIkNWMb69evjvPPO26Ujurq/yLLulA8++OBXSKV70UuJzjqI7HxvsCLgNkID7t4uyzAOdZL5UKaN5LxcHq0ObI9p9xD7HtH22JB7R142QQ7Ly3m74XlOmav45lTkebuDxOQ5juE5fd2TBqEEPHEkw/JBz53B7XYIOy48gHnyALcD2XHhiRzglJ2gs2M7Bwc4CVw7anmCmLYs2zTmAR/zpuwEzDg5jScVbdYX3JwHbVymu++++6J77Ng49bTToqenJxqyerOpvkpYswUeAR3qmlA1HdWhttRYIERLOa0t8OzugrVoGPZtaGt1LXjw459MlNiApzKYyAG/1RI30TZV1yMaLWnW1CAqMBNeKrNooQ5ow23ojOM0BWswBsAtBJ2ELBHR4tSRRKsxBzaMl/LESzDJhFfijXgZB1uCX9mIUXvu2kj31ti6eWvctfTOWLp0aRx66KHJ5/F75obnBHPhV3H+YwMnbOL1wHbJc9YvrymGg+91pEwLX/j7B6mchjJ05OaRl6E1P8sEZlnOgVXr/+622p/1vxr/dNNIflXN/2r+swYxJzwvqHtd+mV8/nM/WUdZb73m0mdSnlfr/y/f8381/tX6nya6Pqr5X7xovlr/i3tetf4X97/q/l/Y4fl+/x8YGEjf8U888cS46aabUiA5f76xvz/V/BceX5o5VpdoEIl6cSMpYARFSLTTRk47cNedC5SS250DNM8Co6A3rAi8uKXIc1he3h1rH2oQ708q4+d1l53Dl7LrLo9Wz9swGInccJfJ83af6Wx43gYt9UPvueeer/qBN7/5qW1X4MLOgKM4YLFp7ZpYes0PY/nti2P18uVplKYfeGDMPeqoWHT6i2LCtOnpZgofkheQ3Nn8ZRO56x9fGffd+oN45P6fxuqHlieaKXMOjDnzj49Djn1xjJ84bRc/9HHwA1rK8GJykoA9sX5N/Pj26+Lu5XfEQ489JAWaMXvmvFg474g46ZjTY2JvX+ofNOA7YECZhJ7IcXsOs+y8T8Aee+yxGNvZFUcfc2z0N/ujNUhQUH/SkkytLxZDCgSFDn9vyI4MX1MBOAVWi/irgr2K1AoSLbXj4fAXSgrqNhQ0JlLcioGUK4ocQw0dF6JAbm2Q4DRtCiw3hEefCPA2NOda+i1EQVr9WpCCtgSbYwBMgsmSov7WxTuFo0GvE4xCIz0IKG8bbJd+apVOSb9WIwaFU0dX8W9JwWbSrSFxYiD+BKzRXypFPemmlx3CFw3pkGhbNY1Xm2yjemUjxu+5b6O6fKtD8+zW224L/mxl1qxZaY54PngukntuyA1Scp2cRJ7Pf8Np83w2nmGem/sy/61DzsMwrxX5/H6m8x85JGRYTp7TJ7fTV2STctslQPYBnm3BOmQdQYE3yfS2JTTmTw6eZYNvnSi73TByl2lHRwd8KIMPL3LkOVkHaF02b+O4Tk4yjzKcNniYv/HNl3Z0cd0ywc/X/7wf5mGYceHj9R2YeSIDmrw9hxlvNN2RYTl5Dg3JMHiTzAt4OcGfdutrHcEzvulpA98X/K2fZZsOOMnt1oncZdrhUY1/8Xxge2ET29z2sz3ByW1oW5J7DAyrxr9a//EX+xJ+UU74Fe3V/B+xEzbK56Dnlm1EOzDPM+qen4YZFz7V+j9iq7LdsE+1/lfrP37A5fWInDnklK9hLoODPzm5Tk4yjzKcNq95xjPM/NDFcoAZv3r+q57/8JXyOmafA26/w1fwo2r9f3rrP0dZXHHFFXHIIYfsOtIC+/JX+Oeee26yM3Wn8jynfthhh/2W2tmJzJcjFobiS1KRU3adgJTLhhuf3GUVd/EyPM9p31OdNhLtJOfl8mh1YKOmkVVy1OYnAUcsVjS57hyoy+R52W2G7y3n26fbRysDM9zl0erA+vRivVd7cuUDzcLMxUTLE7gP3XlH/PBzF8c93/2vmDy4M46aOSPmjBsXW1c+GktvvCHWrngoeqZOid6p03ZzptypLBPeD993a9z4rc/Eiuu/EdPat8dx86fHQVO7o3/Nw3HvT6+NNWtXRHfv1JjQNzPpBI1vauhMIvd177K74mvf+7f44e3fjfrEwZi3aHpMmtUTqzetjJ/eflM8+tjDMWnc5OibNDXR5PTmS9/N23q77tx05DxsLVcw/dTTTldgVWHXgUEFUeXvQ21pN3KLIC+BoHbZld3BCqTq60FqIzg8JJ+tKbDaFA0bfZsEgIcU4BVuA1wFYQnm1onMqsv1uuaVeBOAbUV7wlOMWjIHpTe7gQlMEpLWDZegcE04wNKWZdlKOre0E5gdy82hZrQR4pUNYY8+LQWGa0PCkqcxa1kPFGqnKdoUoFYsWQFg8UCG6OqSMQRQeteUI4v2xFn4KXYMXwLoqrQpIFmT3MpGzx8bDeknEHxr5oxpceuti9OxFswT/MzzOfmQ6p4jrsuFEg45yfiUjQuvPOVzEBzmpnE8T01L7gvepPyhkjbgpnednGRa881lm1+Om4iG6XK+5gXMcJdpo2w+1sU57ST0tj7UcxrgrrtM3TSU6YPr0DvldNCCR8rhLqMTl3FyHsaBR9nG1omc5Dpl6JzMg7pxy3ag7jZydDEOZWB5u+uWU9YNuOnBLesAzHxz2eaXy3I/zMd83R9oLM9l2iibj2mcm6fHzng5jeWRu0y7aSjTB9fNM5dtWvDKcMtCJy7jmA/txoFP2cbWiZzkOmXonMyDunHLdqDuNnJ0MQ5lYHm765ZT1g246cEt6wDMfHPZ5pfLcj/Mx3zdH2gsz2XaKJuPaZybp8fOeDmN5ZG7TLtpKNMH180zl21a8Mpwy0InLuOYD+3GgU/ZxtaJnOQ6ZeiczIO6cct2oO42cnQxDmVgebvrllPWDbjpwS3rAMx8c9nml8tyP8zHfN0faCzPZdoom49pnJunx854OY3lkbtMu2ko0wfXzTOXbVrwynDLQicu45gP7caBT9nG1omc5Dpl6JzMg7pxy3ag7jZydDEOZWB5u+uWU9YNuOnBLesAzHxz2eaXy3I/zMd83R9oLM9l2iibj2mcm6fHzng5jeWRu0y7aSjTB9fNM5dtWvDKcMtCJy7jmA/txoFP2cbWiZzkOmXonMyDunHLdqDuNnJ0MQ5lYHm765ZT1g246cEt6wDMfHPZ5pfLcj/Mx3zdH2gsz2XaKJuPaZybp8fOeDmN5ZG7TLtpKNMH180zl21a8Mpwy0InLuOYD+3GgU/ZxtaJnOQ6ZeiczIO6cct2oO42cnQxDmVgebvrllPWDbjpwS3rAMx8c9nml8tyP8zHfN0faCzPZdoom49pnJunx854OYqilzwAACAASURBVI3lkbtMu2ko0wfXzTOXbVrwynDLQicu45gP7caBT9nG1omc5Dpl6JzMg7pxy3ag7jZydDEOZWB5u+uWU9YNuOnBLesAzHxz2eaXy3I/zMd83R9oLM9l2iibj2mcm6fHzng5jeWRu0y7aSjTB9fNM5dtWvDKcMtCJy7jmA/tXF/5ylfigAMOSLuQkUX8C/z+/v4UWEYGyTpShs6J8qc+9anLVV83DBtpFKrxlMPI9YLpSKPhQCiX20cwn1wyrfMyxp7gZby91p/JcRZPR4GcxuU8p+wLxV0mxxucl8uul9tTHQfwxIGpnQ8YToETkPPLI+X1qx6Lm7/05dh81+L4k3PPiWlnnRldp5wCaWy/7kex6vtXx+eu+l785LKInsmT045kOxJ5nuC7af3qWPzf/xqt+2+Jt7/1/Jhyysuio/cModViYMN/x5obvxmXXfxfcZuCqD3ajTxh8oykD7SkXHfqj2sH8rev/2rc9/hd8Ya3XRAvWXheTOk5mqZYveWW+M6Sb8eXLv1WtK5rxsQJfTFl0rTUZt2YDCScHBnktGEX24B2YFxuf/zxx2PhwoXSpxb9Co422Gmrf3zqj/eiTYHlASK0Yo8ZmgqiEicekIx6o01BXJjqvwKstTbxJXgsgCRHs006qNYm/KE2cZNOA0MKCsO5qYAtO4JlL3Yf1xR4FiTt/E2/gohnG8HpIQUAESFcTJeCuNBot/QQfRS8ofqQAscEhhuKZDcVZGYnsQSKVhKaWijqKdycgsSDKotB1LWzudkud8JG0mEQjysi2gpGq3/ilewkcF22CfWX3cwNBZsrG+lm+Hyy0aB2wtfb+RUx1q5dGzNmFPOR+cEYk1wmJ+XzJAGGP5hfvkl5PhsfGp+1RJnk+Uhu/PL8RwfaoPEaZhneVeN262WZ5E93/kNLct8p2x6W6/ZcZ3SxfvyZkMvuMzTW17jO05watg140CA/5296YNDZPuQenxwfWG47ytDla1+ODxwaLvfXZXLrVdY118vlhKwPZHJV419YBPt7HDyO5GWbgoPN8/GxbU0Hjf3A45PjA4OP8S23Gv+93//tu9jP88B5Nf9HnpNsp9wvXXYbPsdVzf/CItX8r+7/Xoe9LpNX6/+Tv//5/oa9clsxk7wOez6B4zWasnHIzcc2Zl3P74Hgm9600FXr/4gNsAVpNDsBZxwYI5dTQR+2bbX+Fxaxv9pezu2bud2wOTbNfdL45Llfe3xyfGDQeu5Qhi73/Ry/ev4v4kMeA+yHjUnOve4AK4+Px4a259P3v66urujo6EhrKv07Tce3Xn/99akPtgE5CR8q+2pq0PKtPMUhQRuGKUCUUrEwFGVgrrtsPOihJS8Mr4KSYXkO3PiU9zU9HZrE+5nsRM47M1oZmC+Eubyn3Aa00cFzmXy0Mvobbvwcl/a+P/iDP3iV8l3JTu08dwSQbv/2t2Pld6+MCxctiFlHHhHNDeuj/5Zbon/x4mht2hBje8fHzG3bYvEdd0VjwqSYdfjhuyZTPoG8yN198zdj483figvOXRDTfu2UqA1sj8F1t8TQhsW662+Nrkni0bYu7r75zhjqmRhTZi/a9eUCfeyw6IujXvuTq+JH918dp73s6Dhx0a/F5tgUK7bcEY9sWxLbY2tMGT85Bnu26E/y74je9glx0OwFsNm16OYOTzlfTOE/2mRAh2XLlsVxxx+vkdSNUQFUhVLFU0FWBVDhQbrq4dviprX3x5GTD0hHS9RoU2CZTcWErtm9SzD3P1ffGY9sXxfzxupIEJFy5ENDuigaK/ZatJSzs5ngrm4XklEsZBxpIUTZRJn2AKezlzXV1AvtfhYNatAHbjLsMlZL2jWMmgrocq4xZy0LU3WxF4ZuSQKqjR3PaecyQWrp2WxTy4Dw2kUsV0q7neVm+k+QmyMx4KMuCU91GpAzzLWh4PdoNsJROR4DW7BNe082kmIKwisQpmMgKhuN7kc/Mxtp9zov2bv99ttjkuan/dtzcPv27bF69er0py0bN24Mrg0bNsQTTzwRmzZtCg7f5wJmODi0GZc/lwGfP48BBzg01Hfu3CkviXQTK89/z1/aXUYvz2Vyl41Tzj3HjWf6Pc1/6I2TP2BBT8phlMF1ct24lp3n4NIOHfjuMzAu4+ZlaMADn0SbaQ0DDm2eLMM5PEjQO3eZOnjmkZctgza3Wx/ocx7uDzTG9cMpPEnAoQHXXy6Am9aywTEPl2mjDH9yl6GnXM4ty3imB+62RJR9GMcycp45jDK4Tq5bD/PPc/OCDnz3GRou4+ZlaMAD3/SmNQw4tHmyDOfwIFk/yzQNeOaRly2DNrdbnzIP9wca41bj73t6MT7YLB8T7GQ7jlZmfGxvyuBW41/N/9wn8AvPN8ok+5hz8En4j3OXqedzPi9X83/EZtjCNqOMnZxcd7vncp6DS3s+Jm4HPloZmnyswUNWDgMH2jxZhvNq/Ivxsp1t69xmlLGXbUxOcl6Nf+Fj9j3sYttgJ+DYFTvZH6v7f3X/xy+YVyTPO2DV838xXzyPbBvqLmMzzzfKtO3v+r9169b044HpncOrt7c3VqxYkXYin3XWWQlv3rx58cADD8T8+fOTLPDRh4tkfaz3pz/96a8JvF4XC+buNyIBMlixoBaw/HM0+J545XQujybTbc9KrpDXs5qsMLnLowlw22i5aflm6HKOZ7hz+NNO3VdeT4FyBpeBxslInrjkdko7wvrbb40jusfEtKGBGLzrrqiN641aZ2dBp3NSW5s3xrTmQBw+tjMev/WWiAsvTG3IwHn8q4xlrHv4ljhidneMF8/BFUuj0TMh6h1dBc3AjhjasjG1gbPskVul42tSEImbDPzQC54sLMi4f+XSmHroxOge3xl3r14aPZ290aE3SJJ2DvTH5u2bY+z4rpi2YGLCPad2QWqDFzphA3LqlMlJhqdK9gHuNgXNmVRdHZ3RL53ZRSzNiO1GvY3dtrppKmi7+PH745H1OupjTGf8+rxjNTI6joJ/Demvf5Ia1zz+QPxk/Z3R2zk5zpqwiBMtFLTVmDARiZYKhz6zUxgBiqNq17N0FP+m+NTQWzuX60MEhRXm1S7XdkWH27S7eVDITQV8CUhLdAxpy/BguwINOhYjdL6ybuGhjcnKh3dBC69NwdwBBXXbpcWAdiUji03GTR2boYM6knc1ddxGm4LKxJJb7FZOgW4CwRxrIYYcYcEO6YHi/Gc8EbOOZiN1QLwUpm5nx7NC66PYqCW96WOLZtm/stGT/ehnayMFcHX2N4FkAsZj9SJJ3tLKXOBas2ZNzDlgbowZO0Yeoi8u+mGkJn+U1+iSl8knNXqpzBEtck2NtG42TJjk33gi69Cwyycy/FPnccu/tmzdHuvXPR4EmqdNm7bb/C+vV14jvE54jfOaAZz0dOe/+ZuH14u8Dgy5lomNvLZQZi1DD8qmp5wn8/BabR7gAOMyT/fJMslJOX/4UffDOjQ5nvGBg2ueluvceKy/wLiccjr0o15e/5FpGeBAj07+VZ424OTgcvEjwp7Wf/MiJ1kH6pYN3GOR47lP5NAhi5xEOe9bAurD/KlTNn5eBwa9ZVoOcMrV+Bc+Vo1/Nf89H6r5P7KOei1hDfFa6DWENmBcXq+8pnnNISdB4/UpX3vMM8czPrzANU/LdW68av2v1n98gssp9xt8jLrvwcbD5+xj4ACv7v/FXLUdybEdtvJcxU6er8C4qOc2p257wwMa2knktrV5mh9wErnHppr/1fOffQI/wTdyf6nW/1++9f+LX/xivOY1r4menp70XfvrX/968Bf3L3rRi+Lkk0+OI444Iq07bPCyT5x//vnpuxu+kq9FrDHUvR4NrzEEBYqHEy03WRly6ixWfJEDx+3ADC++5I20qynhu320HJxyMp8cv4zztOr7E0S2Ek9LkIig9wUP83NehhluGnIPRhkG3JfxXNf71oqbD4M6PLC7bjRJaPZlnPbBhx6JQxQg7tCvFARAY7vyMWNBjejfFq2t26Jj21bhdMSqlY/suun5ZgSab1rABratjJmzx4fiqgpKbit28erPukm1we0KLG1JbeDcqxfXoYMdFhwc0zdE8k39q2PmEX1RUxx6Z21HbFOAc2CgCCIPKPANrN7ZihlzpsTqnzyWdIGPk/XMbWEYOZfbXGbX5dFHH61AGEdNiBNbi2XyOkdIKKCaBkZHP6zbsV6x3qG4ZvlPYl7nxDh62vx0nES0K4ikIPBDO9fFdevviEHt4t02uEXHVKh/2F80nJes7mn3LUFT6YAE1TkKgbLOp5DTCKD+JjoFspsK3razsxgbSSX2DusxIrUPKGDXJlrOuG0pIN3UkRQSIljxcAEeAd0htTd0FIeyFBBvDoqfVGqTvnQ1JRXYeTw4iASVJZNjLVSiQQOOp0hGOpZDD4livScbNWU7cDmWo3g5oFgQ2R62kQZfnRa9bCtrVDbCzvKTn7eNYnAoFi1apLORb42DDz54V9BPg1L4m3TaorWgLv1azAcmhn59kAvoRxXmkR58B/WDhpyhcBH90KG5MogP6keEQf1IwY725GwacPywnaHX2HeN6Yju2XPi4UceTjuT+QGHOYmfMydJrrNWJP+HUIkyCTg3NOMnoD6og+M5bp7OPefBN67L5DkdNA4Q0oZMr7fUSebnoOhoehvH+JZrXMPJrafbTOvc9jCN9QGfyzxSQR/QGUY7dWiQQwKWf+kzrtd400BnGreZl2Wgm/Uznftjeurg0G5ZwKgbF7jr5keb8cmBV+NfjKXtmds0GUsfHhvb2GNme0JTjf+InXIbYqNq/hdrhucvflXNf56SioRdPIc8x8jzdcs4UFC2LaHzPARGom78vGyY+YILjLGo5j/WKBI2wW75PDaMnMtthkNJmeQ2eHBV87+a//YN5pnnW3IWfdif8BP7HbnnKWXjQEOZK8c1nDzHz8vmYb6msT74be67tJOgI1kedWiok6Cp7v8jdsptiI2q+V/Nf8+h59v87+vri6997WtxzjnnxJVXXhkzZ86MuXPnxi06eeCoo45KG8g8//N1hHWButccci6vGW4TGg9CIw9DWk5KdVUTjEWIi0UH/GLxGYHl7cYT2i4aw8idzMP1/cnN7ylp9ieIvCdmudJlHLc5pz0vuw6sfNHmAaCNsvMcnsNGLTOw/nUgG1z4J0dghyEJHMqdHY0YryByaCdiTeeiROfYqI1RLqnpZWwqEPjsVSSzcxvHHRQPZCym8OcXK3h5ce3o7IiOiWOibcL4aGhnYx1ejTFJJkGn2hgFnhTY7Ji4I9rX9Sdn9Jd/T05yeMOzvaMevfrlpKdrrHYhd0WneI3RhR47m9rBRiRKgavecTtjQ+fW3ZwbPuxys8ND4zI5F5PGZfSgzp/Y9/VNFq0CXwRthddSMLelwC+jko6iUCC2v19Bcf3bvnNLXP7Aj2LmuKnR0+iQcRUkE+oVj90c24e2pYEclK7Ib1OANx1fwdkE2u3bZNvmgALT7QRm1RftyoW2Jlvxsj12/6ITx2KAMaSgbwroCmdQPIjlES8mUDekQ5bZyctxFcVJx6Id2hk3f/s/onHMuXG8AvdinKYxLwPUyGpItCuZoDDjLdp0BrJ2MROMrrXpTFcFfwkaNvUSvboCgU22PBPoFA2ym2xjTsdxjG4j+A7oOI+vXN8fv3HB8dEtmWkXtnYxw0os9I5AkIb50Jefo422bVwfWyR7TG9P9I5RH7RH+xdhI4LsLUVk2V3OPuRnYiPG3z64z34km0/SmeccQcGuMea15wvnJW3aoL8gGNej3zQ4J1tBP52F3ZIfDLBrPd0XNC/kN7xgchBf0Rnh6UgVwbRqyNfk1/xOID9vw2fEhx8+cMYBzZcxmmszZ8yMu5cuSTuimf9+QKZsXTxn3cbCQtnzmLoTuPsz/y0z54VcLtYiEm1cyCS5nbUDmHkAJ1G3zuTgYVsSfEjUTQeOebqP4FkH88vxDAPHMqwLdSfw8vXfY0y7+VG2XuZrWI4z2vpvPNuKvpJsq5wf5RwP3taVnHb3n7L7RpvtD8z8gZk+AfVBvRr/avzxA3zFPuTcvkTOZZ/Lfcl09lXa7H/4mdur+T+yPtpW1fyv1n/mSLX+j3zPqO7/xf2ouv+PPGdVz3/F5g/uwaT8Xsz9tXr+q57/y89s/m6Av1DOn9mAkfCj6vl/5Pm/UycMTJw4MQWQ58yZE+PGjUv2Oeigg5KtsDEJW5KYdy7bvsbhGY921i7uacPPfHwp5oJR8QVZ7LIycBRym4q72nM8yuBZeefgF0pSKtpdB8f8DUtI2YdxMtD+FXPF94cy74DpDCN3mbbRysZxXsZz3bRlPMPRn6tcz+GpjYH2Azw5DuBJaMdg4tE27qCDY1OHAscTJkZNf0penzM3GoccEo35h0Zj7ryoTZ2mtkmxqas7eg48ODmbHch5PqHHTZ4bG5tdUR87LupdPVEfNzEavdPSlcoKCNe7x+pk487omTSHvtsBU9m6UqE8bdK8aG5RbFuB43E6FmOSdvxO6ZwaU7umpXKPYLQ1t0ZMnzhvFw9ouVhIuKyj+08b/betCJyReLnYETr3GXckeEzQbEjHPrSUE1TnGAt2H/OyuUldE9VeBG7WblkdH/3pl+IjP/1y/N8V346/e/C/YvXONYknHt3V6KFDmjH6hVpBs0EF22rbFsfr9EbMiZMnxMTxk2LG6W+OK29flXbtcraDprDkaqeyplRNE1bS9U+BuxQjVGBO/HQOhXC41NedCmJJGMcPD+n84SZBvfrW+N573xc/fmy7+iMcjqZgNzX55tviornTY/ykidGr8e/VebivfMdH4sZl26Sx+OsM68++7fCY0DtRi09vTD3tLfH1xSsVoFRwGV0Uj5Zx92ojncgRmx69Nt7xVz9MLx0cUr+H2J1M4FmBU/QdIiCpPqHbk2wkKwwpEH/xGxfGRZ/7qdolm76K9pnZaEd881NvjhkHHhSHHDov5kzri0tv3fRkG0k3AvN4B+NOcLfVGNCu6kb8+BMviNM/dpOC+clZ1KZcvjLEuRz7aKMB0fz9//l4fOIf/yE++/8+G//+hS/E1Vd/P7Zr1/5+2Uh+UCPY3z8YS+68HS/bZSP0WrFiucZJc2GPfoR31WLRwkXp7GLPHeYHx1usW/eEVh85vcaNV0vKxYpjLAgaaygUQhV/zSnZh3OveaHjQE1jJdvJKxV0lk300saGfvEYkH0a2BFdRKw/n4h+wQhM9+qHJ/6chuS56rWLeYxebgPuMrhcwMDxtb/zHx6kfN1knYOv9WAtIRkXWYaRI9PJZetFO/jUKXMhi9w4ps37Qxt194v1ymXwzZMyuPAk5f1AF/NAHjzAtVxycFx32f0ETvK679y6m966mT4R6QO8XD66QQMfp7wfxjVf+NFOos36UPYFzHYhh4bLOponbZZP7vWfdlJut2r8C5vY3h5357atx6ka/2r+e+7ZZ5hT1fwf+as77II9uFhrPIewmxNrEXjAyPO1y3PM+MaBFlx4kvJ1jHXQPJAHD3BzGeC47rLXROAkz3vn1p12aKyb6RORPsDL5aMbNPBxyvthXPOFn/tLm/Wh7AsYOL6g4bKO5km75ZOjM4l2Um439IOv9YAXybjwMowceU4uWy/awadOmQtZ5MYxLfwNI891t43hRTJPyuDCk5T3A13MA3nV+D/5+5/HNLdbNf7V/Z85xeW1hLllX6nmf7F22T5em7AVMCfWnHz9YY7RXq3/P5/1H/uzIeywww5LR1r09/ene8AZZ5yx6/7hMcOnXbafeywZL2DOfe/SOHPj4+IGmV+q7gZ33TdK05Xh1EllvDJ+gTWCZ5qczjjO3eb6PuXFnX+fUJ8R0lMpVzaA63vL0Z32cm7YrgHjlxcnP2BQtwPYOXACnGT8UcfEqo4xKVhc71OwV39W3jhwfrrqB8yO+pQZUZ86I1YpUNt71NHJ2fIbbC4Dnr0zjom1/QPRr+MY6mPbtfN4vHY4K0DNNWacrvbUtmb7YMI1L/hwoaedFuec23do7Fi3M8Y022NsbaxenterHaOT0zVe5e56V4zRGcA7Hu+PA6ctSDzoF7xYzFw2T9vBNqHOZEAWNJz/euCBByrgqQVOwV7FyNJxDjXJaPHQzU5edukqjPamhefFzPEzFHzTQ6Rkbtuhl4dtXRtba1u1A1nHVwiLJXRSx6S4cOopKfCmxzrRS57kDiogt12Bsw9//ZZ45P6b4iPHXR+vfeNlsU7wNNR6PuQRsUHwmuMteHmdAoWKyenIY25qxY2sTTuE1QHt/uS8ZPVDO5J5SZ02SyvVonOGdtoq2M4RF5yz3FSAmV3HBAS3asz+5vKb49EHl8Vtt343Ttp8cbzshHPi+se0g1t4O9e04rT3fzWWL7sp3r/wh3HRu74WmwmWqneDykez0e1felNM+u1/V7CQoLk0aNPu3nqnji+g3xxvQKBRl6yjDavqJA/pCjwmS6qe2WhIOnJkwrYt4sUO1pp4tamP6XuH6k/TRgPrfhS/88Er4v/76YOxfsOaWPLjG+KMeWNHsZEEqJ/sDiZgr6io4sTt0ncoDn31v8fn/sdh6hO7djWfNCBN+VJNO5vR2za68tv/FW996zv26EfY6Dd/44J40++/OV716t+Opo6W+P6V31WuhXwfbYQdh2Sb+3QQ/rck79obrk87mzk25bofXheXfeUr8cjDD+3Vj1qtncn3V61aleYC84F5M2ZMsfN/O2ek92t+Ct6Ucw3yY4h8Dj21lTzREDzGVHLHdCTHADyEq5mtIPtQ7Ey/PChozPxSW6uus9g19gS3d+r88Ym9k9IL98QwzUnkM4eZnyR04vKNy3Xmsee68/2d//naAF8SMMrkXOhDndxrhuHG8ZrmhyRwaSO5zXpTJ9FuGPhOOW/jAaOPJPcVGNf+rv/IJEFLuZxbF/MHx30wbmKgD+N6bKwL40CbZYEPD3Q3L9osP+dDGbxq/Av/8ThU4z8SdLHfeC44r+Z/MbeZb/gNCVthH88r6iTP5XLuuWi/A99z1riJgT6MW83/YuMGdsJG2IWcZNthR9sSuG0JzHY0PKcHj6ua/9X8xz+81tkvfM+lDV9yop0ErJr/hVVsM3//s41sJ3Jg2My4zEXP0er5r7BNYc1q/bePeI2v1v8iFlU9/z937v/4qNct1rFTTjkl3Q/ydc7rndc5r4PGsX+77vmvnC/p+cWXVC5go+Vu31su0kQLzt7SU7XvjXaf24ooxD6jPyNEGwUm7pxzM85xRoPZ8MbL65R90e62OjfE/AETh6HOgHORvLjhJDNPOCF2zDsw7tihXYMKFtcnTdHuYR1DoRfs1SdNjfr0aXG7AtM7dHbKrBNPTLTQk/xwCx8u0vSDToodbeK3fLWOCVCgid2bwxfBImB3LFsT2xsHxsz5pyQaPvIHG/SEN9fCecdFb21mPLx0rQJYCiYomFtPQVgFJAnsCkZbb8wS7vFJD+uCLfK+Wt98ElD2xUvFuru7o2usjuBQIK/OS+p4+Z2ClzUFZjmwV6ZUMFA3TxUO6O6L1y88Jzrbu3f1o1zgBXvn9b0gDh47UU0KLtI3osAK9vJH7ZskZ6J2AHf1HRznvEwvLdy6PLZoI/DKmy+L82ZM1w7gSTHvle+Jnz66Ndly49IvxwV/+IXQezalTj2WfPm98Uefv1s6aSeFdj7/61+/ISYpENerncPv/NdbFFjkgAYFuB+5IT5+0SExubcvfu/j31GgW19WxGOzAoDj+6bHmJ7xccDcE+J9l1wZF/U+Gp/5z9sVypW/qL+TpkzXLuWD48TDD454XC9O4+V4om8owl620dbl34gX/8EVEd/9w5g+7bS44q4imB6T++O6//hYTJg0ISbM+534wYMbiI5L50fin9/14pg0cXL0nf3euO1xWSezEbFixjOdxSv/YTfr8u/9Y5yi40YmaQf39DP/JG5ZPRhP/PhzcfrrPy31tINbaK2td8TvHvW2uHdbf3z/H9+p3dR9MUE2+Y13XRKrdjajfwO7rSOeWL852WHGoYfFnPFjGGKpdHv8z9e9KCb0TRRNX3x5yaZo7lgWf3bhn8TXv3Zx9E3qjUtvXx+rbvpCfP66R+QbQ3HX5R+Kf/jUJ+Ptb39HLFg4P377Vb+dXsq4beOm+Pj//Vja3fu6174uNmxmR+/ufkQgfLzszziN6WiPM885O83oh1c+lGy0etXqWLbsnnj44Udii15MSeOgbGI/so1q2u172OEL48UvPiMW37o4blTw+EfXXatzjhfHmWedFQfqrwxqMg5zEhtp+CW68CNNFc23WozVCzE5eJ83uTIvSNifl+5t0DEv9TbNP36gkG/UNBYtBYgVShY/+YrOYWlj7DgOReeVy0lELJ8XG3bLk/gBAd/nHO265tGQAvDolNo1LcZ268cOyduyZcuuuez1gIcRByjAMTwx1ofnN22k/Zn/0JLMF1r4e12inMsDD32AmcbyEyN9QOsLHC7qJNPkOXDr4dxywWM8rAPt8DIMWtr2Z/237vDmIlkuuctus2z7Be05D/QxDF78qZP7m+ua88vboaVuOdbL9Wr8q/Gv5v/Is1E+p5hvzJNq/o8ENqr1v/jxzWsq/kHyPYO611ivyV7zyV12m9fhav0v7t/V/b+6/3sOeW6QOzHvfHmeUSdRz2k9xzznnINjPM9bz014GQZP8Kr1v1r/7WPke4v/2K/sm/iQ/c4+Bsy+CT7wav1/fq//jCFjiX9cdtlladOWx/iZjL9chS/5LHB5Ttn1vI2y6yqmMvU8GacMo27c0XBy/Ge1TEeejWTl4eVyObecMpx6DnN9X3P4lgfE/SLXX48XOxmY6F4ceNhxHeexA+EwYydNjgPOfmms13EG191/f9y/Zm2s0wu01m3dEvevXhPX3XNvbOjpjtnnnBddCmiyKHHBm1+97XReYLp6+uKAwy+IdVtmxw033RNLefDxgwAAIABJREFU77s7Vq1ZkS7KwGibfcQrYszYSYkP+tmJKXsRhHdvz8Q44bCXRPv2ibH4xqVx75IVsfLRx9J175LlcesNd6ttUpyw6CUJFz1yG8DDdoAvZX8RxZgktz+mF/0ddcSRspXCYgp0saOUcyvY4Uudf5w1nMIt7LhUEG3p+se0g3Jk93fBceSz2RqI+7eulJ10kxclu5Mb2lXMMBKIHqddtZs2rY9tD/4k/vZtl8acV54T0zd8P444961x4VdujCfWPRoXn7smzj7zw/GEaId2bNUu081JNnG7LZsfjBWb9GcJ0vkbf3VOvPNL0+Oq25bHyofujQ+ef4hU1FnWM2rxgd+9MKa85Ttx1zX/Eld89ENxv1hoa3Nyxpb6UWu0K1Arn2k/MF77ZyfGf15+k856VgC6uxb/fcUX4pP/6+3x0r/eGP/x9TdGtwRz3u1oNhp38MviK+87MWL2n8dNd3wjXr5grHYs68ztm/8q3v4f3bH4nqXxT6+6Iz741Xu0eXUovv6hl8c/j/3TWK3jEr77prXxyvd+VXtaR2yUXkSYdvVKX8nkGIn69GPj0jseiE1P3Bfvn3hlfPLKe2LcghOi68oPxbX3cy52Pe75zmfjW4e/MGZL/ym/dlHc/ei6WHP/1bH1394TV92/MboOOiO++L6z461nHxHn/8k/xZLVxYsl6/FofPjM34orpr457nxwZay4f0m8ZM4YBUJ3xIM/viwu+odH49rb7oz/ccjE2PTYT2LJmn6NbSP6Nz0Sf/1Xfx2/+coLdJzEnRqXzfGOd/xhdPX0xoW/qR8HNP6fv/RfYtyEyU/yI4Kp+oOWFBjWrxZyyIjDFiyMB5c9JP+rRbeOEznkwENi5gGzYvsOzTkFyhvqo/0IG/HDBruWdYJEnHTiSXHyC18Yt915W9yhoy1edNppceIJJ2n3r4KFwmoTLTZK+JxzLT9KIVT59E6N+VFHHpXe2sq8IJHz4wpvcpWnCFdc1DSkne1tCjw30s50PWBopzG709O53popOupbbq7AIOuF5kFd28d3ctQHaxDzR31OPsgNTUoMaZc3/ZuqI3Q40sLyvV55jSH3gww4lIE5AWPeA9/X+Z/zNj25y15DkQEMfC7jUGZ9Mcw58imTjGOd0M9rUZmn6UxjPcwLWbYBMNvAeNStm3XPZXgtRC9kOQeHxJcRyzIf6sD3tP6b1vqgQ64jcMtChvXZ0/qf87NtbRfzBYeydTVf8ICTg8PlPtvm4JJos27k1HM6yrZhjm9c01tH183HupGDY97oZ11MY57gUDZNmRd8bANwbAPjUafMZd0pl3nSH2Q5B4dUjf+I31TjX/gRvlPN/5H1Ant4jlGu5n+xdmAL1h9frCfAuLzWAPN6VK3/hR/ZRtilWv8L/7DveG7ZLviWfYgytnOy/YCD7zkKD8q+5+b49k1y05sOHr6HWmY+VuBRt46umw9tJONYJ/SzLqYBJ6czTQ6DF7JsA3BsA+NRp8xl3SmDm/OEF/o4B4dU3f9H/KYa/+r+7znE3MjnEWXXn+vzn41ZGzZsSBffrzcrRsHxFl/60pfSpi2vS093/osuxSChV3LZsU3qJNf3J8/pXM5zyiR4ksp5DksIT/ejeJvR06UeUWxPHKz4U7XbeMbL6+aBwQ3Pc8PzAYLPLnh+E/BNCgRuCnZ4blw4DBc3lPHaZTx+6pR4YsmSePiB+2PJ4lshiXEK5kw88uiYtHChDvUdm97eCJzJwsVLmnI+8ELG+MkHRs8LXhfrVt4SKx68Q0G1xZBF9/i50TvlvJh9wPHavdmTgtDW17qgm/VEBvDpE2fHpGNfFctW3hGPPnZ/LF16o7i1YsL4aXHItJPjwBlHxJi2selmaX7QugxPEvYAXi4Do40JNm3GtBjcyZ+q62bLjkvtqiTkS9BOkBREUxiFzcmxdvvmuObhmxVSI7TmoUvsd30Q4Fu8+b44dvycmNuloHnaJqsAHsE7BdJ6FFB+/8uOjfeL4vf+6l/ie289P1Z+730RB/3PuPC0uem4hzPe8Cdx4ofOjptX/GWcUrwXUQE76SMdFVYtAoj9K+N7X14f7/y7t8Vxs7WLXDtAx/QwTlui/7FWvPurd8QbT5sVQ1s2xwndk+QPEsiuUKWaAtCyjsaEXaN6iNAO0gmzdAyJAoI71btx02fHIQfPiENal8eVV98Yp7zhjOjgPIlRbdQRE6fMipg1LWZO7YsOWLe063fWH8WNn397TJHIdQsOj8kDHJGwIr7/5Y2xbtFV8dG/uSW23H11bFpypF6YqDOwCXImGynoyfZgknYic+7u3IW/Fg/ccnX889eXx0NDO6K5c4de5Hh8/Nnvz4r3ffGmeOWHj41/+8tvxocv+ct0XvYRxx8SN3//q3HFA4/J3ho49belo1HO+7PL4/aXfDPef8Fb4oWX/EV89r/vj1eMuzU+s3p9fOWPL4wDejsUsJ2h3bXyya2t2CLbXPWVD8YibSoHNlgbh1K69IVJL1d897vfFS9+6Vnyjlb8r//9kXjL7781+dEM7Sjv6unSfFFgbvgfHoMfMYYEcTkOQl1WkJwfafRAqvIYLfCttsHo1jEVm/TDDv2va0za2MGd7JrZiPkt23JEBD8oaItvdI/lNYY6g1hB5+ZQv/gis5ijNdmUlygO6LiLuoK37Biu6SWPQ3rh4dTpU2PdNetixowZKLZrznA28sYN63Qgv/hKD8Xz03jg0ujclNw01cS7zg8UwmnqrwVqChwzB3dqSzLHbnAESk3zakgvlqxpV3RTu5GbCja3SYdBHanR2zsuli9fFpP1oj+vB37wtT7UWRs8z5nr4AIzzr7Of8sg9xqWw7xmwNftSchw3XC35XoAI8Ej1406F+uO11HqfngnN35ioA/zIvflfoNjGGXo92X9B48ErXnldgVOos32tO7WG3zLpu+0g8tOZB6+jJe3mYd5moftDhwcy4a/6+TUcz3Bz+0OjnkDJ+1p/bdMcvial3PLhYfbKZOoO3dbrofb4YG+JMq+qvHX4qFUjX+xllXzf/fnP3yDecg88jwkp17N/5G1CjthE6831fpfrf/V/b+4t1T3/z1//6+e//juUtxzque/kWdo7rG+7/oeTJ3kZ1c/1/vZjXsPNjRt9fw/8v0Am/yin//f8pa37Bo/PyugF/eJdforY76rMX75c5WfJxj7pxp/MeeLFl/ayHEWl1VMEYscTpsv4Hw5ok4yvPhyNQKnTpvh4JbTM20v89ut/kyDyLsxU8UdLsOpu21vebnNAwC8fOVteRk86r7kEwVbdgl3dCgINvwF346Bk9hZRJceOjlgu31MZxxw6mlx8Flnpy//OA/ORRu/YOzQxaJg54MWGcDAIyGbdo6FaGsTvwUvjYOO/PUURACOXC7zM42/OFG3s8LLN7hCzpg49tAXxUlHnpPgtJsfv6rw5/fgQ08fScgED3rrlufGgeaJJ56IhQsPE5H6UFfolIgcfLSTt6lAXlM7LlsKttUU6GoqQFZXfdU27SDeuU2DVdg8CR3lY1ABvPU7N8esMQruErhT0JE/+xdDHScxFB+/6t54wwum6ngIBdY091Zv0VsC+yLaFagd5BgN6cKs2dqvL1NE7KZ0KAAoXbQDtrmTl8Fp8W5sj21qm6ogMy+CSztAUx90dINwp04cJ1/Q4QWIFS82hKbgIeWkvvTShuqO2qq44hM3xYve+xfRQbBySy2OO+v0OO83F8VpCyfGnNN+Ky449/E4cTq7x0e3Uatf+ksKwWmCg5wVHLOm6uxq6a/+ECRmjWkpqLhN/X/JeefHb50yLQZ+/eXx+rFTYqxabSN2HnO2Mht0iaw2hjbEZ9/0wvh46/Xx+fdfGJNWfy0+L73R5YTXvieWvfzL8Z1T7ozP1F4dd584KWLDXfGmI8+N9nd8PN7zqlPj0X/oFm/GsbDRAUedG19YcXt8+g2nxkcv/0mc+3qsI9ur69gIO2Mfdtm2uk5M8CIUrDb6IR+pKWCr3kZXZ5dgCkTJP3hpIONC0HubgtwwEfTJfpSmjqhlI35waMkeHJ1y1113xzHH6Qxy2fDOJXfHjClTdETJ5OjfsU07lhVwVTg4t9FOyWnXNaQd5Tdc+8O47Y7b47RTT5XMiBuu+1Hs6N8Rp5x8mgK5BPeko+bskPyvQQBZfiTRGi+V1alWjIkFCxakGwuBXBJzacKECbFq1WMxqe+I2LFtqxYdrQcKHrP6pJc1anzA04KQjqlotg2ks7u1T0T8FRyXHM4Bb8g++plGohR8F60EC083WR3JMqRxbNdgI4tfSnmbLMnrl9cz5jHzljnP+kP96c5/80R3rx3wpu4cHZBBym+0CTD8AT46wM+Jutdb65zn4Hn9RJblWRdy8JGZ0xkP+pw/ddL+rP/mCx3ySPB3DoxrX9d/cKH3mFlX62l+8Ec2NgJmeeAbnoD6MC+PlXWGthr/4uEPmzhV41/4MjZ5qvu/fQofrOb/yDzElzx3sU01/6v1P1+7mVejPf+DU63/xUpc3f9HglHV/b+whZ9dfL+unv+q5z/fa/P7Lc8irKX4SfX8X/zI7mc1z6Hq+X/fv/89+uijyY9Yb+xbuV/hg/ibfdG57/lP9fwnfB6Q+EbvxJdIYIbDvFx2OzkJ+nJAGbhp95aDV07wLTpVbnka9bxz+0ruju0rPnimKedlHrSPhlOGu06eQi7DdHnZOHVu1P7CTQCYRcmXH+5QJF+swCcIy05c/mR99erV6QVzlDdt2pSCFPzqZD6mx6mA+WYInIQcHjChNT9yfu1Ahr/UOXhgXaCFFxc8cHb6Q75DL/WCdu3atelCR/gRQKaf8IIPyf0kp285f2Ck8mJUvFDvIO28VcBYL05rcHQCwUZ2VGqraDr/V+WGgokEDRVbjgW902NO78zEb28fvZ19Mb9rmoyuX3nYf6rgomJ5Kg2l3a0d2qFKuaYIL0dmzD/xpRE3vT++e88T2lHciqVX/VvcNPYVceKB3em4grj3xli+YShWXPO5OPeDN8TUDt1s2ubGy147KT72sUvjgQ0KWmqH7uondGaF+otV9NOBPrTTc1hRgn/spu5WQHHj5o3agbo9Nqy+Kz7zjrPiM9tPjHe/cmG0S0mcbL3GbuvQ1liy5F5FVxdGo7MVK2/9fnzu0u/E4zqSomyj8TPmRKzaFJvoD4FFjgV5vNCDl+M11X+mda0xL379tZPjezc+HH2Ljoqj9eLGA/p6d7MRGqdjRaTHNrW0tj0UX73q8XjDG14XJy3o1AsJH5JdFURRkHb8/BfHu+f+IF7zmg/FGz/4mlBYPjbphYXf2LQtLnrDhXFg9/ZYslln/e6QtZ94IG65b206Mzr5ixTq6h0bPQcdE2+ZOiH+9pJvxTr1f/u2J2LVFp19m6LYmFCKqzsKf6YxlLOoqgDfmO74xCc/Gf2D/ADRir//1CfinJe8NPnR7NkHxDYFXffkR/j79u36oUO7gHcqiPyD718rGa2YOX1W7BRc4tL5zG0dmua4b8mPbKNavS3uvP3WuPW2W+KUk06OY445No5TIPqEU06MW27+adyvo2k0S9Juc7mydtkTKJXu4smL8ggqt6T7oPp98EHzFTBeJWH0uZ5+COrs7EzzcavOeWb3sH4WSr5V0859XqjXVFC4rkA2AXN+iMHBBhQgRue0Ax8fZz6mOQSNfECBZeLYHIPBDwHsix3Q+ezTtIudue757zntecua4HUCHZ/J/PeaYBmsF1z0m9xrCDJJrpMDg8606Os67ax1e9LN+psfdMCoI5tkPYCZr3O3gwMMnKe7/rsf7q91Qh+PP21clru39R8646ETyf0l59qf9Z/+WTfK1fizEBT+gV2q8X/6939sR7KP2c+r+V8821Xzv3iGrNb/av1nnfC9kdz3Ta8d1f2/WEer+3/xPFY9/xXHaTBvque/kWcM1gvbw+uJYdSr5//d4z9eX7EN5er5/zn5/M+XVscineewvOz2tDQM01EmFV8eR3gV0N0/c5ycZnesvdfMY+9YWeuzvRM5Y/2kYlk56uULojLM9XJbuV5EGAp6yrsuByy8ILEYeeIB43LylyTXmZhcDhSwyOUPA8aDH8m8wMkDAtADI7hrPPMhpx18LwTgjLZwgufFlHbX/aBm3u6Xc8uinQQcWfDiop73nQA1ATJeHrZtu/7sX57CsQB16TqkQGhzQAF0Bb7adMhriyMfdMyCQm8606Ajzj/wpPjs5lUK/ilwO0qq67iAcyYcqV292juqyJ3Yaheohkv/CRlzJnJDQWTFBQWXYOGMmXV+XP/5D8QLXzi/4Dj2hfGlK/815nRp1/ehp8fb5n4kTj14Wow/4w/jA289NhYThat3xsve9/X44NtfGifM//tE9/KPfi/+9S3zFRxVn9Vvji/YORwMZXdzQ+WxGocPvvLY+OCw7q94+8fj5lteHwePF0DtbYp9X/s3vxGz/0Z1BZA/8Om/i0U9DR15cnG8988fjhe+6qXRN253G8074RVx5tpXxcLJH47/d/1Dcba6FX0KRukFdC0dYdCRZMkP6+3x8vf9Zzz0rpfEginvTtC2sz8WD1725mizjaQzp1ns3NSKcZ06PqX7sPiDP31ZvO7CI+L/tC+Kt/7e6XHNB8+Py854IF67aFr85h//TnzsnffE756rI1gUwB5/+Nnx3jP64tcP64sxR10YbzjvsPjzV78jjv7yS+Ol5/1xkslHz5k6K/n3Tk1j/hdXXRzvPP11cfDH35za//4Hy+L1B+n8atmQHbVDCo7qj0BCm/ejtl1BT/WPXcn41cEHHpTOGZqincOXfP4SwYbiBccdR1w1fvd3Loq/++QnYorOHx/xIwUqJeXyyy+Pzq5O+WFHHDL/sDjt9FPlL/rxQjCO81i24sHobu+MrnFd2o28RTJ0lEZmo0ZjUOcN12Ph4YvEozsWHLZAR2wouK7d5Me94Ljo69NZ5bNmpWNOdCiyfjTQ7l+iu+oP5xWTt+TrNY6WUDB7/MTxaU5s27Yt9Ye5R2KH8Oq1q2PmzNmpT4o9y4vl2+qnzMJJIbKNypo7HFWhEzLkanoZH/4t+3AMiyRoHmgtEj9B2DQvJtAT0C4Ct2N1FAcP4KwhzE3mP/Pa64HXEXiWr/2Z/8bNeViGZdJGytdW7OEgqmnhxQUdiTJt1OFpfrQB91rrNvib1rjIAY9EGRxsgmzDKFtGriPyzds6kjvR5nEF5rYc5rJz8Kyj8ZGDXOrgcQGz3sBNA5wy+LRTN0/0IUFv3QyDBlzXKYMH7/JlnomZPmhHFrRc1MmtJ3g5D8uwTNpIuW2hrca/sAv2rsa/+FKILXJfx3eo41P2J3wJOD5pX6cNG5rWuLR7HlEGp5r/xdqKPfJ563I1/wu7YAf7nW1D7uQ10HW3YVcnl50Dt48av5r/xT0IO3DZPpSxEXWPAzAS8Gr+V/d/5pV9o1r/q+c/rx3krBX4R3X/L+452IO5QrJtWEfLl9fYhKgPr7XQclEnx7bGzXlYhseANhLzExrq5NXz/+7P/zIRg1MMEAaT6YcvYJS5+RU3wJEy9bzNOM7zNqHuogfuZB6u/8xyBO1rMq5z6FzOc8qu23jUc2NSNp7Lztl4Rxu5afIceI5jvByW4y/80Y9+9AkcnInABMHhcX4Crxxv4TYWJuMY5skhmbsmDGUSvDzhyP0AxESCNzlwPzAVVOqU9DDMOW3Isnxy6wOOb6bAnSgjhzyHGx9+yKcv5u3+oJtl5ziUuR588ME48ugjY9bM2UlGIwWOiz/11wZLdYKdyOLBn93zRU8vFEs7UiWT0bv03uvi5kduUbnw6wlzpia1tbzFQePmxuv6To526aCYmo7GkG2VE3AjeshOXc6vTS8nk5xBBW4bnBkrvKGd22PrzsHoVECtIT1bImoQZGtol/eG7TF2fLfOx2WM5Q7oMsx459aNMVDvie5OXqKmMZGoFJxLET3prgDekM5ibpPcIe0crSuQjd0UW0yKEXBusuNWhDKFAul82VUgUPxbnIWMrZ/4QUw+66ZYceu7YxxGKNmoqZ3NW/WStp4xY5KNOINXLidZenDUObnwZ1f3EGfm6viGbZu2KNjYHt0KmtpGgzuWxkf/8ovR7FgSf/dP/x3/ceeqOGNme7LRwIbN0ejtSceCbNm2ZRQbyQ9Ym9TXmgKUm7WbuEcvh4uGjmfZ2IzecQpIy7YbtmyUD3QpONpTstFAbNSO2K52bPzUNrrhn18dP955Wrzzj96uY0E4t1i7y0t+xDEXbS3J3YMf7c1GaWwViU7+K/9otctP9uBHDZ3FwREm9iMCtnWN9xADsJsfZTYq+VF7vUMvr3wkFi++LebMmZP8HtnMo6VLl8bRxxyjHeb6YQc/0X9e1ocPIKIhR6rJV4lxN9TXdLSHfK+hHf767aLYlSz/1vATu047utnNXscXhM9LAtvkN6seXR2M7SyC3z+j+Z8/GNA/rxnktCGXMsnrEnUu2rxuUbZ9wPV5YeYJzHwog8+cc7vXYMvDzmNkA3JwvMaaBhhlJ+pc4JsXdWSid7X+F1/kbTfsQrka/8KP7Hf2Kdul7F/Usdsvy/3f/bQ/kGMDzxvbhX6Dy/yijYu2av4/v5//qvGv5r/nu++XruMb1fxn5SvWfOzjcrX+V+s/8+T5/v2/Wv+r9d/rfbX+F8++rPGeF2nB1we2ear1/+STT/4joS7VxRdTX4Sf+AJNDow8hxlufOc5DvTA89xlgXfJAkYCl0Tdl+t5npdNC2yPicDrvqbibinbZQQuk++t7PZyrnBJoiN3GZy8nNdzPMro7xy80epT3/jGN57rASfnIciJLz4kJg2JL0Qk6lzg+0sRbW4HTtnt5mNHQwZtTpS58slJm3GgtzzKwMldRgcSdSdw0AFZ0DqBY160Q4teTuBbd/OHFxe4BFcefvhhnRd7asLjmIcWf5qvoBbn8ZJz/EJNZ7ZicURztMEQ2ye1a5O48QHdk2PxumWxY3g3cmevgpVKnfWuuGDKSTGpg2AQgVnRaMtxMSKyp2C8dKwlOHJ0vkM6q5Y4LXihQF67duty5EAdW6hfLR3doBCVdmfqAVd7OgtPVKBIc4XjEqR5tLWLTkdcNOCnqB27QhuKONYJQKsfTXY/KwBI1LgIFivgSHckoqVgIrtJU10qcBYwW07rHHeQgnySIRst+9G1cdxvnB/Hz5o8qo2a0ruRjl8obMQxCTIXccakD8IIqrMDtakOjxmj3awN/cixm40GYtOq1dHqOz4+8LFPxgtmsfW3sFG9i3OhsaSOWhjVRhxHIhsnG9X1A4r0STbSmbuyTVpaFNjv1o7eTsbnSTZqiy7J4giJfbHRozdcErev7dU5xGerH/LnUfwIdffmR09lI15Whx9xNjf+Qe9Zj8t+1NJ4cebxLj8SZpOA75P8KLcRvEb8iOMtensnxI9/fFOwq9pzjJz5tFFHy0ycPEXzSH6nMR3U9n18pqnAeV2/AgxJV85bHtQc4qgROKe5JH+UGySfqinQXZOt6uJZT1/YBBf9kPCZaD294+OBBx6IqVOnpvn6bM9/+Hlt8JritYeHY9YLLmC0U/ZRPJSBsb54/TOv8loFPTjQkJOAgUcC7hyYeQMzHrAyPbysd57Dw5flmT+5cdHXdWDQWFfbhnbg7hvt1vf5vv67j/TPNqF/pGr8f/nv/9X4V/Pf61o1/6v1n3W/Wv+LZxWvjdikuv9Xz39eJ6vnv5H3K3HP4PmaK58jLvv5HJtRLj+/g0fy8zQ5MPL8fmRYmd784WF8cvB9geNkOcZlTEnUTWddq/lfff+zf+BL+zL/L7744qvkTk/o4gstzl18sR29nreVy3ldbHalp4Ib0XiuFxPNtWeQj0QWn5qJhZZzKIH5KtcNz3PP4hzmMm2UyfNrNBj6G2e0dtqmvvnNb9aBukVi4L14eeHwgkTuZJgXGeCU+SJNmx+sgHEB4yIAa1rzt0zanKDJHdILFu05HDwS7ZZF7sXSMqiX6bz4edEEN5eT62k5wHihHjsd5xwwSzs1df6sgnMpoJsWfQIKCnIp+Maf4fOeueKFbBoIBboUIlMArR5dCkISLFu28ZH0E0s7u3zHdMQR4xfEyT1zhSXaFNCEB4Fj9S/FAQkOy9badkzgcVDR27qOveAIBLxCPZB8aAlkKxBMFDIdXaFM7XUFu1MQThIGtdM3vcBO2HVFD6EVN8UaCebJznppWvIFRfraBqU7u2ThrmDfLnx2JBNoFDy9HE4I7JCWZPFS8E+80B0b9R50RCyco2MZePvcPthIjESnG6R4ynsUCFX/1PmGAuIEyEe1UXTH/GN/LV5w1KLoU2D+uWyjWcddGKe/+Oxol11to/31o6dlI9mzKZ96tv0I3+lQUH+n3rbI2eNjx/K6w2Jd6OnpSfNmzepVCv536wcNBejT6lr4iTxcXZEvaQc3P2QQGGaMGfPkryjL/CScrGKD80rwa8nEP2DGMTA7tvbHGh2dMW3atDSXfxbz3zzJWVPYQez1wf1lHSSl+aN+sG5Q9poCvukpA4eX2wm2AgcGndvgCZ3xKJsXbeZjOuqsq66Tk0xHGRwn45V5WkfjWT5wJ8q/Cus/tiORY69q/AsPqMZ/dztQq+b/L9/zXzX/i3sG871a/6v1v1j1iue86v4/Yodq/S9swRrB86KfRf3s6HXUz5zPl+//1rt6/qvW/+r5/5l9/7vkkku+q3Xycd9DlJvhnnJQaSu3G17Oczy+6OZ1cEdLI1+IR1pHg4207qW0P4TGLeewB+arXDecnFhcnrucwylzEYKhnTyH5XAiGW4zTRl/4XXXXfe3LPReHPNducC86OdfiAynzTcB4xkm2elLFMFa/swaGeB6N1qODy51EryhcSCFOg8nDqYkpFE+aLdeNPvmRW5eyHDwmDL4tENLog6uZVl2rvfdd98d55/3shjb3akXiukGSWBTb80jiFoEWrUejXu3AAAgAElEQVTfNwVK2Ump/mo77aB28/Jn+hImPP2JfpuO89DQEE5tsINYXYeEQO+QgraEZVuKjjX1EjHFiFN7U7KIpbHrlxhVM0VXi2AgCGpOf+oPH46ySDt0BeQsXXpHf1M/qAGQLk0F3hSiUlkBEenBi/pESNMwjfCkFKIIIdcV+OaFZin0Jxxtck242toq2eqjXojHblY2hqYdtIITXKxsxAD88tuIM7M3bd4e3/rWN2PBggVp3ubznxff8YLLLVu2yG+KhxDPe+fMOa8pstqT5iSw0RJzlrOQ58+fH906huRnMf+Ra77o6IRsryfuR47HmgIcW5DAp58kt9Ge86QNHHC54EcCj3IuMzXow+smODyUg0PKaeAJPWsqZbfl+iQifeTt1gF8wyl7rMzHMHhAk48/uPTX9LYRuNCRaHM/aKf+XFn/0c8652OVj4X7keN5jKvxr8YfH8Jf8GuSfSOfN6lBH+CAy4U/kcCjnPtcatCH5w041fwvghfYCht7PmKj3Ha2JTbE3uDSzvz22uN1CxzzqeZ/ERjCDrZn2TbAsfcvy/N/Nf7FnGJesMZ4zarGv3r+833JPsFcqeb/8Hfu6vk/3Td9H/X64fsFvoLfkGjzcwztvgfjS/k9NyFnH7SbL2DzJq/u/yPPjNgImzwXvv+deuqp79JQcZwFX6Z5IOainNeB8cUZGA/B5fYcbh7k4LpO2fU8NzzPhZpwDaNOok4q5wV0D5/FdrI9NA6DC8/fO07eWsbfWz1vG60MzHDnyCJy4LbR8ry9zsT0BPZk82T0DQGHw/FItDkHbpp80tIOHFxwkMHC4DJ87cyWBb6TyywMTtYTOZThBU92gvEn4yRgTsjgAoccOuuITK7yLjLkgWt+6GG58Nm8ebNktMeEyb2xXbsekwy58IACyDpyVgFhdiGrr1IjbQAeImCsBy5FYTliYki7a3XaqILMOq9Zwdp2HcVQhFkJLsu2dJfjB7QVmD/vb1PgkReRias+BEtzQu1D4idzIS8FdZvMMYWlFUEewo7SgR3BA7JHu6ibg5LDGQLYBxyOxQBPvAnyNhX846xkguKIYqhrOpOWF/rVJIMdwJKqQLO+ZCkvjmuQwqJnJ61GVoF0VdRXto+2CETrpXh1BcFlTuKnlY1+BWy0U47TN3lSmle8zIn55DnP/Jk8eXLaoey5SD7a/AdOYn7RDh/PXfI9zX/OcO/q6tpFC/2zNf+RSUIXAjSsDS5bv1xHcL12kIODPtDRJ5L7SRk9SbSB436aN23ATGt98jXKMli/rB80XMh2Mh/r5zbLRQYwLnAYQ2hIlk8O3DSWYTzgxoEH/bMvwJc260EdfCeX6Y+TdYXGOsHz57X+I5OETtX4F35Qjf/IexfwSy58mZxknyX33PS8oN14lKv5X81//IB1ER/BN+w39hNy2klej8C1n9nHqvW/eHZgLjKvPCexH2VsyLU/z/+2d7X+/2p+/6vGv3r+Y92t5n81/6vn/2fn+Z/ppIsvplyUWWRcL+e0F1/CChxVd+GaDhgJ2mLB2nO5jDdaHdieEjJIllPUSp9GKoF3q5ZxXB8tB5bDKedGLNdp8+U218l56nbd5Twnoup249POBT/yRddcc81HeaBiceTyzZKHLT9wCS+VXffDmOHkpJwenn4Y5sumH2yh9QU+PEnGJzcMPHCAOVEGRnIbckjojiweHK2jcXI6+NPulMsDDg9yy3X5nnvuidNPPz1mH3BA9A/prCNtC4aW3beEh+vs6MWnFPCFfZuCvRyNzA5ecgGER0CW/opCO4E5kqJdAd6mgrj8I47bGtJObI6KYAyYNgrMNlu8jLBo50/3CRTLUsr1hUNBXjY6K1qtP/VnB7P01wvpZN0E41xjIRbHAKAj+qGnyopVa5xSUTqjgUgYE/EZVDAYHunYCyFyisCAdCEeTV+FSFcFFE9tmebFd5y3q64pSQ+1VTb61bJRm460eEhnhv/whz+MhQsXJl9yoM/rAfOJi7npucdco53cMON4Hiav+gXMf+Q6ee1BR9Yb6uTWH7y8f6Zzn8jdR/BIwCh77bIM+JqOdsq0md68jM+6ZxvD1/wp52ua+fhhCH7w4EImCRzzL9eti+HkpJze9nC/ns/rf9G74tO2xjbV+Bd+YvtU468bpBI+z2VfAYa/OPf8BccwzxPmsOmq+f/ceP5LgzT84bGp5v+IP9s+1fyv5r+fH6r7f7X++1mUZ8/q+W9kvazu/yPPR34u8nph23BP8TMUMCfKvgeTm4521h5/h4IW3sbJ6YD72Qs66wCMK/+uRHueLBua6vl/xHbYCNvsz/p/5plnvkdkS3SlKNdwTpmLQfflncjU3eY8hxmfnIfrct0wcl/GpU4yPK8bnueUScYraqXP4omgBCxVi5VhBOj6aDkww4soaFE3HNhoZWDlNtfJ87Jxy3DXy/nUiy666GxPME8KTxAmlG8EtLkMPol2cMuTkDY7VN4G3ImJmi8A4FHPeVLmQrb5QA9v6g4WgwMtMDux+RhOHTrrZZ7QmB5+1KGhjI4k/vx+2bJlMWvmrDj++GNjh859xTmabB9WEFdslbTbV4U2zilOrdJJvBo657Wu6CtBVwKu9QEFyrTTuEHwV8FidgSn4C1y9Q++HA0Bl5r6TVtD+MB4YR8uwsvvWuLbpra0k1n14oVlohIDgriyrnD1qag08jluQ8yEJxuIjt3COsG6+ClB01ES9I+TmCVBPIYUeK5LBg6VNNPLz7ANZzqnF8FJQ/pPOJpjMXhJH4Yga2gXc9obLeLKRr9aNsIPJk2aEuvWr4/ly5enncG+KcuVdqXn0/xHadYD1gUnyl5rgHlNYi0hMVe8XlIH7ou6eRnfMHjCi0SZdvOBBr4kr2Opog/zJjcPcKgblzLJdXISfHMYMsqyqed6QAe/tCYM60S9LMP6Gg4dqRr/kXtoYZFiHDx2wMpjUI1/YSl8Fb/6ed3/kVrN/2r+e83GHygzP53sk17n8E+vl+B4bXS7ebkOjnl6Xa7m/3Pj+Z+xqeZ/Nf89Z/O5SplUzf+RNc72YP2qnv+KZ+5q/S/skCaLPqrn/+r5X2ciXy1XKJ+JjKPYWVzOc1zI7aOV3bY/NHypNh08n7VURBCfObviW/+T+YwGL8PyOmVfcNtTm3H2KV+yhB8CqrQ3C/RN6YvTTjs15s6bF/yZflO7bTkuoo0jHwb0p9ryP14M1lDgtaWgcE27hGspsMqXDM4+JoCr4VCAjWCtzo0QTDgK1hLH4bgLAr+EcQn64s7amCyYsJGhLywsOdBypESbvqA0OTJCOAJq0zAP2wo6cFwGMB1D0VJhKB1roS/bkqVX94kfASZpqyNAxFbqoJ8CQWoFX0/KOmJDvDjGQtW6znpuakczO6Hr2gVNAj4gfXnBXjrPWTCOt6hR1wv/BrUbeSj1gaBzZaNfNRtxNMrgQH+c9eIXxQMPLI+7770nHnrooeQ71UdlgcoClQUqC1QWqCxQWaCyQGWBygKVBSoLVBaoLPAraQGCSk/3ssGKwNTufBTdSsltOa7b9gajDdoyrmn2OS8rMBphGcf1PKec1+HDFjBg5KS8nsPTxlS1OwePMrkv6oa57DzHN8y4tC3aunXLR4hgKk6oYKZsJulkLrB7NtWJHiqSyUvSaopeckIC72FrsTuWNuKRCWB6WMAscYKhColAshSElEyFUdOuWHoiDYRAMFQl4UlMCnqiGPLrgqEjupJgnRpUSGqbt8CiSAFWwqNph2zSAyaQwB9VhQOLJFz6iDnnECMX5rzYjl27TeGpFkMDrdjZHNDuYAVV1T4EnN3EwlPcWEFdEWrHcGuQHbzqmc640JHACiyLn3b0sg1Z5FFrp030gNAAGnb9SqdUp58EiDmOQsFcDqVg53BdP2kQbMaGBLELG0ouhy9LViEefqKnXdywGWPakmx+CU02xJ76VweOPYTHGRr8Ypz6nPqC4vpfKCneqtT1p/K8JFDnZjQwoKLfTZ3FXCdwLL2IMaOXYtUaW3W6stGvtI340aGtrVN+y453/Gzf5hrzoFqP9r4eVTbSOpPW6j2v2ZWNKhs9G/f+yo8qP6r8SHfv9HxIpjLP0LpNpydJ3a95hqxsVNko/aUk3y9kil/k97Vqza7W7Go9qtajaj16bsfYuru7/0KPEexiVRArXUTLfAGj7NzwMsy0xiPn8QQ85yomPtTdTk4q18EhkftyPc8pk4xf1Eqfz9ZO5BLbfa4STimnHEY5r4Nbhrnd8Cfl27dukxX0TwFCPScqNsiREvpTPR1fwE5bhU2jnboCjQ22zWr3KoFXdrGmIxbYdaoIZ010NZXZDUsAlcCpjgBOwVaiSDx2pkCnYOmsXw7M1Yvl2AWL4PSCOB5QNaacq8vREA29BK4mPMrp5XTigY7sxiUCqvhrCoTiBfBpU2BBJOIrLmIFt0babUsQlHNL0UI81M6DMLsmeflbSwHS9GwsRdsUJB1UYJRduW3teg2eAqlFEKywkbYG6wGJYyfUV/Foa9fLdbCRYNiIF9QhmEB4Oo5CMpo64oKga40Xz0k/bfBVP9j9O2wj9Zk4LYTJRvL/FAhOfZSN2LIsWQPqPOwxbB0byQAEwwEVxhAf2ZcH/aYCuUOyXbKRdCP2rhGMNsY32YigMTCRql2f2hkNHdwKezBOhY0KPPZPK7ot/rIRUoVbaxf68HStycYtzmOubFTZSD7RP7Qtavrh5OnONeZ6tR7tfT2qbPTUa3Zlo8pGz8a9v/Kjyo8qP/r5PGdXc62aa9Vcq+bac+V7f7UeVetRtR49y+sRYbs9X2oqQlsUlIxb1IrPMox6OQEjzPULSSms9xSSc6VHKwPzBSvjGJbXCW3mcMplmOvOjUN9tGtP7YZP/dP3vOdMgr8K3Q5bmuMPFJgkrqjgMUZQeFRBSwUUiToSlUyBYJUVgK0p0EpQNe0cFh+CnApTpkA08Ui16OgEIOpcktNQ4FN1seGYhhpHNaiO8rwqriGeOpFYMALHok9BWQ5kQCFhCb/BT82qDikIW1fAOh2loPgmu6M5+IEjIRoK2JITnCWYmgLHqnN2FYsBEdQ21QuF1fcUaCUIilB1UDspC91lD8mrbFTZqPKjaq5V61G1Zlf3Nd0jq3t/9XyUnu2q56PqGbJ6zq6+i1Tf16rvtNX3/io2UsWPqvjRvsXY/vZvP/4DBfU4E1lfKFIiL180PBWsjEPdKeedw8pw142zp1zBw31P+4Kc44xWBuYLyS47J3ZKIucC7pwyMdw95bSB65wym2apG+ZynoNnukVr16z96yHtLOVYgub/z955AEhV3V38TNldFhaWtvRmQQTsihUTRWPX2Gli94s9qDG2mGiixhQblpgYe+wYK/YaJaKxIoggFqR3lu077Tvnzr7dmdmZ2VlYdGH/V4f33n333fJ7b2Znzvu/c8OUTfn4uaJYFWmrMNOoPBg0Wxs3YwxzDSjKmJGwYf6IDMq+gqJrhH4OPIoCLLsq6wZqsIpsVkRrMEhbB9arUSjSNcJ2FKEslTpMQTiPk9fFaBURzWNUMMtF5AEsAZmVBLkMqy+MwnUdYMSzondZgv8xKpd9UHuqTjkMhGVf2Sc1xxFqcjhFT7NVfs8XAgqhTjhmexKNKS4zrpgiMy0adABfLsqZArT8jZ1tBw+TnURLMWJoL/yM3pWlRfx0sW8U5qOMeNYw1Q1NVOdsMNhH2WYENfkeo5ljFLZ9LBeVZYVjxH6qbxLhPUZ1Ec6snONm3+sYEYljRMtiZvJVx4ingOdejFiXGhcjhUOTo6KpJbi7s8tzr7OiDkr0Z8OON3vESHEVp+jOyl2ENfvo05gk+KsXurbIWNHYrlPqLzmAnOPR0vFzFlW0tq4jsak7j/EQbWMUqONhjOw6sveaPoPs88g+s/m30P6u2d9++35k3yHt+5F9z7bfIvZ7jT8r7Tctfz7b7/5Wo41QxuE8UrX8dGKApGls9Rpbr+69ruTXd9lZSJXSV3m9tJ76SsynAJBUNnGfJC8dm26pPJX1llpX8vKU772U761rqeQts627gon/SAX9IZLUxHQpW37qPm17L68ub9srm7hs2EdBT5qgfHyjLsqY54BfyiVeUlJ1YrB8fp2NAnOisn6gH4OsLvQz3k/h0K86KM76XdSw7BqCfAPLqoKiL2do5V4nKlKehD8Uougs3yzudZVyHz/46QnB49gOfYCjARpEhPMQ0lIyJC0YIhKvnfhIcdP1l5t8Vt5H+wS/1GOOSJ+bEjUDzquYIjSfQYlRII9SEFa0dNzbl8ezuDxb83hZRAOybuBY2J8Ay3LoTiB30dBsW5HSqrUlGOlylR4/c/oMzFuwCOHaatZMFmyjgZFYcmyKtlaf9OWYZXSsuuLsid2ShXgeYlKbJUy78QmkeHqMVAe3xcMp7K4ax0iWIVRynVAuvgq+DpCXIsAl4Gq8Ev3lXa392o6xnoDHWhHg7vpgebbtttiW+CmCW9xiGqz6w5fzS46PhFtMEpwlhLONeHl2QM8MUcD2SWxmboSCuK4tY2SM7DrSZ7G91+zzyD6z498z7O+a/e2370f2/ci+Q9r3bPstYr/XFGCl3672/ci+H7UebSS/IIiB/Qdg62FDqZ1QZ5HmRU3MNDZpQ5R2kl9enrf09mtbydvWMjF5+YlCr7df+5qT7x3XIssNLSKngsjU6WzlPHiJx3p5icd564n7XJ7EQyp5jPjVFG5MFCpiNM0NcOkmlVMkMEtKCowwTx68MpdQWWqu8TcDBT9F+uouC+XHuO8ud4V9tQwUZuQxJ5Nz59+JtRIoKQvKK5hCo5+KaVjRs7EQ19k2BWZfiJGrefxj4P4o8EiWlzCqS0EWF3FbAdbBfEUIOw9l1k1dm29S9k91sb8SY9lB1htGSJYUFFv1sIWPIneslsIc24hQeXYTwTHfRQa7yGvWLe9f/mVWFS3FKD+Qhy+/nIXysgrsvssu6NCxyNlrqJeWjIARMAJGwAgYASNgBIyAETACRsAIGAEjYAQ2PgLSt8rKy/D1nK/xzdffYcvBm1FrUjSeaWyMevROaCNNkjvqd9ate2W8Y7RMl5e6n4pgk0n15FKuyYrSFVhXETkRQLp6M+U1dZwHLVO5dPsT81LX1Q8FC/PRh7gNgXtEmGHB/hCLuihe5ucFOcecpmRjZC8jROUG4WOEqawtdCHI7iK+l8Iz65KILNE1KtFX5VhVLEzRVu1wGVD4L+sKh3j3mPsk62piN0rVuonI+inmUrX2M+pVwrETcZ24TIlX0cr8hz10Am/8zLNuRcIyglVRuvGGOKmc4lud+k0xmTuc/7H6omhbidiKmKWATKmYQjQlcgnSEphZN589cJeoHBfcSgsxilG0Lq8sxZBhQzCg/0Dk5WlWOktGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAhszgRCfvM8L5uGr2bMZibwlaiOyjjWNzWlsTlxzZ5fKHKW39C/v9Cfu9/ISl4n749Jg4t6GdZVbl6TjstWbtk4nIabdk1vmunTWA9FUC7mUSyyTri9uv0RcicLUXBm5G4/slbqrsHtFI8dkJ0DfYTfRncKAFfFLnddH2wlptP5oHgVfWRBQAOZ2jNs8jKIu93MUkTDlXIYIB+R3TAFZ4rMeyw6yTmqzjBpWIQnSFH5VjpHI8cnvGO8slVm+vPTO9UUoVrPhGOuVN7C8i6Pcpwf9fVrSe5mdZtvcZvuySuAa+8YRUuwOU5B2Xr6yv1B5+f5S4Y64yGOZFEsBZ56Ol8UCy7ubJRx/SzLy0QO6uFNnE5CbusJtvxEwAkbACBgBI2AEjIARMAJGwAgYASNgBDYSAgoU7NSpE5/Gz6cmpafjTWPzNDaeQqdBpjmVylfKtD++N/5vLmVyrSuxXm/d64u33azl+orIzWospbAHpqkBJJbz1lOqcidCed7+pKUmbKOsS0sJCagsxIhcia0RTo4mEVd+vfIL1kRotRRZBUXew5zyjtHE3KDwKzsIibLyRfZJEKadhJtIjXX4JQSznPP4lWLMclF6LEdYLiQVmvXEPZJZJ/e7SfZ4fIAKriKk/YwKlrYboTIswwmu8X/Wr77S7kICtnRgGhm7SfhkQaF1v3yQuRqV1zP/Ux2Uy9kR9puCNjvMPEYe666Q6uC6op4jFJnFRJMLhpkvIbzlGLlmKZSrVktGwAgYASNgBIyAETACRsAIGAEjYASMgBEwApsKAek9eiJfT7ybxtagsfH8SgBM99KpV35qylQ2tZy3nVjey/tBlwqUbQ2puSASy2tdycuLbyX8G9HEbFSFZR3BGF+qnPQjZpRwHg8JUbXNY1QuZWWEgjScoB2FhGVN5hFl5C6lYIq+igxm9DEtJXg0j+e/FHddNC8jg6P0LA7yHaTJ7aTqSmNW2HOM1hhBicaKgnbRwhRx9R5TJDCtLiQa0yqZu9gJ5bNffqrWEUbyxtiGj2K05GGaYCDGCGf1Sf7LMQnM9B4OUEhW3dKUVTagN7CEY42HDSkaWsI2e8QaVIjdku0GpWppvIzDZr4imBWZrK47hZ05PFbjqmOkCG1NQJgLI/lA+zR5oSUjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYgVZJQLrTv//9FL744gv0798fJ5wwHkHqUbkkRSHHNWTpUOunsT333HP46quvMHjwYBx+6M83Wo0tA7dErdJb95YZDknK9spqSdg/bsrt6mi6jxpMS6ZESLnUm9h+4rFa57x2Umgpmkr4ZVSx03opCIe4IluICBXUgFNiaflAOwmfjIcVyEs6vhjFWiflsiqKwz4Krord1XFhGYjzXeOnaBuRUMw6XeVBNaYAZm4rtFjRy862gpksFtMtGxZho9rJiGIKtu59x3/yVLEP+axDccNsCSG245NVBkVpRRT7JW4rj9Wo/Zg8aPhfjJ1yFh0cZ4ACsMRgZ2fBfXpzR+WrLCFc0dEsO5tm6G+8/gpmfznbmaN37NgRWw/ZGvv/bD9sMXhIfNyM2r77nrtw+hmnsZ8cjC+ZkSb5k+BM6Z3iOfsuL2Z1y3WOKykpHA7j0UcfTclt2DziiCPcoxENObZmBIyAETACRsAIGAEjYASMgBEwAkbACBgBI9CSBObNm4ePP/4YEyf+Eo899jhmzZqFbbfdtskmnN4jb1TqP3ryPVeNrZF+xCpuuelGJx5feMFFeO75Z3HjzX/FBb/6ZYtqbDQCcBqbs3SlNhahrubkOGprcgjgXoVSUi+MB2LG+NS+5h+LcT8NZxFoQmNTPKYUOCYnh3GpDe+lfCVXIL6a9V/vuFzLZ60sYafq4+jXL7WUiOz1It0gPQBemeYuveNTl7nXIx9h+hRLQK5lZHAeBc4IL/YgJ4HTNHNO1KVwq8hi/st66U3MGfQ0ed7NN/0Jb77xJsaOHoMTJpxAmwoKtYwc9vEq0XFBn4wyKOHWCcgu6pcWF5SQKehy4S7IeDQwdV13RUX4DguwL1FGEmu/LlAnbjPKWEJ3oCCG6dM/x5Kli9G3dz8MGz7U2WjIgoPXurPikLgdkeDNuqJ800pAltitfoVZp0RxiedOD6/TtiX1amLA1WUVuP2WWzDt/fdRVFSEwsJCZz+xdu1avPX2m3h+yvP46U/2xrnnnI8nnvwXnpz8BE47/XRn0ZHIKOqioEWM70i/+s722aCLaM5wdmpqatwYJpBlYqqqqsJ9992HZ555Fj//+cYmJIfxwbP34sPQNjjtmD1QkDiwLOs1C/+Hux/5GHufdCq2LaE4H1qMR++cjE4jj8chO/bMcqTtMgJGwAgYASNgBIyAETACRsAIGAEjYASMwLoTmDt3LgYOHICSkhIMGzYMM2d+kZOI7FqUOMW5vWorwzlpbIn60bvvTXP2r7KAlWityfokINfW1qJPnz546IFHaNEqm9YwTjv1FAY0rp/G5s/jM/58wv6ef96Dl156mRqc6ktVVKkFKvqyTmYNMCJ73Ngx+PmRR7n5xzJpbAo0jVIbjPfRVZvrP6kap7ed6/Gp5XS8Ut0I4hv8V/mpefU7m7vS0iKy2s80cG9Aze1jpvJeO9mW7ljZULjbDO4uCaN+JbZSMA5RUNZcdREKnxGeeEXtCm2AmfI7/vP1f6WYO91dxG+89SbGn3yiwo9ZFSN7VSfFaFlHKNo4yjsWUUUpu6hnCro0MY5KEKag60RWRhurbJR9UDSyooIZWCz7Yue/zKuSQcg0muA++SSvKS1Hr779sWZNKWbOmIlh2w6nOMs3EY/3Oy8KXQMUHgO00uBBev/KrkMT8SkIOCL7Dt1doUCtSGtFCnM3KiprcMWll2L1mjXYbLPN3KMK7dq1Q4cOHVBeUYGa6mr3Rv3k009x3i/PRXl5BXr2pKDJuhIZ+WlZ4YR5CfQcIXvG/oiHBsUxqxNpkj4E9MiEUkheInXJy5O4/MADD+LII3++8UQkx6rw7h1X4aKyi3HC0bujIMPYvbF6y4olH+Kci8/G7XsfSxG5G2KVS3Hbr3+Fwmt2NhHZg2RLI2AEjIARMAJGwAgYASNgBIyAETACRqDFCXz11Vxss81wV+/w4cMxdepUpwc1ZWkhvUeWqM41ldG6TWlsifrRB//7H3bYYQfXjkRj76WAQ7207S21/vd/8Mn4X/zfemlscglgOClefuVVp33lMoeXhO3XXnuNQY5HSulKq7E5C1pqcDIjiMpVoCFJEGvqFRfGGo5ZnzW1lVqfJ8ql5q9PO9QWN1zygKW24A0kNX9DbLs+KFI3j3cuQlRRJaY6v2HuifHCD8uCQTIoRV2Jrn4/vY95sfz1hhvwxayZGDRooLu4R47ci8V44VAslfjrk3DL+ly0r0TREMVlicMSUCn0RpkX0x0Jis5RCslBRkLHXFsUn7lfx4UZHu+X7YT8jBkiHGYZSdw+XtyDBvVDWUU5evcuweKFy+hRMwtDtt7a2VlEJGTzjo/zb2abEUZDS8vW3EzftJcAACAASURBVHu6bHTzRN7MfuepTLGXYrkYBPICuP222ykMs95evdC1a1cccfgR2GHH7bmvAFG+QT/89GM8x2jg9u3buzdvt27d+QaujTNT3zguHz8kNLGfIrD1OIJ8laOMgHbTAtaNO5OIrC5Gvbs+fCOnSyeeOIFRyffj6KOP2miE5HZF9L/2F/D85X55+zibqVIB7wUoySmkIz942nsZ8Wz71wgYASNgBIyAETACRsAIGAEjYASMgBEwAi1GYA0DCxctWojjjjvW1dmzZw+nA8mbeOjQoVnbkd4TkO7FUpo/K5vGlqofqewnn3xSH4kssVbBhhKMvehjL88LQvSvp8amAE8/NbRjjz0W70+b5vqbboBScySnKWmMBx18kJvXzOWl0djcnGA6QhqXglJ5WN1L6z9ESuyy157XB28oXn6LLDekiNxUB72BJZbz8rRMTenyUsuk3fYzGjdMZdUvfwkKwBKCg/I6pjGKa5CRxRFF1PKiCDM0+MYbbmQY/wz079ff1bfXXnvh2GOOR01tJUVCytAUgGWBzAN4sbBK+SyzpghFUUq2TsV15hIUVnXHwomsrFczV1LLjVtWMGKXWjAjd3Wk7mqoHq1J5g6jH6OQFy5ajLVrVqNXrxIsW7YCX345C8MoJGu6P4Xiqz5OxefE44DGRPE5JLMXGdLwf1eGbSi8niHRmDP3K3z62afo27cvOnbqhF/+ciKKaWdRI0G4aq1js9MOO+G7b77F+7S66NKlC6Op2Ru+qWXFEZV3MwVrDoCCKW0rpFbrWIrTDoQLsaa4rR7yDZcpeVHH/OxISvrQuIU2G1568sl/Q5HJTd0F88prGdOHD5cFOZrBJx7bcut67IJPdmTogz4Ita8dhft0yV8nIocYFe5nlLjo/lApzi9Ifl6LYbAbaNeuPsPbYUsjYASMgBEwAkbACBgBI2AEjIARMAJGoJUTkIWDnrKXFuEF9anLW289FN27d6/v/d57j8Szzz6HKVNecHkSc2U5oUn3pM34FVHJJL2Hui6DDCVwSUZOr7Gl049222M3Bi4+hy233NLZWKgNvaQH6eWtq6/z58/HxPPPV0NUvuggsI4aW4yWtBFqV2PHjMOJ409w9TGkk9KZNDw9SU8tieOKcVCMAeV4KKFR3wsxWLSipkIleEyyxhZjQcU3M5ujVxApV9Y9qZrUpDzvlbjPy0tR1BKLbLj19Rtmy/TLA6BlakrN88qmK5datr5MgNGy7trmBaKTzBsQvCoo3BJ5hBe8Yn9lO6GL54a/3IDPZ3yOfhSQFeK+26674djjJSBTSA3kw58X9zNW2LGLIqaA6pcfcIiXlaJw2QvZZ0QYpRzQ5HeuF8ynQBxknjyMfT5eYowSlvYaYPtBP+t14c3yVmY/aK8R0xtVYm/HTnyjxNC9RwkF5VIKyV+pAe6nqMc+SxzP06g0DtarN1aQdUjIVXiy7oxIQJYFx1tvvYXOnTu7Hh16yCHo2L7QvUl9tJUQIx/L3X//ffzAmIL8PIbF6pLUhwMXitp2VbEdhlaTHW0ymC8bD4Z4u3KyqfGRRVOqp/ehpaX3qqqq5h2w45Ne2qfHGLKmWDUev+J4jL3mcbz9zF95fvIozubhwLP/hkWhhvdU7bJP8dsJI9yHnbujdOb1+HJ1w/5Zz/4R2x94Kb6pqsurq/ew3zyO+h7E1uDlv1+MYXlxkVz1XP7oF/XdKy4CZk97ACMLOyCPfTjkV//CsoQ+VHw3Fefs18Xt85WcgElPvFt/bOJKweo5uO/yg5BPr2qdy6sf+TBxd+P1bP3ivucmnVM/7sKdTsDkDxbU1xGrnI0LD/gZJj3zNib/+ZQ6fj48+vFKlM+dgoM7daRndh52OvZ6fF3WwKu+AlsxAkbACBgBI2AEjIARMAJGwAgYASNgBFolgRUrVuK9997DBRdMxOWXX4bf/OaK+tf48eOS+rzrrrvikkt+jV/96iL3uuyyS13Zb7/9FpqELylRz9IT/Zk0tmz6kQIWe/HpeC9tvvnm3qoLetR+aVd6Qj5XjS1KQUrzhDGaMq6pUb6QluaihKnD+anXRUK1qKysYqBcDcorK1HN9YrKalRWVKKyvAaV1VUo56u2itvUqEKRmowam591UhajbCYdj7peapRk/YjciqTBuDzYdH62cun2Jde4gbeo+LX6lAmS8r2XNwhvO3HJOw48rRTj5J6guyUyYgjISzhG7xZ5F3MpcfiWG2/BDArIusvSngKexNNXXn0FDz/8MMrKy5Lu2NQ3yItl/PixvCtzIiN2efGoDYm8EpT5H/VWd+EGaV0Rkkcy71HI1UIRy199NRuL5i+hkC05VsKvRG32lZt+RvoWtCtAh/ZF6FJSzHr9NDvvjuXLluOruX5sscVg+HlXxMcQYU0AKCMMv9plr8MUq3Upx+iz7CbC05XN8S9YuNBNpKfo4m1kXq5wWfZF17qfIvNTTzyJN998Ez169KBdBoVSvuuVX8h+yJ5Dns+y3pA9h96A8m6O0NrCr/YkjjPaOiaTZ00UyPYyJcdGfBLsLAoL21GsbFd/iCb7UzndfcqeQlj05VQ8+u8n8CgLXnz9zSj+Zgp+87ezMap9L8z861Hwl36K8UP2xuTQLvgnxdItaqfj7LETMfTpr/H1t//A5oU+lC+ejunvV6JMoi+3ZQ6y4KOpeNm/L2rYjwJKyY9ftCNG3/QdNp9wFZ47aTesnvkhyorqvCh4xMonzsbOTwCnXH4zDq38Dy6/YQLuPnR/XLYvPxwrZ+LkHQ/C5NgoPPjC+cif9yJGn3VDo6EV0dbkoUtG48kdx+PWv92Cd/5+Ba4aNwKd+i3GBXs3fMjWHyixO1O/Evad/ufHcNpuhXji9yfjuN0ewl3vr8Dpu3bjVVeF+f+bhpuO3AfoPh633X0L/nPrFRi7c/xu5KET/4ibuszCBb+7DDcdczhuGxv3S6pv31aMgBEwAkbACBgBI2AEjIARMAJGwAgYgVZJIMBgQelDMzjX1o477tDsPs6ZM8dFIytQzkvSe5yMJZsJSjbpNDZpVZn0I2k9ChqU9rSQOpW2u3Xr5ta9NpSnJLE2F41NgZiKcfQz4DLMyGOJXdLYnCuBNC8GA959z9146eWX02p7aisxyXJ27JgxOPyIw1mH1MFkjU2BlvIV8FG8ln1tpC5KmwUlKKW+vKoT8728xKX2t+q0MYjI6wuQEfYcpu5K0HaCwbqcyI4CqQRQXkgxiaU6Tdz/8Se0eujXj2JmIQVUTUwXcb7BmnROIfypyYuUfeutt3HChPEUVhnuTrFYt0oC7oKiUK0LnkJrhO+sIC8qH4XdCPf78wNYtmQFevTp5aKFpcNqwryoOkUhWF3W3YxAfh7fBHwnaHK8/Hx05xtr5apV2GIwxWL5InNfVOPiG8zFDLNdvhf5dmEd/LCIcgy6NxRlAxKPgxw7vRQYDetDjQRTHq8oZPVp9PFjMIF+xNKcFZqv8cQoIuvYat6N8XtRtRS6oxwXO87/67ho2BTjxdJFZjuoqcTi2+KmFNVdoSzJK5eliNuVr+hoCqDvfPgPjBzYnh05Fb1qhuP0f96HL397JMLP34bJa8rxwMdPY8KOxTzmJ3izRwi9fnohbnx6YpIwyhHUNyefY1QqsNqH6q8p+lJA7nDgHzHt/ktQovHtd1C8bKys/phJr3+D80ZtBtTuj//c/QI+nDkfoIj8xZS/uz48NusRHL81+4j9MHJYX/RlHxJTeSSMLc66G/+7/RR0YRtnH7czFvYbhd/f+gL+b+Sp6NDQPXdYtn5Vz33K9XnvK1/BXRf/zJXf/dn/YPmAPXHxX5/B2MdYH3PVZs9j/ogPHrwEAyig7xmejsd/cTcue/hTXDd2e45lJl7+6+NYvJIwLBkBI2AEjIARMAJGwAgYASNgBIyAETACGwUBRfWOGTMWTz/9NGbPns2J4o5wmldTnZce8/rrb3Cyvf/isMMO49P6/eoPcSIyVScFLQaoRaXT2PxO2+IhafQjCcSekKxK1ZaXl7odYhs5aWx8+j/Cp+yp6LoAUqdnUWOTBkgFi1VEXJCo9L1cJ9Z7/XVOrHfUEQxMbayx+Zy+x+bYYUl2fkWUxsVjLTfZpPFu8olyKy9uiqsUPnl58yVhlHcM5FwiEZbXpITYgw46CDM+n8GTL2MLRS/zSuC+Aoq3XpJUK/1Q8qeE244dO2Lk3iMpwvJCZX6QPiuRPIq2igLmm4VT0nGpqGdetnzpWBdxTEPkLTbbAqVlq1kT+6CpLSnaRhUqTYHXx3pkThEJMXy+fZDHcAzsT4hR1f379Hf9Uy/URfkSS/RWB/TmcEvmRzWhHi9k2WhoXY8CVJRXYDV9lisra9iMPGBUi46KoioUcfYRMQnPFKBVtauRUdDsOtvXgwoUs2k6HJbIHAmxy+wrhWa94X1++TGzp26crDhD8sRhb5mhmPsgybSvUf5uozBCArKSryN23ucA4OnlbrOWY0bxEdh5605uW//03GVfHNSxXc7CaGXpKnfsieMOjwvI9TU1rAQPvgOn7rtZPCPspjmMBzUzp2IV+8I+bDOwsP6Aws4N/anP5MqeO+7kBGTl+bsOx9E/7Y73+WiFrlydkcSUrV/evpOO3KnhkMIB2H2fTnjw+/nUx2NORNbOAw48yAnIWg/H4rxOPnI7bTIjPpb4hv1rBIyAETACRsAIGAEjYASMgBEwAkbACGwsBIYO3ZpP3J/r/I5vv/0OTjB3DAYNGpSx+6WlpXjiickumPCss36Bnj17JpWViEwXVopOCmVMr7HJ5jWTfqTKPOFY656grKWXvP25amxhPqkfVBCk9AvqVYkaW4waW5CBo8ccw4n1OP9XYjtee6lLjfFgaoRRTWbmAi2TNTY5HgQVkEm9zEctLqxybSC1CRHZT5XYyaSyXqBw6uMdkShPtu6MUOdl4iR3fE044QQ8ROuKGZxUr7BdId8w1Rix6whG6B5P7U4+J6qH/0lQlXBKcZb/01c45HxTeF1SIQ5SWNVdDkYJ864HtWleVDGEeKzKxtQuK1DEcZ9BfTHQP8BF/kqsVfg73ZBd+biMHcW87xfSl6UC7fnogLxaOnftjF59etLgu5aRwZR59USB1Gte1WEdL1WYfZVw7rw1GNIc0zjZl802G8RZMD91b5j/vvdf7LfvvojRwNxNz0cLCo+RopW9vvr4xvC5yGHWyXz5PKufPt7FiZAZJeS6Dw9x4V0evlmD8Tsw7FP65InHLRWJrFaC0RqKnxT8hYKJo3dJBude0pyDqNdw8yDriMxv84ZHNbzjtWzHyPDmJM9i2TsmsQ+cvs7LTlpW1DQWbQOxemfmpLLeRrp++bJ1dVEVb0h4R1PkTtMmL40EXg1lbc0IGAEjYASMgBEwAkbACBgBI2AEjIAR2HgIFBUVYdy4sfj444+dZesll1ySMSL3gQcewMCBA3HwwQe7OZ3SjVJBlYqBdBG5aTS2bPpRgyYUV2RSRV1PQHbt5qixSQSKUgMJSFXjus85BQSQR1FOwZjSr8aOHo0TTjhRO53OFWMwJ+UzBnzSekN5DDJ18Z0cj0SxGk36xwBMBXSmamyshMGkIecoEKZAzerbRGoTw5SASmmTJ5RCKe8S6H6In1e7fIcjNE3hbhf5G6IYPG7cCdh2+Daoon2DJpd7mX4pt066FeVla7GWvsil5eV8MZq3ci3K1q7F6rJyVIeqKeSyXl5oYYqrak0XnjxiJMKyNeRFmUtPGF6b7AUFZorMNbXVqKigiTfbkrl3VSXronBdXVONqppaitmzsHL5Ek4Ul88I4ip06twBfXgHKKTIY45Gk9qFOKEfr9r4xc72ohoMhV69ESQE+/XuceOOYI8993Qewwrfn/zYZNppLOebge8y3jHxGOnwxYuW4pzzzsXEc3/J/lXWM/LzjSHRWLqshHj3JuFC4/G521Dk6+5IsT9cZkreB4Q8kTO9dKxXLlM92fK/mf46BXZOCueUfZas+haLy9nZulQ+7xNnL9GhIK60hmrj+zybn+p57+C5V1Z4xVHACeaUHvj366hoqKZ+f1Mrrn72YXlCH76dPT3tYbFE9bfqO7z631Xos3lvCuRiGnbXCE+1S9n6lZcXF6nf/mh+XWkuYqsxe2olgtsMRDEf97BkBIyAETACRsAIGAEjYASMgBEwAkbACLQNArKlkNaSSbORgFtOzWvo0KGZBWRqE34GaUocyqSxZdOPRNoTkrWu/iQKx54WpGWuGpuewFdgZISBlRK3JU9r3i4lSSlR/lNVSz2FulsVda4qanEV1WWopK4nTa6Kk+mVU4tbu5b5nFSvqqwK4ZpwRo1NgaASxWR1kcdAyzw+ld8WUpuIRI5p5jmeVD8F13Cdn4qsJSTE8WYDTz1F2SijUrmvmvYRujvz0COP4LNPp6Njp0548+23qLNGcMZpZ/DCZlkKprEgj+YxMXoChygQK/pWArGuVJV1wcEUiuVLHGAkcpj/uShhia18Uzo7DUZ6qs0AC0dYX4z11PIKLKAo/OXXc7CGFgo9e5SgvKoMndiPfr37oIYWElGOQ1K4s49gkxG9Q+T7QgsNqsQcD6VeWk7EFAbNthXxG6CAPYAfFjvssAM+//xzDhy49IrLMGb08dhr5N6MdG6H6nAt3nr5LTzyxKPsC++zsK5PWXaPPfbkmzrkGMXySIsDlT2He6NTPBdDtSEfGL1HY4pedoJn+reQ92HhLdOXUp0CmlsKv3g2Tr2yI/5wxigs/+A+5wW877X3Yit6/EaPOhNDz90Px518OV6YdCZKamfj96POATrsg/OOiVs2DBxGg/nSy3D7P5/B0QMW4KxjJ2IWxfpuRU6CR6ctj8ADZw7EiXeejTGDC/CHCXuics4H+MK/C04/tD9q3cnP3Net9/wZQ9Yfw34/vwDP3nAMFr81CWf87slGByg6evKFJ+KW/n/HcTt3wfM3XIqXyqrx4JkHubjlVR/dhW67nI2jb/0AT547Ah2y9usw3HBgH1x07onYq/89OGjrIrz5j4mYtGQVfnPWgY38lRt1xjKMgBEwAkbACBgBI2AEjIARMAJGwAgYgU2GwCeffIJtttnW2bimG5TsXXflE/n//e97GDx4cLoiTu/xAicjTlSj7pJGY8usH8nKVYJvPDzOE5E9DUjb3qslNDZJY76CIO695x68ykDRpp6K16ADwQBGHzcaRxxBT2RuN9bY4rausVgt68ujxhcXrNMC24Qy24iIzDPGC1SeKAH6E9Oh2ImrmhROIe2K2FXYsE/2EBR1ayimnjB2vBNHP/tsOvr27etC/mOnyaJCbw4KqrrjoNkmqZwGqJxyj3PU1oXuoxAYpKgq8VoRwfyXb1BGvPLK8/PCCrsGWU6+zGG+2CfZWMiXOCCrCNa9Zs0qdO3WHbXVIXTu2AW9+vWhbUatO0bmGwq7V4SzX/1mPYro5YZ7o3F6Pnods2EmP/Okm8thWcLw2LFjsWz5MgrPFIKrgvjnP+/BHXfc6fySKysrUVDQjjNkliC/oIACdk9+eOxCmwhOyKfK6hjJfpkB3bQDYR8olPtkoaF22PcYP0CCjJDOJiKLkVLdwq2n+8crl25fo7z8bVE99QwMuZZR4UwjL7wbT172U7fu7/FTvP3REzhx5DjsOfRPLq/djuPx0sO3YETXOKfeI47C5fvfiOvOPwqTWOKye57CKW+eheuqC1xkOXztMGHSe6gqPAW/uO40PH+dqwZn3f+JWyngJHxFgUR7irhdRmFdpHPXnU/Cf+79Ej855a847KdsoefpePjBP2PchF+jgLOEekmT3B125ig8MXofTKzmnQCm65+ciRO2LXbrPkalK3Wvqzdrv3ydccFT7yDyizE48+AR7jj9c9XD/8NvDt+8flvCdUmneES2Mn0FnG4vL/EuWnws7ROHV3+0rRgBI2AEjIARMAJGwAgYASNgBIyAETACrZ2ARNrPPvsMo2nroCTN5Z133sG7706lZ3I/HH300dCT67vuuitF5JuxfPlylJSUNBqW03v01D11p6Y0tnT6kfqhtj3NJ92yPo9y0/pqbNLiNPfXa6+8yvEVUbuSlsV660fmRMGkrTCtLN548w0czokI/dS90mls0uL81Oac3haXuerr2FRXGphlHmFiGW89dRlX4uLnQPu8l/K9dS217eV56+mWUrCUr2XquhQ3b5/WvTKpS6/M8HnfLrgilkehlpG+vNXBaGSZWyjKlUIwI2n9vJhi9A6W0KzkvI55IRRyQr3JT/0bH334Ifbaa0/sd9DP4KvmlcEoWwX95lEwjbG+KK8+NRZhfkzCMu9CBCk0h/WG0vCllqoso5Jj8lKmuBxw0cMSdyX80pFZ7ywKylJ8g+zf4iXLUL6mFJ26FqNfz34IRWrcnR3VFaVYG6W1RJAXrFwlXF08XFYT4SjvfjBf4nSMd07kZyy5OcZj2BH+p1J+PPXvyfjk009RS9uMCPujN7G8bIL0s5CNx44774zjjjnKdb2WHw7pGLFSJy5r3BqfjwJoYacifPnZLIzYY1cK0o1VRxm033vvffjlL88X6qzpllsm4ZRTTkZxcVxATVs4VoY7jhuGK/xXY8njp6Jm9WoyDaJLl7j9RNIxsWpOKljFrCA6cb8umOQUxmoej2AXdOnYIOwml6EzRlkZJXme//yOaNd4iKnFk7ZDnEhxTXUY7buUoEOaJmRn0q5dO0Zzs6+ry5DfsQRF7ZKqyLiRrV/xfZycMa9LzvVlbMh2GAEjYASMgBEwAkbACBgBI2AEjIARMAIbFYE5c+bgxRdfxPnnn0/7hipMnjwZ8+cv4NPne7gn1qULjRkzGr1798YzzzzLIEo/DjvssEZjrKmpwfsfTsM2W2+LSukjOWhsifrR22+9gc6dO6Nr1660aA1B9SloMvG1cuVKrFq1Cqefefp6a2wMBaVOFsQz/34K73/wPrU/DkkKpUtxnUx6mdQyacGUt6iPAQcddDB+8tO93dP4mTQ2+SEzpJLCdBT9Bwy8lofP5EvBy2pFy3QvSUpeGW/d2/bKe8drmeml7nr7tO69lOete0tmubJaKk8pdZmY5wqk/pNGxkotsvFvy3JCOm6EYrEEYFlBSEiMUfxVxHCUFzyVXe7SRcM7DNynye9qeBEfz9kbxzB6t7a2BjX0LY7yTaR9ivCNqFLWEchTbDBrpLdwhOpygEJwlBeor05gligtrVt+LH4KsqwAYXr1yog8KEFa0cgqoz6oTgrMfXv3Q16/AQixz/JHZnNugjz1XIkaN/Vw1smxcY9rX8bhVI5duxqJn0K2xijvFx2nf2PcT20Z48ZPwL6j9sWHH32MBd9/j0p+gBR1LOLdp/7YeaedOftmCWoYBR2hSh3kwekYyVJXIxOPCDsokVxe07EmIpH1YXXttXWhvDw+UwoGc7s8q8ujWEPP6hr2o1OXLpmqI4B2FJezKbISnxvfZUutsLBjGoE6tVCG7TxGlZdkOVwCspIv2A5dS7L1tXED2fqVbV/jmizHCBgBI2AEjIARMAJGwAgYASNgBIyAEdiUCCxYsNBpPosWLcKjjz5G/aMzzj77bLccOXIvvPbaa3xa/Z9uQr0tt9wCb7/9dtrhx588l8KkCN3cNLZE/UiVrlixAkuXLnU2qrJS1UuCsreupZK/BTQ2dtF5F48dPQbjJ5xA3Y0aHPMkFErTchtSjvXIvWxpuaoH7qUDVlfKiUDaV3qNzUftz89jZU/bFlJuKt1GTkK2Dz5F6FJAlWlEgF7GEuAlrkZk0SAPXyqrCkSW2CpRVM7CUV45MRpsh6rKGVlMcVQXk/cm4UUlwTdCK4AQxWOXz/qp4PI6lHUEI455kekycm4PbEMRxE5slVgcYgVUZ0MSoXk0FWJpx/RNZnkdE61EdRXbl9gcZt94V0Oh8po1MkivXqrYzOOSIniIbUkHl6Atn+SYRGkeF5F3M8sEeQvFz/FLvw6wf+GaGGSboA+Mwzjbpl9iLcsovJ9ByfGJ/cprWGFujPIYRR1l/XFG9F8WU/eOZBUpScKwPKflfRPQLH4Zkre/aSE5D9sffSourt2mbuK5DBVathEwAkbACBgBI2AEjIARMAJGwAgYASNgBNooge233w4PPvgg5s79mtHHu2PkyJH12k0+n8Q/5JBDsPXWW+OFF150kcqjRo1KS0p6j4vWpZZFmalZGpv0o5H7/CRBY5MGRoGWmpbT2BTwSXHOBX+2kMamoEifL4Sy8tq4xhaiFpWosUmEcxpbXR9kWyu5ioOTJW1TGltUYptU8jaQ2oSI7ARkjjRGsTfAEyv/4DAFYUXYKqQ3Ig2V+2QlIUdiXSiynfApcpmh6TIWdzckeCExNtdFD0uRDVF4zWMlMb6BonwH6e1DbZb16Q3FKGcez9hjVqu7GXxTcCI9N9kd25C4G3D2FSyvJllGjhayp5DlhkTtGN9FmnRPZuSanE+CsV/iLKuTEbj6FOQ/PtrZyrZC+T5GJ1MKZoW0LnAZLBuS1zLLurGxHr4b2GtIV68KVToxnR1QAR7G/oqRoqXXgZGE7JD6miHJ4qJ79+7u7lKGIvXZEpDTWWLUF9AKo4v3+78/YL+kTNswAkbACBgBI2AEjIARMAJGwAgYASNgBIyAEfAIdOvWDRMnTvQ20y4333xznHvuOWn3JWVSY5JvseYNM40trrEl8dlEN9qEiOw8iykcS9v0hzSZXlzkldjrZ6ZE5iiFVVk/yF84FlAkseKDaVNBIVjCbaSWAi5FXd0ZiSpPtyUoMCsKWbdMgopydg1Q5GWej3VQJnZt+qgMRxliHOQyzPoVQBwXaSXzUmZW/VKPKURroj/aKjtLCp88K5giEarPvvipilFx9lG4lukG1WWKzlKtJfqqHD2K2b+Y7rKoPlYU5TJAMTgkQTpEsZvlpGa7w6gaS1z2sd/uzk8LMAIdGBT6Ly+ddEnCcNPRxemOtDwjYASMgBEwAkbAVtyAxAAAIABJREFUCBgBI2AEjIARMAJGwAgYgR+TgJtTix3Q0/cx09jqNbYf85z8UG1LUtzkkyJwfc6fhOIuBVvNIKnZFX0UgaV4SkyWgMxCFFklflLI1aYieqndOoFVWxKRdZeF6047VoQwLSOY6/yR5ZEsOVbCbMzF9ksSZlwwt/2MOlZscB5L+FlA/2kiO0UgS+/1s5CE6zzVoWO57WdEslKAE/XpRMlOw0eriGiI/aNg7IuG2E/ZYVCkpj2G05yDPJalqQfLIYPjlD+L6grS7FyCOXvLIppaULNoOq2XY2oxRuQWzM/DWk6g582mqTFYMgJGwAgYASNgBIyAETACRsAIGAEjYASMgBHYeAlI5ykrXcsn9PMpOpnGlqixbbxnNfeet4lI5AhDfyUNSwAG/YQ1sZzsJXTxK1I3qNBZrlOldSKyfIFZktvUcsMSYUOIcvI8arjOtzjGCvw0+Y46fxYKyW42RjDaVxYZPFIRzVR0FbEcpUdFHsXgsCwuKAxHqOCqPoYL00KDEcGahI7HyKY5Jj9lFwHNfkkwZpkwrSjygoyepk0FO6qquVS/abPBCOKo1iUJs38Mi3YRzuq4oqYVnczMePRzkBHL9H2J5UmYluzN6GSKyioUYJ8knrcEoyjH1LFTJ3w7f74aRzFn3MzmfewK2T9GwAgYASNgBIyAETACRsAIGAEjYASMgBEwAq2WgOauKi0rxbz536GouCMDIqkvUUAzjS2usbXaE9eCHWsTIrK7MyAbCYrF8s+OUYDNo/iqyOEAI3WjvOgZ2CvzCRcVLAFYxtmKCFZUcZTbTkCWKkvxOEgRmP868TgqYZiT2CmEn3Iz9dm4qBtlqHKQArKsJFgLj6dAzKhkP+/UhBlJ7KegHWEksmwnZIOhSemi7GOMpt1R9inA8nQyVrwyRWB1WmberF9SLwVwhR2rbIQDUkSxxGVp2jHVwY0YRWGJzDrWrwhkashqW5HPLoyaZeXR7KPNRphjDbJOcVpfRlU1YfTs3hMrli3FV3O/cR8oYkQlnYzEpI4RO+smCXRiN2VwiuRRiegcoaLEIxyrIrYjTkwXI2rn7KMipzU2nxiRCc8kM5TnFH9yaGCkGG0/Bx4J5zlGPu6L0eJDdUXJwS9GvAY8RtyMnwOeTzHyUfh3S+IP0zIk3n6cUYSFZS2i60ge0AGefYV+R3TOeZ65y0WpN1xH7LvGojOoc0Dz7CCvFXcd6ZoxRnyvGSO7juy9Zp9H9pltf9fsb799P7LvR3rS0b5D2vds+y1iv9f0u99+09rv/tamjVC9QtfiYpRQ96mqqjCNLUFja0GtttVW1SZEZBdlTKFOIl+Ms9BJvHM2DlSO/fQuDlP4C9J3OMJI3yDFwzCFQUXnxvxByYFOeGUwMCewi4uAEioDFJPlUxxgnsTEiMRQRTbzY17GFRJCnaBJmwnZWFDzpajICfrYjQBtMHwUQGUxQcWRE/SpbyxDUdjnrC4oNFLgZawwFVX2iWsSueOT/bEFlldZtkB/YfbXCazcphDLbvAuUAQhisvON1n6M0XzML2IqeJSTKYsLdNlibZsltXwH74Uie36sX6MonlhVFVH0L1nD/Tq3Zv9ZAdcvRoPI6TdUCWlcoUv2YtwB//n+Lkq0VzlNEaXJK7y/yj755c4Tq4qqP90ErnltikP19UoUGLEfI1LdTnuPN6VUQtMrF+iveuH6mP9MQncFO9d3a6jPELtslSUZVyWDmWrijCXAO1GwX/8qk9l2CfPk9rNAKqbBE7YVlntZ4sOiTd2Hqz9xsidC2Nk15G91+zzyD6z9YeGfy/c3yz9leLfCPu75pjY3359d7DvR+67m75V8X2iL4L2HZLXBP+379n2Pdt+i/AaiL8d7Pea/aZ135/sd/+G+Q6pZ9ujfAq+oqqcupKerjeNzdPYiGaTT21CRHYh9hQSnaUEI4b1TStMIY9asYtK1XaUgjEYkSvNkmqg+zIWj1KloEwriBB3+3SQPo4o+vkZSUtt1omC7mubIlIlP/JYaYLUpilSsgBFaxcNy/IxRp/69JdNkcX8URiliusm86MQTCWbYjOjWGsZGUyRWc8DSNhUfoSRxOp1HkvEnFjN4/lmVcSyjwI2j3bHRll3lNuaNE9BtE7o5B4p1bLO0Jds9V/99rEe9sCJpOIgX2ZW3iKMJF5HyispklNcZ5P6ISxGETYkkVC2HuIQoLWI+i5GPkUMUy731TGS+Kwfi5zzkCIs+0oVXwI45wZ0UdoxRQuzZo8Rw8LrGEm0laCv43ljQEI/O6HanUDNdnWONHtokMq+06gVpu3OifqjVrnJH2k+XhN+RZDXCckeoxjHIe6MEXF33eQUonPuWtD5cddAvC52S92k0M+4ch6nTUVdi4ef7RsjcjRGdh3Ze80+j+wzm3ZT9nfN/vbb9yP7fqTfEfYd0r5n228R+71mv2ntd//Goo3w75ZpbPUaG4WeTT5JzWoq6VeNl7z1bEvtW9+XpFzVoWXqerptr1zi0ju+xwUTf/kTeQcH5PdAGU9RvbI2iOpHK7PcRHYUBCUY+ly0j+RVTZCn+B9F7FJapMAqWwhNgBdlJK8akpgo6dIJjxQag7KOcGIsI1Xlv8zIVj9FUZd0jMRaiiWuPCNqVSYglZSCZZjHuw7LO1leyhLWFJ0sMVPbqsQJ3WqRFbG8jBPUnDpD92QnbitARX7IKu9zocasVfVwXYKuuhWLhzWz3rggLlsNHuL8lY2RMdJNEruOdFPJ3mt++zyyz2z7u2Z/++37kX0/su+Q9j3bfovY7zX7TWu/+00bMf3I9KMmNbZJkya9QyluOV+S6rK9JNl5+xPXvbxcl6ymvh6te0nHp0uZ8tOVTZvXJkTk886/4CfOCkHxqPxBrFBzf13EcIQCq7MgUD7XZT1BKdg9IufiZmVxIP8BZ3XAqOC4ussvEuRJ/VeTxsnv2EUtsxj1ZhcJK3lXzgtSZxUN6x4xU5tqTxYaFHK5xd0UkClMM4aY7UoKVqv6niKlu+6cOQFbsraEcPaBdSj0ldWxCNumOqzHl1w/JRxLMFeeJuRTPYxoUOS0n9G98uX1M08ysyKf5YEcdpeRBHBG0TLXGBkj/oW068jea/Z5ZJ/Z7qkd+7tmf/vt+5F9P7LvkPY928/fT/ZbxH6v2W9a+91v2ojpR6YfZdbYbpl06yYvIis0d5NP99x91yY/RhugETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGYEMQ4G31JlNiGW89dUkp3iXlJ76Un7rt5WmZ6aUIae3TMnVdwre3T+temdSlV2Y4PW2vYDlLRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAisB4EFCxagqqoKXbt25RPukt9+nFRaWopIJIKBAwciGPxx42Q56e+1pDCTLxnUyptAy3Qv+d56Zbx1b9sr7x2vZaaXfAW8fVr3Xsrz1r0ls1xZLZWnlLpMzHMFUv/58c50ak9s2wgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBiBVk2gX79+KCwsxKpVqxCNSrP8cVJxcbGzmZ03bx7CYemxljYkARORNyRdq9sIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAhsYgRMSN7ETmgOwzEROQdIVsQIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYgQYCJiQ3sGgLayYit4WzbGM0AkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACLUzAhOQWBtqKqzMRuRWfHOuaETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARaM0ETEhuzWen5fpmInLLsbSajIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMQJsjYELypn/KTUTe9M+xjdAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAhsUAImJG9QvD965SYi/+inwDpgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AENn4CJiRv/Ocw0wiCmXZYvhEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRqA5BCQkL1iwAKtWrULXrl3h97dMDGvF8jl49unn8fGcxWjfqRd23u9QHLDn1miXoXPFxcUoLS3FvHnzMHDgQASDJoNmQJVTti+HUollvPXUpXc1KD/xpfzUbS9Py0yvQN0+LVPXdcZ1nPK17pVJXXplhsdisStYzpIRMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAj8AAQnJVVVVLSIkf/P2PfjTw+836rWvy+64/LcnY0B7T6psVMQJyZFIZIMKyT6f71q2PJOvCF/RuqXWU1/hhDLeeuox3vFaZnrFEvZp3XupvLfuLZnl6tFSeUqpy8Q8VyD1HwmtloyAEdjICTzy+bMb3QjmrPwWny6dtdH12zpsBIyAETACRsAIGAEjYASMgBEwAkbACDRNoKWsLRb/9956AXnzn47Bb6/9M2668VqcfdyuiK2ehj/8+i6sjHmaaON+KSI5EAi4iORwWLqtpXUhYCLyulCzY4xAKyLwxfK5+G7lPLz57XutqFfZu7K2tgJvzv8vvlu7IHtB22sEjIARMAJGwAgYASNgBIyAETACRsAIbLQE1ldIjq6Zjr8+EI9APuCsP+CScfuib/ditO/QHdvvfxquPnNf+EMf4Y8Pfp6VkQnJWfHktNNE5JwwWSEj0HoJfLv6e9e5D77/EPPXLm69HU3o2VOzX4RuEpZWlybk2qoRMAJGwAgYASNgBIyAETACRsAIGAEjsKkRWB8h+av3XkA5BYT87SbgmB16ODTz5nwDL5641w5H4OAB7dA9WIXqJsCZkNwEoCZ2m4jcBCDbbQRaO4FlFctdF6MUZR+f/nRr7y6mfP0GqsI1rp81kdpW31/roBEwAkbACBgBI2AEjIARMAJGwAgYASOwfgTWVUiO1inDP9t/B9eBJR/ci+tu+BP+9MT0eId87XHkFbfg0nG7uQn2yuZ/hMee/iSjoGxC8rqfRxOR152dHWkEWgWB0qqy+n7U0tvn3k8eq99ubSvyQU6Mlo5m8SxqbX23/hgBI2AEjIARMAJGwAgYASNgBIyAETAC605gnYTkWMg1WFZV6Za9RozG2F264vvXbsc1j3xcH5Hs9Wrqg/fijRfvxHOzy72sRksTkhshySnDROScMFkhI9B6CVTVViV1bknpslbpj+z5ICd1lhs2uV4qEds2AkbACBgBI2AEjIARMAJGwAgYASOwaRJorpA8ZNQxKPL58M6jU7CoUpPnhbG2LC4oz5v6IZbXxifUiyyfjsn/mYeDfnUljj3mdPxsqw5ZAZqQnBVP2p3BtLmWaQSMwEZBQJPqpUvyR96y2yD079Q73e4fJc/zQU5tfGH5YuzQc2hqtm0bASNgBIyAETACRsAIGAEjYASMgBEwApsgAQnJCxYswKpVq9C1a1f4/ZljXP2dh+Hyc/bH5be9iqsu+gaDS1Zj7tIQou12x3V/ORkl+T5IQL7yyjuwkk87R7vegOMPGJETNQnJpaWlmDdvHgYOHIhg0GTSbOAyn6VsR9k+I2AEWgUBb1K91M60Nn/kRB/k1L6Wh+J3EFPzbdsIGAEjYASMgBEwAkbACBgBI2AEjIAR2DQJNCciudu2x+Kvvx6DYHRZVgG5+64TcMQ2RfXAorTAsMn26nGs94pJ7OuN0CowAj8eAW9SvXQ98PyRT9lxdLrdP1heqg9yasMVtRWpWbZtBIyAETACRsAIGAEjYASMgBEwAkbACGziBJoTkdxxi31x+42DMXnyVIwce3yjCOQiCshXnzYSPkYlX3/Dq+g1JA8fTJuJwHan4tZzdstK0iKSs+Kp32mRyPUobMUIbHwEVlWsytrpH9sfOZMPcmKnayPhxE1bNwJGwAgYASNgBIyAETACRsAIGAEjYATaCIHmRCT7OvTDcSeNRu8UCwsJyH+igKxI2WD3nuiwdi7eo4AcCgzGBSfvmhNJ80huGpOJyE0zshJGoNUSULRxU0n+yPPXLm6q2AbZn8kHObUxRStbMgJGwAgYASNgBIyAETACRsAIGAEjYATaHoHmCMmi44utxE2/+5vzQE4UkBFbi6ev+z1mRKIOoj/yFd798OucgZqQnB2VicjZ+dheI9BqCfxv0Wc59e3H8kfO5oOc2vHlVStTs2zbCBgBI2AEjIARMAJGwAgYASNgBIyAEWgjBJojJMd83XDeleMwZNexuLYuAlkC8jPXXYYXvg8jGhyG3914K849sB/effRhzK+NOYpLPnkQ5149GWs4AV+mZEJyJjKAiciZ2dgeI9CqCXy/ZlHO/VPE8l0fPZRz+fUt2JQPcmr9y6tWp2bZthEwAkbACBgBI2AEjIARMAJGwAgYASPQhgg0R0gu6L03LjxtH7RzfEJ44abL6wXkK/9yPvp0yMe2R1+Jm2/8LfrT/mLJJ4/id3e+i9CiV/H8h8uzUjUhOT0eE5HTc7FcI9DqCaysyu6HnDqAFWWrMGXOG6nZLb6diw9yaqOrmjmW1ONt2wgYASNgBIyAETACRsAIGAEjYASMgBHY+Ak0R0j2Rhtd/hGemR1yEcgSkAe093m70L4QdQLymy5v5/GX44QRPer3Z1oxIbkxGXlOWzICRmAjJFBWtbbZvZ6xeCY26zIAw0q2bPaxuR6Qqw9yYn2haNPezonlbd0IGAEjYASMgBEwAkbACBiBtkVgZVUpnmVQzJLyZSirKWtbg99ERtuxoCN6FfXAEVuNQrfC4k1kVDaMDUFAQvKCBQuwatUqdO3aFX5/9hhYX/uu6ObzYXmwEzpRNE5M8QjkuIC8z0mXY+yeAxN3Z12XkFxaWop58+Zh4MCBCAbbtozatkef9VKxnUagdRPIZVK91BHIH/nF2a+ib6eeKOYf8JZOzfFBTmxbdkSKYO6U3yEx29aNgBEwAkbACBgBI2AEjIARMAKQgDzp/fvh8/uQ5w+gY7uW/y1jmDc8gWg0gnml83HrB/fjvF1PMiF5wyPfqFtojpDs67AVzv/FPrSreBMXXxDEX246AZ0pKicKyEAQ/ft3S2ZCH+WXHvsfdh89ypVP3hnfMiG5gUp2Kb+hnK0ZASPQigjkOqleui5LfH58xrPpdq1XXnN9kFMb+2b196lZtm0EjIARMAJGwAgYASNgBIyAEWAE8uugHoSCYD4jEgNGZCMloHNXECxwvdc5tWQEmiLQHGuLXjuOwQ1XX4RLfnN0IwF5twOPxCB/FA9ecxHe/KY83mysEs/edBmeevNxXHnH1KxdMWuLOB4TkbNeJrbTCLROAs2ZVC/dCFraH3ldfJBT+/Xd2gWpWbZtBIyAETACRsAIGAEjYASMgBHAvDULkB/MMxKbCIG8QJC2JNknNttEhmrDaAECzRGSi3pthS27d8DiDx50UclqXh7Ipx59MC7543noxacZHv3TJfjPl9/jxdsuw5TZYUQDgzHxhL2a7KkJyYCJyE1eJlbACLQ+As2dVC/dCOSP/MXyuel2NTtvXXyQUxupCNXdDUzdYdtGwAgYASNgBIyAETACRsAItGkCtZFaRiKbfLGpXASKSDZf603lbP4w42iOkKwedew1CHpmQQLy//0k7oHs7zwMv/vjhRicH8VDN12Lp2dUOwH5sr9chC2KGybiyzaiti4k26dwtqvD9hmBVkqgb8fe690zzx+5dD0npVhXH+TUAfRq3/TsqKnH2LYRMAJGwAgYASNgBIyAETACRsAIGAEjsOkTaI6QXDRgb9x80031ArJHx1/cD8M2y3ebikCWgLx5h9wEZK+Otiwk28R63lVgSyOwERE4lLPZKk1fNHO9ei1/5MlfTEHndZwZ189ogKUVy8AZLtarH4O7DMJ+g5p+fGS9GrGD15vA2u8+w7Q5q5HPv7mxUB6G7rknejXzD+56dyJLBeVLv8D/pi+Dj086qn+D2b9+afrX2seRZYi2ywgYASNgBIyAETACRsAIGAEj0GYJSEhesGABVq1aha5du9IjPbMWkd++fTIn54F8cb2FRaKAXD1/Gp7+qjvGjNoy+ZgMWxKSS0tLMW/ePAwcOBDBYNuQV9vGKDOcdMs2AhszgZYQkgMBP1ZXrkZVpGqdUOgDW0IyYtF1FpJNQF4n9D/KQXPf+gf++UKDd9mRfbbDuOGtZ2bsOS/ejr/l0L/WPo4f5eRao0bACBgBI2AEjIARMAJGwAgYgY2AQHOEZG84vthKPHPTb9MKyDXLp+GKa+9DeSyG/B7X4+htuniHZV2mCslZC28iOzNL9pvIAG0YRmBTJiAh+efDD4aP/zU3OQG47q5dVN4W65AkIMvPihLyOiUTkNcJ2492UF5+cVLbre0uZK79y7Vc0mBtwwgYASNgBIyAETACRsAIGAEjYARaBYHmWFuow9UrvsJLdZPoJUYgS0C+/Mq4gNx/n1/giBwFZA9CorWFl7cpL1ubBrAps7axGYENQmBYyZbA8IPw7MyXEON/uSQ/ZyTVy0uRSITbzfs4UFsSkJWCgQAikRAnu8i9DhOQPfq2NAJGwAgYASNgBIyAETACRsAIGAEjYASaQ6A5EckFJbvjz1d3xZK8wfUeyGXfT8NV1zUIyL8Zu1N989GqSvgLU+ww6vcmr3gRycm5m+aWRSJvmufVRtXGCEhIPoJCci4RyZKOFYXs8yWIyNFws4n5E47XwYFAHqKxSE71mICcEyYrZASMgBEwAkbACBgBI2AEjIARMAJGwAhkINCciOSiXlthy25xHUT2Fn+//n5nYaEI5EQBObL8I1x8wYW4/eVZCa2G8Nl7n6I6ISdxVUJyW0gmIreFs2xjbBMEchGS9XEZzEsWkD04zbW0CKSJXA4GgojJHzljisEE5IxwbIcRMAJGwAgYASNgBIyAETACRsAIGAEj0AwCzRGSvWorv/kYX0WiiBaOxMQxDRHIEpCvvPIuJy5/s2BlvWj88WN/xB33/Q0X3/6uV0WbXJqI3CZPuw16UyUgIXn8TscgP8PMoIGg7CfSv+1laZFrSrSySD3GR5/k9EJyDKMG7IX9Bu2VeohtGwEjYASMgBEwAkbACBgBI2AEjIARMAJGYJ0INFdILuw3EN30dHUsjHCdLWj54mn4NQXklZxgr2SvU3HDaSPRjr356OHf4+9vLAR8nTDuiB3WqX+bykHp1aRNZXQ2DiPQBgn079Qbp484oZGQHAikj0D2EEWaYWmRamXh1aGlvJad00VSRHJcQN6q22aJRW3dCBgBI2AEjIARMAJGwAgYASNgBIyAETAC602gWUJywVY477R94K+ehkvO+jUm3XINLrrqXheBLAH5mhN3c/2RgPyPtxci5u+L86/5M/boX7Te/dyYKzAReWM+e9Z3I5CBQHFBxyQhWQKyfJCbSrlaWqSzskis2024J+8MJySbgJzIxtaNgBEwAkbACBgBI2AEjIARMAJGwAgYgZYn0BwhufeIMbjzputwwS8OxpJZC1xn0gnI2rHFyD0QLFvR8h3eyGoMbmT9te4aASOQIwFPSL7/k8dRG6nN6ShZWvjTeB0nHpzNyiKxnITkcCSM/QeMxIaKQI6F2GKsFr78/MSm3XrZskX4fvkylK+p4OMpQH6HzujZpwS9e/RAXqPSzcuoqViDZQsXYcWaclSGQojxFclrjx59B2LLQT2bVb+GsK790fh963hw6hh8eXno0KEDupSUoHvnHmjfGGmTkGoqlmPRwmUorSST2lpU8YjOrKsvuRR30F2FdUux2gosXbQIi5etdrzV12Kdz0ED0b1DwbpVmuWo8jXLsHDhcud/pceXqnmGSkr6oE+Ptn3XOQsy22UEjIARaFEC5a9eg7V3hVDyr6uRtw5/j1q0M1YZ9DUyYOfBrgQj0CoIHLjdidipyI+PZz2Il1fnbkfYUp0PdN4b5w8bhlj5HNw8/c2WqtbqMQItSkBC8oIFC7Bq1Sp07do1a0Cdr303DBncCzXsQSYBeY8jx6LD/Ldw4/WTUbTrBPyJNhdtVUxtq+Nu0QvUKjMCrZlAVU0V4l7ITfdSlhZ5kG9yZsHP79P+plM0SpP6aARLK1dsEBH584cvxx+enus6kr/tqbj3yoPY91pMf/NR3HX3FCytjWXoZB52PvQ0nD52X3TLzzzOdAd//cGLeOjhhzFjkf7EpE8xXzEOOelsjDl4RxRmqz5WgUd+9X94ar5kZGrh/gG47p9/weCibAc1tDn76Wtx5cOf1Wcc+7u7cfzwjvXbmVZyGYOOLewzFMeNOxmH7bpZpqrq83Ops/8OR+CM04/D1j1yF32jq7/Cv+7/J57/77f1baWutOu7HU4+/QyMGt7T+Vml7s9lW6I0dO289STu/efTWJjh2tG53X/sSRj3873Q0Xm25FK7lTECRsAIGIHabx7EyounNALh69Ef7Y48AkX77o1ggkgZqWCkT6Y/441qsYwNRiBWjqW/Ph3Rb4AudzyAdj0TTpIaTdif2Ad3Xo8fi0777tQwE4dXtvpQ9Lx1QkN+4oFtcd24/KBnfastjsMxPbumaTOMssplmPbtFHxYmm2S8DSH/sBZAfdbzI9gbj8ZNkDvAk48CzBgyJIRaM0EmiUkFw3D1ddeg2C37m5InoWFPJDPuOoa7NJLv2H3Qt7VE/HiB49gzrF7YVjxj/Ym/FGxN/18+4/aPWvcCBiB9SEwZfYbUHRxbU0tJ7vL7dcYtd+sKZiTLUaEUcjx6OfPl36Rtb6W2BleWwlfbA3uufBkXPO357MIyGothI+m3IkzT5yID5dW59Z8zTzcfsFYXPbXe7MKyKrMFyvFi/f9ESee9DvMWJZZbG7ccFxMbpyfPqe2siL9jgy5sfJ5uDnHMaiKqkWzcP/9n6Aqy2XTMbYCz113ck5c5n/6LH577gTc8cLnGXqYnL1yxqMY84srsgrIOqJ64XTcefV5uPT+aUDv/smV5LSVh6Kaubjn17x27ngqo4CsqnSz2hMJAAAgAElEQVRuX394Ek4dezHPbRYwObVrhYyAETACbY+Ar6QX/Fv0QmDr/vDxd1ps2XxU/eN2LDvxRoRze2iq7UH7EUccXvSBE5DVhbJnZ2TpSZDntb87r+hQd15v+zOWnnYrmvhamaVO22UENiQBTqTF4Bn3cs0E0bF9H/xs+Bk4efB2G7Jhq9sIGIEfkEBzrC2KKCC7SfQeutx5IKubo868uE5A5kasCqsq9RswjGVr2+6XFotE1pVhyQhsggTmr12MeSu/qx9ZqDbEiOQgAgHdMct81yxCCwq/P7NHgq+Ju846PsIIZK8NxiPjydkv4ZghB9X3paVXovMexbjRjzarWl90Mf50/nm4/Na/Y8ceme+nxcpn4YozrsbcSPqfQXmMYg3RziI1+apn4fcUTU++6m4cMqzpCOHU41tyu6kxZGrrgJP2zBpNfe/vL0l7aCYmKvzWfX9A+z534uQd0kWBxKsrpYB81u//nbZuX14xOrUHSktLk/Z/M+VG/CEpJ9eNEO79w+9zLezK+aLf4+rzJ+LqO2/GsM6Z30vNqtQKGwEjYATaAIFOV/wZ7fs3RLOGV8zA8guvga/iA1R/U46irc02qDVdBuVvPlvfndArjyB00k7p7UX6HIiSPzdEF4cWvo8V598ErJmKsvdGo3iPHvX12IoRaA0Eli99Df/8el59VzbrtRf26T8cvfJ86F2yB8ZUL8Gj85fV77eVRAI/vIVGYuu2bgSaS6A5Ecmqe6u9j8BOKz/AvFlzMKhfPDJZ+TNeugfvr4kgWjgSu/TL/elaHbspJRORN6WzaWMxAgkEXpjzOqOPEzK4GgmHmcfHnygmZ0oSgPPcQ0qNxTGfL7PYqvpCDCNKF/G8uGwx1taWo1P+D/PjcOBeY2hXcQCG1HvY1mLJnA8x6Q+TMLemQQxWZOm1l9yFe+/5v/T2BNx/269+30hADvbdAxeeNQ7bb9Xgf1y2bB5ef+JvePjtb5LQ3nfVmSi57UGMyCJUJx3Q0hscw63nNB5DzN8bx593BvbdfjOeFxqBVK7B8mXLMWfme3jlhVfxfVkv7qNFRI6p3Wb74eKzjsTWCZ7QYvLGE5Pw0Nvzk2p5/uaHcMS956JrGksIJ3hf81RSeW0M3GsCLjr9APSq90CuxeKZ0/D3W+7AF2sazmmjA5uZ0X2Hw/HL049KuHYYfbXwCzx4y/V467uGyHXdhLjygntx3z2npL92mtmuFTcCRsAItAUCsZAidxpE5GD3bVA0uj/K75nP+Q2aJhCrXoCVd9+F0BuzXeEYHzNtN34MOh81KtkegRYBZa//C+UPvAW4B3cYKTt0C/h5EzK6ZjEKDrkUnffZvOkG23KJqtmoemoJQHGtw6GlqLh7Bio/WpaTIJzXdzd0ueoArL7qFURWryZFE5Fb4lKqmPYgyu59GbEVmu0jiODPjkaXU49OsoKpXfQx1j71AsLTv6wvl7f/gSieMAF53tfw6m+w9LfXo8OpfHTb/z7W3PAYA+zC8G1+PHpcugOW/3YSCo87C76qqah46I36etK11xLj+lHq0IdBQvp2yVTodcyOp2KrwjxIVO634GksqPsxFey6OyZsPgS98hWnGE9VlYvx1pzn8WlllLZ0g3HiTnujX6Aa/2EwxNSK+HfTQOe9cPaQrRndSNu0OQ/XexhH/dvhzJ13QTHW4tkPn0S/YeOwa1EEnyxbhgHdB6Gbs1pTOzVYTHu3+2ZNrWs186KpPnpHBouH45B+w7FFUUe0C3i/CcNYUfoVnpz5H6zyCnK5ef+f4dC+m4MWzPEUKcPnK/WetmQENi4CzRGSOw7YHb84f3e8dN25uP+2+1E4ZgS+fOVfeH1m/No//KyjkKMD5cYFKcfeeh8HORa3YkbACGwMBGYum4uVa1em7WqUEbUhTnqWLWWytMhoZRGLusn70gnIXjtTvnrNW92AyzyMvnwS/vLLo5NEQP1g7bXVnrjugbsxZofkL43+itfx5GfpvwwtnPog3lmVfLd9q8Muxf03XYBdEgRkDahjj4E48pzrccdvJ6SY7Idw401TaKLx4ySN4d2q5DEU7TgB9zxyM47baxt0L+qAfE5MWMQJ8DbbajgOPOp03HDXY7jv7r9gy4LGNxLSjeKwX16PB/70C2ybICCrnJj8/JwbcPNFyVHo/sp38PZX5emqwidP3oNl0eS7H/uecT3P6eEJArIOzUfv4T/BVX+/G2fuMyBtXc3NPOriSbjj8gkp1w7H0XcYzv7zA7j0yOTHGwMVL+HZDNdOc9u28kbACBiBtkDAlzpLHsXe6k/iNxqbmig2Wvo+loz/lROQ5bmbt9+u8LVfi5p//QNLRl+TZIex5qELUf63tzgb3BC0P3s88vftjuis2Qh/RPGZcxAEunpqWlugvm5jrPx0ijuw4NBD6W18iFuvfOj5nO0p/B3iT7X53CzI69YHO6qBQOnjE7H2L1Mo6FI+3nkI7WBoxfDq41h2wu/4vT6h3G1/4XuE1iMMFtB7BB3CCL02BcvPuK3h3MUqEf16LcquOB+rL3vI1ekrDKJgxFbwu31LUHH971B+yyvwdd4CeaO2YQN17Z19Z0M9Dc1uMmtPf/uVm1gZeV2xfZe4VNKz90G4YOvt6wTkMMprK92k3YXte+PgHU7EfsX0BiY3+CjIBjpiy5L+9TyGcb2IQm0w0B6De21fn9+nX1woDrIJ3ecqkCl8oBg79h7sBOQqtlGuewUoQO8u2+DMrZK/g9ZXVLeSUx/rynYv3gLDi7s4ATkUrmE78ZsS3YuHYtzQneqr3nzQERjdv05AjrJcLW36OL5tewxwv3Vc9+pL24oRaP0EmmNtodGMOHwkIoun4fabbq0TkIMYfeH1OGJI2/4O4d16av1n3HpoBIxAzgRemfNG1rK6qS6f5PyC9GE/mSwt0llZaAK9cKRpiXRl1WosLF+KvkW5R7dmHUSanftPvAHH7NArzZ66LF8HHH3Z7Vhz0Rl4aUHDV5+XH5uK8YxATTLxiC3Hk3cl3/XvdeCluObEhi9X6Rrqvs3h+Bt9Fc648sH63ZGvH8S0pYdi754/8H07RiGnjqHDTmfi75eOSh5rfU8bVjp0SH9tNJSIr+1+xg04ca+GL8up+7XdZ7cTcPRmr+Pf3zZcJ3PmLuezQik2H9FFePqluJjg1bP5YVfirJ9t7m02XvKcjjr7OqxZfgoendlQf+OC2XP2PGcSxo7Icu3w8J3G/QZnLj8bd07lL7i69DyvneNTrx1vpy2NgBEwAkYgiUDl8/9Cbd/4X9to+XLUPPmB259//P+hXf9sP8pqserWm13Zdqf+Gp0P3SluzHVWOVbdfiFq3pyB0mdmoNtxFLuqZjCCdi1QvCt63nNhPEJ5v8NR2u9iVD44H0Xn/gYd+iV1yzZSCSiS+986N0F02IN/gwtrkbejD6FPXkHNkhNQ2CvlOwL/FiclRrqu+lNchA72tyjkJDbrsBFe+DIqH4tHhZfcdF595PGaf03ktT4b5a/OQJdDee0zdb3sLwhXdEZBr7r3E98jmhwx8u10hHn/PvWhwMDI8eh+weENkfx8/3ip/UXXoXjPuu9gZy/DkjPPB1a8i5qlZ6Jww32d95r/UZbh0m9QGhlKgTXefMzXFwf0i4umocp5uOfTl1ykriKPx++0LwbmF2DXLfbF6x+/hvmcr6RfcRFKOg3kwbTK8HXFtsWd6sfRsWgguuJjd/zwTp1dfmX5AhftXC8RU4z+35cP47XV8QCQ3YaMwahuxehSPIjHTk+KEvYqbk4fdcyS+e/i/bxhWLx4KmY5f1dg28HH4bCSrigqjL9fY74B2Kdn/HtxVfnXuHn6a665QOfd8X9DtkNnZ4/o9cCWRmDjIdCciORu247BDVdti5fe+BTBXoPxkz1GoGv73IKsNh4ize/pD6xoNL+DdoQRMALNI/DBwk9RVVuV00ESkiUCp6a4p3FyNGg6K4sorS+8CfRS60i3PeWr19Nlt0heNLgdjtwjh2+0/KEz5hc/T2oz8vWjFHkbrAq0s+q7j5IieGX/cN7oHZOOy7RRPORwnLJN8g+qJ57/NFPxDZZfveC95DH4ivHrc/dtUkDOtUPR4FCM2T+XX+L52H/M/knVrl6huIvktOh/z+HLBO/pGKPFTjs6/qMouWTqVj4OGjMmNTPnbY3j+J/kcO2wxp+OGZsUaZ7u2sm5YStoBIyAEWhjBEKvvYKq+6e4lycgC0HeFoyAzMaiag4FzBhiebui2BOQVd5XhK6nUdhiqnn53aQISQUGJqZ2Q4fGN2mvZSk7gfCiqW5CPf/uE1DQRWXz0WlcPBq5/NlPGh0cW/wflE6+B6sn34nl107E4vGXx6NbhxyKDtuZiNwIWDMzKv73ojui8LhDnYAc0fd35nQ88BiXX/3SJ/XXfqBjv3oBOUYLhRjfI+1GcCLL2FqEliVf+7Egn0hLFJAT+hXrsg86egKy8n09UHiwggbCiFYk15Nw2Ea/GvN1o3VDg0gU7DLY+SQr0njq9FfqRVxf9Cs8NneOi0hGQQ9sx4nHp9bZPORRiB1Iy7YAbSP65rOuKKOKdcIY3bxH1wDPSV8M7BC3xViy+pskZqtXflgvIGvHh0uXxNsItkdJGhs4lWlOH1UesVV44+t3nYBc0r4bBvC1tHSFa8dX0BlD2E6wy+boJqGY435/xhvuMP0TWTMN767iTTpLRmAjJtCciOSi3sNx7PjxOJJPdpiAHD/pFom8EV/81nUjkI7AG3PfTZedMS8cCqedcE/aMr8P1adUKwtFH8cF6IYvWvWFM6zURmrw8ZIZ2KlXLsJghkoyZHfZe3/0yPDlKvWQ9luNwm6FT+P9epuHEBavYBRrzwafs+8/eyfpsA47HovBzTA/2vPo/XDvjGfr61jy0acoO3XHH9Q/9/vpH9W3r5WCbY7B0GaMIengNBud9zgYfXJknl9YmKaG5KyVc79Oymi3wyE5M28/eGdsHXgoSYROqizLRtH2++c8jkCPnbB/v2BCJHvjaydLU7bLCBgBI9CmCRT9bhI6btcZ/DrAVIvQvA/ox/oPVPzxV4ied12TPsW+kpLG/NoNgp/BkpHvvkaEj/X729WJlpHFqF1SjnaKyIytRtnTcSGkKduMxg20vZy1Tz3pBh2lB+/yv/wXsVAeEcYjVEOvTkbo5N2SJtjzRZeg+hFGytYl2Y0UTjiJIuQ22W8OeAfYsgkC8ej9qlsvR9WtjYvGqhqexKr57h2sffxZhN9PfrKr8VF0JthlRLpslxcYslnGfZvyDl9sJQXfGDrURSLXq/M0pluUMtmMopZXRrZCz0Ah+nXy4VPOBVK6WT8U05Ziq/Z+FJT0coEHlWXfMIZ4C+xZXIjNum+FWGnXOoG2DLOWrEjCWUYbi7SJv8uSw10SSnFfPDXdx+lrKDoXb4fjBg1Hvw6dkgIjXB1eO1nq/LJsNaOWi71GbWkENkoCzYlI3igHuAE7bSLyBoRrVRuBH5rAkzNfQDQSf/ypOW2nm3Av1dIi0coi0wR6ubQ5bcFHG0REHrH9oFyaj5fxleCAA/rj/We+qz/m23m0VxjeYK/w7axF9fu0cshhOyRtN7VRvOXO6OF/rt7fN7bqMyxh8G1H/pb9odKCuXOTmjrk6L2Sttd3Y9edB61vFUnHL1+RHNly8OGZf9wkHagNf3dsNzCAL7+p/9bbqEimjO12GpRpV+N8RrKP2GUQReQGtqnXTuODLMcIGAEjYAREwF/Unv/mI+AmNeeSN3V7XAMsPfMfqJr8FjpxsruE+9eNoeXir8uIyeLL90HpdW9h9Tmn0xOWP3cqwq6uwMhTmrDNaNxkm8uhnUHNm16kIX1wp8UnMfQ4+KLzG0+w1/sA9LztVMQYIasZEgMpbhfesbZcPwKBEQcwqrgEyc8KhuDrNNzZu1S8dxvW/vVd10je/gegYOfhCBTlofxff0Yk+TTGywznDZgMXcrLsi/DIZtEtqJ6XQRumtE0hJo03qlPGH90JhZU7oZi+oH36Tkcneg7rLR09ft4j1Po7VncHx07bY7t+ufHxduaZZie9ERoGKvXLHDHrOs/TfXR12EEzh62Ezq4GCBOplexEmtqyhAJdMOQuv7+P3v3AdfU1f4B/JdAmDJkI4iKdVv3rFtba6u22m3f1u7dt6/db8fbZce/rd3aPV7b19Zu2zpr3Vp3te4tKgoIKKAgEEj+59yQ5N4QQgIBg/zu5xNzx7nnnPu9l5g8OXmuY9uOdZqKS5RRy+KVlRMFGrQAA8k1O33826+ZG/eigM8J5Is3AHuO761xv5Qb7plEzjtxkzU5yZQWBuUtjk6MSK54iylvoFdmH+1Qk8ZM4iv9hQdW4KLUQTXZvcp9YiK06SOqLFixwVimfQuuSa9gLsSxbGWYVHXVVL09MAU9mvnZR6yKn4MVGWWb7o/crrpyN7aIY0g7pD0Gb7/ge2rustdKf8XwCNXkWX8D0K5LC+CAPbirqsrlbKsWkS63O240GrV/A5prx7EwlylAAQpQwKWAvknFyGF3hgifEd/GOk7m40rqBV2kuGFeRfAyMKWtKLVUjLQcgIDuScpI2qCufRGcUtGWYx1ctgkUrv9dmQ+88WlEjdP+cswocvPmPPAF5A32wvrfag9AVpw7vyrutWGrnDM1Eyi1vO8IuvQahHepYjSCzGP935Wifn9EvP0hQlQ5xo3ifiFFu+0jxW2dqKjXtqyecbVNXe5cmhc5jK9NbWsJ8BqzsVreXNv2FtGAEPnrO9VoZH1IczHqWK4rRXaB5XPFrtOn0Ck0CrFRHRAlU1mI+5NsyihHse4QclskIzogVqS0sHyuyhYjlB0nXVVRfceCTper72Ob1i0tAWRjLr7e8CMOVRyPX+RQPCSCyLb33rZ+iBHVDsfdMjpWKad9N+y0Q1xJAZ8XYCDZ81Nke3nwfFfuQQEK+JLAnN2L1e9ratQ16w33rDtbvhw3izsKG5TUFaXq2z9bC9XgefeJfSjwck5Cyxgj9zsT3/o8l4WDNWkaDEiI1Nx2z+W+1o3qOnTiTeT2Y04+/FoL18Gzun1ZfYQcAObFyVPz6pp27G90xZ3dq9uvttsdYsLVVpfSpWO1ZViAAhSgAAUqC+gMFVHeik3m4uPIeff/lCV9SlLVX7NWpKxA3ioULNUGXvJ/+EDZ379vH1tQ8/QSSzqpkPG3IHLUFWg6diwDyJVPR+U1MhA5Y51YL26oN0QbQJaFDc0GKKlDkPE7io+IUcec6kUguFdPpZ3TL74Ox7fP5pLTtowLunARs9SFiHy29kCz8egKy0356qWnDagRkadYPXVOGYZ7+lwlbpRnGeyx58gaJf+xJWWFCBAL1yEdB6p3wdjz2kEZpWs8gU0VI4r354rULqKUISBS2Xam8Bh2iw9YllHKMuwaiJgg+ZmiBIezD2nqq+mCp31U2hF/69YAsszRfO15qZYAckV0yJiXjXz5wVAXhsHt+ti6Jm+4d0GUZYS1bSVnKNDABTzJkdzAD9Ur3bd92eSV2lgJBShwVgSOFGQgLSfNa23LG+75G/xhTWlRLlJklJvEGx9NYLV2zS08uBJXthtVu0pqsXdUUjO395ZvyGMjlN/eur1P5YIGpMZ6Nlq6ch01XyNvUteumf1DRc1rqp89ZX9bJ9bWvG76GhoZUzcVs1YKUIAC57jAqfeeQmGk5RtNc2E+yndZRkeaRfQr8vbhVQeRxc3BYh67D8fvniZywj6J0jVDEdg7DiWLfhI/0y+DWZ+AiOv72vT84y1f/J566nacsq0VM2EJCLnzAUSobxim3t7I50vTllhuiHf+tTA4ixOJ8xB27UDkv7IShfPWIuSO7o1czIuHf2wBsh/T3svCJPLlBt/6gsgVLs5HnwUwrtuN3Juug2HEUPiJQfVlu/ej7K8jCHvpUzRp3wSGFH8xKr8Aufc/iqCxXVCeuQ/GxU7yWHix2w21qtjYC/FoLGAUWdAM/v72EbgiUcPBjFX4MfO4cmg682HMST+KW8Uo4uDwDniiTzIyS0rQJDhG3IBPFinDziPzbQwyoJtj7IBkgyUYnZGzy7btr5O56BqaaFk25mNHvgcp2ERbSsDaVpt9xpM+5hfJ4HmUyCrUAo/0uh75ZeVoEmIJeFtrlO3IoPfqnI4i93EUwpp2FWVTnZa17sNnCjR0AY5Idv8MciSy+1YsSQGfFZi/Z4nywUu+XfHWo1zccK9UDNGUN88rNZaIgLJJPEQw2UuPdJHzSwa/z9aUuXen203LUcTHHPL1ur2zraARB7LrdySyrWkxozMdFu1r01uot/vavM6Ugcw83+zviaOHfI2L/aEABSjQIARM+4+gbONu5WEJIIvgzUXXIPa/HyNQFbTUGSr/+scvdhBi3r1PjIQVX3KvX4qi979TAsj6jgMQ88XbCKj4ntR4dC0K3rXcVEzfoR38e4pHv3bKfjiViaI3nkQRR9E6vV7O/L1cWR8q7qFQ1YfEkB6XKmWMi5bZRsA6rYwrPRQog2l/puYhc3mbC2XQLwAxj3+O0NssI0KNi5aKGxkuVQLIujhxfTe1jPBvesf/wb+HGI586giKv56jBJD9BogUGE+OVvpizxhj+fuyL6u7WvU2vcHyBZDz/dR1NIB5vXjtEY9gawDZVIKcgjTM2vw5Zh60B37lkWQdnYMfjqXjjIz5+ochIbQigCxGM2898CtmZdnvR6MzH8WRoor3++Lzw+aMbBvGsfQ0y+heseZUUQbSK1JJKAUs2TBsZe0z5Ur+YZjK7DfWc1LW3T7Kcn+ePKFUbwgIQ0xFADkjd5+4SaCoWNXO1r3f489cJ2XzjqHQSR/sfeYcBRqmAEcku3feOBLZPSeWooBPC0QEhiOjrA4CsuVl8POr6mNE7Uj0IulX8/CKb+NrV5Wyt5PPmy5rPZ2jzb/rWPiM+o2d2Jhbg/hvvuodllkXgU7N6ncksuMx5OSL0eTJVY1jcBSo/2Vtf404nGNEv/i676+n107WIQaR6//qYIsUoEBDFghIvRGJP97o9iGEj34d4Za4l2YfQ9IgxL8+COXiJ/xmmbNV3OzUv4k2RUa+CCg7ywsrKyra+KFyw73irQdFzth2mrq5INJejXtdPKqR0KeKcznTVij+dfu8baWzGTGK2e2yzvY/V9e57RKA8EsfEo9SlJ0uhSWQK29Sab/+dUHJiH3qY7Fd/H0IL734ZsWaJzxU/fcX3E5zDjW0LraFjX4eYU7+LjX7+/jCnv3f45X9nndyb9ocvJ0GtGzaFk2EubksD9tz0p1WtHT7DCx1skVv2oL3V29xsgWYu+ULzHWypTxvBd76c4VmS1Vl3e3jsp3fY2VwEjqEh8JcXoKMnENK6g5gkaYdubBs9/dYKtJdnB/fVHyVIT4P5W/HoTOMIFeC4opzRoAjkqs/lQwiV2/EEhTweYFrzh+Dl7L2KTfD82Zn/f38lBHIdRFIHtyqvze7ij37xDf9bcPcrrO0SHz4VE0JKbY7Z4gPpeKuyrEilUK6PeuvfU61k4tZc+FhbMuzj0yQudRCKn7a5mI3tzc53tyt0o7iGGIixdu9WhxDpTrrcoUIBDiae9pcYV6+p7so5T29dixDQuxNaa4d+2rOUYACFKBAHQn4BYphx+K/6UqTyPNZdsQS4DDEV07hZDqRo+xiSFYNe65UCVdQwJcFAip9ceLYW/8mla99xzJcrplA2sk9NduxHvdyp4/lZ45i2xn3OiVHV2/LPOpeYZaiwDkgwECy65NYN0MMXbfJrRSgQB0IXNh+qPdrFaOFZfoKcZsOr9YdZAhEr8QuXq1z60YP3tSZDuHHRZafulo70SxWFUQW37V37tfBukl5nvvTKmjDzprNlRYK0tbguMnupovqKn7+VqmYaoWhYlSJalVVs+LncSsXOx/9YN8lAO26JNkXxZw8Bl+eklJiNd1bsXy7ZtnlgjBZt9bykzuX5Zxs9OjaMWdjiYO99tpx0gBXUYACFKBA/QiIUZ3+It2FzFN68s0PUbhjN0oy0lG4aQWyX5uEUx9uEzceC0dgalz99IetUIACFKAABSjQ4ASY2qLqU8YgctU23EKBBiXQN7kbQgKDvdpnnS14LDMte28a1+ES71VWUVPJ9j+w97Q9aOuqgby/F2OfyPFsnWSqiVYON71L7DhIdZMNcQ/lbT9in5v1A6VY9pP2J2EJvXohzOHGhOr0DTJn8aEM93IAl2dtwMozqlHO1gNxeG7eoZ9mjTyGnW4fg2bXelmIapGiaSdjxTwcc0groimgWig/vsUtE9UutllPrp0zaRuxVmXv7NqxVcwZClCAAhSod4Hof1nywsq8yQX/eRYn7n8EBS9OQ9naTOg79kHU1Ddt+ZPrvXNskAIUoAAFKECBBiHAQLLz08QgsnMXrqVAgxQY1eEir/XbT6SyMFfcJ13eXM9bU2yTWCSHeS8XsrVfMgg7Y9Fu62LVz6Zj+PCt3zXbAztfid5x2pdDv7guuDDZnvFH3lzvtalLNPtVtZC/7Sf8b1upZvNVF7fVLNtSZqjW/rLYvdHUS774n2qvqmdD2vZDD38/WwHrMXgyotq2cz3MJF0wFuepcnDry3biy1/dOKeib6tmflPjHrp97ZgLMeejrzTtOLt2NAW4QAEKUIAC9SpgzQsb+9930fTNl8XjeTR9awpipn+J+MkPISiBP/Wv1xPCxihAAQpQgAINVICB5MonThs1qbydayhAgQYk0DmuDWLCo73SY53e/vJgSWnhlWoxrv0o71TkpJYdM57BBwu1d1TWFBOpCD565BH8VawdxXuZuAt5pUnk6J3wzwma1YV/fYh/vr8Yru4nkbl1Ju544SfNfn6tb0T/JMcbxAWgVYdmmnKZ81/FsrRTmnWaBRHEXPLJE/h4k5t3+dPF4tqbOmuqkMdw7zvzXR6D3KE4Lxs5qhsDaiqpqwV9C1w1qrmm9r/EOf102QHNOje02dkAACAASURBVO1CKdbNeBFTV1nyXGq3ub9U/bVTiN/ffxTfHdCG4J1eO+43y5IUoAAFKFBHAv5hcQhqkSoe7RCUkgyDww346qhZVksBClCAAhSgwDkkwECy9mTao0Ta9VyiAAUaqMD13a+EziFtQk0ORaezp4awZBSofUqLlMgURMib4dThtOSTZzDx8Y+wNS1LlcO4FBnbl2PShPuxSHWjOdkNfYvrMLaj8xvyBbcai4eGavP0Zi39EBNvehYrtqdrArGnj+/F928/jAcmawPIgAEPPTha/Ft5ajNkPJpozpUR0x67Da99vQI5p+2BYnNpIQ5sWognJ94mguT7K1fkYk2rkXeij2o0siyav+pzTJzwCOas24b8wkKUiEde3nEc2bMDKxd8jcmP3omJd96Hp2ZudVFz3WzqfuWtiNNrr7Xfp/0b/3znJxw6ftreqAioH9m+DM/dORFTfnF+p2t7YffmnF87wMn0v/H6g7eLYLY2UO3q2nGvRZaiAAUoQAEKUIACFKAABShAAV8WYCDZfnbsv9W2r+McBSjQgAUiA8NEft+WOHD8YI2PQucnsiGbtYE8QKa0cFznfhN6cZO+azqNdn+HWpQsPrgIkx9bpNRgMBhgNGpHj1qrNvl3wEvPjkewi8Pqd8/LGLHvHk3wWVe8E+89/5BSjU7Ub66iflngumffq5Qqw9q+vmkv3HVhDN5YmG1dpTxvmPUeNsyyrLLcHkizWVkQzYrjqry+0hoxGvmhaU/goXtewjH1jf5E+o/pU17A9Eo72Fc0NbiAsRfz6pyuSQc8//R43OMwmjtr1Uw8Kh6uJrdNVJXInMaJ4QXIzLd8aeLNa0fVDGcpQAEKUIACFKAABShAAQpQoIEKyEByeno6Tpw4gaioKOhVv9xuoIdUo25zJHKN2LgTBXxb4IZuV8BPb8+F62lv/fSVv18qK9OmgPC0zh7Nunq6i9vlzfpEPPHGqxjVsnK/qwogm4O64JWPn0ObJtUESkWQ8a43PsB13ZynCakqgCz79K/XPsMVnaJcHkff21/DxAuc1y13LHOyd5sx/8GMz16qNGLXSVFllb5pF7z16Yvo1dSza+Kk0T4avaq662J9dOfr8P4zN2pubFhdO4rJV6+jmcMo5ur2Cx94N979eCqGJFW2qfW1U13j3E4BClCAAhSgAAUoQAEKUIACDUKAI5LFL7kbxJliJylAAY8F+rXs7fE+1h00GRYqVppUo1it5dx9DjIEYmjLfu4W97iczpSBvQUxuPW1/+L5f92AtpGBVdcRkIhLbn4CX05/uvoAsrUWEUi+4skP8Nlbz2FU/1bWtU6f9REpGCvr/+YdDGjpPE2GZkeRe3nMpA/wwYsPoneSi36LnZI7XYjHXvoIL008HwgIRZTqRMlRuK4mXZM2eOyj6XjhkZvRuZnrdmQKjvOHTsCDY9tpqtQFaxYREaJddrVkCIzUbJYjxF1NMZ3HYsbnr+MfF3V2GUxu2mowHrKaiH4nqL4RrqoJ9XEM7JskBtjH4r63ptfNtePqILmNAhSgAAUoQAEKUIACFKAABRqMQGMPJFczBE85j+oy1nnHZ2swWq5XP+R6x2XrOvlc1UMOCZPb5LPjvBxqaN0m561lHJ+tZTqZzeanRDlOFGh0AlOWvY+ikjMeHbeMS/r5Ow/wBQTIPzn5J+3ZNLrdSHSIae3ZTtWU3vr1k5g8a5+t1FXPfibSZdiDtiWF2Th+NBsFRn+EGIwoKgtFXLNYxEaG2vap8YzIx5t1TNx4Ls+etzggNBJxsbGICA2ocbVyR9nvtLSjIldxKQJDQ5UAamBkDJrFxiOkdlVr+mUqKkT2yWPiGEpFPDoUJXl50BlCEBuXJI7DC0aa1mq7UIqTx7NxLDvPVlFAqDCJi0eoB4Fs287VzNivnYqR2CLQ77Vrp5q2uZkCFKAABShAAQpQoLLAk4unICzI/l6/cgmuaWgCp4pP4eXhjzS0brO/FFAEZGqLM2fOaFJbiDQXL4mN28VD/oxb5gOVz84e8gfH1jLWeeuytbx1f/lc1UN+YLVuk/PWh1xnnbc+i1VKWfks18nJ8Vm9Ting+E/l3347luAyBSjQYAVGdbgIP23+1aP++/nJ72OcT+XlJrja7myvpiGRXg8gO2vHcV1gaCyat411XO2dZRFUjE+SD+9Up65F9rtdpzrqt6ohfYjof0ibOjkGVTNemg1AUxHclo/6mOr02qmPA2AbFKAABShAAQpQgAIUoAAFKFBnAo01R7IcrcuJAhQ4RwU6x7VBTHjV+XadHbZOlQ7AcbsMIns6XdVxrKe7sDwFKEABClCAAhSgAAUoQAGbgMFP3MzabB00Z1vNmQYqUG4qR5i4ITwnCjRkgcaY2oJB5IZ8xbLvFHBD4PruV0Knyp3rcheRqaL692buv3lLiUxBRGATl01yIwUoQAEKUIACFKAABShAAVcCLSObo7S81FURbmtAAmWmMiQ0qftfXzYgEna1gQqoA8kN9BA86jaDyB5xsTAFGp5ApPiGt1VsS7c67u8ilYW1gvJy94LIep1e5Cgebd2NzxSgAAUoQAEKUIACFKAABWokcFnbEcpI5BJjCeQoVk4NU0Ceu5KyEuVcynPKiQLngoA1kHwuHEt1x8CcyNUJcTsFzgGBMSI38rScz6p9w2UW96ys7rZ55eXlIi+yLOW6ZI9mXc8BOR4CBShAAQpQgAIUoAAFKHC2BaKDI/BAn5vx655FyDydDXlTNk4NT0CmsEiKSIAMIMtzyokC54qADCQ3holB5MZwlnmMjV5AjkbumtwZfx3+26WFu1kvqgsgBxkCMbRlP5dtcSMFKEABClCAAhSgAAUoQAF3BWTQ8ZauV7hbnOUoQAEKUMDLAkxn4WVQVkcBXxUY0/5ChAQGV9k9PzdSWVh3ru4GeyNSh1iL8pkCFKAABShAAQpQgAIUoAAFKEABClCggQswiNzATyC7TwFPBAa1vqDK4jq9+y8HMqVFVVPTkEh0iGld1WaupwAFKEABClCAAhSgAAUoQAEKUIACFGhgAu5HjRrYgbG7FKBAZYG+yd0QEx5deYNYo4N7N8yz7+w8J/JVHcfai9TlnLlMU7vBoFnkAgUoQAEKUIACFKAABShAAQpQgAIUoICXBJgT2UuQrIYCDUVgTIeRmL5upnJHXGuf/fz0IoTsPChsLeP4bBJ31tU7jF5OiUxBRGATx6J1snz+P17D/64utdUdEBBgm+cMBShAAQpQgAIUoAAFKEABClCAAhSggPcEOBLZe5asiQINQiAlohlaxbbU9FWn99Msu7PgmNJCr9Pjmk6j3dnVa2Vk4Nj68FqlrIgCFKAABShAAQpQgAIUoAAFKEABClBAI8AgsoaDCxRoHAJjOlwEP1XgWKfzNJUFxEhmrVWPZl21K7hEAQpQgAIUoAAFKEABClCAAhSgAAUocE4IMIh8TpxGHgQFPBOIDAxD1+TOyk46P5EN2exZKgt7a5ZIcpAhEENb9rOv5hwFKEABClCAAhSgAAUoQAEKUIACFKDAOSPAIPI5cyp5IBTwTGBM+wth8DfAT6ShqOlUVlau7DoidUhNq+B+FKAABShAAQpQgAIUoAAFKEABClCAAj4uUPPokY8fGLtHAQpULzC87WDoHG6OV/1e9hImkxnRTaLRIaa1fSXnKEABClCAAhSgAAUoQAEKUIACFKAABc4pAf9z6mh4MBRopALfbP0VE86/zOOj75vcDfJxNqY9uQdRVFaMbvEdzkbzbJMCFKAABShAAQpQgAIUoAAFKEABClDATQEGkd2EYjEK+LJATQLIZ/t42ka3OttdYPsUoAAFKEABClCAAhSgAAUoQAEKUIACbggwnYUbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHAILIbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHAILIbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHAILIbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHAILIbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHAILIbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHg70aZBl9k7dq1Df4YeAAUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABc6GAEcinw11tkkBClCAAhSgAAUoQAEKUIACFKAABShAAQpQoIEINIqRyG3btm0gp4PdpAAFKEABClCAAhSgAAUoQAEKUIACFKAABSjgWwIciexb54O9oQAFKEABClCAAhSgAAUoQAEKUIACFKAABSjgUwIMIvvU6WBnKEABClCAAhSgAAUoQAEKUIACFKAABShAAQr4lgCDyL51PtgbClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAI+JcAgsk+dDnaGAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIBvCTCI7Fvng72hAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKOBTAgwi+9TpYGcoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCviWAIPIvnU+2BsKUIACFKAABShAAQpQgAIUoAAFKEABClCAAj4lwCCyT50OdoYCFKAABShAAQpQgAIUoAAFKEABClCAAhSggG8JMIjsW+eDvaEABShAAQpQgAIUoAAFKEABClCAAhSgAAUo4FMCDCL71OlgZyhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEK+JYAg8i+dT7YGwpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACPiXAILJPnQ52hgIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCAbwkwiOxb54O9oQAFKEABClCAAhSgAAUoQAEKUIACFKAABSjgUwIMIvvU6WBnKEABClCAAhSgAAUoQAEKUIACFKAABShAAQr4lgCDyL51PtgbClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAI+JcAgsk+dDnaGAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIBvCTCI7Fvng72hAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKOBTAgwi+9TpYGcoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCviWAIPIvnU+2BsKUIACFKAABShAAQpQgAIUoAAFKEABClCAAj4lwCCyT50OdoYCFKAABShAAQpQgAIUoAAFKEABClCAAhSggG8JMIjsW+eDvaEABShAAQpQgAIUoAAFKEABClCAAhSgAAUo4FMCDCL71OlgZyhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEK+JYAg8i+dT7YGwpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACPiXAILJPnQ52hgIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCAbwkwiOxb54O9oQAFKEABClCAAhSgAAUoQAEKUIACFKAABSjgUwIMIvvU6WBnKEABClCAAhSgAAUoQAEKUIACFKAABShAAQr4lgCDyL51PtgbClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAI+JcAgsk+dDnaGAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIBvCTCI7Fvng72hAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKOBTAgwi+9TpYGcoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCviWAIPIvnU+2BsKUIACFKAABShAAQpQgAIUoAAFKEABClCAAj4lwCCyT50OdoYCFKAABShAAQpQgAIUoAAFKEABClCAAhSggG8JMIjsW+eDvaEABShAAQpQgAIUoAAFKEABClCAAhSgAAUo4FMCDCL71OlgZyhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEK+JYAg8i+dT7YGwpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACPiXAILJPnQ52hgIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCAbwkwiOxb54O9oQAFKEABClCAAhSg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jkZEBIhAfSEQFtVYMPXnJdPx/vYbZmaXuycgQAjhw+ImK5LOORITp41Gi8buyN7xKd5L+1MhQadEgAgQASJABIgAESACRIBiItMaIAJEgAgQgTudgHsUXnx5Gq5qXREaEQEfCtNwp884jY8INDgCN4utD/m+SUnwYhF89mz4yUywkn251q1PEpqymMgB+TGsnpzIZpCogAgQASJABIgAESACRIA2Y9EaIAJEgAgQgTudgCuaRESjyZ0+TBofESACDZIAj2nct7W4E9kSAF6f0j0CuusspM+3J8xEKl3CDP8QaMuKzOqpgAgQASJABIgAESACRIAIcAIUzoLWAREgAkSACBABIkAEiAARqIcE+k19HzMGNhcsr8w7io27zcNV9H3qcUR7aLAv7SNkVUrvTzEOtuP9SQhku5Bx8zyWLdllrKAcESACRIAIEAEiQASIABGQESAnsgwGZYkAESACRIAIEAEiQASIQH0hsHP1Unya3x7l2UfwLXuhnqW0d90izNzjhL37My1VIyTYm72buwzHN3+JbWX8BeGUiAARIAJEgAgQASJABIiAOQFyIpszoRIiQASIABEgAkSACBABIlDnCdzMPIBv2MdaKj19BntPq0tsfC8VG99Tr6caIkAEiAARIAJEgAgQASLACTgRBiJABIgAESACRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJqBMiJrEaGyokAESACRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgHYi0xogAkSACBABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAF1ArQTWZ0N1RABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQAQaPAFyIjf4JUAAiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAuoEyImszoZqiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAg2eADmRG/wSIABEgAgQASJABIgAESACRIAIEAEiQASIABEgAkSACBABdQLkRFZnQzVEgAgQASJABIgAESACRIAIEAEiQASIABEgAkSACBCBBk+AnMgNfgkQACJABIgAESACRIAIEAEiQASIABEgAkSACBABIkAEiIA6AXIiq7OhGiJABIgAESACRIAIEAEiQASIABEgAkSACBABIkAEiECDJ0BO5Aa/BAgAESAC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AgQIECBAgAABAgRcIvsbIECAAAECBAgQIECAAAECBAgQIECAAIFDAZfIhzQWCBAgQIAAAQIECBAgQIAAAQIECBAgQMAlsr8BAgQIECBAgAABAgQIECBAgAABAgQIEDgUcIl8SGOBAAECBAgQIECAAAECBAgQIECAAAECBFwi+xsgQIAAAQIECBAgQIAAAQIECBAgQIAAgUMBl8iHNBYIECBAgAABAgQIECBAgAABAgQIECBAwCWyvwECBAgQIECAAAECBAgQIECAAAECBAgQOBRwiXxIY4EAAQIECBAgQIAAAQIECBAgQIAAAQIEXCL7GyBAgAABAgQIECBAgAABAgQIECBAgACBQwGXyIc0FggQIECAAAECBAgQIECAAAECBAgQIEDAJbK/AQIECBAgQIAAAQIECBAgQIAAAQIECBA4FHCJfEhjgQABAgQIECBAgAABAgQIECBAgAABAgRcIvsbIECAAAECBAgQIECAAAECBAgQIECAAIFDAZfIhzQWCBAgQIAAAQIECBAgQIAAAQIECBAgQMAlsr8BAgQIECBAgAABAgQIECBAgAABAgQIEDgUcIl8SGOBAAECBAgQIECAAAECBAgQIECAAAECBFwi+xsgQIAAAQIECBAgQIAAAQIECBAgQIAAgUMBl8iHNBYIECBAgAABAgQIECBAgAABAgQIECBAwCWyvwECBAgQIECAAAECBAgQIECAAAECBAgQOBRwiXxIY4EAAQIECBAgQIAAAQIECBAgQIAAAQIEXCL7GyBAgAABAgQIECBAgAABAgQIECBAgACBQwGXyIc0FggQIECAAAECBAgQIECAAAECBAgQIEDAJbK/AQIECBAgQIAAAQIECBAgQIAAAQIECBA4FHCJfEhjgQABAgQIECBAgAABAgQIECBAgAABAgRcIvsbIECAAAECBAgQIECAAAECBAgQIECAAIFDAZfIhzQWCBAgQIAAAQIECBAgQIAAAQIECBAgQMAlsr8BAgQIECBAgAABAgQIECBAgAABAgQIEDgUcIl8SGOBAAECBAgQIECAAAECBAgQIECAAAECBFwi+xsgQIAAAQIECBAgQIAAAQIECBAgQIAAgUMBl8iHNBYIECBAgAABAgQIECBAgAABAgQIECBAwCWyvwECBAgQIECAAAECBAgQIECAAAECBAgQOBRwiXxIY4EAAQIECBAg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z+VH/bMuJ0CAAAECBAgQIECAAAECBAgQIEDgbQTWi9Y+ddaP8vR27SiuPe1rPfNdbbe+601fxrm1rj82vvsxn9n6rta1i2IvTi9qPtO0O+eS2uxJvs77yLnWnrXWevasa+fOmWvdO+Oat79xPre1xnNr7REJECBAgAABAgQIECBAgAABAgQIEHi5wLnL0kvX2rfGvt2sN89a88TmrXc+13a19idmzP7OHxfe/egZt9Tmnmfze11yHp2z1i+Zz5413813tX7xriU2362ldrT+3Np6XuciAQIECBAgQIAAAQIECBAgQIAAAQKfVuCSi9bZM/O8eedr7LdKfbc26z3nqDbPmnnPnbXmic+tt3fta/3iuF6cXrxx03h01lq/dD771rzzGZvn1Zo37mpzbbc+a8nXse7v+lG96yIBAgQIECBAgAABAgQIECBAgAABAq8rcHRxelTP28y15o19287XOPd3rbXOZ2zenqPz1/ql86O+1q+K977w3J13S617GvOl1nydt+eoPmHa09i9s2etzd727WpdEwkQIECAAAECBAgQIECAAAECBAgQ+HwE5sVt32rWZn5ufe3rvDF7k3feuNY7T8xoX+OsPTa8+zHXW7+01v6r4r0vQc+dt1tba3PevLFfbM6Tr/P0tdZ4VEs9Y9e31h8blx9z37L0fnpJz/tmCQECBAgQIECAAAECBAgQIECAAAECVwvsLlHXQ57rmetHec/semPqzdfYtdY7T+zoWmPqM9/Nj2qpZ6z7n6o3/HyNC85zZ+7W1trRfNZ3+ayFovM1lqn12du1XW32t29X65pIgAABAgQIECBAgAABAgQIECBAgMDnI7C7VF1r6zxvP2szn2utN/Zbd94498x8rs/6ek7nu55L12bfRflrXYIenXtpfe3rvLFfbjdfa+ltrXHWetZam72zZ+aX9Mx+OQECBAgQIECAAAECBAgQIECAAAECn0ZgvajdvcXsmXl7Z615Y3sSU1vrR/Ojes9b12+td9/V8TUvQY/Ovqa+9nbe2C98NF/r6Z+1o7znNs6+c7WuiQQIECBAgAABAgQIECBAgAABAgQIfH4CuwvZXa1vPteO8rV39mXtaH5U73m7vV1b9z5X7/pNcXc5etNBm03PnX20vtbXeR7VWmMfv85n75p3z66+nrPO595z+a37zp1pjQABAgQIECBAgAABAgQIECBAgACB7wocXax+t/PjyrrvuXl3z76Z79ZTa09j++Zaa7ueXV/7G4/2df2m+NqXnM+df7S+q5+rnVtbYWbvzNe+zI/Wj+rrGZf2rfvMCRAgQIAAAQIECBAgQIAAAQIECBC4TuDSC9SjvqN632Kuz7zribt6a42X9s++o7Nnz+78uX5z/haXnM8949z6bu1cbbcWnKN64db1dd6+c/GWPefOs0aAAAECBAgQIECAAAECBAgQIECAwMsEbrlYXfes8/WNjtZbb5z7Lq11z66/a4nPrc/eq/O3vPh87llH6y+pH+0N1Lm1Qp7rObfW/SIBAgQIECBAgAABAgQIECBAgAABAp+PwLnL1nNr/QbneubazLs38V71nnl0XtfvEt/6IvSS5x31XFsP0Lpnne8QL+nZ7Wvtpft7jkiAAAECBAgQIECAAAECBAgQIECAwG0CL71cvWT/2rPO55sfrV1bv+TM2XOX/Iu7nHLdIZdcsp7ruXXt6C3PnXfPPUdnqRMgQIAAAQIECBAgQIAAAQIECBAg8HYCRxe3595gt2dXm2ecW791reef29+eu8VbLlDv9fBLnv1cz0vX+13OnXNurftFAgQIECBAgAABAgQIECBAgAABAgS+vwLnLmXPrc1v/FzfS9fzrOfOmO9zt/xTX5Be8/znep9bD9olPTvcW/ftzlIjQIAAAQIECBAgQIAAAQIECBAgQODzEbj1YvaSfc/1PLc+la7pnftenH8ul6PXvMclvZf0rHi37FnPMCdAgAABAgQIECBAgAABAgQIECBA4IcjcMvF7SV7Lump4jW93XPX+DlenF7zTtf0Bu7a/iPse51zdL46AQIECBAgQIAAAQIECBAgQIAAAQKvI3CvS9lrz7mm/5re11Eap37Ol6HXvtu1/YPhMX3p/vU8cwIECBAgQIAAAQIECBAgQIAAAQIEvt8CL73MvXb/tf1vovt9uTi99T1v3Xcp/muff+l76CNAgAABAgQIECBAgAABAgQIECBA4LzAa1/Q3nr+rfvOf9s7rn4fL0Hv9c73OueOvw5HESBAgAABAgQIECBAgAABAgQIECDwGQvc68L3Xue8CdUP4SL1rb7DWz3nTX7xHkKAAAECBAgQIECAAAECBAgQIECAwMNbXea+1XNe5Vf6Q70Y/aF+r1f5I3AoAQIECBAgQIAAAQIECBAgQIAAAQJ3E/heXxjvFH6Ml60/xu+8+92rESBAgAABAgQIECBAgAABAgQIECBwm8AP7qL4HIML1XM6+zVmexdVAgQIECBAgAABAgQIECBAgAABAt8XgR/VJfD35ZfiPQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECry3w/wE3OrlYJLDaPQAAAABJRU5ErkJggg==\";\n  \n  if (typeof process !== 'undefined' && !process.browser) {\n    module.exports = bigimage;\n  } else {\n    window.bigimage = bigimage;\n  }\n\n})();\n"
  },
  {
    "path": "test/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n  <title>Mocha</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"../../node_modules/mocha/mocha.css\">\n</head>\n<body>\n<div id=\"mocha\"></div>\n<script src=\"./bind-polyfill.js\"></script>\n<script src=\"../node_modules/mocha/mocha.js\"></script>\n<script src=\"../node_modules/chai/chai.js\"></script>\n<script src=\"../node_modules/chai-as-promised/lib/chai-as-promised.js\"></script>\n<script>\n  mocha.setup({\n    timeout:100000,\n    ui: 'bdd'\n  });\n  var should = chai.should();\n  var assert = chai.assert;\n</script>\n<script src=\"./test-bundle.js\"></script>\n<script src='./pouchdb/integration/utils-bundle.js'></script>\n<script src='./pouchdb/integration/test.aa.setup.js'></script>\n<script src='./pouchdb/integration/test.basics.js'></script>\n<script src='./pouchdb/integration/test.constructor.js'></script>\n<script src='./pouchdb/integration/test.changes.js'></script>\n<script src='./pouchdb/integration/test.bulk_docs.js'></script>\n<script src='./pouchdb/integration/test.all_docs.js'></script>\n<script src='./pouchdb/integration/test.events.js'></script>\n<script src='./pouchdb/integration/test.conflicts.js'></script>\n<script src='./pouchdb/integration/test.revs_diff.js'></script>\n<script src='./pouchdb/integration/test.replication.js'></script>\n<script src='./pouchdb/integration/test.sync.js'></script>\n<script src='./pouchdb/integration/test.sync_events.js'></script>\n<script src='./pouchdb/integration/test.retry.js'></script>\n<script src='./pouchdb/integration/test.taskqueue.js'></script>\n<script src='./pouchdb/integration/test.design_docs.js'></script>\n<script src='./pouchdb/integration/test.issue221.js'></script>\n<script src='./pouchdb/integration/test.issue3179.js'></script>\n<script src='./pouchdb/integration/test.issue3646.js'></script>\n<script src='./pouchdb/integration/test.http.js'></script>\n<script src='./pouchdb/integration/test.compaction.js'></script>\n<script src='./pouchdb/integration/test.get.js'></script>\n<script src='./pouchdb/integration/test.local_docs.js'></script>\n<script src='./pouchdb/integration/test.attachments.js'></script>\n<script src='./pouchdb/integration/test.uuids.js'></script>\n<script src='./pouchdb/integration/test.slash_id.js'></script>\n<script src='./pouchdb/integration/test.reserved.js'></script>\n<!-- web worker test makes no sense here -->\n<!--<script src='./pouchdb/integration/browser.worker.js'></script>-->\n<!-- migration test makes no sense here -->\n<!--<script src='./pouchdb/integration/browser.migration.js'></script>-->\n<!-- explicitly add in the mapreduce tests -->\n<script src='./pouchdb/mapreduce/test.mapreduce.js'></script>\n<script src='./pouchdb/mapreduce/test.persisted.js'></script>\n<script src='./pouchdb/mapreduce/test.views.js'></script>\n<script type=\"text/javascript\" src=\"./webrunner.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "test/node.setup.js",
    "content": "/*jshint expr:true */\n'use strict';\n\nvar SocketPouch = require('../lib/client');\n\nglobal.PouchDB = require('pouchdb')\n  .plugin(require('pouchdb-legacy-utils'));\nglobal.testUtils = require('../test/pouchdb/integration/utils');\nvar chai = require('chai');\nglobal.should = chai.should();\nglobal.assert = chai.assert;\nchai.use(require('chai-as-promised'));\n\nglobal.PouchDB.adapter('socket', SocketPouch);\nglobal.PouchDB.preferredAdapters = ['socket'];\n\nglobal.PouchDB = global.PouchDB.defaults({\n  url: 'ws://localhost:8080'\n});\n"
  },
  {
    "path": "test/pouchdb/integration/deps/bigimage.js",
    "content": "(function () {\n  'use strict';\n\n  var bigimage = \"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yza2iXhidiYKdrPxJO9Y9+6JeBqzm8xE955Yimv8IbsoWUeRbqxd/w+/397yd3e0D/3u2WHPLMKP9xTHnOJqt213fb695Sd2tz//q0+3n1v99fajF76+/drZn2n/7XuPaPfd+YX2ln97Xbv4b/6+XfS0o9ttH/+19r0//+X2kStvac/efH/73R9+SXvZ2za2L//3723Lo9rH+5PHZ1a0733zb7XT/uS17bXv/mz7V+cd3w6Z/ad22Ze/0v5lFApj2u3euyLuT+1pf/6BT7f/uOqG9r+/6HXtV8/+XPvv37Oq/dG//3/aay/5cnvzRZuj8AhGMeeE0frTX9ne8wvnt/93z8+1d73xOfFakjvaW579g+22/+OP2q3v+8529+cvbs985TPb5igYX7hxd/vG59/dfuS+n2ifufKadtzmw3sYtbZu75faT7/zgvaxK69tk199T3vea1/cvuPZ32wvWf6p9oxXvKm978pb20Xrb2o/evbL2weec3175Zt/s532/72uve7dn27/+vwT2rrlz28/c+4H2hde8o72p2++oG1YvrX97Atf147+7b9r215xWPujH7mgveX9z2m//YNntL0P3dp+/z/9VnvLH3+s3fD2KCTHhZvilwvkU1yTN/30G9vH/uZv2lWXXdGWx1PFeyKfd2/fG/I3t//26/+1HXfiye2TH//b9tb/9Nb2X3/9v7Xbb9vaPvl3H28/9aafiXcOz7b/+eH/GQs2vjjGdX8g3kN8y423tnPPf1aLRdO+efft7Zgjjom1GeuFLOOJ7JxHkWvxBon23POfGzk+0b7whc93tegLX/CC9qxnP6ftjsI1frwvO9x6eRT9yOk9e2bb2c84u1119VXdP31x7fDLla1bt7ZN8S8TKJXzWhSeOp7klyzxBDsl2Ol40phfrozxPmbWXIwxHpjEiHFKe2MtTMaTyPwSIgq04dutGV6xwg0tjul47/POXXtifW/pXmnBP72huYbdY6DsPewTrF0O9w/slWVfZAutf26o7A3ZH5lydeLBHDiIS8POfQUZfSg2Nnjj6cs5wKtTbgzlxvI8ieP+i03e1+y7j2Zf/NB7Hs5HylzxE1vk+NucLzLHd/8nLs3x4fHnQMaBX54XOovD2Of933HxE1vOk35d/7r+5ih54rogh+j3c4d+rf/Y/efWYq3/+X2Z3AAX93jzB5lydeKW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1+tFawJyD08m9hs6NWlbTCQBEiABEiABEiABEiABEiABuwRUdPzlhKPsZmc+EiABEiCBdiZAdxbtDJTVkUC6Ejh8p+nIzsxK2D2XDVcWZuHWFtg7cPi+ZlZuSYAESIAESIAESIAESIAESIAESIAESIAEOjkBisidfALZfRJIhcDeO+yZMLvDaf/nQF1aJAo9swsxuvcOiZIZTwIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk0MkI2FeNOtnA2F0SIIGWBHYvmYje+b1aJkiMA/YWzIsUju8T+ZgxMyNZOnIv6LPU7vFYDnlAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTQTgToE7mdQLIaEugsBA4ffTCe+PhZY0Vcs88ul1Mk5PiisJkndhuQlXWdMdbLgwsHoyAzNzZrhxzvfNIteOrYpnDdGRkZ4X3ukAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJtB8BWiK3H0vWRAKdgsDgggEYVjzU0leH02U5tnMQ69LC6XDiuLEz7BRttzwqHJufdquUFZEACZAACZAACZAACZAACZAACZAACZAACVgIUES24OABCXQPAoePPgiuKOHY4UjVlQXEktnKatKACdYIHpEACZAACZAACZAACZAACZAACZAACZAACXQJAhSRu8Q0chAkkBqBwsw8TCgZZxRyuMQbcjA1VxaR1kJKcg9PJvYbOjUSzT0SIAESIAESIAESIAESIAESIAESIAESIIEuQ4AicpeZSg6EBFIjcPhO0+Fxe+ASNxRtDT6f3yh64PB921oFy5EACZAACZAACZAACZAACZAACZAACZAACaQ5gbarR2k+MHaPBEigdQIHjNwHjpjF8VovFckRCATRK7cXRvfeIRLJPRIgARIgARIgARIgARIgARIgARIgARIggS5FwN2lRsPBkEA3JfC3r+fhhJ2PSHn0u5dMhH62R1i26UfU+7ZgYt/R26N5tkkCJEACJEACJEACJEACJEACJEACJEACJGCTAEVkm6CYjQTSmUBbBOTtPZ6RvYZt7y6wfRIgARIgARIgARIgARIgARIgARIgARIgARsE6M7CBiRmIQESIAESIAESIAESIAESIAESIAESIAESIAESIIHuSoAicnedeY6bBEiABEiABEiABEiABEiABEiABEiABEiABEiABGwQoIhsAxKzkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEB3JUARubvOPMdNAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAjYIUES2AYlZSIAESIAESIAESIAESIAESIAESIAESIAESIAESKC7EqCI3F1nnuMmARIgARIgARIgARIgARIgARIgARIgARIgARIgARsEKCLbgMQsJEACJEACJEACJEACJEACJEACJEACJEACJEACJNBdCVBE7q4zz3GTAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgA0CFJFtQGIWEiABEiABEiABEiABEiABEiABEiABEiABEiABEuiuBCgid9eZ57hJgARIgARIgARIgARIgARIgARIgARIgARIgARIwAYBisg2IDELCZAACZAACZAACZAACZAACZAACZAACZAACZAACXRXAhSRu+vMc9wkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkYIMARWQbkJiFBEiABEiABEiABEiABEiABEiABEiABEiABEiABLorAYrI3XXmOW4SIAESIAESIAESIAESIAESIAESIAESIAESIAESsEGAIrINSMxCAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAt2VAEXk7jrzHDcJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJ2CBAEdkGJGYhARIgARIgARIgARIgARIgARIgARIgARIgARIgge5KgCJyd515jpsESIAESIAESIAESIAESIAESIAESIAESIAESIAEbBCgiGwDErOQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQHclQBG5u848x00CJEACJEACJEACJEACJEACJEACJEACJEACJEACNghQRLYBiVlIgARIgARIgARIgARIgARIgARIgARIgARIgARIoLsSoIjcXWee4yYBEiABEiABEiABEiABEiABEiABEiABEiABEiABGwQoItuAxCwkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk0F0JUETurjPPcZMACZAACZAACZAACZAACZAACZAACZAACZAACZCADQJuG3k6fZZFixZ1+jFwACRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSwPQjQEnl7UGebJEACJEACJEACJEACJEACJEACJEACJEACJEACJNBJCHQLS+SRI0d2kulgN0mABEiABEiABEiABEiABEiABEiABEiABEiABEggvQjQEjm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABbRCEcwAAIABJREFUEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IkAROb3mg70hARIgARIgARIgARIgARIgARIgARIgARIgARIggbQiQBE5raaDnSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCB9CJAETm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IkAROb3mg70hARIgARIgARIgARIgARIgARIgARIgARIgARIggbQiQBE5raaDnSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCB9CJAETm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IkAROb3mg70hARIgARIgARIgARIgARIgARIgARIgARIgARIggbQiQBE5raaDnSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCB9CJAETm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IkAROb3mg70hARIgARIgARIgARIgARIgARIgARIgARIgARIggbQiQBE5raaDnSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCB9CJAETm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IkAROb3mg70hARIgARIgARIgARIgARIgARIgARIgARIgARIggbQiQBE5raaDnSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCB9CJAETm95oO9IQESIAESIAESIAESIAESIAESIAESIAESIAESIIG0IkAROa2mg50hARIgARIgARIgARIgARIgARIgARIgARIgARIggfQiQBE5veaDvSEBEiABEiABEiABEiABEiABEiABEiABEiABEiCBtCJAETmtpoOdIQESIAESIAESIAESIAESIAESIAESIAESIAESIIH0IuBOr+6wNyRAAiRAAiTQ+Ql4vd7mQXjg8XT+8XAE6UkgKOeZzzzTeKK1yyTxu9suGDu8Es5ThyNmAyRAAiRAAv/P3nkAOFFtb/xL3V7oSxVQpAoqAiJFRAUsWBGx9+7zj71XbKiABZ/6bE99IopdVBCl96L0pQnILrBLWbaXJJv8z51s6ia7STZbgG/eG2fmzi3n/u7NLPnm5FwSIAESqESAInIlJEwggSOIgOUg0jdmoFw+6eWIQ+cenREbQfeK8rKwa8sObNy+HeWmJjBYD8KQ0hqdOhyLjh3bIo4iWQRUIyjiyMe8L6bhj03/IKVZN1x07eU4NkUXQUUNs0jhgUxsWLNC5lkGCkrERl0cmnfqhfOH90XiYdTNzb++jInf73BDvujhCTinY6L7mickEBUCZVvw+P9NxEGHQ6uuxVlj8dxlXaNSdYOvpJaehenfjsPrMzO17jv0zfHIa8+hY0LtPXwKs3Zgd56lStw6eTmQkpyM5JSm/FtbQSrq4+Qoxu6tmSis+CxVOSBy0xyfgmQZkyYp8dVlrXw/5LZMSEiRcU+OR3J8BO1UbpkpJEACJEACJEACJFBjAhSRa4yQFZBAwyTgKNqBtx99BevK7E4D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gARIgARIgARIgASCEqCIHBQNb5AACZAACZAACZAACZAACZAACZAACZAACZAACZAACVBE5hwgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIISoAiclA0vEECJEACJEACJEACJEACJEACJEACJEACJEACJEACJEARmXOABEiABEiABEiABEiABEiABEiABEiABEiABEiABEggKAGKyEHR8AYJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkABFZM4BEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBoAQoIgdFwxskQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIUkTkHSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEghKgiBwUDW+QAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlQROYcIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCEqAInJQNLxBAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAEZlzgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIICgBishB0fAGCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAARWTOARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggaAEKCIHRcMbJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACFJE5B0iABEiABEiABEiABEiABEiABEiABEiABEiABEiABIISoIgcFA1vkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJUETmHCABEiABEiABEiABEiABEiABEiABEiABEiABEiABEghKgCJyUDS8QQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQBGZc4AESIAESIAESIAESIAESIAESIAESIAESIAESIAESCAoAYrIQdHwBgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAEVkzgESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIGgBCgiB0XDGyRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAsajAUFsbOzR0E32kQRIgARIgARIgARIgARIgARIgARIgARIgARIgASiToCeyFFHygpJgARIgARIgARIgARIgARIgARIgARIgARIgARI4MghQBH5yBlL9oQESIAESIAESIAESIAESIAESIAESIAESIAESIAEok6AInLUkbJCEiABEiABEiABEiABEiABEiABEiABEiABEiABEjhyCFBEPnLGkj0hARIgARIgARIgARIgARIgARIgARIgARIgARIggagToIgcdaSskARIgARIgARIgARIgARIgARIgARIgARIgARIgASOHAIUkY+csWRPSIAESIAESIAESIAESIAESIAESIAESIAESIAESCDqBCgiRx0pKyQBEiABEiABEiABEiABEiABEiABEiABEiABEiCBI4cAReQjZyzZExIgARIgARIgARIgARIgARIgARIgARIgARIgARKIOgGKyFFHygpJgARIgARIgARIgARIgARIgARIgARIgARIgARI4MghQBH5yBlL9oQESIAESIAESIAESIAESIAESIAESIAESIAESIAEok6AInLUkbJCEiABEiABEiABEiABEiABEiABEiABEiABEiABEjhyCFBEPnLGkj0hARIgARIgARIgARIgARIgARIgARIgARIgARIggagToIgcdaSskARIgARIgARIgARIgARIgARIgARIgARIgARIgASOHAIUkY+csWRPSIAESIAESIAESIAESIAESIAESIAESIAESIAESCDqBCgiRx0pKyQBEiABEiABEiABEiABEiABEiABEiABEiABEiCBI4cAReQjZyzZExIgARIgARIgARIgARIgARIgARIgARIgARIgARKIOgGKyFFHygpJgARIgARIgARIgARIgARIgARIgARIgARIgARI4MghQBH5yBlL9oQESIAESIAESIAESIAESIAESIAESIAESIAESIAEok6AInLUkbJCEiABEiABEiABEiABEiABEiABEiABEiABEiABEjhyCBiPnK6wJyRAAiRweBDYtSsDu/fsQXr6ZuQeygUcdixavFQ7Hso9JOmb4HDo0KNHdyQnJcFkMqJv3z7Q6XRISU1G9+7d0KpVK7Rr1+7w6DCtJAESIAESIAESIAESIAESIAESIAESOKwJUEQ+rIePxpMACRwuBNavX49pX3+HJUuXY/OmzbA7IKKwHjqHQwRju5w7UGaxip5sg9Eoj2a5t1HyodwOk1mPZctFZIYO5eXlmpis+t21axec1v80XHLpRTjhhBMOFxS0kwRIgARIgARIgARIgARIgARIgARI4DAjQBH5MBswmksCJHB4EMjNzcXSpcswc9Ys2X9HQV4hHNDDLuqxEokddruIx5Ki1yk1WTqlF7FYB6tV5xSVJbdO/qfuqTImKaNTeSVNlVPHjRs3yb4F773/ARqlpmDEsGEYPmIY+vbri9TU1MMDFK0kARIgARIgARIgARIgARIgARIgARJo8AQoIjf4IaKBJEAChxuBSRMm4v33P0ZufoHShjUh2KA3ifgrlyIEG2TX6QyaGGww6LV0cUaWcBZyX4nG5arH4pFsMIlwrNfy25XgbFeiskG8l+2w2sRrGeLBLPXrpI5D+YX45tvvMW3aN0hKSsQtt9yEsfeNVRVxIwESIAESIAESIAESIAESIAESIAESIIEaEeDCejXCx8IkQAIk4CHw5dQv0KdPH7w26Q0UFhVrHsdGvVHEXwP0EuNYL0JwudUKW7lNK2TQi5CshGDlYCyb0zNZicYGEZDNIjgbYDAaJPSFyqDyyiNbhb4QYVmFwLDLXu4od4rQUrcSmqUQcvPyMUFsGHjaIEz78iut7vr8T9amTViXni6xnl37NhzILYqqSbaMjbBu3ql8t303RxEs6zYCVt/koFeS/9BtN6Dkt21Bs0TjhrK3fF90GUTDLtZBAiRAAiRAAiRAAiRAAiRAAiRAAoEI0BM5EBWmkQAJkEAYBBbNn4eH7r0Hu/cfRLmIvUr8dWjKsDP0hHIyNijhV050Bo8HsvI8dqjgyKINK7FYiciqmM7ojH2sTCi3iVuyiMhKIDYY1K7XvJUdZpPIz3YRpMvFc1l2EZMNuhjotDbU+0GHtnjfA/c/hAkTXsekSa+i/4ABqsq63USUnf76q1hQ4hTOvRs3tDkLE56/Go1cKrr3zXDOpY2C51+FTjRZx6OvwNy9mad02T8oHi/3nn4bpk7xnvQqznSxUo/VUkWOGt5S9j76KsyjHkTCRd1qWBmLkwAJkAAJkAAJkAAJkAAJkAAJkEDtE6Ancu0zZgskQAJHKIF1q1dj9PkjMPri85G5ew+MOqMIubJYnhKC5VgucY81jbhioTzlQWw2m50eygajFutYskg+p3isQl2oaxWyQpUrl115IBuljBZDWa7KJdaFSlaitFqUzy6ezSoEhkEn4TJUPSIyq3aUR7LKpxfROltsu/KyMbj84kuxft1aSa3bLbWJxz+4ZVqKu/HyzN8xZe5u93VNTgytnKWLXnm/ktex4iB4GtSma9LwbGpQgGgMCZAACZAACZAACZAACZAACZBAgyJAT+QGNRw0hgRI4HAh8OtPP+LeO29DUWGhU+QVAdlqs6FcxGPliWwRT1YlJKtzk0mJwCL8Ki1VFE2rRYRfh/MdnhJ8y+0S4kLKKo9jpUCr83JRkGNizE4vY/FGVnXpNOFZQliIc7JWr+axLNGTRTw2G81aqAzRnOW+UqLVon16GE1GuVblDVi+bIWIyaPw3gcfoP/AwXWOusPIx/HMqOPhKNyMR//1EvaK3bu2b8RL3z8n53b0uuRx3HRGB82ufxZ8hBemrYbd0BnPPDIIkx+ZiD1og0cnjUPXVI8o7eqEPUeYdO4E++atKHh/PpLu9PSvUm7xBC75/g2UfbPVWbx5VyQ/cv1nz7cAACAASURBVBf0zRNc1fkcy3ctRtF/f4R9S7aWbjh1BJJuuxxQwrTyKp4wDqa+58Iy5zPYtzo9rs3X3ImE4X00Id+nshAugrZnLEL+c2NhGvww4s44TqvJtnUqCp5bjOSXX4ahtdPTumT6E7BuG4iUsUNRMvdjlH6wtKJVeckxdCSSb7zAaVdVHGqhXyF0nVlIgARIgARIgARIgARIgARIgAQaKAF6IjfQgaFZJEACDZfA+29Pxs1XXYGCggItbIVOFs2zi0hr1cJO6GC1OhAbE4u4mDgtTIUSdHUSZ0IJv0rfNcfGQYIeSz6beBGL0CsL6EFEZYPRJOdGEZ3lqIW3kDIiKqvYxzA6BWmDeDWbxDNZ1GYRm+0wi0BtlHqVF7NOjiKlSsgLicMs9ihPZovVLlXLudxxSB4Vq/n6K0fj6ymf1Tngfbt2Yf/+/RIbeR0KlHuwbN1O7IZeLe3Iy7di7ldzJF1uiIA579tFKMvLg65lZ8TnbdQEZ509A+v2FjoLBvivaeBoxN/TG+WLP4Z1a3GAHCrJgoJX79YE5NjbxiLx2Tuhi09HvixC6MgNXMS6/U/oEo9H4hMPIv7/hqJ86QwUTFnjzmzPzUbpfz6Gru1IJL30IMwXtIbls3+jZMV+d55wToK2p0uALtmGsl9WuWM/l0yfKR7pBShb7hTEdY79KJ26G4b27WD7Z4YmIMfceCsSn3sQcTf3l2njCulRPYdo9yscBsxLAiRAAiRAAiRAAiRAAiRAAiTQsAhQRG5Y40FrSIAEGjiBe++4Fc8+/rAItiLXKhdX8fbVyeJ5DvfidwbxGFaisMRDVmEmRNAtl4X01G6XUBQxsTFaiAmbhKFwCsUiMKugyOq/UpdewlGoRfMM4rZsEE9jnd6hib/KQ9kgQrJKVx7PKuSFXtpV3spKQDZK2ArldazOtVAXUpdUpnmc2sVOY0yMZqsSux3iQvvUQw/ikbtvr1PaRWs+wwMPPIDxk39CoYjF5aa+uODk1hh46TmaHfrieVh3QEJ0HNqAeTlOj95zRvZDk05n4brhgzFoxE04u0tiUJsdohub+9wASKiIwudf16j6Zy7fuxTlEtEj7oFXEDuoF4zH9kHqc88LExuK58oCfAG22CF3I+m+G2Hs0k3qvwbmS5JgW7nWLeSKhgu9tJskHr6Gtt0Qf9mjcIhTs31fZCJyVe3FDOkNR/ZfErNZpoB9J2yrxGBpq+zHBVp/7QVbNbtiTmwPhyVP6425s/SzYzfEDLkRSTecpc2JUDhEu18B0DKJBEiABEiABEiABEiABEiABEjgMCHAcBaHyUDRTBIggfolcOjQIVx63jlIX7dOE+GUNWqRO7M5VvNC1q41j18RdMWLWPx/UW6RkBYi5hpE2DWLiGuXkA168UguLbNoHsZK7RNtWERjETXj47SYxirmsVpET4W00In7sFE8j82yiJ7yQFYitEHEYpNZBGQp7JD27Q6bdt+hFtaTdlQoCxVPWdVnVycSysJms2pt6EXctpeXybmI1eL1/MO307B39y68+fHnSEltVOuAHfo0nNrnGOze9Bcy8ywwWJfjk1nn4t6zT8cpsT9jZWk5Fvy5Da3jFoukK6aLyHyGiMYOXRKGXnkThlZroSyGJ966yU/egPyxHyPvkzVIvibFPV6quKPwH62+GK/F9xz61ogZaYRl0TroLjymUiv2nK0omz8TZXO3ACUlQJGMTUvlDe7ZjMc19VzImVqcL9KtqvZMx/YT8XgVyvdJX60LRL1ujaTHh6HgsY9hE83alvmnvHRoAaMKbWEfJIL6bBQ8LKE6uvRG7EXnw9yjvWZWqByi2a9IebAcCZAACZAACZAACZAACZAACZBA/RNQ7m/cSIAESIAEqiCwWhbQG9i/P/5avRalEiPCtVtEsDWJGKvEZKPJIEKvAbHiaWyUcBQqhrEWlkJEZBWywlJaBuV9XFxUhHIRdSUosoi7FtF4ReAVcVjd02IhS4gLkxKKpS7lmewQQVkdRWuWXR7ZIgCreMkWiZMs0SykjHORPYPOITGXJTay2KEUY0tJKWxlZc62lKQtIrNddiUyW0XMdjjEI1m8pVctW4TrLjkPG9euroJAdG51PO923HnnnXjhzbcxso1zpbs189ehGE1xwehuWiObfv4U//naacuxZw5BI6Wyh7npmw5G7DWtUT7rdVjW7w2ttElCjATY7AcWI/+eF0VELkbcmGuQ9MRDMPQOkDFKSdW1p0/qpHk5l61PR9my+dB3Gijez+KdLO2Xrd8Iy/I1kjbEuZBgTHukvvEe4h+6QRT5VSh++VnkvfSjNpeCmhuEQ9D8vEECJEACJEACJEACJEACJEACJHBUEKCIfFQMMztJAiQQKYFc8UC+5bprkLcvC82SY9EiJRYtU2Pl3IRmjZKkWiXsqlATIooqz2ARaDW5V4nHsithWQnB5RKiQnkYK8FZeRM7xEtYnZeLEuwQb2FLcRnsIiCrvVwW3hPdV8RkEahVrGVLmdTpFJO1BfocEsbCECt1iOex1KN25dKs09yaJU6yVr9driUUhhRQcZXLNeFY6pD6xHUaZaod5agstm9O34DHxt6BPOlrbW5FeQckbrQFhfs2Y8t+FaVZNhWDQrZ2/Uaimdhpz8sQL2UliZpw3lldtXsqRvLGVQsxZ9lGlKhbIWxxwx7QwloUvfIfH9FU3+hYLYawdacnZrKKI1z2bQGM3Tv6eC2rZqzrftE8extPfAgxp/YRwVZE3PwQDAghi07iWftv1bXn0KUiZkRzlP3vQ1h+ssm5KNrifR07RtI+nATbAvFMH3qCVz/MMPccjOSnP5Z40V1h3/i7FgojXA7+dvKaBEiABEiABEiABEiABEiABEjg6CJAEfnoGm/2lgRIIEwCoy88F5mZGZpArJOYww6JU+yQkBQx4m1skPAV7tjIIhA7F7iTNJHwVFxi9YC1i0CsrrV4x0rkFQFXJ6KvJhyLWKxEZ4eouUrsLRe3YpVf3dMUXpvEB5Z7SgRWXsVWCY/h9Fi2orRUwipIWRXuQoWnkDOxyyjCsYS/MMVo9hmVN7QI0WrBPc2bWa5VfnVuE3tFXhbLRPyW9K0iJN97w5Vh0gkv+775siDh9bfgrgdfw+YyJbYDgy84A3GCRZfYGRf3cy36JtJ82wtwQlPnn6jibTMw/s338d9/j8evmyQAcQibEluTHrmqUk59k17QtZeYyc89Auvm3RLeYjcK3h+nCc1xZ3evnL95RxkvWThPwmzYD8midT+/CPtWZW+lrGEn2DasgmXdGljWrtB267qNMITQXsxJJ2lCuArz4QrLEXPyEGnfGUc65vjWmi32vfNR/NN8CX2xX7O9fHeO28ZwObgL8oQESIAESIAESIAESIAESIAESOCoJMCYyEflsLPTJEACoRB4+qHbxUt3PUzi/WqW8BPFJRIKQom8qrCIsDoJWhwfHw9TrAixookqAVgJsirEhQpnYZUQFSqkhVVCT0hxzctYFEnJI17CUotZvJSVJ7NU5dwk3ITou7JVpCvvZuV6LLGOHVqoCnlkiwCt1xbMk+AWIr6qhfTKrBJjWQqKPK3ZpcJnJCUkwCLtl5WVaPm0Bf7E+1iLz2w2o6S4WGIuq0X7lAXSotj017KFeOzu2/Di5Pec9tTif2NbdsYlV16H4T1buFs59YJL8J+ln2nXg2VBPSUuqy0mJc15Iv9t2USYBNhET620GVqehZgxc1E2dbczvIPKIV67KU8+j4I3n0HRuCe0MkqMTXj0FRhUHGHxetayxTu9hE3HDZfwEEtQPPEFLR0tJLbwFZ1QOtd56fqvriK/+zqAPa576qhvrCJMzECx7K5N2dHonYerbc+QpsJXzIS+21nQK5OlAkPLUyTMxVfSz1NhaOZMAyywfPm57K4WjIi//xnl5C1beBxcNQTi7LrHIwmQAAmQAAmQAAmQAAmQAAmQwJFLoOIrepUd9M7jOvc/Ot3F5Ou51OS9q3T/a1eaOgbbnQqKU0nxP1fCtyqn0tW5OgbaXXm6FxcXPy55uJEACZBAyAS++Hgy3prwJPbniIewRUJESKzh7AIRZVXoiIpNPdySEhMQHxcvHr5mEY7FC1k8fW0iGmtRLeRRpRawU3GI1aPQZFQew1KfxEF2eRFrkSgkrIUKeWGRBffELxlGg1nE5xiogA9KbNbiI8u5WrBPxU1W4rCq0yxicLK0X2qR+McSFqNMPJWVh7TyYlaCtjHGhILCAucDU8Rmze/YYERsjBKRi0RElpjMEpdZgkggBlbo5doqBj076d8YddW10mLdbv/Mfh1PffKXCNtt8fy749AuRhF2bnaxt0SEzwSPs7LrVsRHh0UEYxkKvQjunlENUp3Kq9RXYV4nWzTb0+oSq80JAU0Pi0PAGphIAiRAAiRAAiRAAiRAAiRAAkc3AXEwU55HG2RXX+WVCKCOgXZtHfmKPK5z/zKu8uoYbFdfY1331LlrV2muc9dRkrS86qjS1OZ/9E7TMvj/h57I/kR4TQIkcNQTmDNrOt6Z9KyIwmbRY8V7V0JY6EUA1uutEotYhYZQ0q48b1XoCHO85DOJwBsjR50seGdFYWG+iMLiF6w3ifhs1sJRKJdfm6SVqwXulDeziMZ2EYJF79Ue5TGxZi1OskqzO6zivSyirl0tumfX4gDrlbuyW1OVWMpyWVaiR3ZujvxVKhdPYrFJEsvEc9muVtuTth2Spv56xCjhU3k/i+0qr8Wi+iThL+R/OlnUT8VnFulaC9Ohk3yP33Mn2rVvj74DBtfJXPhnwWd4/+eVyNibq7WXdsYVPgKyStTHi4AcZWt0SlQVNGoIqt2CCLDVlos0QzTbq6ausDhE2h+WIwESIAESIAESIAESIAESIAESOKwJUEQ+rIePxpMACUSbwNZN6/H2q48jVjyPC4vtyC8oQZOURPEMNoqHsAGt2x6DlKapyD10EMXFNsTHNkZZqXgGi3BbWlaMUmuxFrfYaBDB2KY8hI0Sl9j5AwqLRXkoOwVkFXpCC2ohAq5Rib1WHWIlnwqFYRaROtakR4wIvWphPhWCQnk2K29jtUBeuYjF6twmZVVsYyUu2+02Tay2iUBt0VkkxIUsxidhLcSJGsWlhXKqF0FbhGXlHS3ncXFx8k5UXnaKuK1Cb0j4ZfGzFU9bnYjXEqbj/luuwX++/AFdTzgx2ogr1Xfo76UiIBdq6YY2Z+HRa7pVysMEEiABEiABEiABEiABEiABEiABEiCB+iNAEbn+2LNlEiCBBkjgo3cnSBzhYsTEmSVMhE0EVvGCFUFY/o+E2DhccOEFGH7+OThw4AD27t0v4SSa4vlnx6OwrBQlEk5CLZAXI+EiDOJxXCrxiJNS4kSETtE8j7V6RcBVi9spUVctmKd8mpVorERqk6SbzXEiIItns0GFsdBrIrKKdmyXBfnUInwWCZVhE7vKSss0j2LlQ+wKkWEXUVn51apwFwVy3yr5iy0OlEgs5GLZbaIoW5TXsWRTYTFUnGWThNIwS+ekeyIga/+VdKCoIB+Tnnsc/5n2c62PUpeLnsUT/fYjtmlLtG2WWuvtsQESIAESIAESIAESIAESIAESIAESIIHwCFBEDo8Xc5MACRzBBDanr8PWzRs0j11RgUXQVYvXiYCsPITNRsTZDejUrSs6dO2O1uLpG7duE7oedzxapSWjvCQHcRJCQrRa8fAVAddWho4djkHP7t2QmpwkYTBENBZxV4WlKC0qkvjFpeJVbBNv5TJNwFWicqyI1ElJjaQ9k+wiHUtk99jYWM0DWgnPyuXYruJYlNtQmJePQ4cOwVYmdYhgbZU0JQxLLAsRs0tRVCy7xFguKrUgr7gEMRKmoljcja3iCW0Tobu4VARyaVO1Lk7X4vWsR7yI16Iryy5Cs3gp/7l0EVYsmo8+tRzWIja1KTrJzo0ESIAESIAESIAESIAESIAESIAESKBhEqCI3DDHhVaRAAnUA4Epn30AvXgR6yQ+sIoVbI6xwyhCq1qZToWViDMbJPSEAbHx8cg/UCCL2InIXFaIW8ZciM3rN2LuH3OxZ18+EpLjEZeYis7dj0fTJilolJyMeFnkLq1xIxWCFyUFBZq3cKmlRLyLy8XTWeqVhfQS4hOlzXgRl8UVWNq0a17NsZqQnCAxgZWQLJbBIYvhWcXreX9WFg6JR3SpeB0rL2KriNR2zQO6TEJxFKNAxOp82fftz8HBnHzklpSiTIW7kLjLKmazFs6iQpiWopp4HGtWHtJyLu0rr2bljTxl5oJ6GA02SQIkQAIkQAIkQAIkQAIkQAIkQAIk0FAIUERuKCNBO0iABOqVwI/ffoVcWaTOHBsj+m2seAzLInkSCkJ56aoYwuIYLJ7JJhFYlVdyLJJFGLbLdcHWzeJFG49TzjsbFw87C1O++AIxSfHIKylAcpNGSEhKQnxcLFITEtCiRRM0ionRFtYrExHYJsqt0nINRgl/YYyVc4PmaZwrXsYWq0VCV1g0r+Wi/AJYk8vQuHFTicfcBCmJ8RJD2YpWzZtj/969YvchLVyGClMhhouXs1VCclhQUFyI/YdyER+/R1Th3Sg/5EBxuRUlEgpZZOQK3s6jFINZhGiTXhbYE1HboZeOS4VbN67Hj1P/hwvGXF2v48PGSYAESIAESIAESIAESIAESIAESIAE6o8AReT6Y8+WSYAEGhCB9//9Bjp17yICcYwIqRIWwgLx/JXwE0o9Vr7JSlhV7sEi9BpEYE0SITknPx9JItgmi2dyUXEu2rVtj3/deTPmzp+D/XmxsJvMWjiM8rIyGEREThYxWeXVi4exikrhkHpVeza5sFodiBNPZJOUKRHPYuWFXCQicEFuHrb/vQ3bd2dgu4i8zVukoUePHhJnORlJCVJXs2ZIlKNR7CwXD+NYacMiYS2USJ2Tdwhx2ftEENbDKm1BvKxLpd4DEuJCrrRdDUGiKOWpcbKsnhKxJRyGREuGXdpSoTdUvg9eH08RWYHiRgIkQAIkQAIkQAIkQAIkQAIkQAJHKQGKyEfpwLPbJEACHgJvThyP3Xsy0aVXdxF1TTAb47TF6kwmEX8ltoNexFW9xAw2iRcyRIQ1SKwHS6kVtrxiEYVjRRDWIbVZExTIYnSNmzbFeecMx9adO7B5x07s3ncAySmpaCx7YkysFhvZoEJkSB0Oqc8hR5OEyoiV0BiqLaOIt0YRgnUiCsdLPOTkxGSkpKZi/57dyDmUg3xpY+f2rShp3BhxEkM5RhbkUwJyUkKipgor0dssi+epY0yxWYTpeAmREYNE8Y6OzTMjJVnCYuzPFaFYRHJRiFPj5F6sCMgqRUJrlMtifNJFbXOIV7Ja+C9b2Lw38UXcdt9jHmg8IwESIAESIAESIAESIAESIAESIAESOGoIUEQ+aoaaHSUBEghEIFcWp/v0w/+IeCquwSLgGkQ41etEUDXIuYi7RiUeKyFZpauF8ySMhPLO1VyJ5cwkAq1NvJFjGzWGUWIeH9qXjWYtW6J71y44kHMImXv2wiaev0kS0zhO8saIfmyQdhxSr84o9SmXZKmn3CKxikvKJNxEIfIkZnJOYQEKZNG8/PxSFBbkwSAL8KWKENyiWVNNbM7NPYhS8VqOk/AbcbHxKFZxlcVeu8Q2VgvnHcg5gH9270bG3ixs+XsLtmzZhkKJiazaTDbpRSTXiQBu1ryPdeJ9LKW0finRWO0GFRtDOuoQW+USX378Dq648Q4kpzZSvQ9ry9q0CfulPvcfHF08Wndsh2RZuDDkrXQzHrnjJeyVcbrwkcm4pGtS5aJ+eS7tfAjP3/w0toiH9g3PTcaQYwKUcdXiVzZg/a68YRzzt36Dfz3/I9D0HLz72hjEhdFle+4urM+woFOP49zlSvfvwpa9ReKx7muEQ4awcccuSEuo3EDWpnXIS+6Azq3kRUO9bhbsTF+Pv3fth03mQKeTTkLHZr42FezZhEV/rkMhktGz3wAc73dfmR+Ii3+3HGUHsHLFNqT16Ie2qZWZ+OfnNQmQAAmQAAmQAAmQAAmQAAmQQNUE3N/pq87GuyRAAiRwZBJYtmSR5kEcExenicRKKNYrQdUsorGIsioeslqsTsUa1omgarGoUBMOTQQ2JSbALvdN4o2sFuSLS02WdANKJMyFUco3Tk1BaX4hmjVuoYWeMEkYDJOEjjCJl7BDjgYRgQ0icKqF8QpEKN6buReZIvxaxBNYn5SKZh064+9tf2HlggVIMljRLNGM7j26omVac1lszyQew+INbdVJbGZZDFBnR4mEzVAL6uVIHOTtuzKwbccO7NqVKUIw0KZtG+gl314RlS0WJRgrqVhJyTYRzTWdWEIgS8Nuvc0u6cpjWhLkUFxYiD+XLsKQEeeHNxEcRZj++qtYUKKEat9txB0v4IpT2/gmRvHKXlyCPerlgGz7iqNYcQRV6WPDK5S18Rc8PP5LGbsUPDX5DRyX6ByYv+e8iQk/7w9Y2QgR16/wF9eF/0+vvY7Vg+/F29f2CFiuLhLth9bjsfte014C6EwpcFjzgM+Bs+58Bdf0a6GZsHflZ3jkrd+1PichHz9NmyIvDCbJC4PGbhODcXFn0E4s+HXSI/gy3YrzHukuInIVLw98C/KKBEiABEiABEiABEiABEiABEggCAGKyEHAMJkESODoIPDbjOnSUREaldaoDkrAVV7CKkyECMI6FU9YPHUdKIdBxN/9Bw6gqKBQxGBxBY01i+Brk1ARSSgvLoJVxOaigiJYJI9JRF69CJhmo1FCVZi0sBNKtjUaZGE+8UjWxch9yWOWa4d4LFvKSmGUttq3bY9iseHYPv1hbtEWa7ftxb7cfMSmmnDMcV1Fzy0Xz+ZixMSnIjU5EUnJKYhPSNIWwsuRkBfbt+8Qz+OdyMw+gIISK8zJshhfYhyaN2ssgrdIxjY78g7man1SsqReLaAndomvtThXy1F2ccIW2yVdjjpdBRgRkxf89nP4IrLUntpEKsqUE9lSkk3Iyxd3adl+fe9d9DtpHDrGKEtC3zT2IWTXJXbG8y8+gsy8OHTxF1erKO+qX8JKy2KKVWQM4Va8KV7LZS8NIXNFljVfPYuJP293XunifAp2H/0aPhntk4Q989/Aox+uQ+emCb43Kq5iRENNknAp9bnp45Nx3AlDcNONV8hClDEy5Yrw4/j/w7RPfsOovtcg3rEXH/17Nszdx+DNB89BHCruv/YhzvjgATSS+VcVF+++7VnyX01AVmn8R443GZ6TAAmQAAmQAAmQAAmQAAmQQOQE+P0qcnYsSQIkcAQQmPXbTPHAFc9gJZ4qr2IJCyESsqinehGNVWgLkX5FWTZIuklCQajzRrKQXYzETi5u0xqFO7YhVQRhR2kJsrftRLGIwUrobZTWTERoEZolnnKceDmbRJhWIrGS8nRSl068kHUSI1knYTLE6Rht2jmQGCdicomI1XFSv+RLEW/lpgkmHH9MK3TtkIZ2rVoiSYTnpKQENGqUglTxfE5t1ARxTZujULyP8zdvwpJlS1FUVg5jcgs0T2uKZcuWwVCWJ/GYHWgsi/DlykJ9VpuIuJpntdgi1qpNScXK01p8rLVrUZMlboDzSjFQ/5s/e4bzXoT/bX/O43h2zPE4uHEq7hv/K3T2DGzIKETHtofw+sMTsa04FmMefxwDVdiJ0r/x+iNvaWlXPPMMBnicUbF69qdYPH4x9lhkzFoPwFOP34L2AcI4oGwXvnj3E+yyGHH+HQ9JvTFYN/N/ePeL+SiU8YZEgm7d5SSMHH0d+rf2dMq7fsS0xU333Y/BXZxhPHSOA5j+wWR8tXCHs4Dcv+ref2FYV6c3bfn+9Xj1+QlIz5XY0rGdMfxUJ19X7S6P3D1og0cnjUPXAKEWdCK4nn7LCxjdPh13PvGTq2jgoyMPP05Zg5gTr8PJzXzbClhAmEy653n0eHACzj6uwkNXE3Tvx66TH8bdwzo4Bd5XXkThKcNRNO9zLPzHqYCfdP7duG1UH3doDUjbsz+ZhE/mOFk07XkOHr77cjQP9FIgph1uvu96j0m6BHTt0QqOXc64HMW7NmhhR269enhF/Qk4/8Zr8M2DH2HNrjIJRSKflRC42A/9hSffXYSeZ5+L/X/86mmPZyRAAiRAAiRAAiRAAiRAAiRAAjUiEMI3zhrVz8IkQAIk0GAJrF69WjyLc1GuM0lMZBF25X/GitjCKgayEo4Nsvqc0ht1sgieEpVtNgkFoYmq4qWakoSichvsSmyVvUmr1jj2xJNkcb0WSGncVOIHp6K83LlYnVaJWq5PFq4T91+pQ3ZpQ040r+cEqatZ6zS0bNcSLVS4CvFwzlizEie0boYrLzwPvbt3Q7x4NTeSmMQn9z8NTSXucoJ4QKuwGTqJcay8pwsKxQtaPI3bHXs8rrrhFsTIonz5JUXQi2BtsdpQVlKCUnUtHtU68UAWk52isdig5GRNV60YLSUca+KxJKpwF0r+LpGQFpvXr4l4PNW6hGpLbdrR10PUUYLM3FyJAS1e1+6wEzZ3Wnae03PZWRrYtmiRJiCr6/Ldi/Dkg/9DifTFf3NYSySsx14J4bFLqzdv41d4bco8TUBOSUmR7Fbs3rQcB7w7Lqne9aMsAx+Mn4BdZQpWHj647yGPgKwalPufv/wQfkwvEFF8L15+2Ckgq1s6ibP829x0dereCvdvcIZ0EAF93d5Cd7r3Sc/z78WNA9vAXpLvnRzwPC99BpbIi4erRvcLeN8/UTHZVmZBgS9S5GZbse1gkTt7Xl4WZn76IXa1PA+PPvEIrjqjA/6aPhkfL8quyGPBrIkPiICcifNuvg8P/2s0dOtm4OFxPwUcC3fF7hML0tfvkRcmzgSr5aB408v8V17rFZs+uQ2ayTzMKXYaWy0XEcM/fu4tlLcbg7uu7C+xwV018UgCJEACJEACJEACJEACJEACJFBTAvRErilBlicBEjhsCXzx+f9ksTmLhJdIEC9hJZYq6ZtdugAAIABJREFUT2TlMaw8ciXchIjIehXbQdQobWE9EVKLioo00VhJXTHKIzkpWYRiEQxFEI5v2Rp6FR9ZwlkYxMtYhZmIjY2TRfMssIv4bLOJFGtW7+6ktNIkRcXVqdAZIk4bpS5jfCIc0pbDLov6ycJ6jYwSRMNahBJLMayWUgmJIR7P0lje/v0STkMvoRbMklc8Xq3lUqMeyeLS3KJFKzRr0hwx0o8hgwYgO/NvCQ1gQ9Gh/SI6JyA756AzbIWyQXb1P80YMUhpySp+srJNJauuK89rsUaOioEev377JTr36CUZwt92LpqFn2OWYO6Pc8QiqVtEw65pzoXVRKt3tutVbaA0dbv5qdfgudvPwj+z38NLny6Gvuh3LPrnIpyV5lVYTpVo7V1H5vrNWgYVZ/iiO57A0C4JyNyehxbHKs9nT1lj+3Pw2jOXw57+rXhM/6h5TK/cLrGt4xZjfo4MtsyNW1+ajAGtYrH4g/vx3oID+OmnZRhizNO8aVVNI+95BaNOjsW34x/GD+kl7spTOp2J64YXYruuE87u4ruonDtTqCcims76fBb0bS9FX7EllM0l5AfKK76+7mTR9WHqcSPG3XG6ltbluAexa+k9stCfisfcAuX7VuB/ay0Sc3gyRmuhQnrh2YcKcafw2lU0Ep0rYji7K/Q72bvyc3wjMYvPvf8MzfPYKobp7FmQCCzywXJltsFDzpUW/Jg+fQLmHUr8f/bOA0Cusu76Z+ruzPaW3ispFCMthBIpgiKvBZWiWBBfAbGAICL6qjQpChbsDfhEAUFRQEQBpRm6EkIKJIH03exme5u2853/nZ3N7GTabjaU7LnJndue+rtlZs/85zy49PITUBx+eUh5s5eqIyIgAiIgAiIgAiIgAiIgAiIgAkZAIrKuAxEQgVFL4MX/Ps++xxnB24Hi6krGCVPg9fgopnLmlod2FD5G+vZS2fJRQLUI3nDEVC6zeTB/Yx4vKWdEbx/XqTX3dtGDOAhfRSkilo77fYwetjjezp6QU0YJbSUchdYUWwYlW4Rz3KKJY9xPQZjuF46Q7C8NopK2E9EuRriGKxANB+hpHEdlXSUH6fM75ZrAS0MHlsG2cUDA2to6WmcEGXHcjeceewSl9Es+6sC3oal+M7a4wyin9UXspZdYKUVhtoLGx1znWuK/IxTbbmuay8KPjQHFcQvUtXaawvzCs09akmFN8eanccedO7Me+6nPJQaMSxFwdx7NvnbkcYc4wuO8dxyL8b9d5kT2thegNs5beixw36/Z5TbcfPVFuJlWFB8///M0lhg8nXjqiY4HL2YcgPHue5zyLcX29QkR2iKYf37JZ/DzlGzh+m3YuK7e2RPzHYxjFo1xQJ5w8nH48xV/GUgZd9Xi6NM/haMH9gx/pWfDMtyz2QaPSwixwy8pc87aSbWDDvgZNZwUmjubEn3963fPx+PBhO9zWxsHy+P0Ai1K5ubwoG5bdT8H0PsXxh5zPk7Zb+xAHSbuD+jH/XsHO0IPJN1lpXfzg7j6znV4H0VtE7BdfV5+eUIh3LzLNYmACIiACIiACIiACIiACIiACOw2AYnIu41QBYiACLwVCWx87TWse3klB7ajMEyxtp1WEOY0QTcIFHHgOxsUz6KPvSYCx8K0EGakLgcni4QZQxtjIiqvcYqq3ooqRFqb4S+rQDejfXvamhktHEdXOETp2ERYRi/39tKHOOZYSpgIHaAFRjxmqnMEcRtkj5HI1IKdiGKL+I3HQk4dZpvhp99ykAPjuSiJlVWXo7yuguuMhqWA3BdhG4uLHUHYGbCPgpkN/ud2sd4+tjnciQDLLWY47rgxYxBxIqwT7bb2J/yeHTmZZfIfxeg4Bwek+skl153AVFOUTQ+14y6sW70KWzdtwITJU4d82s2/+Ix3zaMFRw39cOfR79mpYFA5yTelODl1JJo26PjubLjHHIUbv12N//fTX+GpDS2OFYWJyfVfuhanz8lUssVL75zC/bYKFok8feE+KOH5czkiZQTuMTN5/tY7iV2+QMo3tAmBdWcpI7f2+O23I+ZfMqyIZl7ag6Zi++ZgCBO/Z3GmpR/6FBZWcMBGbhmLOL87mTYle4S1Ccifv/o2lC8+E1d+7ICBGuO0W0mf4txl3w3seiQtJSOy7/3Jbc7OFfTL3vpXF3pDa9DIe+nhm67EK3PehXPOOGynl3Nadm2KgAiIgAiIgAiIgAiIgAiIgAjkJ5D2Z2T+DEohAiIgAnsDgU0bNziRwZXlpWhp70JnVzdWrV6D2bMmsXuJKGMbaM9DuwlKhYwCps7LcOM+ehU7vsamsDKit6i6mp7KFLq6OywbijiInkUmR8I9jpjsp0gcYKRmV28IJRSEIxSgYxSUPZxdnoQYbKKzCbim1ros7NdaYEIzReji0hIEKCL7aY/hLaFVBgcti0cpMtMew3yQ4/Q2jvf7NHstHJq5bHDAItpmFNHyooh1uupq6I1chAYOvueU7UQfU0w2LZyeFVZz3KKZaaNhdTrtsLaYsm2v7J+Jy+aLHKfYWL9l07BE5CmLluIdR+yq1ppYmPSv3dFupshlWPf0g/2D33EzbXrkwedxwqyj0PjUowNRwoUEnIZatyFUsRDnXvY9nN2yAl+94DtO/pdfZgTtrs1KqxWYOHcG960ggyDe/YkLcHD/QHZ9XW0IBSsQWbuNx9fD3f1vPLfxQxwMrgwv0L950ETBc+Xz/0FDtBqHHjx/2MJmbPsT+O3KMA779HsTUdODKsm+YawtQndrAznP7h9YL7QZz7fklWoHFeoPmKc0EJyyEAfmiDpOzZQUkKedcD6+ddpOAdnSlE9eAF/8r3hqfQtm7ZcYRbFt3TPONTCrtiS1mF3XqWhPXLgYh04zaxeq2BYxHTbxnte7K4AAv/xxbE12zak9IiACIiACIiACIiACIiACIiACBRKQiFwgKCUTARHYuwisWrGcwi09faigmthKlRSPPPIYgsVLMW/WeHiosJrwVGRCLYVVFyN8TUiNMMI4ZlHAzBy3qF/OVVOnoXXdywjESygC02OZGb1+D9pbO3nch3A4hm7aWYQpAsdYj5lQuOlt3Eeh2OWIyQzrNPsIRj/HKTI7A/VRpPbQ87ikmD/wZ6Sy1e8KWPgnRTKKwHGGTFtai5J2MWrYLDM8JgSzbT622fL5aZNRVOSHm4Iyxw1EPUXkaF9ioD9rt/UhIVpTSKZVBmtmyyhiWzkU0NkiZ0rs4yrTW/TyulUvYdGhh/cfLXzhCHwZkrtLajCB7Wkki3/9+Mt44hfsJbuZPiWF5sZlv8ZZnJOTReMePpPRr6atp0Uvp26vuvsK3PBPRmePm4xZte4BAbquxgTHrl3yWvmp+UsoXB/ovQ/PRtvwows/id9PngJ/ez3q28I4gTYKp05e2G9/EcFv/u88/CbZwJRl99q/4ZofJOwtWspvxAcKFGBTinBWn/rzrTync/H+JbTNGMLkKpmE/ao8ePiuO7F0+ocwwdeBP914jcNiWlo5vXYtZJmKJy7GSZNuwz1Xnw/fOReQfx29utfgqZUefODkxbuI4yZ6WwRy3D0ZJ+zvxwvPPZfwxaZ2PXbuIkyunIOT5/lw2w3XYMalX8KM+Mu47oYH4Z70Lszjuco9+bH4tE9hcUoiV986fOnMy3HUxy/ASbOKU45oVQREQAREQAREQAREQAREQAREYDgE8v1lNpwylUcEREAE3vQE2tvbTSuliNqH0iIvqhmRHKVy+fjjy9DTbSa9FFIpmDrj4PXbV/hpbRGLhBHiQHkRisGMH0YbB9qLMgK4bMpUi3ukKk0rDAq3ZTXVtFdOfE/XGzI7i7Djp9zV242e3h5uRzjYHu0sOCie2WOYKEyFjWVSvGWEs8vDcvwlHKivlOJx/+ylI63Hn0jHfPHecEJMpvhsXhx+1hekeOyi2B0wEZnttQhnL8N0vfR3jjFPlHYcMaaNcrbo4z4Ti8nBGTiPqrHFH5tthU1uCtuJ9YSYaDxs8MHOjnbn+FBfisv7PRDSMppP8Flf/xjq+us1AXnWkuNw5NyE+FfmZKO1CJsVL56L97z70IESTEj98lUf74/GTaSxg4nI5MHbVTPf7uTrqd+EF1dscNYXHHMmzlw6ieuD0zoH0/ZZO8/7/jdx/H4TncPNmzY6AjLorTynwg9X6Vx89asfQWl/P2zgwPedcaLTL3e/jllUMS5RNF/H12TmMZDAVhhJS7vrwVPvOvzxiW7MP/mDGN9f1+AEg7fMqmJAEHaV4H1fOAO1Lc/gmq9ehC9cdBleDByKmUW8DtLCuWvKea2lTMFg4rpwdrGck//vahy/bxnu/sk1uPDCC3H5Nb/AExu7Mkb9drXVJ7L1bcJPr7kG1//gB/gB5x/++AdYtq2Tx/x49/mX4x2TG/HTyy/Cl6/4BZonHIbLv3rKLoJ0oqAMXJwDiRd+l+O0w/EmT9mvVREQAREQAREQAREQAREQAREQgeERSPmLMGsBqWmS6+nLpBht+1Nn25++ndxny2yz/Ybajtkyfd1UmeQxW0+mSV8m0yzo7u6+lOk0iYAIiMAAgeuvvhI3/+LHCIUoxPIp5aEFRMOODtNiMXvmJLz3Pe9AV1sjVry0Gi+trseit81FsKQMRSV1uOHHP0cFbSx6Qt3Y1rANUyYxIpW2Eu1NDVj/zJOYP2sGBWQXNq1fj789+E90UbydPHE8qmhLUUN7inG1NSgt4QB8RZzLKuHmYHhmS2GeGRYZ7AyYZ+Iyd5mQa0/ROKOPLUk83IVISzN9mNsoknkpWPO3+34qlGx/R2s7nnnmWWyi3cTEceOcQcVc3B+hUL6jvQ3PvPAi/vHwQ7TfMJHaxGpmY/lWhZvCcx9tNWImSBNIMW05nKpZr8tmytt+s8tg3o+ecz4+8bkLB1iO5EoXRXmXrwTBwfrlLlUYB7MoLinJY3WwS04GLJvwz/1+5k3XZzMkz7jL6u8xVFEf25De2DC6QxyMsShz+X3dzIsS8BLY8xMF52+dewV6jrsQV5+2YFB9hbIelCnDRvJc+HjeGDy/25O1y6bhnNvdrlwFiIAIiIAIiIAIiIAIiIAIiMAwCASDwSuZjSPZ2yBG/JlvYmnr6bP9OZpMk1xPbifTJvPbMtts0V7JY7aenG1fcj255C4nrS1tn03py9R9ToL0F9lZpBPRtgiIwKgg8PS/n3CEUYvKNdsHH6N4aytKGFkcwqq1m1D99HLsN38a4r5ihCmsWqCwReVSeoWXwqwJrBalXBKgTzGjeR1FlmLuFd/7AU5797tQESzGli0bnOjg+uYd6O6tQoAWF129bg76FUaA0cq0S6YlBaOR6WlMI+OEkGxhwZxcnsRzP+7iewgtK2yO0RbDBOTO7Q0oopgbZwQ19WEWYvHDbkf4nTFjJjZv3uj0zUMzYxpx0D45iq7uHjQ0NjntdPxh2W8Tka0/tuTC6Z+9ryQkYxZLQZvqMrf72F8PrThM1Ab++8zjzLBnRORChUMXo7R30W7ZqkKmIorHRL9bk9XvaMAZC/IjyPObbXIH2fZsB0dof89r9+O8b95FOw4q7Zw+e8zMXUoulPUuGdN27M65SCvK2RypdmUqW/tEQAREQAREQAREQAREQAREQASGR0Ai8vC4KZcIiMBbnIDpplRJnUHjTETto1ewCahVFJJ7mlrx+JMvIGS+wzQT7gpFsWnrDmxvop9uSQ/+ct/fUVVejoqKYkxl1LEJsTZ7GCq8sX47rr/xR0C4F8e981hUVpYnrCRYV4TlWeRzmJYSfWZhQV9kGyDP2mFyroeWE/SesJbR6oJexxYWTZW4LxxBrLsVLtpo9DQ0wsfd/jL6LxcXU3g2v2TWz7BWN9OXMNK5tLSMoncURX0+x/c4RH+IHta5dZtZCljPEwKyh8KwTbYnTiHaEY0dRdnZTW3axGmLRE7YbDgKMqOSNb35CRRVzMD/vPNodKAcBx+3FHPq+v003vxNVwtFQAREQAREQAREQAREQAREQATehAQkIr8JT4qaJAIisOcJbKPlQx9F1z6KtGYfYZMJptWVZYza7UVzZy+eZjRyclq5blNCbKXY+++PnUk91YNpk2vx14f+ZpJsIhnDdG2wOnNUjlPYDVGYbuvqpNtEABEKxi4OkBdhOG+UArLZLLtYhlMrI51dFJPpVOykMVHY8Sk2EZnCcZy2GejuZsQyo5Hpyeyj73KEwja8FMFNc2bZXvofRyJRWl4wQpn/zAs2xlDnMIXrXorQjU1NjERuZjqTu2OMLLbo6USzbcXRjrltu/ooatt2YqZAzaQmMrsS/hbo7hyeJ3KyNi33PAF31Vy89/S5e74i1SACIiACIiACIiACIiACIiACIjAqCEhEHhWnWZ0UARFIJ7B58yYUF/kY7Ruj9TAH0aNISgnYXCVQV8WB7JihsyfkiMVhCrwBWiC0d3ZTpPVi//32xbpX1tEneX9GGlc6RTuxxBSF/YwODod6mJ8WEj098NPWIExBt6Ojm57I5QgE/BSRY9wXo/ZLkZgCstu8MijsutwUhs26giOpuWxQvjiFZUYURzkYH0fE424fo4PdaGlpxQv/fQEvrVmD/Zcsxsx95qG0vROd7R1oaW7Gtq0bMXXqVJbPvJE4unu6sXlbA316wyj1+p2+srsUkvujj1m7EwxtPbGOM9o4To9kE8qTA+uZNO0c4sv6V1ZbSk0iIAIiIAIiIAIiIAIiIAIiIAIiIAKjhIBE5FFyotVNERCBwQRMtrXZom0dGwduOYG2jLotolhbVVKE8qAPZVVV2LBxM6ZOn4wXVrxMoRk4YvES9LS3Y+7cWQgwytjUVac8FuajiBzppBJNKwnzWS4u9qO+oYkuFRx0rKiYSy86ujspYPtRVlEBnyPUUoI2Ow0KxnD5nShkK9NxIzZbC67RiBluPwdxq6tFc1ML5h1wAI74n/fStiKO1RSTV61+BfX19di26VXU1FY7eU2s7qEA3tkbwobNWx3nfifo2qKQbWIdCZHYVmlZYUoyyzNFObk/4bfsJGWGxP6EnOyUoBcREAEREAEREAEREAEREAEREAEREIFRQKBfSRgFPVUXRUAERCCFwMQJk0w2dfaYgOqIqCa9moDKpZsDynlMYe6LwBwjQh20cKACG6Mw++yzz9GOgoPcMZrYTeXZ7DBilJGtNBORza7CPJZL6FNcQxG6u6uLkcgdtJWgIEwRORSNoLWrAyFaU0Q4x6MxBhqHWHwU8UgPt7nOGZFeBgXTooJParefA7UxithfVoYpCxagbvp0WlVE4S0uQh9Hylu/eQOeevYpeDhoW4C+yBZNbFYdYZbfuKOVfs47GBvNLrhM7raWps7cZK9dVpGxYL/NBzmxJJmUdcs3Y45sEoyYJhEQAREQAREQAREQAREQAREQAREYLQQkIo+WM61+ioAIDCIwccoUxMzTYWCiqMr/iQjchMuxz8fB7igq+xlYXBosArVaSq19mDt7Bm0nQhSHO2kV0YMIheYYBdsQBWaOjucIuH4ua2tqMWHCeHgZbdzZ2Ul7i1709IbhLylFmEJzL20uopypODtCsUUAm1CNcE9ijkWc6Gg3I5jdvgBitL3o6upGfcsOvLLhNaylJcfyNatRTwuL2Qv35Wh7ReiiaOwJBhGjuN3DKOZ2einX0w+5h37Jzk9PWFe8f3A8xwva1g0DZ0dCpoDsppic8Gtmc9gmZyYcR2CnoBwsqxigphUREAEREAEREAEREAEREAEREAEREIG9n4DsLPb+c6weioAIZCKQ1I/NC9kijk08tQHtKJKauGq7vBykziYPl17u4GFHeHZEVUYa91IUjjCquIjCbMIz2MU8XgQDQdQFAxhXNwbjxoylkDwO6zfWo5e2EhaFHI0XUZQucSKJI+a3TIHWooBNoDY7CdO24/QzRh/9kbneyUjmro5ObGtoQG8ohJbWdnRQlPb5i9G4fTuCjDz2+PwoCgQYcdyEyuoqVJeXOX3opB/y1oZtTv9shw385zbLCqevLJyT9dUUdOuXeTNzjS2hV7RFIPcft0H1nIH1uE1pna+aREAEREAEREAEREAEREAEREAEREAERgsBRSKPljOtfoqACAwiMH/Bvo547AiofHGibJ0UZvdAwZjCsQ2iZ4HBHkYSO6HCTGeRyh4Kvo7cShuKcg6W5+dAeD6mDRQVobKiEtXVdYwajmFsbR2qOSDfgn324XYIrW0ttLVgRHJ3L8XgCKOKexi47KEQTbGYA9n1mbUFReI4lxbpbFYavT1d+M/zz+KFF5dj85atjGjuhY+2FlMmTUUFI5oDHh/GVtegktYZY+iXbKrva4xSfmnVKrS0daCppQ3NLS0mTzt2x9S7nf45QrijVtvbgOO6nBCvnc3+aGSDY/8dJdnycaKwfMDBSxLrehUBERABERABERABERABERABERABERgVBBSJPCpOszopAiKQTqCiqpKiasw00YHJIm0tGNf8jJ2gXDviCKlMRMHVxOMIRViLHrY0UYq9FqtrdhUuHjfBeeL4SVjX2IhiCrzljEYuKfJR8B1Pf+RibNm6GSUBP8op+LbTXsJNobk50Iya6mr4/d5EvTEPLTRYnydR/o7mJkYgb6fg7cHUydNRW1ULT58bMdbd0htF9ay5cFHw3rJtK8ZXj2X0sAet7S3YsWM7BwWsRsP2Jvoim92GRRebJswW99tZ2NJF7+e4icnMZ32N2+x0m4K5/XNA2NKUZEtijCyFJhEQAREQAREQAREQAREQAREQAREQgdFCQCLyaDnT6qcIiMAgAuXl/b6+TpQtxWSzbqB4a9YWJpKa4GrewDaQnofWD3EKzhadTAUZvfQZ7qMlRG9vL5dMyTxWzIZXX8X2+gZEGGm8cM40BGim7Gek8YQxY7D4kENw3/0PoI3RyS0l7RhH4ThA72Kr18qIRRiBzDI8XkY/m7UFB8CLhhmt3N5F64sy9NDComtrA7pfrUe8J0x7DbaNQ+W1d3Zw7kIL5y30Si4dU41a2lmwM/RBjqG+sZl9sfKcjvYvrXdWGyOq+7if4rlNNqQgMzprzsJJQ5GZQnMiv6UCSsrKEyt6FQEREAEREAEREAEREAEREAEREAERGBUEUmLwRkV/1UkREAERcAjMW7CQy4Ro6qYdRWIgOYqt9Ps10TVO8TfKJ2SfbXksEpmD3JkpMsXZEK0pfCYwW0QyB8izcjo54N1Nv7kl4Tcc6sF+C+ehmNHFHgq0AZ8XByyYh4njxmHD+tfQ2tqGYvom29Tb24MQ05sgbWXH+6JcUMSmANxD64qWxiZaXIRRZJHQPVHU+EswsbwW5aCFRmcIFVxOrKihr7IHpRxYb/o02lyUlWHc+InwFwfRsKOF7aY1R79o7HZ52VqK5SaMs/441y0K2YlAZv1RhlObZbIJypbC8UK2blsyW1K6njV3ntN2vYiACIiACIiACIiACIiACIiACIiACIwOAopEHh3nWb0UARFIIzBx8hRaPHBAPFNSbeKyz8RbmykQ0zGC2qoJxUzDdYvWtW0edjyM4zFGInNgPYtUDlPkve22O9BYX48xFVWomTUL4xkRbBYVNtCej8LtWNpnHHbIQbj99j/SYqIRzZPbUFYagMtLQZf1uanStnBQvIrKKvRx8D0P6/JStA0x0njf+fMxdtwE9NS3wNPNiGhvMaORe9DB+sIx+iazHy09nYgUg8K1G2U1HMhvayOmzZ2F+INPsGuJwfKsjyYDmxqcsK1gn0wd7heMHcsOZ9tJ1R99zPTMb1MyGnnshMnOtl5EQAREQAREQAREQAREQAREQAREQARGBwGJyKPjPKuXIiACaQQmT5kGG1xv9UvLHb9gt/khc44wEriPsyPsUl8172MbYM9cK5wB9lhOT3cI1TV1KC+vwi9++gtsqW9E/bZtqKZFRhsHsStjOUXFjA32MbLZxGfqsKX0RN5nziwsOnB/PPXUcxgzlvlpC2F+ysEw66RvsZshwOHuLvjoo+xhpLKJ1/P3W4Dq2rFUcN0Uj+sQbWxFrD2EmIvCcGkxutsj6GEEMcqCFJ174S7yI+b2oqiyGtMX7IcwBeIgB9/zsBFsCsVyRjs7LCzSmBXYPpv6PY/NezkxyGDigKVizzmTD/POmD0f4ydNsRyaREAEREAEREAEREAEREAEREAEREAERgkBicij5ESrmyIgArsSOOiQxVi9crljWeFYGzMiOCGw0sKC2mliK07x1uVYPBT7/Jg5bTz8bj9mzJoNn9+Hpx9fRpHZ74jGkRB9janLRuifHDWxluW5aBthPsdeWkrU1lbhsMMOxYaNm/DksmUoKipGeOJERBl5PKayAi7aY/gYmRymiN0boiDM/GUVldYQCtFxeIsZsTymAuHibjQ3NGFDxw40t9Mao6wUsRI/heAgujhY36ZXN+Hdp56BkjET2DZadTBa2QTjOIXnPs4mKFvotQncpnCbiYdZV1i8sR1xBs9z1rhOcdnqdoRlHly89PhdQWqPCIiACIiACIiACIiACIiACIiACIjAXk2A0oQmERABERidBN73odMYakyRl3YTSZHUBFQTb30WvcsIZLN7cHuKOAheBQ7Y/wBMnzyNxykq08aio62D9hEBlARLUV5aTtnVZGcXejgg3raGRlpV+OHm4Houis0sDFUVZZjACOQTTjge4XAYy558Cps5EF8bB8prbOPAeeEQehmN7KJY3d7RhbaOboR6Qxyor4uWzCHaXNA+I9KF1q5mNHHe0LgFm5rr0RHpZr4w3Ix+3tHWjc5wHL6SCgrZFIBNGI+HqRmbd3P/ZAK3qeUJxTyx4ujJJiFTOHZClhNicuq6RWUfuvQ4J41eREAEREAEREAEREAEREAEREAEREAERg8Bicij51yrpyIgAmkEFuy7P8o4CJ0F3drgc4nJQxuJYnh9JdR9g6iumoQ5+yzC2LFTKK4GKP5G6XVchCJ/Mfw+Ln2M9KW4GmLksIm2fbQcRufwAAAgAElEQVSn6PMVY826V2mTwQHtKCS7OEif+SmbNltdUY7pU6bg/R94PzYxIvnRJ/6NZ/7zArY2t6CPgnSEonVbZxeKS0rRwcH6mhp3IEL/ZQtHNkHYU1yE2rFjMXPmDMydOxuzZk5HZRWH12M7rP6N9dsxlnYTtWPq0EprjUgkzDbFEWG8teOM7KKYzIZYMLJJxk4UMiONnW3bQWXZBHXzaHb2MW9SSC6hUD573r6WSJMIiIAIiIAIiIAIiIAIiIAIiIAIiMAoIiA7i1F0stVVERCBXQkc864Tcf99f6KgSqGX/7y0pujzeSge18FE02CwDBFG9kZoOdHHKOFyisAB+hXHGb3sZZRxDwe481Ak9nEQPUqvtL2gkExf4S1N7WhobMeYmlqqtRYFTIsMCtUl9CweV1eFBfPm4qilR+Lee+5DT2+YgnMMra0tmDNjKsqDxejr7UVLRzsmTZgIHyOMqWpTzDXhl+JuEX2OXX5GNY9FSUkJ6pkvxqjp3jhtMJjipJM/iAkTJlCM7qaI7WObGMXMFphG7AjHLMdEYttia519bHYiMtn8lS1MmdsWhW0mF5bKIrQPW/ouJtIkAiIgAiIgAiIgAiIgAiIgAiIgAiIw2ghIRB5tZ1z9FQERGETgmONPxMP/eJB2FbSkKK+keFxDX2I/Zx/CEYqyPVFGJnsRpHDcwsheLwVdP6N+yyqq0dbejhgtKCwKmNouLS5MqjUPZR9C9DVevmINZs+chgB9jh2lluWwaBQzXQUH2jvu6KMQY5Tx44xGfuTRJzBnzkzWGcGMqVNQZNHL3mL6K7vQ2NyKcePHOxHBHkZBx2h/YcJzNz2YW+mJ3NyyA92MkK5vbMZcDqY3ffZc1uem1UYxfFx6LPiYDWBQsTO5KBKbVuyERlvkMQXiuKMim1zMgfVMWHZEZqZjMls3EfnwY+SHnCCoVxEQAREQAREQAREQAREQAREQAREYXQQkIo+u863eioAIpBFYvORIHHLoERRvY/AVlaC6shodFIdtoD1fcRzh5mZnUD2LUy6iOOyht7D5GW/Y8CqtMMopChdR7KVoTFHXV0zrCuYzKdlFwXg1LS02b6vHrBkTaI1BcdZG3eMge8W0pKiuKoeH3sdHLlmM6dNn4MmnnsWK5SvR3trKgfbimDFjOsVrN7a3dqCSlhvu5g5GOzOSmUHJHbS+2NHQgBDb0dzRiU7WvWFzA1auXY9Djn0XPObBzPaauE0JmXbIJgsn2mWdcbbNq4J9schpF/eZ+O0MoGcpecjtdnrBvTYgH1BaWob9DjqU6TSJgAiIgAiIgAiIgAiIgAiIgAiIgAiMNgISkUfbGVd/RUAEBhEopUD7rpPeh7vu+CPc1F43b2ugzuujAFtMIRWorK5FS/MORiT30OrCg+IiL8VfLyOIY4kB9qi1hqK0fKCFhTtGoZZRvmYBYSYQ25vbsHzlaowfW4Wy8lJTlik4MxqZLQgW0xKDg/pNmzieA/vRnmLpElRUlOKZZ55HKPIk1m/cirqaKkyaMgkd3WFsotdxWTBIIdvLQf+8jE5uQVd3JxrbO9Hc2o31r21G4/ZW1NSNcfpnvsYxzhG2z0+fZgssNqnYIorNG7mP9hn0wKCAbAMHmnBsXshMw9nSmLjsZLLSuPP9H/kUrTyqnLL1IgIiIAIiIAIiIAIiIAIiIAIiIAIiMLoISEQeXedbvRUBEchA4N3vPQkP/P1h7KBthBk6+Px+9NIqwmwfeinU9lEwjkSjqKmuovhbjCYKuFF6JJu4atG7dryI0cU2xTnIHhVmHqJFBCOKV614BfNmzcDs2bTBKOLgfaZMUwj2FxU51hUBRhePra1irX045MBFHBBvLJ588hk8++x/MHbcGNpZMBI4vsmx0CgvCTIquRQtO3Y4dYUiIdQ3NHKAvs1Y++pmNNMD+fbf3eaI3Y2Njdha34ieznZE+7oQp02Gz5MQkE0o7qOA7eLAfyYUm82Fy14YmcwGct1NAZr+zgzHtnaNHTcBnzjnC06dehEBERABERABERABERABERABERABERh9BCQij75zrh6LgAhkIPDBUz6M3/z6/yFOv+JQKELxlBPFYCqr6Ozqol9yOUrpmdzW0UEf4g5GJPt4JAoXo5N99C/2UBsG8/oowNoAejYIXyQawjZGNq9YsQrVjCo2Udg8h53CGU1cVBRAcSBMQTrmRBnTHhkTx9XgsMMOwQv/XY6Nr21AK32YAyX0a2bE9PjxNpBeMTrbOli3y/FkrmeE8qYNG9HSTqHYW4T7/3IPnlv2BKK0umhjO4tYZoxicJSFuxlhTNcOREIUxakXu90hRin74aag7PVa5LGHbYkyCtuN3nAfI6QZbc245Y9LQLarQZMIiIAIiIAIiIAIiIAIiIAIiIAIjFoCEpFH7alXx0VABFIJHHHkYtx1118Y5duSGCCPUbkRRiOHQ70Uib2oqKqmZ3IAUXoUt9NCom76JEYh91GINdGY+isFV6+P9hCmPlNM7jPRlsqy6dAbN9fj1fWbUVlZxQH8GLFs7hGexAB8gUCAwnUUkQjtLpg+zno9FJhdffNRV1uJV199DZs4W4zwqjWrEGQ0soe+GxYl3EsvZPNQDoXC8BTRfoMD8XnYph62ryQYwJRxdRSdA6isq0WMDXvl5bW0vGhENB5FW2+3NZRSdCRhpxHgIH7RsOMNXeSPoSMURYBi8v4L5+M9J5+aikrrIiACIiACIiACIiACIiACIiACIiACo4yARORRdsLVXREQgewEzjrrDFx52bXwUzSORMJOwigF3qqKClQwErizs4MD6PUg1NPrCL1mZ+Hj4Hg2Lp35DLuciGSL6qWw7OtDV1vYObZlaz3WrX8NdXU1HERvMu0mLBjZIoPjtKmgvzIF3FJzk6AAHQmHGPnsRmU5BetoJfqi42FBwt2MHu4J9ziRyWHaZJjtRB/F6mg4SrHa50Qah8NdLJuWFRSMffR1NqG5h0Jza3s3xk6aiEMPPQzd3d147oUX0LJ2rdM/P8XnEIXyLvY3zvTmoxylKB1h2WXBcnzpa5dnB6YjIiACIiACIiACIiACIiACIiACIiACo4KARORRcZrVSREQgUIILNx3PhbMn4M1L61mFHKPBRRTUPYhEAgyErkc2xob0NbaAq+fg+NRPLagYze9g8eOHcsB+CoRCkcYuRxyPIZ9FIfjY8aguXE7B8PzYO26DRhDEbmsLIjq6nJHGHb8k02BpiDsYRov85gfcymjjU3Y7aB1hg2kN475bPC+enoh+31F6OoJo5OzhTTzMD2M2RJGPrsYxWyD4nnpzzxu0iQKzvR45jGzy9jKaOi2lg6MoSXGxAkTsYoiss8foMhtPhxw0pgonpxM5D78sCVYfMQRyV1aioAIiIAIiIAIiIAIiIAIiIAIiIAIjFICEpFH6YlXt0VABDIT+OjHT8cVjL7t7uqjIBxGHQe6CwRL0NXd41hXNDfvYJRwOSOVo7SbqEEpI5TbKfZu377d7JMd32HzHrYI5jB9iUM9PYxiLqU9RYSD322iGF3BiGOXs49SNKOG+7htNhY2WxSz1/FUdmKVKWKXUMAu5iB8O+iNbNHQ/uJyNO5ohT/Qix5GREdD9hjvQ3dnF6OjKQjbwH2c65t2YOqUydixvZliN602GB1tYnL9lnraYbhRR3/nVno9xylis2ZHPzYJ2aw7ovTgKC8twwVf/VpmSNorAiIgAiIgAiIgAiIgAiIgAiIgAiIwqghIRB5Vp1udFQERyEdg2oxpuOCSC/D1iy51/CW8HKxuwoRJ9DReyyjkNnRQrJ23zz4YN24so4VD9BhuoABLb2QW3Ed7ikjUBqSz6N8I/BxgL0SBtpfroKj86sbNqKgs42B6AXgp5AYoDpuHRZwD2/XROzlMa4qurl7H6zjGyOJAcQDuCjfaaaPhotA8dep0eikXIcRR8SxKmu4Tjh1GqKeLfs2MfDaLC4tEpjezWWO0NLc4g/Ft27KVwjH3MdKYhx2ReJ9Zcxm8TKGbfeju6XRsOhooPFvEs4vpfnfbbZi3cN98uHRcBERABERABERABERABERABERABERgFBCQiDwKTrK6KAIiMDQC8/ddgM+efx5++cNfoI+CrTvuZdRvCM3NzfRA9jHa2M3I40b4/T5G7no4eB4dkSm8erjdS8/k+qYmRgs3UmDe7gxU56JnsZe2GMcesRjbtu9AeflWCshe1FRWUvZ1O+JxiN7FFu3cS0sMt9uLIg7iV1YOLiP0NG6jGDwedRSz2zt6UFzfyAHzSmhV4XdE4g3rXmY7KVRTKI6xLhvszwRs81c2gbu6usoRwG0gQJeLbSnyO6KyK0b7DK8fVYys9rqimD1lIjq6e/GZL16AJUceOTRoSi0CIiACIiACIiACIiACIiACIiACIrDXEpCIvNeeWnVMBERgdwgcffyxWPvyWrz6ymY01NdT4O2iiNyCstJSRgDH4KcQa3bG3SbUuuOM5u3CimdWYMvmLXSicMFN+4gwo3qLfUGMqapy0oaiwEZ6E1fS3qKqLAAfxV4Ti6O0xujpDTGymUKwRRJTcC4rKaV/cik2b9rEiORizN5nDopKKtC3dTtFYA7E5/IyKrkXTfRJDkejbE8xs1I4psDd51hUsByPF02NjZg8eTLaW9spdtOuoj9iOWZeyExvvswxRkl7KYbHaYtx3HtOwgdOO3130CmvCIiACIiACIiACIiACIiACIiACIjAXkZAIvJedkLVHREQgZEj8L+fOxu333In/vyn+7BtW73jdxwsCTAC2PyL446dBfxurFq5GqtXr2Z0cTFqq+tQysje4tIgLS360EKLiPLSAErpbbxh/XrMmzsLDY07mK4SxcUcRC8YoZALtFOkDtFD2fyKA0E/B73zOVYTcQq88xbMxeQpU9ATdWFTww5EKRLTOcMZgO+pVSswjd7Hoc5OishuuOhzEWFUcpxLt48D9lFsNvG7ktHITazXhGYTruPcX8pQZ7PViMc5UF9zE/Y94G248OvfGDmAKkkEREAEREAEREAEREAEREAEREAERGCvICARea84jeqECIjAniLwPx96Dx74+8OMFO5FkFHINoco7CJOMZaC8rInl2FbwzZUV1ajrroaNeVVFGmLGBlcxOheL7ZRtI3RE3ls9Rj6KXfScsKHzVu2YyLtKcpLu52oYYsQ7uzgwHgMDq4oL0MlI5eLGOm8edNGTGEU8aSpU1BZUY2Wrgj9kOMsu4TF9LHerdjaWI/Zs2YjUFOMIIXqxqZGdHYyppgCtnkteylUe2hx0cNBAmvHjkNNTS16GfFswnLLjmaKzTGwhZizz2xceJkE5D11HalcERABERABERABERABERABERABEXgrE5CI/FY+e2q7CIjAHicQCBTjK187H1+58Ovo6umhD3Ix66Tay5Hrmk2EpUfFGAq8pfQorqGQXFlR4UQse+hJbNYUtbW12LG9iXYYvaiuGUNbiW4EfHE8/58XURI4iAPk9SFMH+U4rS/GjqnD5IkTnAjhULgX5bSzqBszlrYWlQjHXFjzysu0y6hHUaAEMR5ftfplZ4C9dg72ZxHIDI5GeWUVXSr8aG1pA2hnQV8NVHJfL9ve0d6JraFtFJU94FB+jKhmtDIjkWfMmIGzv/Q51lu2x3mqAhEQAREQAREQAREQAREQAREQAREQgbceAYnIb71zphaLgAi8zgQsSveW236JH97wM0f89VCkDYcZjcxp8uSJjOaNcoA6H2rrxqA4EEAfBd2+eMwRaE2EtsH4Nm3ahnEUiFspPLtLitDS1oLnXlyD+XNnoNjTh/JAEX2SS1FBEdpPKwxPyONEIPfBy7Td+P1td6GDgnUnxWiPj1HKW7bR/oJRxBSJX9v4Gt5+wCJGPrvR3dnhDO5nlsd9FIsrx4yhrUYYrRzsjxozShjpHI1x8D6m7YvGMX/fhfjqZZdIQHbOpl5EQAREQAREQAREQAREQAREQAREQAQyEaDMoEkEREAERCAfgVLaWFzy9S/h5JPf6wjGxcVBWk4E6W1ciwkUjyuCtLrgtkX52iB15jXMWGS4OHBdaTCAsXU1aGluRoSD4HV09dLfOI6V6zbikX8/g7bOMCqqailAlzKvnwJvEYrLK1DOKGYXReI/3n0PWrvD2NbUju2NzRSFY1i77lVaWvhQUVrJqOQInnr6Sbz62gZ6MZfB6/PSV7kEU6dPd3ybexjpbIPsmWeyh+Kxz7yS3S6c8J4TcNUNV0lAznfydVwEREAEREAEREAEREAEREAEREAERjkBRSKP8gtA3RcBERgagVM/8n5MmjwO99/3kCMKeygSx3q6GZkcp8OFiyKylw7DUUYju2hrwYHuKNbS+Jg+xxXo6uhGNBJCkS+IClpSRBmt3NLcgWeffZGeyrW0spjCCGaWw5Bhl5e2GRxA7/EnH0E9heOuKCOHWX4xBenOjjaKw10oCQYRi/nhdZUyyrgPXbS12PjaRkyYMAEtLR3YvHETgrTZKGKb3H4/rTfCCNA3mQXjo//7KSw97pihdV6pRUAEREAEREAEREAEREAEREAEREAERiUBicij8rSr0yIgArtD4PAjF2P8+HF46B+PYkdDA0JdXQhToJ08faojJHcx8jfSE6LncbEjCkdpb+GmALxjxw6sDa2h/UUEJWUlzsB7nqJaRidH8NDjT2IMI4/9HFCvlpHMZlnx/PPL8Sj39zK/l/u9tM1obmnEa+vW0ye5lP7M/sSAf8UBjB83llHGPjTRLsOipGPhFvgZ0eyziGhGLEfCPgrTcQQYUX3uBZ/DvH0X7A4C5RUBERABERABERABERABERABERABERhFBCQij6KTra6KgAiMHIGZs6dTrC3CHb+9Ha+s3EiRNoxuDl5H3wh0h3so4sYcSwsbXM/r9aLIX2SrmDhlItasWIlAsQ/lVdUc/M4DH48FS0vwxLP/RbAswKhhD15+bjn+8td/IGLmxowkXvPyaqx5aQ3rLObgfeUUoSkUM1LZ7DGKi4oZkdyHnlA3k3rRSCHZ4/FRRPbxWABe1sXYZrz9kINw+idPw7QZ00YOhEoSAREQAREQAREQAREQAREQAREQARHY6wlIRN7rT7E6KAIisKcITJw8Aedfcj5WvbgSv7rxZ2AYMrXaOIpoY9EZ7UWc3sQ28J2LdhaRnl709nTQqoIeyRVl6KPYW8No5rKycseruKGhHtvaW7Hi5fVooHfyQw/9i5HDRWhua8d//vM8I51DqKuqondypeNh7Pd7EYnFEOkNM8o5jioKy23t7RSni9hdFyK+KKoZ2ez1+zB56mR84EPvw4J95+0pFCpXBERABERABERABERABERABERABERgLyYgEXkvPrnqmgiIwOtDYN6+8/Gdn30fTz6+DH+/92+ob9iOuHklx2gl4YlTV445A9n5PImxTMtKGDnMYffWr3+Vg/MV8ZibEcNFCEXCeJ5RymZNEWMk8eZNm7Fx42YKxBXOYH5FtLQIlpRyAL4g3PRaDkUi9Ff2UzKOIkwLDTfFaq/Vx3pKqytQN64OJ73/PTj8yMNeHxCqRQREQAREQAREQAREQAREQAREQAREYK8kIBF5rzyt6pQIiMAbQeDQwxfD5rv+cDfu++O96GX0sNvtQR9F3b7uXmdQPT+tKbwuD8rLq9DS3gYOvQcf99lgeh0dHY4n8muvbcJT//63Y01RWzsGFfRPrqmrRU0NI4vpbxymeNzW2gp3by9tMvy00og6nss+Rj37KT4H6Zd83HtPxPs+/P43AoPqFAEREAEREAEREAEREAEREAEREAER2MsISETey06ouiMCIvDGEziZ1hHHn3AsXl71Ml584SU8+/wLaKVnsoticZRWFwxRpl+xn4KvH92d3XDRB9nn8qGCEcevvbYRGzdscHyPA/Q/9jG5RRm3NTchGg45InJJaRlq62o4sF6R45G8ZuUKJ/r4yHceg4OWHIK58/ehZ3LpGw9CLRABERABERABERABERABERABERABEdgrCNDAM++Umia5nr5M/EbbjDgHz7Y/dZ9tJ/cl1zMtPf3pbJm+bsK35bH9tp5Mk75MplnQ3d19KdNpEgEREIE3jMBr6zdg2eNPYtXyl7BtyzbU1Y1FU0szojGLIgb6YhG8RCuLLkYXT6RXclVFKQfni9DGgoPycYC80vJSFFFUjppNBgfUs+XEqVOw7/77Yd8D9sOMWTPesL6pYhEQAREQAREQAREQAREQAREQAREYzQSCweCV7P9LnGOc+/qXtp4+R1PSJNfT8yTz2zLbzN8zDxyz9eRs6ZPrySV3OWltaftsSl+m7nMSpL8oEjmdiLZFQAREYA8QmDZjKmy2qbGhEe3tnVj7yjqEQhyAj/v+8fcHMWXWTCfSOEIbDK/Xg7qx4zCmro52F27s+/YDOG6fC8FgABMnT0ZNbTVqx9Q55elFBERABERABERABERABERABERABERABPYkAYnIe5KuyhYBERCBDATqxtZRIK7DzNnTB46+lwPgaRIBERABERABERABERABERABERABERCBNyMBs3zQJAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIZCUhEzohFO0VABERABERABERABERABERABERABERABERABERABIyARGRdByIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAlkJSETOikYHREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEJCLrGhABERABERABERABERABERABERABERABERABERABEchKQCJyVjQ6IAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIBFZ14AIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEBWAhKRs6LRAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAYnIugZEQAREQAREQAREQAREQAREQAREQAREQAREQAREQASyEpCInBWNDoiACIiACIiACIiACIiACIiACIiACIiACIiACIiACEhE1jUgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQlYBE5KxodEAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAisq4BERABERABERABERABERABERABERABERABERABERCBrAQkImdFowMiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAISkXUNiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIZCUgETkrGh0QAREQAREQAREQAREQAREQAREQAREQAREQAREQARGQiKxrQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREICsBichZ0eiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiARGRdAyIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAlkJSETOikYHREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEJCLrGhABERABERABERABERABERABERABERABERABERABEchKQCJyVjQ6IAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIBFZ14AIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEBWAhKRs6LRAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAYnIugZEQAREQAREQAREQAREQAREQAREQAREQAREQAREQASyEpCInBWNDoiACIiACIiACIiACIiACIiACIiACIiACIiACIiACEhE1jUgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQlYBE5KxodEAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAisq4BERABERABERABERABERABERABERABERABERABERCBrAQkImdFowMiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAISkXUNiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIZCUgETkrGh0QAREQAREQAREQAREQAREQAREQAREQAREQAREQARGQiKxrQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREICsBichZ0eiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiARGRdAyIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAlkJSETOikYHREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEJCLrGhABERABERABERABERABERABERABERABERABERABEchKQCJyVjQ6IAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIBFZ14AIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEBWAhKRs6LRAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAYnIugZEQAREQAREQAREQAREQAREQAREQAREQAREQAREQASyEpCInBWNDoiACIiACIiACIiACIiACIiACIiACIiACIiACIiACEhE1jUgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQlYBE5KxodEAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAisq4BERABERABERABERABERABERABERABERABERABERCBrAQkImdFowMiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAISkXUNiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIZCUgETkrGh0QAREQAREQAREQAREQAREQAREQAREQAREQAREQARGQiKxrQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREICsBichZ0eiACIiACIiACIiACIiACIiACKHn95AAACAASURBVIiACIiACIiACIiACIiARGRdAyIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAlkJSETOikYHREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEJCLrGhABERABERABERCB3SQQ6upCd3g3C3mTZd8b+/QmQ6zmiMAbQkD39huCXZWKgAiIgAiIwFuegKeAHrhS0iTXcy3t2O7OJm5bGbZMX8+0nUyXukzmH3PppZceyXI0iYAIiECCQLwLr65Zh/rGJjQ1pc/b0NTuQl0VcNO55+D23nk4dn5NZnIs57E7b8M692RMrwtkTpNt7+7kzVbm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bdhJwdYKSTM4R3Ird93JVLu3zFVH7vNRWL9ylW8tz12HpRiZeqykbJNZJfz4x4/CPfMj2CfDr30s3+73I1vtQ98/Em0Zzv059JYOL0e+/mUrtZBnr+Udbvnp9Y5EObnOQ7byi0oq05uibREQAREQgT1IQCLyHoSrokVABERABHaDAH/ieMLZx+Gf19+Gsz9x26CC9j3pfJzUb8sx6AA3Qh1ARyT5pWr60ddn+83Qhnw9nX38FzE7XyIdF4HdIPBWuA92o3t7R9ZhPmf3js6rF4MI9P/Kx76kjbvH4cJzjsnw66VBObTxJiWgZ++b9MSoWSIgAiKwFxBI2lLk6kpqmuR6+tKsI2yy/amz7U/fTu6zZbY53cLC0iXtKmRnQRiaREAERGC0ELCfMG7ZuMkRhv3BCowfPyHnzxYb1q5GvHY6xlUOJ356ZKi+GdowMj1RKSIwfAK6D4bP7vXOOdTn7OvdPtX3ehAIo2HDJrREvJgwZQrK/ck/916PulXHSBLQs3ckaaosERABESicwGiwsyjk00FqmuR6+tJEXptsf+ps+9O3k/tsmW2WiEw4mkRABERABERABERABERABERABERABERABERABN7cBEaDiGwiriYREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERyEhAInJGLNopAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiJgBCQi6zoQAREQAREQAREQAREQAREQAREQAREQAREQAREQARHISkAiclY0OiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiARWdeACIiACIiACIiACIiACIjA/2fvTOCjKLI//ptckIRTghBEbsIVEJFDEAERARfRXeUQ/COsggJGEAQCIipiMAEBlSCoqOAKqMCCXAoiyLVoVNSABJRDrnAkIIEk5CCZf1X31ExPT18zmYSArz+fpLurq9579a1X1T1vaqqJABEgAkSACBAB6JvycAAAIABJREFUIkAEiAAR0CVAQWRdNHSBCBABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQAQoiEw+QASIABEgAkSACBABIkAEiAARIAJEgAgQASJABIgAESACugQoiKyLhi4QASJABIgAESACRIAIEAEiQASIABEgAkSACBABIkAEiAAFkckHiAARIAJEgAgQASJA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IkAEiAARIAJEgAjoEqAgsi4aukAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAhREJh8gAkSACBABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAFdAhRE1kVDF4gAESACRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgILI5ANEgAgQASJABIgAESACRIAIEAEiQASIABEgAkSACBABIqBLgILIumjoAhEgAkSACBABIkAEiAARIAJEgAgQASJABIgAESACRIAIUBCZfIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgQASJABHQJUBBZFw1dIAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAkSACBABCiKTDxABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIgC4BCiLroqELRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgQASJAQWTyASJABIgAESACRIAIEAEiQASIABEgAkSACBABIkAEiAAR0CVAQWRdNHSBCBABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQAQoiEw+QASIwN+awNlDe/HNxo3YuHELkpJTcD4r7/rjYc/CjuUfY0vKBX3bWZ5FI57EpOW/6efx1xWha8Xv+hKt2KxfutRdKbx4HMl7D+GKXW1aHv5M2SP72KYdOJKWqc5A5zcSASu+X9rqWxr74vXIkbXruWMHsDclBSmOvyOpaSXX2haZuduYzGw9hPQsj4HLoy4HDh1Dhka+YqugqE8J3LPOHjqAg6l+GpvtGdi/NwUX8jyZFhsrfwgWvI3u2/7QY1VGcdkj5Or5lbheFA5WZLA8ps9tVln5K58Vu33RJeTqMfdFJpUhAkSACBCBa0Yg6JppJsVEgAgQgWtKIA/fvDMaH3+f7WbF1TLdsPDdQQi1uSWX6hOb/TzWb9iCy1daoWuTm3RtDSgL2K/qXvb5QsahXdh9qQF6tqrmlCHpys93nqsPrNqsLlcaz8/s34DYhM9gt1XES4lvoUE52XkK/9qHF8a+gdOFdtiCK8KenwEsAbqNnIFB7VysvKmTFmtvylNeYwL+4Gvm+8YWlPzV0toX/cFRqz210vxCnQVK1rw+EzuuuA+y9rLReGnWOOe44BddOkJMmenYyMVF94xBzKNt5HufQb67H5uM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9Udp5JVBpms/Ml1/rqbJo9mHRmQBh4EESIAESIAESIAESIAESIAESIAESIAESIAESKBkE7gYjMjSiMtAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAoYEaEQ2xMJEEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABSYBGZM4DEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABUwI0IpuiYQYJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkACNyJwDJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACpgRoRDZFwwwSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEakTkHSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAETAnQiGyKhhkkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAI0InMOkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJmBKgEdkUDTNIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARoROYcIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESMCVAI7IpGmaQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAnQiMw5QAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkYEqARmRTNMwgARIgARIgARIgARIgARIgARIgARIgARIgARIgARKgEZlzgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIwJQAjcimaJhBAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAIzLnAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgCkBGpFN0TCDBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiARmTOARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAVMCNCKbomEGCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAAjcicAyRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAqYEaEQ2RcMMEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABGpE5B0iABEiABEoHAXcaMtwaUcV5eqbmnNGSR4BjVvLGhBKRAAmQAAmQAAmQAAmQ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I0B3FqVvzCgxCZAACZBAERCQRlZpbD2dk4Gc3Fyxy7J0706ULizkDuTyIeE0IBfB/GATfgKVqtRCpSr+89IcqxrbuDSLT9lJgARIgARIgARIgARIgASKkQDdWRQjXDZNAiRAAqWZgDQkVwwpV5pVoOwkQAIkQAIkQAIkQAIkQAIkQAIkQAJFQEC6iWAgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAUMCNCIbYmEiCZAACZAACZAACZAACZAACZAACZAACZAACZAACZCAJEAjMucBCZAACZAACZAACZAACZAACZAACZAACZAACZAACZCAKQEakU3RMIMESIAESIAESIAESIAESIAESIAESIAESIAESIAESIBGZM4BEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABUwI0IpuiYQYJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkACNyJwDJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACpgRoRDZFwwwSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEakTkHSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAETAnQiGyKhhkkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIhREACJEACJEACdgRy3Dk4nZOBnNxcuF1uu+LnNd/ldiE4KAjlg8MR7Ao+r7KwcxIgARIozQRK09pvx5n3BjtCzCcBEiABEiABEiABawLciWzNh7kkQAIkcNETkEaEE1mpyBbHkm5AloMlZZSySpml7AwkQAIkQAL5J1Da1n47DXlvsCPEfBIgARIgARIgARKwJkAjsjUf5pIACZDARU9A7kCGqxRiEDIrspdC0SkyCZAACZxvAqV27bcDx3uDHSHmlwICZ9PSkJ5ZCgSliCRAAiRAAhcUARqRL6jhpDIkQAL5IXB071ZsTEhAgvhsiY/Htr1HkZWfBgpT1p2Gjx99GM/M2+5pRX/upO2C1HHSrq5Mdu753c176lgyTp7J60Ij5Ugy0rLzpmvFl+43SlwQ47Zi7mwsTjhe4kSjQAYEztF1ZtDzhZ2kcp27uVj0PLJjK7YdTPW1rV3vExLixbq/A8lp1uuHr3J+I6pu6vqe3/olpPz5XvvtMFxw9wY7hZlvTkC95oppPTHv+NznuNzJ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pDuhW3IKW8riVrKwHJN9rel0nDwQiUT2cjlfjaX2terMKKfc2pdbnY3qVdDpcmt3QetF8okAESACRIAIEIGSQYCcyCWjnslKIkAESiiBer3eQL0SajuZffcSKJbt2jFDkzvYbOZAjBvRLc9PNBip4bTbwO0McZKBkRySNIWks0QDChZVAmxpid7De2DHnOUYPnS5m5ZN+45BX8dyT24nCvugOOpc2MyofCJABIgAESACRIAISAiIy1JIonIEpWnEsHzPl47gG4+Xfni8/FiM43u1j3wJC55OXK6ClrNgMGgjAkSACBABIkAEihOBdFw9dwE3M7xRtUYNlPMRf0oVrA1XT5+ALaA2AsvrzeVX0qNwdFbShOKKJgG+vMLF8xeEGxU+Vn9UqVJVf5mVQjalOOpcyMioeCJABIgAESACRMAAgZKwnIWRfzDSNGJYvudOXr7xeOmHx8uPxTi+V/uQE5nBoY0IEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgQgaJNoCQ4kbkTlzYiQASIABEgAkSACBABIkAEiAARIAJEgAgQASJABIgAESACigRoTWRFLBRJBIhASSCQZcvC7awUZGVnw2bK5ZqhJQEU2UgEiECRJmCymeBlNqOsly+8TPxhLtqIABEgAkSACBABIkAEiAARIAL5S4BmIucvT5JGBIhAMSHAHcg3MxKRyfbkQC4mlUZqEgEioEiAj2F8LONjGh/baCMCRIAIEAEiQASIABEgAkSACOQ3AXIi5zd5xvOxAAAgAElEQVRRkkcEiECxIMBnIAsrthcLbUlJIkAEiIABAuwtFMLYZiApJSECRIAIEAEiQASIABEgAkSACHhCgJzIntCitESACNw1BDKzabbeXVOZZAgRIAJOAnx5njxttiTsWfkttkfdUBfD0iwe8SImrTqlnobOGCdghLlxacop70QZyiVTLBEgAkSACBABIkAEiMBdQoCcyHdJRZIZRIAIeEiAzdhT26J/+wW7fzujdhq2zGTciIvD7aR01TTqJzJw63ocblxPUklil61+ns00jE9AYmKyYn6uG5efO90URXoYqWeftri0VLv+avYB+ny0Ssir/ILnq8dPz36988hj+9Vuf1rsjZ3T1z8tkfUf1v+SMnOuY65fv8a00Eql1f+08tnP6dunJ0N3fMrj+u4m23Vs3LQdq3+/5FQl4XQk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4k5Y2ogAESACJY8AHy4993EJnEzeVrbecW6RMeevY61kJQlGZGvlV5J5Z+O07dPTxYex9dFga4SPVhkFLV+rbGPntPnp2a93nutgJI2Wrlrtr5RwY0Urt/Y5I7ppla9Xv9qlGzurVb6eBCP26cnQO2+y5XJg0xMMH+b49NAz65BpYktgaGXVd6gaK1uvHC0T85JXKlfPFr3zUlla4eQU+4xhtnPMzE7HyQOR7AWNNvgqeepVhbmzLeWnMQCryqATRIAIEAEiQASIABEgAiWBADmRS0Itk41EgAjkIOBt9mKP6/KbfLQRASJABO4eAl5m/iAWbXc1AbZ8Ru/hPbBjznIMH7rczdSmfcegr2O5ELcTdEAEiAARIAJEgAgQASJABPJIgJzIeQRI2YkAESieBMp6+eJmRmKuZyMXT6tJayJABO5qAmxWallv37vaRDLOTiCw+dNY/GVfXDx/AbczbPCx+qNKlaq0DAU1ECJABIgAESACRIAIEIECI0BO5AJDS4KJABEoygS8TF6oYCmD21kpyMrOZi98EpcDKspak25EgAgQgZwE+BIWfAYydyDzsY22kkGAL8ERFNywZBhLVhIBIkAEiAARIAJEgAgUOgFyIhd6FZACRIAIFBYB7mwp712msIqncokAESACRIAIEAEiQASIABEgAkSACBABIlAsCNDCecWimkhJIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIQOEQICdy4XCnUokAESACRIAIEAEiQASIABEgAkSACBABIkAEiAARIALFggA5kYtFNZGSRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgQgcIhQE7kwuFOpRIBIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQASKBQFyIheLaiIliQARIAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAoVDgJzIhcOdSiUCRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgUCwLkRC4W1URKEgEiQASIABEgAkSACBABIkAEiAARIAJEgAgQASJABAqHADmRC4c7lUoEiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIABEoFgTIiVwsqomUJAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAkSACBQOAXIiFw53KpUIEAEiQASIABEgAkSA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IUZQlzAVh59B/olZsJcC2wee2AtRH3lqKo9TgAIUoAAFKFCwBTidRcHuP9aeAhSgAAUoQAEKUMClQABuq1IDt7k8lr2dMggrg7HxGcnIyMwUN8pTp1fLXj55lVpOYSFHIIf6i5tgFoIAsnQraH3gqa8LYx95ajOPU4ACFKAABShAgfwuwOks8nsPsX4UoAAFKEABClAgnwvIIGaEf/F8XsvCXT32QeHuX7aOAhSgAAUoQAEK3GoBOU0EFwpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCASwEGkV2ycCcFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpIAQaReR1QgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCArgCDyLo0PEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIMIvMaoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAV0BBpF1aXiAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGETmNUABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAK6Agwi69LwAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCjCIzGuAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFdAUYRNal4QEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhRgEJnXAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCugKMIisS8MDFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUowCAyrwEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhTQFWAQWZeGByhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIBBZF4DFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUooCvAILIuDQ9QgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAAg8i8BihAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUEBXgEFkXRoeoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQaReQ1QgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCArgCDyLo0PEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIMIvMaoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAV0BBpF1aXiAAhSg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ZHv9ZTcO3r3ts3/x5nb9vv3t1Ac/ub36Zx43JD63/dUn/6x908PPaHtvura9+q03DXmt7dt7S/ufL3lm+4FXnt4+etWn2m99z4faT//R4mszPvHmf9e+7dmXtT/92HXt6re+sD3m5M+2Kya+7vjLv+sZ7Zn3P7s977WXtvf98ve1e1z51vaoJ/9g+97XXNr27r+hveyp17VveOLPtquGA3Dme+1Lf6r9t888oX3iY3/cHnbaod+dafxln310u/yaT7U/+skd7Z989y+0Tw2H46znKT/2jnE9e275eHvCZT/XvvE5r218ecaeWy5vn7htvddNH/lgu2W4/x37P9V+5onf2V55wQ+2y6+/pV3/mU+1J150r/He77//L9r3Pe1N7aff/4n27pf/UPvJn3rt+BUfl//pC9q3/exV7W2fvK5d9db/3J70lWcO+WuHyDuGPxj1jue237/6MYetb2y69rLv029oj3rS09oX/+pb2nW33tqu+sAL2oX33LH0Htptn24v/Il/2C5/1M+0qy57XTvhN/9le+y3/WH7D5d+sv35b/zT9hM/9uZt/QqSut7oIRACIRACIRACIRACIRACIRACIRACIRACIXBnJnB3OEQuv+a6eKt2nvvI9rQzLm9ve+e72jtef2p7/Fd+VXv8F5zR3vOud7U/e+Vft+983EWtDb+x/Hlf+MD27v/xwvbz/+XV7d67dg6nwvvHBjvb4kD1QLtHO/3M81u74Jx2jx37264ThoPVE4fYjsX3OOxou1u78EfbJb/3I+3UE05qD774Ee2c04bj6eE3Zt/5R69oT/yZn2+ff+redlM7uz3l27683bjn8Ldj947T2zkX7mon3/PUdsIJ+9rH3/e61h72n9q3POq+7dprbm+P+/s/3B53/Yvbuz9267CqYb7hQPvlP/0d7Z479g2rO3SM8Qf/XPutH/+OdvL+k9rXfMe/aO2WT7Trbtvb3vf6PxzW8wvjeq67+ZT2Q//uWe3yP3ptu/zWA8O83NP62k5e02/92Pvbr33muvYf//XfayfvvrntHg6Bzzxl4DSMT9+2u73h/7y0ff4ZO9u593/w8DUVZ7Sdw5H0pW96eXvis36iXXyPPe3Wdv7wFR1f3m7wL+kdGNY/sb5rbzv0Pv56OMRv535/e9q3PqLtuemmdsJJJ7V7nbj8Htqem9sXPOst7aee+kVt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QAABBBBAAAEEEEAAgYYqQBC5oY48/UYAAQQQQAABBBBAAAEEEEAAAQQQQAABBGIQIIgcAxJFEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBhipAELmhjjz9RgABBBBAAAEEEEAAAQQQQAABBBBAAAEEYhBIiaFMnS8yd+7cOt8HOoAAAggggAACCCCAAAIIIIAAAggggAACCOwLAWYi7wt1rokAAggggAACCCCAAAIIIIAAAggggAACCNQRgQYxE7lbt251ZDhoJgIIIIAAAggggAACCCCAAAIIIIAAAgggkFwCzEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAqn1DPwAAIABJREFUAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJEEROrvGgNQgggAACCCCAAAIIIIAAAggggAACCCCAQFIJEEROquGgMQgggAACCCCAAAIIIIAAAggggAACCCCAQHIJpCRXc2gNAggkk4DL5fI3x+l0+tdZQQABBBBAAAEEEEAAAQQQQAABBBBoOAIEkRvOWNPT+ijgKZJ1K9dKgcdTTe+ckpWTLdnZmZKdmVlNWe/h4l+myZWT3vKXHfn3B2V090b+bVYQQAABBBBAAAEEEEAAAQQQQAABBBqGAEHkhjHO9LKeCniK1spDDz0UQxA5CMCWLT2PHCajRg6Rrs2zgg6ErpZJUegOthBAAAEEEEAAAQQQQAABBBBAAAEEGqQAOZEb5LDT6foiYNOvgRrZ4uyNZ6csm/2e3D/x7/Lom99LWZynUxwBBBBAAAEEEEAAAQQQQAABBBBAoGEJEERuWONNbxuAgC0lRVLCHtG6vfSzZ2TSu8uiHWY/AggggAACCCCAAAIIIIAAAggggAACQjoLXgQI1CeBpsfKI/eMkfQIfSrM3yiLZ0+V59+bF3L0948ny8LBj8tBzflOKQSGDQQQQAABBBBAAAEEEEAAAQQQQAABS4CoES8EBOqRgD1S9Liif1k5reSIEy+UJ++8RFNgBOfAKJPPvvu1HinQFQQQQAABBBBAAAEEEEAAAQQQQACBRAoQRE6k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AhSgAAUoQAEKeASOhSAyy1nwbqcABShAgWNWQP2pf5PW7Y+p8z8Wz/mYusA8WQpQgAIUoAAFKEABClCAAtUgoDKBOVGAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFggowiByUhSspQAEKUIACFKAABShAAQpQgAIUoAAFKEABClBACTCIzPuAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFQgowiByShhsoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAQWTeAxSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKBBSgEHkkDTcQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAgwi8x6gAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKECBkAIMIoek4QYKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhRgEJn3AAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCoQUYBA5JA03UIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAIPIvAcoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClAgpACDyCFpuIECFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUYROY9QAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAiEFGEQOScMNFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUowCAy7wEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhQIKcAgckgabqAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEGkXkPUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgQEgBBpFD0nADBShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKMIjMe4ACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAVCCjCIHJKGGyhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIBBZN4DFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoEFKAQeSQNNxAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACDCLzHqAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQIGQAgwih6ThBgpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFGAQmfcABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKhBRgEDkkDTdQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAAg8i8ByhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUCCkAIPIIWm4gQIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABRhE5j1AAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACIQUYRA5Jww0UoAAFKEABClCAAhSgAAUoQAEKUIACFKAABSjAIDLvAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFAgpwCBySBpuoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQaReQ9QgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKBASAEGkUPScAMFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQowiMx7gAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABUIKMIgckoYbKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgEFk3gMUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABSgQUoBB5JA03EABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIMIvMeoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAgZACDCKHpOEGClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUYBCZ9wAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQqEFGAQOSQNN1CAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoACDyLwHKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQIKQAg8ghabiBAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGETmPUABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIhBRhEDknDDRSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKMAgMu8BClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUCCnAIHJIGm6gAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABBpF5D1CAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoEBIAQaRQ9JwAwUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCjCIzHuAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFQgowiByShhsoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAQWTeAxSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKBBSgEHkkDTcQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAgwi8x6gAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKECBkAIMIoek4QYKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhRgEJn3AAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCoQUYBA5JA03UIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAIPIvAcoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClAgpACDyCFpuIECFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUYROY9QAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAiEFGEQOScMNFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUowCAy7wEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhQIKRATcgs3UIACFDhCBfKzM1HoAAxmK+qmJhwhZ2GHAxaYq3m0R6ZN5ChuewEO5NhkRzPq1UuNvIPDeg87MjNztBEm1q2HeMPhM9iaur8iO07NfLYOn6sQ/UiO7s9N9C7ckwIUoAAFKEABClCAAhQAGETmXUCBI1ygKHMLvvj4M6xM34x9OXYJnJqRUq8lTu59JgaeeQrqJhxGEaaasHYX4MP7pmLJwRK4EvrjufmjD6sgWzCC3N+/xoQHX0eJbDzj6nsx5vTjgjU79HVHoE20J73x/Xsw+8tMuA0puHve42idePR8DnJ/+wgTp3+m0QyaOg/DOyRFy1S1+9XU/RXBcar/s2XHslfmYsleJ+ICNNV3cb20ZujctQe6dm5x2H8PqeFH9bkpzsALc55Gpjs+QEBfNKN+s2bo0qUbOrdvA6tFXx/wXmE/ZqTWTUPrLp3RrUvXY+9/1wKouEgBClCAAhSgAAUoQIF/Q4BB5H9DncekQBUJZPz0GqY+udivN7fDgey9W7H4PfV6ERfeNh0XdG3g1+ZoX7BaJWB4UH4lq1Xdeb1VI7n9x2VaAFn19v03WzDytOOqLeB0pNlEK2wwJ8uumZKOHiqwFW3Ph8F+hrL/6S6bOwzGJUOoqfsr3ONU+2fL7cCOtVuxQ360CjZtTk/Hsq8WwW1siLHT7sTprQ+TgH+wwcq6aD43bkcutmzZKUFkd4heIds9DuovA84cNQFXnN2pXNvK+0nHqu+/wuuy5+mjpuHqs9uW64MrKEABClCAAhSgAAUoQIHqEzjc/vuz+s6UPVPgKBNw7l+DO30CyHGNOmNA766w5OzCl19/j3ztP+gd+HTJH8dcEFm/1K4ife7wfk9ILgt2m+LNiKmBpNkjxebwvnIcXSiBmrq/KjtOTXy29IC2yno/Y0BPb0ZyfsZW/JD+l0ZkcO3DCw9MQOwjz6FHvaPrcRTqNw3tO0tiyMaUpujdrTncPjH1nMztSN+6t/RWceDbN2Zhxa9D8cTkIX4/lvn1k9oOA04t68eesw/fr17v/bFt+RvTUbvpPFx4uGThh/ogcD0FKEABClCAAhSgAAWOIgEGkY+ii8lTObYE0hcv9P4HdXfJyrrBJytryCUj8cui1zF/4T+YMrbXsQVzBJ5tm0G3YXLdNdhdmITuvU+q9rrIRyARh0yBqARq8rNlatIfl40a4vf5HVuQgVdmTsPSv5wyfgeeX/ANuk3u79cmqhM7THdq3ucyXD0sSIawlCDZ8M3bmP3qMm3k9k0fYNJzaZh3bfegZ9L89GG4JKCfK8cVYMkLM/Dq97u0fRa+8S0GPuAfiA7aGVdSgAIUoAAFKEABClCAAlUicHSlw1QJCTuhwBEgIP9Bnr7Bk9nlsp6Bywe08R+0IQEnnn8tXnz2jqOqFqz/SYZYMpRl9YZocfitluvV6ZQzcc6ZJ6O2pRrTkI9Em8PvanFEoQRq6v6K5Dg19dkSE1ehDSUBFR2MCWm4YvIUpBk9n+vC37Yiu4KyD6Foj5T1qpxS0EmuQ+d+V+HJOy/1Powj74d5+G5P8D8XCdqP9NFv9GjUM3gslTcnClCAAhSgAAUoQAEKUKDmBJiJXHPWPBIFqlTAXVjaXfE+ZNmBpNjwu8/fvwWf/m8RftnwF0xJVhTk2tCkS2/85z+D0LZeYtCO8vZuwaJFi/Br+hb8Y3PDaLUirXk3nH/BIHRvXd9vH9X/ks8+kz9Z3gFjvBU2mw2pUm6j33ln44yuLfzaZqz/DC8vWodabYfguqGdsGH5+/jfouX480CBFOi0onH7Hhh12UUyrvInuG/zCrz/8adY+4fUvpUpQR4oOGToIOS5XH7HKFuw48/1K/Dlom+xYfteFKk/v7bWwYmnnI3hw87yC+Dq40o9biDGjTgBW5e/hZfe+0Y7d0NCS4y/43Ls+PAd/FHgQkLj3rhiRC+/P83Wj5m7YwWefXul5CBa8Z+rxqFjvfJBYmfmBjz14hcokjb9xlyFE+t7zlUfQ83YAOHeF1u+eQkf/3IQJvmT9VOGXVuuzqs7/w+89OzHyHLbkdxhCK4ZVFb/NNxj6H55e9Px8ceL8OPmbbDJPW9NqIvjTuyNQXIvBbsn9P30d1ViwAw7tixfiA/Cuq/CuEfcOfj0xRexJduFxBb9cdWwE4JmlpZd+2RcdN1YtEn1XPtIDfRzCe89jPGXdnS43l++5xn5Z9x3b6A6Plv+R6h8yZB4HE5uFIOFux0wOnciR77afL9mI/m+/Om9Z7F4x0GkNBmAq0eeXO6+q2h7JN/hkX9uKndQLZLbDMCt56/ErE//0HZ4+cXvcerdkWRmx3hLZ0DqUXOiAAUoQAEKUIACFKAABWpOgEHkmrPmkShQdQKSkdW6UyqWLD8gQYmtuPe+Bbhr8igcl1o+0Bp40C1LnsWMV38oW52do83nfP8ZNsqr//hZGN3T/0F8m7+Yi4ff+rVsHzWXk4Md65dinrya97sB91/m+bPkbd88iwdeCdJ/zgq8JEHfV1sMxCP3Xoxapdlkf29YqT2USf7BL0uB4lzfw6hjfI3pE5fi+oBaoj+9cR+e/Gq7b2PtgYKvPrnVb52+oAKb8++cjh+z1J+V+0xSa3Pll69qD7R7bP541I/1BPr0cRn210HjwvfwwdLdZTtlb8W2f2Jg2L0J6RIYgjw8q8Op3dC3eVxZGzUnGeNfPb8AG6SNerCWJcQz3vIzN+Knzenavq3+Ge0NIutjqG4bdeBI7ou0hinYnP6dNt71M55B6xcmIq30ekICtgvnzcCyzZ4Az3lnj9HaRXoM1f7Aurdx22Ofe/dXMznZGVj7zfvaa/R989C/RcUPKlOfj7uvv8avD+kl6H0V9j1iiYFzl1z7HZ5rf+IZC8rXuQ249vqz8CJxDhh0pYthjz/gHj/c7i/9RCP9jOv7+b5X9WfLt++w5yXYWRgi+zii70u5pzb9sAab1UP8MprID1cSRPb9TaqC7ZF8h6vziuRzE7ZDacNOgy9G2mczkOFyw/nnUmQU90Oz0nuysr5ytq/V9lPtktq1D/rDXWV9cDsFKEABClCAAhSgAAUoEJ0Ay1lE58a9KPCvC3Q+41TvGJx7vsO9N1+DW2c8h6U//w6bZCYHm3I2veMNIKtMswtvnIIZM2bgzluv8P659ddPT0d6dtnfZKt9fAPI3c65DLffdT+m3HQFOqR6vkIOlmZFq7a+AeRTz78Kd9x/P6beOsrbf8mOzzF57krv8MzmsvITKoDsjmuHEeOm4M6pN6NnI1NpO08tUT3vLPOnBX4B5DMvuREPz56ByeOGe4/jPUDpzG+fv+INIMekdcaVN03BXVPGo1stzzFMjjV4+pNN3t30cbkPrvAGkGs164wu7RpJQLgpujWrjwGjBnjbv//5L955fcaZuVbLPlTLDU4fGbK0iMEc/Pc8fQxq/+q0ifS+SOk4FBPOaaaGBWPJBsx46SdtXv2zd+XL+KA0gFy/zw24uKvnB4lIj2Fw7cT8x78s7deMsy+/1XuNG2klP8yonZDgPW5lM+HcV2HfI/IjTt+Ly679osWbyx1eXfvP1Q8MMunXPlKDcp1WsiLs8Zf2c7jeX2p40XzGg/FU5WcrWP/hrLNtW4bFezxPmnPHd0aD0ts2mu9L7SF+6qAhSnoE266OE+53eOD5hPO5Cdyn0uXYJlpmtqedA3b9i91nx8LSshh2ux3qVZCfKTWVX8WtMz/RWqn//brmwpN99uAsBShAAQpQgAIUoAAFKFDdAsEjF9V9VPZPAQocskBym6GYOnKXX3Dgny0rsEC9pPdOErS8bOQ5aJhQmqomf4L//vOeoJwKgt795ANlQc1GjTDjiXqYdOMjyJR2H369CV0ukhIEktn2v+e/8o516NR5GNJBz/xsjo4n9cb+jBwkNayntdX7Vztccdc8nNm6tG3z5pj5Yhc8MW4afipywr72JazJPKVc9mazPmNwx5gzvNllbR+aBdOEyfhBsoeLN3+Nv/L7oXVCLj58fXnpmMxynDne46TVb4SHu3XB9HH34Denf0mL9sNuwijHIhjbnYH+J7Uo3R+Y8Fga7r36HmyX9ttX/oLCYZ28x/c2kj8aHzV1Fs7uULtslcwZOvRDr/gvsbLQidzV/8PWS3uhXWJZauD6zz8qbW/GRYO7+u0b6UK12URzX8jgu428Gb2WTdbOPWfZPCw841mc32Abpj/ryUJ3mnvItSwN8kRxDJfUrsiTTEU19Rw7HaNO8wSj1TWeccogCSwBFou2udJ/wrKT6xbJPZIq1/74mC+xrsSJ7Ys/Q+aIjt5arWpA6Yu/8D748r/q2kdhUOmJBTSIZPzxZbep1ktYRtF89qI5b9knms94AEfYi2Gdu8/nuqKOY/xc7di1bjEenvOud5eWp5+IJJW1L9+tEX9f1vV2E/5MJN/hAb1WpYtf1xIAT6ktPx7KjywG1z/ILZTPeYDv30vm4PIlfnt5F1QA+a65j3vLw3g3cIYCFKAABShAAQpQgAIUqFYBZiJXKy87p0D1CnQ49xbMn307LjzzeO/DivQjbpQavpNvmIrNpVnFzsyt+OGgp5RDymnDygLIpTsYkjpj+Gl1tKUda9Plz6/lQVHZv2F1afkHS6fRPgFk/SgW1E+rpwVdVeal3n/sCWO8gV29pduYhstuPqt00YHA7E1V7uHKS/v4BXDdhro4rXcLvQvtXdU4XVM6ptgTRpc7Dix10C5Nz2Au21X1dfYll/sFkNVWt7EZ+p7sqTNhjC/Lii7bUwKmo6aVCyBr+0qfQy45XmtqcO3Dh9/9XrZb0R94Z+kBbdnUcii61Yv+67Y6baK5L/RzH3v/Vd777v2Z92DqtEeQX/pn++Nkm16yJNpj6Jg/ffY//JZZrC9q7+EGkMO1088p3HtE3U9DhnfQxqKysb9Jz/KOz+DKkPvbU/7E2GQgutU1Sm3eyD9/3g7DnIn2Hg/XKJrPXjTnHc1xwiQq1yzccy+3Y7AVBz7HpKlTMVW9ptyEqy4fizsfe8f7mXBZe+MW+bFBTYf6fRns8MHWRfId7rt/lbr4dqzNW+DNmJZlT452uUYhVxjkR4ann3kDuws8PzKFbMgNFKAABShAAQpQgAIUoECVCjATuUo52RkFal4gsX57XHCFetnx97at+OLjtySgtUcbiApszn78Czx7z0DYDuzy/sd67jLJ8loWeqyuIs+2vIzfvAGQM/qdGHoH2ZJ/YJ+3//7nBm+b0rK7lJtY7K1pGdihS/1ZcyVlnX2P069fl8Auwl4uKMhGgdR1zpWH/uVB1TIugH7evp2oYMr5p7bwXeU336jH+Wj58lotk3njR18j67w2WvB0769LvOd5/vDTyj0Ay6+TMBaqyyY/ivtCH66pfm9MveRHPPim1Mu278O+0jIqKujeu1FZfehojmFMqIPmJiMyJdPXuWeF1MVeAVVO5JxBg9D7xA5I1kpa6COp+D0cu2A9VHaPtDp1IBLf2qh9Rr78aDUu7DpQu86Z6Uu8mfD9LjxT+2Ek5xCcg40tnHWVjd+3j3CMovnsRXPtozmO77lEOh/OuYfbZ1ZGRtCmzU8fgQlXnev9YcX3HKP9vgx6oICVkXyHB+yKqnTx61uyo7fv8vwo5DbWQe3AtHhprErh3HdpR7h9IszZGVvxySvPYNXOYvwjf5ky9RYbnnxurNfU7xhcoAAFKEABClCAAhSgAAWqXIBB5ConZYcU+LcELGjQugsun9gF/92xFBPuWaAFdUtk/q/8c1E/IMk2JSUFNgmg+k5Wq1XW5cDcIEVb7VtPNNka0IHvjjLvW6KzOr9YfI/jW9M1YDhBF935O/H1++/jf0vXe4PjQRtGsjKuFS7o3wRzvtwJVVf5s/TLMKqLEZ+/u0rrRWUfntk+MZIeo24bjY3vPurA4dwXvgNsO+BCCaSu9XqqoPuQM9r4NvG7N8I9hsqqvf6RKXhm1kys3uvJoM/auQFvPy0v6eT0UZNx9dlScqWKp0juEZW9/58u8Xh9vQ0lf36OLdnnokuqAys+XKqNymVqh34n1tfmD9U53NOMZPzh9qm38z2HcD97vvuofsK5v3z3Cfc4+hj/zXd1719w8Vk+lRnMqN+sGZo2a4W6elmh0gH6nmP1fl+W9V7Zd3hN2RlQiOx/Ks4iVv9bZI2V4tE+PyomtD4R4+6fg8Yzb9bqrpvsK/DtlpG40FtiqabOgMehAAUoQAEKUIACFKDAsSlQ9l8Xx+b586wpcFQKJLfoixvOWoK53+z0np/bUZbSNUzqWPkurAAAIABJREFUFQ/W6xV7W5Sf8X3gUdne5duFv6Zqv3J8nslX6RByNn+Omx5W4UfPZDCnoF2HzjiubSPsWPyBlP3wr6GstwvnvetACaR+9bgWSF3y0fc4r3Y8lpWWDjll+Hn/SqZcuDbR3Be+Jhs/K/tzfbVeZb8/tmAl5l13qrdZtMcw1mqH8TNewoi/tmD5t9/iq6WrvcHq5W9IveyUWbiyp6dWsvdghzATzT3Sc8gQCSK/DfUn9gt/2IPOp2fikx2eJ4W1HHAB0lT9W5miNYjkdKIZfyT9+7atzvvLo+c5WrjH8R3bvzVvatwbQ84955D/6qBs/If+fen2waya7/Cy0UU7t2fVh1ptfLW/oXY3NA4IsFfYrzzUsv/QgfjgwU8qbMaNFKAABShAAQpQgAIUoEDVC0RfpLPqx8IeKUCBKhQodPhnGSc1PM5bv/bHlWXB5YoOmVS37ElOS3/YUlFTmCUoq0+rfgzef+G+P70lHvwr3Op7Vv7uGxTZsNVTc9hvL98Uv9INqkbt3Nmeh1upbMGrps7Gyy88gdtvuwYjBp+PEecd59dFpAvGWt20jFS1n3P727hl2gKtC/UAw8GnNo60u6jbR2MTzX2hD9C5fwVmvrfBsxjbFE1SPAHTvJXP4sPNeXozefBi5Peed2eZqd1clWsZh/kvP4eJl5QFp7duD3L9fXeMYD7aeyS59anycEVPDe7fvv4Mn//vq9KyLmYM6u+pmayGcagGlZ1KtOOvrF/f7TV1f0VzHN9x/lvzrkLJSK84wdY7tGi/LwtLa44b47xdlc0E+e6L5Du8rKPqm3Pnb8UTz3kevqmOct7lZ/vVwQ/nyNkHcsNpxjYUoAAFKEABClCAAhSgQBULMIhcxaDsjgI1IlC8E9PHXInLrn0I6fvzyx2ycMdivLjcE2DTM71MtVrihDhPsGvHkmexPjNItENqVWZmZnr7M9Vti7ZSl1ZN2ctfQ3rpQ/q8DWQm70AmbFIL19r8BBwf4+l/37dvYVt+YP92fPvOB95dTz2hmXc+kplkqYtbrzS7c+NHnyGrNKii91G450d8u8c/585ly0WeyzOeloOuQ58OnhIDnn3s2LwheB1Tvc9w3k8bOrRcs4ZnjkSzWE9gtdzGalgRjU0094UausF9AM/f/WLpWZhx/fT78cC9470/VHw0+0nsLPaYR3uM8kQWdDl7BE4uvY99/tK9fNMI10R9jxhSMHB4V+1o7oMr8M7Xm7T5wIcpVp1B8BOLevzBuwu6tqbur2iOE3TAh/HKqL4vJUjcsI5FOyvn3l+xJ+DBcu78P7Exw1P6RT/1SL7D9X0O5d1QQep43p41uP3GGd4fEo1Nh2JIl9pBDxeqHxWEfv75Zd59Kjictw1nKEABClCAAhSgAAUoQIGqEWAQuWoc2QsFalRg4/+e1x7cZSjaikcmXY/7nnoHv27ehh3bNuPrd5/Bdfe85n3I3YBLPA/2UjVmh15xijZO9af3j0yeiiXrd6CgwI6C/ExsXPk+po65HhMnTsTj3+7W2rmNaRh1safurNpn9oS78MPm/RI0tiM/cyc+fWoabrhtIsZNfQ25qIOhl3T09O/ahftvm4Eft+2X/guQn52BDx+dgnc2lWZH1+mPAe2TojIzJB6Hs9p7/sxb1SCeeu/r+H3/fmRJ8HvDN6/ihjue85Y8CHaAnb9+j4N2T3AzP/MPLLj7RrwtNW0PdYpv3gv9avv++bkZwwaWZaIeav/h7B+NTTT3hRrLr289jpWFnoBV++GT0aOeEcbaPTD1os7aUI3OrZjx1EptPppjqGDR1CuvwBi5nmv/ytL6gfzIsX7Rc94/ha9Vx+pZX8X/RnqPNOsx0PvDhj6Uc/7b06+sQTQGel+Rvkc6/nD7r6n7K5rjhHsOh0s77X6I+PvSgrYntNJOQZWNeeihBdiemY9ieUio+v6+4YYZ2gM+fc8xku/wvIAf5Hz7CXc+I301fln3M1atWiWvn/GTvC/59E3MnHqNfDfP9waQXTGdcc/tg0NmIe/fthrpm9Zj/XrPa93Pq/DJG0/j6usf8p6jsclA9G8V3f+OhHs+bEcBClCAAhSgAAUoQAEKlAn4RjzK1nKOAhQ4rAU6njcWvX+9FytKHzi2ffVnmCuvwKl+n2tx8UllNWMb9boCV23Yihe/P6DVrn310XvwauBOslwnuewhei3OHofBP9yMhVLn1SDB4WcfnlRuD0vpg/ianzUOI9ZO1IKyKsA974HybVWJh9vvvrQseOD7t+vleg62woJzxlyDDybN1wLlRZJ1/eCkxcEaetcZEprg+EYmLJYMZefuxZgwtuL22o6RjktqdZ53xZlY8tjX2u6WTiPQTQKrhzRFOgZEbqPGF+l9kbfja+1Bgtq5yQ8Ct5zX1nuabQZdg16fTtACzLa1z+Kd9e1xcdfaER/jrxXveAJOe1Zgzt0rpH91T5YVeHWae+DyAS28xy03E6FdVPdI6UENie3w355WPLeqQFujxnZWl1rlhhSpc7kOKlgR1fgjNEIN3V/RHqcCnvKbIj738l3oa/QSE/pyuO/RfF827/1fpL2+QftsOPd8h/smflfp4SL5Dpfi3ZX2F6yBXsZDfR8//ljF368JHQbiwVsvRm1L+b/S0Psp2LwYj8gr1OSO64xpt19c9r8joRpyPQUoQAEKUIACFKAABShQZQKHGOGosnGwIwpQIAIBQ2IzXDPjGdwx7mK0TfP8ebPv7pbUdhh5032YfdWpftmQKjjTZ+yjuOemi6V+beB+ZrTsOQDTHpmPS30Cz5Dg6LB7H8fNF/VBYmkZCf1YxpSmEjidgqemDEGS2iZtB972NG6/erC3Pq7eVgUBO50+ErPmPYAOqWXBg9iU5NImZYHrsn2A2OR473ZjaRNT/R6YP/sWnNTIv6BBXKPOmDh7PmZc11vbx5RUmqkq47r0jjvQM6A9LA1x/vjpmD/rGq0MgzG+LLO1snH5jlGfdzvKAjCDB/tnouptgr371kf1/fPsysZQJTbagCK5L+z4ZsE72l6qvvRtt/v8IKDWSnmHy++6ynuvfPbyIhRqid+RHANocc7dePC2S9E6Vb9Py2xbnjIMTzw1vsIHFkZsF8U9oiGU/nPSkOHexU7/HVAuM9mzMTIDb4cBM0HvlyjGH7GRjCPiz5429sjPO7rjBEDJYlArWR/NuZfv3bMm3uz5PvP9/gjV1m99FN+XiGuF6bMmlvvug9Qkv/quuXgg8LtPHVCOE+53eHQuMYgp+0r3O0V9oVZaM/Q6ZyTumDEXT00dETSADPkWrqgfVeKicfseGDFuCp59ZhJaJ1ZyUP3gfKcABShAAQpQgAIUoAAFqkQgnP8fuG8bfT7wXQ9Gq/W+L7U+cFlfp95DvVRhVbVNvQfOq+xpfZua19sEvuttOtlstmnSjhMFjloBt70ABTaHZOaaJWhiRkKCHnir+JTtsp8n7hn+Pqo8hZrUf9BbLRUfp1jalpQOISEhoXSuat/KjhHeOaj2hRKPjMQprBFLuY8Xb52AZQedcFnPwFNPXekJrIe1c/U0itRGH0U094W+b7jvkRxDnYdDblSnuufkPgr+c0O4R668XbXdIwGHjsQgYNcKF2tq/DV1f0V7nAqRDsONZecJ+Q6v/PvSc50dpd9llbfXTzmS73B9H75TgAIUoAAFKEABClCAAhULWK3W6dJio7xU3UdX6buaD3ypMIneRp/Xl/W2+v7qPdRLpWvp29S8/lLr9Hn9XVZpbdW7WqemwHffdVqDwH9YziJQhMsUOAIFDJYEJFYczw16VhbZr5I4cLn9wglu6DvFSiDEP1dY31J175EeI9L24Y40Z/MXWgBZte81atC/HkBW44j2XKO5L9TxIpkiOUa05xHJeHzb1tTxIjHwHV9l8zU1/miPE+l5R3ucypwOt+2Rnmek7fXzjeQ7XN+H7xSgAAUoQAEKUIACFKAABVS2LicKUIACFDgUAXng29fvfK31oGo+n9+9/qH0xn0pQAEKUIACFKAABShAAQpQgAIUoMBhJcAg8mF1OTgYClDgSBRwZm7UHjyoxt7qvJFoFqtX/DkSz4ZjpgAFKEABClCAAhSgAAUoQAEKUIAC/gIsZ+HvwSUKUIACEQuoh4A991QnrSZ1uPWoIz4Id6AABShAAQpQgAIUoAAFKEABClCAAv+SAIPI/xI8D0sBChxdAtHWJz26FHg2FKAABShAAQpQgAIUoAAFKEABChyNAixncTReVZ4TBShAAQpQgAIUoAAFKEABClCAAhSgAAUoQIEqEmAQuYog2Q0FKEABClCAAhSgAAUoQAEKUIACFKAABShAgaNRgEHko/Gq8pwoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClSRAIPIVQTJbihAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKHI0CDCIfjVeV50QBClCAAhSgAAUoQAEKUIACFKAABShAAQpQoIoEGESuIkh2QwEKUIACFKAABShAAQpQgAIUoAAFKEABClDgaBRgEPlovKo8JwpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACVSTAIHIVQbIbClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAJHowCDyEfjVeU5UYACFKAABShAAQpQgAIUoAAFKEABClCAAhSoIoGYKuqH3VCAAseIwM6du7Bn715s3rwV2VnZgNuFFT+s0t6zsrNk/Ra43QZ07twJyUlJMJtj0KNHdxgMBqSkJqNTp45o1KgRmjVrdoyI8TQpQAEKUIACFKAABShAAQpQgAIUoMCRLcAg8pF9/Th6CtSIwIYNG/De+x9h5ao12LplK1xuSFDYCIPbLQFjl8y7UWx3SDy5BDEx8rUi2zZJOzhdMFuMWL1GgswwwOl0asFkNegOHdrj1F6n4sKh/0GXLl1q5Dx4EApQgAIUoAAFKEABClCAAhSgAAUoQIHIBRhEjtyMe1DgqBfIzs7GqlWr8eXXX8trMfJy8uGGES6JHqsgsdvlkuCxrDEaVDRZPIwSLDbA4TB4gsrS2iD/p7apfcyyj0G1lXVqP/W+adMWef2GZ59/AbVSU3Du2WfjnHPPRo+ePZCamnrUG/MEKUABClCAAhSgAAUoQAEKUIACFKDAkSLAIPKRcqU4TgrUkMCcRx/D888vQHZunooNa4Fgk9EswV9ZlECwSV4Gg0kLBptMRm29JCNLOQvZroLGTjVQyUg2mSVwbNTau1TA2aWCyibJXnbBUSJZy5AMZunfIH1k5ebjgw8/xnvvfYCkpESMHXsVbrn1FtURJwpQgAIUoAAFKEABClCAAhSgAAUoQIF/WYAP1vuXLwAPT4HDReCdt99C9+7d8cicx5FfYNMyjmOMMRL8NcEoNY6NEgh2OhwocZZoQzYZJZCsAsEqwVgmT2ayChqbJIBskYCzCaYYk5S+UA1UW/m6UaUvJLCsSmC45OV0Oz1BaOlbBZplJ2Tn5OJRGcNpp56O9955V+v73/xn35YtSN+8WWo9669tOJBdUKVDKtm1CY6tO1Tutv/kLoA9fRPg8F8dcknaZ117JQq/2haySVVsUON17q9ag6oYF/ugAAUoQAEKUIACFKAABShAAQpQoHoEmIlcPa7slQJHjMCKZd9h8oSbsCfzHzgl2KuCv24tMuwpPaGSjE0q8CszBlNZBrLKPHar4sgSG1bBYhVEVrsZYjy1jxWAs0TSkiWIrALEJpN6GbVsZbfFLOFnlwSknZK5LC8JJpsMsTBox1C/bbm1h/dNvG0yHn10LubMmY1evXurLmt2kqDsp3NnY3mhJ3Due3BTk/549MFLUUuPovtujGRejpH34GwYJCbrvn0WLJ3qle1d/BdsM2XbPfNhbmMtW1/BnCFO+nHYK2hxiJvUeG+fDcuwSUj4T8dD7Iy7U4ACFKAABShAAQpQgAIUoAAFKHAkCDAT+Ui4ShwjBapBIH3tWgw//1wM/+/52L1nL2IMMRLIlYflqUCwvDul7rEWIy59UJ7KILZYLJ4MZVOMVutYmkg7T/BYlbpQy6pkhdrPKS+VgRwj+2g1lGXJKbUu1GoVlFYP5XNJZrMqgWEySLkM1Y8EmdVxVEayameUoPXfMrZLLhqBi/87FBvS18vamp1S65TlB6c1TPEe3Ll7Md5cuse7fCgzpkaevQtmPV8u61g5CM9hNRnqHH5jOqyAOBgKUIACFKAABShAAQpQgAIUoMBRJsBM5KPsgvJ0KBCOwOcLP8GE8deiID/fE+SVALKjpAROCR6rTGS7ZLKqQLKaN5tVEFgCvyqWKhFNh10Cv27P708q4Ot0SYkL2VdlHKsItJp3SgQ5NtbiyTKWbGTVl0ELPEsJC0lO1vrVMpalerIEjy0xFq1UhsScZbuKRKuH9hkRY46RZbW/CWtW/yjB5GF49oUX0Ou0PuGcZpW2OW7wNNw7rC3c+Vtx+40zkCHj3rl9E2Z8fL/Mu3D8hdNw1ZnHacf8a/lLmP7eWrhM7XDv1NMxb+pj2IsmuH3OA+iQWhaU1gfoOigm7drAtfV35D2/DEnjy86vXGvJBC78+HEUf/C7Z/f6HZA89XoY6yfo3fm9O3f+gIKXP4Hrt7+19aZTzkXStRcDKjCtsooffQDmHufB/u1rcP3uybi2jB6PhHO6a4F8v87CWAh5vJgC5N5/C8x9piD+zNZaTyW/v428+39A8sMPw9TYk2ld+OmdcGw7DSm3nIXCpQtQ9MKq0qPKjxxnDUbymCGecVXkUA3nFcapswkFKEABClCAAhSgAAUoQAEKUOCoFWAm8lF7aXliFAgu8Pz8ebh61Ejk5eVpZSsM8tA8lwRpHVrZCQMcDjfiYuMQHxuvlalQAV2D1JlQgV8V37XExUOKHku7EskilkCvPEAPElQ2xZhlPkaCzvKulbeQfSSorGofI8YTkDZJVrNZMpMl2izBZhcsEqCOkX5VFrNB3iWUKiUvpA6zjEdlMtsdLula5mWLW9qoWs1XXDIc77/5WvCTq8a1+3fuRGZmptRGTkeeSg+WqeMJHXF8mgs5uQ4sffdbWS8bJID53YcrUJyTA0NaO1hzNmkBZ4NrF9Iz8j07BvnXfNpwWG86Cc4fFsDxuy1IC7XKjrzZN2gB5Lhrb0HifeNhsG5GrjyE0J0dfBfH9l9gSGyLxDsnwXrzWXCu+gJ5b67zNnZl/42i5xbA0HQwkmZMgmVIY9hfewqFP2Z620QyE/J4hgQYkktQ/NnP3trPhZ9+KRnpeShe4wmIG9yZKHp7D0wtmqHkry+0AHLsmGuQeP8kxF/dS24bvaRH5Q5VfV6RGLAtBShAAQpQgAIUoAAFKEABClDgaBNgEPlou6I8HwpUIDBh3DW4b9oUCdhKuFaluEq2r0Eenuf2PvzOJBnDKigs9ZBVmQkJ6DrlQXrq5ZJSFLFxsVqJiRIpQ+EJFEuAWRVFVv9KX0YpR6EemmeStGWTZBobjG4t+KsylE0SSFbrVcazKnlhlOOqbGUVQI6RshUq61jNa6UupC/pTMs4dck4Y2JjtbGqYLdbUmjvnjwJU2+4roIzrfpNBetew8SJEzFz3kLkS7DYae6BISc2xmlDB2oHM9q+Q/oBKdGRtRHfHfRk9A4c3BN12vTH5ef0wennXoUB7RNDDswtcWNL9ysBKRWR/+BcTTWwsTNjFZxS0SN+4izEnX48Ylp1R+r9D4pJCWxL5QF8Qaa4vjcg6dYxiGnfUfofDcuFSSj5ab03kCsxXBjluEmS4Wtq2hHWi26HW5KaXfujCyJXdLzYvifB/fevUrNZbgHXDpT8LAOWYxV/slw7X1fe79q4Yk9oAbc9RzsbSzs5z5YdEdt3DJKu7K/dE+E4VPV5BaHlKgpQgAIUoAAFKEABClCAAhSgwDEjwHIWx8yl5okeywJZWVkYOmggNqena0E4ZaEecmexxGlZyNqylvErAV3JIpb8XzjtUtJCgrkmCexaJIjrkpINRslILiq2axnGKtonsWEJGktQ0xqv1TRWNY/VQ/RUSQuDpA/HSOaxRR6ipzKQVRDaJMFis0UCyLKzW47vcpdo293qwXpyHFXKQtVTVv251IyUsigpcWjHMEpw2+UslnkJVkvW8/8+fA8Ze3biiQVvICW1VrVfXrexIU7p3hx7tvyK3Tl2mBxr8MrX52HCgDNwctwi/FTkxPJftqFx/A8S0pWhS5D5TAkauw1JOOuSq3BWpSOUh+FJtm7yXVci95YFyHllHZJHp3ivl9rdnf+X1l+sz8P33MbGiB0cA/uKdBguaF7uKK6Dv6N42ZcoXvobUFgIFMi1SVPZ4GVTTOu6ZQsypx7OF+1U0fHMrXpK8PhnOPfLuTqWS/S6MZKmnY28OxagRGLWJbt/kR8dGiBGlbZwnS4B9W+QN0VKdbQ/CXH/OR+Wzi20YYXrUJXnFa0H96MABShAAQpQgAIUoAAFKEABChwNAiqFkBMFKHAUC6yVB+id1qsXfl27HkVSI0J/2SVga5ZgrAomx5hNEug1IU4yjWOkHIWqYayVpZAgsipZYS8qhso+thUUwClBXSmKLMFdu8R4JcArwWG1TauFLCUuzCpQLH2pzGS3BJTVu8Sa5SVfNxIAVvWS7VInWapZyD6eh+yZDG6puSy1kWUcKmJsLyxCSXGx51gqpC1BZpe8VJDZIcFst1sykiVb+ufVK3D5hYOwaf3aar+CLQddh/Hjx2P6E/MxuInnSXfrlqXDhroYMryjdvwti17Fc+97xtKqX1/UUlH2CCdj3T6IG90Yzq/nwr4hI7y9zVJiJMjkOvADcm96SILINsSPGI2kOyfDdFKQhlW0qrLjGZPaaFnOxRs2o3j1MhjbnCbZz5KdLMcv3rAJ9jXrZF1fz4MEY1sg9fFnYZ18pUTkf4bt4fuQM+MT7V4KOdwQDiHbcwMFKEABClCAAhSgAAUoQAEKUIACYQkwiBwWExtR4MgUyJYM5LGXj0bO/n2olxyHBilxSEuNk3kz6tVKkpNSgV1VakKCoiozWAK0WrhXBY/lpQLLKhDslBIVKsNYBZxVNrFbsoTVvFMiwW7JFrbbiuGSALJ6OeXBexL3lWCyBKhVrWV7sfTpCSZrD+hzSxkLU5z0IZnH0o96qZRmg5bWLHWStf5dsiylMGQHVVfZqQWOpQ/pT1KnUayOoxKVZexbN2/EHbeMQ46ca3VOBTkHpG60Hfn7t+K3TFWlWSZVg0KmZj0Ho56M05WzS7KUVUjUjEH9O2jbVI3kTT9/j29Xb0Kh2hTGFH/2RK2sRcGs5/yCpsZarbQawo4dZTWTVR3h4g/zENOppV/WsjqMI/0zLbO39mOTEXtKdwnYShA3N4wBhNHEIPWsA6fKjuc2pCL23Poofv1F2BeWyLxEtCX7Om6ErHtxDkqWS2b6WV18zsMCS9c+SL5ngdSL7gDXpsVaKYxIHQLHyWUKUIACFKAABShAAQpQgAIUoAAFIhNgEDkyL7amwBElMPyC87B79y4tQGyQmsNuqVPslpIUsZJtbJLyFd7ayBIg9jzgTtZJCE/VJVZfDi4JEKtlrd6xCvJKANcgQV8tcCzBYhV0dks0VwV7nZJWrNqrbVqEt0TqA8s2FQRWWcUOKY/hyVh2oKhIyirIvqrchSpPIXMyrhgJHEv5C3OsNr4YlQ0tgWj1wD0tm1mWVXs1XyLjlfCyjEyC37L+dwkkT7jykmq9NvuXyQMJrxiL6yc9gq3FKtgO9BlyJuKFxZDYDv/tqT/0TULzTYegS13P16tt2xeY+cTzePmpmfh8ixQgDmNSwdakqaPKtTTWOR6GFlIz+f6pcGzdI+Ut9iDv+Qe0QHP8gE7l29dvKddLHpwnZTZcWfLQukUPwfW7Gm+5phGvKNn4M+zp62Bf/6P2cqRvgimM48V266YFwlWZD70sR+yJfeX4njrSsW0ba2NxZSyDbeEyKX2RqY3dueegd4yROnh35AwFKEABClCAAhSgAAUoQAEKUIACUQmwJnJUbNyJAoe/wD2Tr5Ms3Q0wS/arRcpP2AqlFIQK8qqhSxDWIEWLrVYrzHESiJWYqAoAq4CsKnGhylk4pESFKmnhkNITsruWZSwRSWkjWcLSi0WylFUms3TlmaTchMR3ZSpdr7KbVeqx1Dp2a6Uq5OtGAtBG7YF5UtxCgq/qQXrFDqmxLDtKeFoblyqfkZSQALscv7i4UGunPeBPso+1+swWCwptNqm5rB7ap0YgR5Qx/br6e9xxw7V4aN6znvFU479xae1w4SWX45yuDbxHOWXIhXhu1Wvach95oJ4KLqspNqWhZ0b+TasjJkEmiaeWm0xp/RE7YimK397jKe+gWkjWbspdDyLviXtR8MCd2j4qGJtw+yyYVB1hyXrWmlk9WcLm1udIeYiVsD02XVuPBlJbeGQbFC31LOr/Gkrbe5eDjEffpt6NtVWFiS9gk5c+qXHUenpKpcczNVTlK76EsWN/GNWQpQNT2slS5uJdOc9TYKrnWQfYYX/nDXnpR4iB9bZ7VZK3TJE56D0Ec9a38Z0CFKAABShAAQpQgAIUoAAFKECB0AKlYY7QDWSLbxt9PvDdk3Lnaau26S+1Xp9X72pZX6fPB3v3RKE80ajAeRX4Vvuo9WpevQd76W062Wy2adKGEwWOGYG3FszDk4/ehcyDkiFslxIRUmv47zwJyqrSEaWT+kAmJSbAGm+VDF+LBI4lC1kyfUskaKxVtZCPmXqAnapDrD7G5hiVMSz9SR1kPYtYq0QhZS1UyQu7PHBP8pIRY7JI8DkWquCDCjZr9ZFlXj2wT9VNVsFh1adFgsHJcvwiu9Q/lrIYxZKprDKkVRazCmjHxJqRl5/n+bBLsFnLOzbFIC5WBZELJIgsNZmlLrMUkUAsHDDKskMGdN+cpzBs1GVyxJqd/vpmLu5+5VcJbDfFg888gGaxStgzuWS8hRL4TChLVtY3Rf3utkvAWC6CO0q9AAAgAElEQVSFUQLuZVc1RHeqrYq+inmNTFV5PK0vGbUlIejQI3II2gNXUoACFKAABShAAQpQgAIUoAAFDk1AkvRU9tZGealwiAqkqPdgL/VnuHobfV5f1tvr+6v3UC8VCtC3qXn9pdbp8/q7rNLaqne1Tk2B777rtAaB/zATOVCEyxQ4wgW+/fpTPD3nPgkKWyQeK9m7UsLCKAFgo9EhtYhVaQgV2pXvClU6wmKVdmYJ8MbKu0EeeOdAfn6uBIUlL9holuCzRStHoVJ+S2SdUz3gTmUzS9DYJYFgifdqX0OxcRatTrJa53I7JHtZgrou9dA9l1YH2KjSlb0xVamlLIvFhUb8nX1QvjmdkkksY5KVxZK57FJP25Nju2Wd+uaLVYFPlf0sY1dt7XZ1TlL+Qv7PIA/1U/WZJXStlekwSLtpN41HsxYt0KN3nxq5kn8tfw3PL/oJuzKyteM1PHOkXwBZrTRaJYBcxaMxqKCq0KhLUOkUIgBb6X7RNqjK41XSV0QO0Z4P96MABShAAQpQgAIUoAAFKEABChzjAgwiH+M3AE//6BL4fcsGzJ89DXGSeZxvcyE3rxB1UhIlMzhGMoRNaNy0OVLqpiI76x/YbCWwxtVGcZFkBkvgtqjYhiKHTatbHGOSgHGJyhCOkbrEnuR/u11lKHsCyKr0hFbUQgK4MSrY6zAgTtqpUhgWCVLHmY2IlUCvejCfKkGhMptVtrF6QJ5TgsVqvkT2VbWNVXDZ5SrRgtUlEqC2G+xS4kIexidlLSSJGraifJk1SkBbAssqO1rm4+Pj5Xc7+YFOgtuq9IaUX5Y8W8m0NUjwWsp03DZ2NJ5753/o0OWEar/AWX+skgByvnYcU5P+uH10x2o/Jg9AAQpQgAIUoAAFKEABClCAAhSgAAVqUoBB5JrU5rEoUM0CLz3zqNQRtiE23iJlIkokwCpZsBIQlv+HhLh4DLlgCM45fyAOHDiAjIxMKSdRFw/eNxP5xUUolHIS6gF5sVIuwiQZx0VSjzgpJV6C0Cla5rHWrwRw1cPtVFBXPTBP5TSroLEKUptlvcUSLwFkyWw2qTIWRi2IrKodu+SBfOohfHYplVEi4youKtYyilUOsV4iwyVBZZVXq8pd5Ml2h7S32d0olFrINnmVSETZrrKOpZkqi6HqLJullIZFTk5OTwLI2r+yHijIy8Wc+6fhufcWVbM40P4/9+HOnpmIq5uGpvVSq/14PAAFKEABClCAAhSgAAUoQAEKUIACFKhpAQaRa1qcx6NANQls3ZyO37du1DJ2JQosAV318DoJIKsMYUsM4l0mtOnYAcd16ITGkukbn74FHVq3RaOGyXAWHkS8lJCQWK1k+EoAt6QYLY9rjq6dOiI1OUnKYEjQWIK7qixFUUGB1C8ukqziEslWLtYCuCqoHCdB6qSkWnI8s7wkdCxVyePi4rQMaBV4VinHLlXHwlmC/JxcZGVloaRY+pCAtUPWqcCw1LKQYHYRCmzykhrLBUV25NgKEStlKmySbuyQTOgSCXTbiiRALsdUR5eka8l6NsIqwWuJK8tLAs2SpfzLqhX4ccUydK/mshZxqXXRRl6cKEABClCAAhSgAAUoQAEKUIACFKDA0SrAIPLRemV5XsecwJuvvQCjZBEbpD6wqhVsiXUhRgKt6sl0qqxEvMUkpSdMiLNakXsgTx5iJ0Hm4nyMHXEBtm7YhKVLlmLv/lwkJFsRn5iKdp3aom6dFNRKToZVHnLXsHYtVYIXhXl5WrZwkb1Qsoudkuks/cqD9BKsiXJMqwSXJRVYjunSsprjtEBygtQEVoFkGRnc8jA8h2Q9Z+7bhyzJiC6SrGOVReyQILVLy4AullIcNuRJsDpXXvszD+Kfg7nILixCsSp3IXWXVc1mrZxFaWBadtWCx3EWlSEt83J8ldWsspHf/HL5MXcv8IQpQAEKUIACFKAABShAAQpQgAIUoEBVCjCIXJWa7IsC/5LAJx++i2x5SJ0lLlbit3GSMSwPyZNSECpLV9UQlsRgyUw2S4BVZSXHIVkCwy5Zzvt9q2TRWnHyoAH479n98eZbbyE2yYqcwjwk16mFhKQkWOPjkJqQgAYN6qBWbKz2YL1iCQKXSORWxXJNMVL+IiZO5k1apnG2ZBnbHXYpXWHXspYLcvPgSC5G7dp1pR5zHaQkWqWGsgON6tdHZkaGjDtLK5ehylTIwCXL2SElOezIs+UjMysbVuteiQrvgTPLDZvTgUIphSxh5FJpz7vsBosEos1GecCeBLXdRjlx6fD3TRvwyduvY8iIS/+lK8PDUoACFKAABShAAQpQgAIUoAAFKECBI1+AQeQj/xryDCiA5596HG06tZcAcawEUqUshB2S+SvlJ1T0WOUmq8CqSg+WQK9JAqxJEkg+mJuLJAnYJktmcoEtG82atsCN46/G0mXfIjMnDi6zRSuH4SwuhkmCyMkSTFZtjZJhrKpSuKVfdbwSWXA43IiXTGSz7FMomcUqC7lAgsB52TnY/sc2bN+zC9slyFu/QUN07txZ6iwnIylB+qpXD4nyHiPjdEqGcZwcwy5lLVSQ+mBOFuL/3i8BYSMccixIlnWR9HtASlzIkvZSlz5RIuWp8fJYPRXElnIYUi0ZLjmWKr2h2r0wdyaDyAqKEwUoQAEKUIACFKAABShAAQpQgAIUiFKAQeQo4bgbBQ4XgScem4k9e3ej/fGdJKhrhiUmXntYndkswV+p7WCU4KpRagabJQsZEoQ1Sa0He5EDJTk2CQrHSUDYgNR6dZAnD6OrXbcuBg08B7/v+BNb/9yBPfsPIDklFbXllRgbp9VGNqkSGdKHW/pzy7tZSmXESWkMdawYCd7GSCDYIEFhq9RDTk5MRkpqKjL37sHBrIPIlWPs2P47CmvXRrzUUI6VB/KpAHJSQqIWFVZBb4s8PE+9x9osEpi2SomMWCRKdnRcjgUpyVIWIzNbAsUSJJcIcWq8bIuTALJaI6U1nPIwPjlFbXJLVrJ68N/fYvPsYw/h2lvvOFwuGcdBAQpQgAIUoAAFKEABClCAAhSgAAWOKAEGkY+oy8XBUsBfIFseTvfqi89J8FRSgyWAa5LAqdEgAVWTzEtwN0YFj1UgWa1XD86TMhIqO1dLJZY5swRoSyQbOa5WbcRIzeOs/X+jXloaOnVojwMHs7B7bwZKJPM3SWoax0vbWIkfm+Q4bunXECP9qZRk6cdpl1rFhcVSbiIfOVIz+WB+HvLkoXm5uUXIz8uBSR7AlyqB4Ab16mrB5uzsf1AkWcvxUn4jPs4Km6qrLON1SW1j9eC8AwcP4K89e7ArYx9+++M3/PbbNuRLTWR1zGSzUYLkBgmAW7TsY4NkH8te2nmpoLF6mVRtDDlRt4xVFvHOgqcxcsw4JKfWUmcf0bRvyxZkSn/eL0uDFY1bNkOyPLgw7KloK6aOm4EMuU4XTJ2HCzskld81oM3Qdll48Op78JtkaF95/zz0bR5kH72XgH2D9q+3jeA99/cPcOODnwB1B+KZR0YgPsxTztu7BSt+SUc+ktG1Z2+0rSc/EgRMruyd2LDLjjadW1fY7/6/tmBfjhv1W7VHw4TyA1DH+vOAXbZ3Cbo94LBRLNqxY/MG/LEzEyVy7dt064aWAedTVefrLj6An37choade6JpavlzjWLw3IUCFKAABShAAQpQgAIUoAAFKFAlAt64SJX0xk4oQIEaFVi9coWWQRwbH68FiVWg2KgCqhYJGktQVtVDVg+rU7WGDRJQtdtVqQm3FgQ2JybAJdvNko2sHsgXn5os600olDIXMbJ/7dQUFOXmo17tBlrpCbOUwTBL6QizZAm75d0kQWCTBDjVg/HyJFCcsTsDuyXwa5dMYGNSKuod1w5/bPsVPy1fjiSTA/USLejUuQPSGtaXh+2ZJWNYsqEdBqnNLA8DNLhQKGUz1AP1Dkod5O07d2Hbn39i587dEggGmjRtAqO0y5Cgst2uAsYqVKxCySUSNNfixFICWQ7sjbu5ZL3KmJYV8mbLz8cvq1ag77nnR3Z93AX4dO5sLC9UgWr/6dxx0zHylCb+K6twyWUrxF7144BM+21V2HEUXRnjwt8p46fXMPXJxXLdUpCEXCx8700JnM+RwHltbyf7Nn2GKTPf0drcPe9xtE70XjhvG21G/D+Z4fGvde4kzB3Z2W+7wX0Az981C+tKnBgkwfnhwYLzfntEtuDK2oA7bn1EC/4bzClwO3KAN4D+42dhdM8GWmdVd752fD5nKt7Z7JBz6SRB5Ap+NIjsNNiaAhSgAAUoQAEKUIACFKAABShwyAIMIh8yITugwL8n8NUXn8rBJdCoYo3qTQVwVZawKhMhAWGDqicsmbpuOGGS4G/mgQMoyMuXYLAZiLNIwLdESkUkwWkrgEOCzQV5BbBLG7MEeY0SwLTExEipCrNWdkKFbWNM8mA+yUg2xMp2aWORZbdkLNuLixAjx2rRtAVsMoZW3XvB0qAp1m/LwP7sXMSlmtG8dQeJ5zols9mGWGsqUpMTkZScAmtCkvYgvINS8mL79j8l83gHdv99AHmFDliS5WF8ifGoX6+2BLwlZFziQs4/2do5qbCjUT1AT8YludaSXC3v8pIkbBm7rJd3g6EURoLJy79aFHkQWXpPrSMd7ZYZmVKSzcjJlXRpmT5/9hn07PYAWsaqkYQ/afZhNDcktsODD03F7px4tI8gOKr3L2Wl5WGKYRyogiZWs1Xb6iqqoJHPJoMrAy899Q0snUbgiUkDEQ8JAs+8Ge898iLOfGEiasl1WPfufXhs0XbPXoZ4n72Dz6Y2EN8dwIEl3yFzRCfUUz8MlE45237UAshqMYI4t757pe9GazJad+mLq8aMlAdQxsqtVno+r3yFYT1Gw+quuvPdu/JlLYCsBsX/Ya700rABBShAAQpQgAIUoAAFKEABCtSwAP9btYbBeTgKVKXA1199KRm4khmsgqcqq1jKQkgIWaKnRgkaq9IWEvqVyLJJ1pulFISaryUPsouV2sm2Jo2R/+c2pEpA2F1UiL+37YBNgsEq0FurYT0JQkugWeopx0uWs1kC0ypIrMJ3BunLIFnIBqmRbJAyGZJ0jCbN3EiMl2ByoQSr46V/aZci2cp1E8xo27wROhzXEM0apSFJAs9JSQmoVSsFqZL5nFqrDuLr1ke+ZB/nbt2ClatXoaDYiZjkBqjfsC5Wr14NU3GO1GN2o7Y8hC9bHtTnKJEgrpZZLWOR0apJhYpVprXkWGvLEk2WGsmeJWWg/m/ZN194tkX5b4uB03DfiLb4Z9PbuHXm5zC4dmHjrny0bJqFuVMewzZbHEZMm4bTVNmJoj8wd+qT2rqR996L3mVJuFj7zav4YeYP2GuXa9a4N+6eNhYtgpRpQPFOvPXMK9hpj8H54yZLv7FI//J1PPPWMuTL9YZUgm7cvhsGD78cvRqXnZRv/4htiqtuvQ192nvKeKjM3U9fmId3v//Ts4NsHzXhRpzdwZNV68zcgNkPPorN2VJbOq4dzjnF46v3rmfm7kUT3D7nAXQIKLlg27lRK79xzaXnlJaoSMD5Y0bjg0kvYd3OYinJIfeMBGbPGDsdw1tsxvg7F+pdh3wvlIc2Wps2hX3XGny75TK/bONfFi6Ue9GTIeybK5771xq8/OJH+PmvvVq/dbsOxKTrLkbDmF146MZ70OSyB3DZaWVZ5AfWvY0Jj2/HPU/c7p8VHdsMV996RdnYDAno0LkR3DvlsyFTVZ2vK+tX3PXMCnQdcB4yl3xedjzOUYACFKAABShAAQpQgAIUoAAFDhMB/wjBYTIoDoMCFKhcYO3atZJZnA2nwSw1kSWwK/8XIwFelYGsaiCrwLFJnj6n4o0GeQieCiqXlEgpCC2oKlmqKUkocJbApYKt8qrTqDFandBNHq7XACm160r94FQ4nZ6H1WmdqMf1yYPrpHPpQ15yDJnRsp4TpK96jRsirVkaGqhyFZLhvGvdT+jSuB4uuWAQTurUEVbJaq4lNYlP7HUq6krd5QTJgFZlMwxS41hlT+flSxa0ZBo3a9UWo64ci1h5KF9uYQGMErC2O0pQXFiIIrUsGdUGyUCWIXuCxjIGFU7W4qqlbCpwrAWPZaUqd6HC34VS0mLrhnWVw4ZooZ5LqKbUui39M0XdhdidnS01oCXr2lt2osS77u8cT+ayZ29g24oVWgBZLTv3rMBdk15HoYoJB0xuR6GU9ciQEh47tX5zNr2LR978Tgsgp6SkSGsH9mxZgwO+Jy5rfftH8S68MPNR7CxWWDl44dbJZQFkdTzZ/sbDk/HJ5v+zdx0AUlVn90zfmdne6W0pSxcFBBt2LMTEXn5LLIkaY6KxlyRqUNFEY42JJkpiiyUxKhbEAqIIAgoCS28L7ML2OjszOzP/+d7sLLvL7MwsIKJ8N3nz3rvv1nPfeytnzpyvjqR4Ce6/OUwgyyUTfZZnflIkh62pvmx52NqBBPo3JfWt+ZEDv6+CqnLeB6Lebknm1J6GeriyMYzDyFOvw6UkcIOe2kiRmHvCi/xRp+G0QhvefXU+Zx1OofpVeHVpIyZfeia6ySK3SZXrvsZG1yBcc/MtuOnKyahe+i6mvsy1d+Rj7AArPnhhJuoiuFFdPPeVWTBn9EePaGR+m3YBH4qWbeMXJeHMvTJf9v/s3Y8h0Ptc/OL8CfQEb9ehnigCioAioAgoAoqAIqAIKAKKgCKgCCgC+wUCSiLvF8ugg1AEuo7ASy88z2BzPga3Y2A7BrgTD2DxK7bSz8Fmod0ESWSzeDuQbTUC65FIbWhoMEhjodwcokhOSWVdFiEh7OrZkxYUubSpcMJClbHYTCTxOEBfhCDJ52b6zoo9hhC2IvgV4tkgkUlOW9mWKysT7hwqi+nl6qLFQ4Y1BLe/AW5fI6wkgF20xQixs5qyMiPwnZ1eCyGS0iE/2yXNm0pJc15ed+Rk5cLBeUw64jCMHT2CQf4Go2ePXsjNy0czy4ttRZj/CyuMjcFwQC1cchhIDpFNEBPxTWYJVpCxv/uff4ev78bnxs8+wIy3puOW25+kEzPbJFlamB8OGEeufpcULU8K5R56IZ56bjpuvWiiUcfcMAufbarbpb6Q1m3b2LJslVFGvIZ/fNUdmP7ck5j62/swuaC9d66170n483PP4aGbf2SUF8X0wvX18Gz6HHMqudhUMP/svr9i+vTp+PkR2UaZt96aj5p1nxsqYsmYcu0DbP9RErft7SbSBh6Li088EkdMvgzHD9k1WB4jH5KMLgWdSNqkZpAH3qPkd2XhsCmTEFz3MtbXh1nWksVvodYyDCeM6L4L8dr3mJ/hoVt+irFDCzFswnn45QlUsS/6hmS9HeNPnwxz42wsojJaUrB6Nd7a4seks4+OGeBPypYsfAGv07P45Itbyu6F+Ra9/SfMrkrGrTdPRpLPs8dYyTg1KQKKgCKgCCgCioAioAgoAoqAIqAIKAJ7G4EWbd3eblbbUwQUgW8bgW++XswuQlTw1iEpM506YbKmJI9NVCYzXB1VyDbYqPRtIqNnI4EqCl6fX9g9sXkQf2Ned6eSYw7yGPQqbqAHsQu2tGT4pRzzbVQPi4633uM12nDTVsIgkYWxpShZFM4hUROTxCY7Le4XCFFKaU92IZ22E80NVLj60tDsc5KoDiE9J51B+uxGu2KtQUMHtsGxMSBgdnYOrTNcVBw3YtGns5FMv+SjDjkI5aVbsNXsQyqtLwLLl7NTC+vJsGQAPAr/3yCKJVuGZjKUqcSA5LgQzjJOidC3ZOEXUmS3UqhyAV55bWfV4y77Zdj6IEG/4EjNI48fb5CVhUcfh27PzzOUvbUJsKyFk44DZvyDU67B9PtvxHRaUVx83bU0lmifTjn3FMN7GP1HU6H7ltG+lNixPkxCi4L5b7f+HH9rU81XWoLN60qNnIBtHI4dk2sAOfmM4/G/P7zZWjJkysYx51+GY1pzdj0QklvsTNqm9lR02yuJHftrm5FdeCTnMwv//Xwrbjk+A++8WISs425CFtXDHeFrKluHj2bOxCcLilDZ0MgvKvwwZ4ctKNIKjsIh1hl4ZdY3mHTZWGxe8CH8/ELgqNGcc4xUU/QuAwZ+grxjr8M5I/NaS+7JfJu2zML9r63DjxkUcDCDC5qCVvpIk+YXz3JNioAioAgoAoqAIqAIKAKKgCKgCCgCisB+hICSyPvRYuhQFIFEEdi8cSPWrV7BwHYkhknW1tIKQpwm6AYBBwPfSVA8UR9bhQQO+GghTCWuzQS/jxraAAuReQ2RVLWmZcBfXQl7Shoaq8rgqamkWjiEBp+X1LGQsFQvNzXRhzhgWEoICe2kBUYoIKyzHyEJskclMrlgQ1Esit9QgApP9iG2GXb6LbsYGM9EaiwlMxWpOWk8phqWBHKQXrfmpCSDEDYC9pE4k+B/oh62BDlmXz2cbDeJctz83FwSfWHPYxm3jD/s92zQyWyT/yMZHWJwQLKf3PPYUAcLoyx8qFw3Yd3KImwr3oTuvfokCnVrOfEvvvCkQlpwZNEXt5B+z0YHrdflIPJCFdKyLjy0dtf35MScexQevy8T/3rq75i/qcqwohAyufQ3D+D8QdFaFr30zuRrsZMQJXK/4UPg5vqZDLKSBGvuAK7feqOwyeZsnQcQDqy3s5XYRyHajnRMIWYJybvrlY4lOz/nnUvl9yD8aKILf3njY5QN7YdPPc34xXEDEfKtaVcxsGMBfnHjEwhmDMdZZ16E/t3SseaN+/FaSbiYEOFTzh6KL1/+H8p+OhSfvFEE1/grYwZIFAL52vtfRuqESzH1otGt/e3RfGlj8fZfXjbaWkaf7G3vmNDkXYUyPkMfPTcVawadhKsunBhXHd06GD1QBBQBRUARUAQUAUVAEVAEFAFFQBFQBL5FBCKcx7fYhTatCCgCexuB4s2bDGVwemoyqmobUE+1ZdHKVRhY0JNdhVXGEmjPQq9hUoVUAZPnpdw4SK9iw9dYGFYqeh2ZmfRUJsHXSDsFkp4OBtETZbKfP6sXMtlOktjpcpFI9sJNQthPcjhAQtki1haWMBks5YTAFbbWJLJfGYEQzSShk5LdcJJEttMew+pOgpk2F6Fmksy0xxAf5BC9jUMtPs3i5SyDkOCADrsZDnolO9iniRYZtR4HtjP4ntG2oT4mWS1cOO06pOeQqJmDQjJLpkEp81Pa4yfnJ+Sy+CKHSCSXbi3eLRK595hJOPqIXdlaIUkjPrYVtWKKnIJ1C2a1BL/jaYc0e9ZiWlAchbL5c1pVwokIT73VJfCmDcfVd/8ZV1Ytw23X/9Gov3p1DbDrsDr0CvQY3J95y4iBCydfcj3G5QhyFJA31MDrSoN/rbCs62n18DmtHs5iELwULPnsM6NM6weJzxWLv8L25kwcOm7oLgRnaq9hsIXewfz1VSgYGY4mWLPuSwOLgmx3azO7e3DQ8afDPPdfuOF2tpB9EkZkcw5hV4rWJjcsfs9QFk996Ab0avFKXtfBvrnPYVOQ8tJ9ePGFF7G0sRnnHjektX7HgwiB3HfydbjrvJ0EspTbo/nyFwM9hk/AoX3F0oXKf0qQk3xC2vM+Nznh5Jc+be1MOo5LzxUBRUARUAQUAUVAEVAEFAFFQBFQBBSBfYmAksj7Em3tSxHYSwgULVtK4pbKV3JoQraSJcXs2Z/ClTQJhQXd6DlMiwpedwhRS2LVRIWvEKl+KowDogJm5ZCofrll9OmL6nWr4Qy5SQL7aDVB8spuQW11Pa/b4PMF0Eg7Cx9JYPEjFhMKM72NgySKTQaZzJ/eC1lH9XOIJLMRqI8ktYWex+4kGhtQqSz9m5zyE32SZSSBQ5RMS1lRSZuoGhbLDIsQwRybjWOWenbaZDgcdphJKDNuIEpJIjcHw4H+ZNwyhzBpTSKZVhnsmSMjiS3tkEDniIwUzuMhy4t6eV3Rcow59PCWq4nvDKIvSnGzOwvdOZ4yYvHJkzfhs6c5S06zY4oQzWXz/oHLuUVSwH4YDh9Af2Hh1juol9ueF73xBzz8MdXZ+b1QQPK0RDypmXKyhHhs2KWuXGtb391i47CwuQZP3PBTvNSrN+y1pSit8WEy7RTO7TW8xf7Cj2d/ew2elQY6pMa172Hao2F7i6rUx3F6YXs/ZlPKIJzBAHgvPzwN/W//DfqHVuPBhxm0rudJKBTCdw+Ts89YTHC+iHmeQKcexjm9+9MW4gN8sWANkgZkYNXHz+KVDVRby/crLcmUPBhnj3PhH7PmIuiivYXgHyUFdnxmKJBD5l6YPMqOJYsWhf2w+cVB3uAx6JW+J/O1Y8J5l2FCm35NwXX4zaX34KiLr8eUgqQ2V/RQEVAEFAFFQBFQBBQBRUARUAQUAUVAEfhuEdjzf9V/t+PX3hWBAxKB2tpa4UpJogaR7LAik4rkZjKXc+fOg6dRTHpJpJIwJf/aal9hp7VFwO+Dl4Hy/CSDqR9GDQPtNVMBnNK7j+gfyUrTCoPEbQqD5Fls4e+YmrxiZ+Ez/JQbmhrhafLw3M9ge7QYYFA8sa4QUpiyYqGXydXS59jCduxumF3JJI9bNmsS8+3hcqwXavKFyWQhQ+nFYWd/LpLHJpLdTiGROV5ROFsp07XS3znAOs204wiwrATYE/VxUMhizlFsNITHNjTInLckMzPEwoJXw+c8luCD9XW1xnlXP5JSo/vUij3C5XdehJyWfoVALjjseBw5OEwCphjVaC3CoYSSBuPUkw9t7TpoGYyb7r047GFME4mI8jSsTG5/njHgYKOep7QY3yzbZBwPO/ZSXDpJ2NH2ZcMdtM+TcV7zyO9x4sgexuXK4s0GgQx6Kw9Ks0OI1dtuuwDJLfOQwIE/vvAUY17mFj7TkZYfbpqf3bKi4WHHydfdg6N7leGpe27ETX94GpXdJ+Ke287ZRbVsNETFLe2wYyaXK7ye4fJpOOmsobzVeuHYVg9jK1LaFEkbcCxV1Em0ipiKG264Ac/Mc+PMk/XeFE0AACAASURBVIci2MG7etzJU4wmh556dAv+uw6joaY03C2DEz41bRoeevRRPMrtsScfxbwSkTfv3fnyOxzjHjA8yXcdjuYoAoqAIqAIKAKKgCKgCCgCioAioAgoAt8ZAm3+6d3pGNqWiRx33EfIaMlvu0l+x/NInuw72+R36HJN9h2PhdmKXJPjSJmO+0iZYY2NjbeznCZF4AeDwEP3T8X0p5+E10silk+YhRYQ2yvqhIvFwAE9cRqJsYaaMixbvhLLV5ZizEGD4XKnwOHOwcNP/g1ptLHweBtRsr0EvXtSkUpbidry7Vj/5RcYWtCfBLIJxevX471ZH6OB5G2vHt2QQVuKLNpT5GdnIdnNAHwObinpMDMYnthSiGeGKIONgHlCLjNLiFx5A4SoPpYiIV8D/FWV9GGuIVlmJWHN3/DbyVBy/HXVtfjyy4Uopt1Ej/x8I7iYifl+EuUVtTX4csk3+OCjD2m/ISS1kNWsxvalCzOJ5yBtNQJCSBOQJNpyGF2zX5NsJJLtYpfBuv931XW45Jc3fCv3QgNJeZPNDRe58lhJcBCLYre76xYPXiH+2biddePwr50OQfr3CFTNNo6h42B9aPQyGKMjevvBRtaFG7wFYibBQtLuzDFmwwleDOMUbX7hBsoWPosbHvsMNzzyNEak8ybaw/Rdz3cPh6/VFQFFQBFQBBQBRUARUAQUAUVAEVAE9gABl8s1ldWXc5NgTWRnjL0cd9zkn/SRMpHjyHmkbKS+7DvbRDEXuSbHkU3yIseRPbOMsrKXPEkd923zjAIdP9TOoiMieq4IfA8QWPD5ZwYxKqpcsX2wUcWbneamstiLorXFyFywFCOH9kXIlgQfiVURCosql9QrrCRmhWAVlbLbSZ9iqnkNRpZk7h/+/CjOO/kkpLmSsHXrJkMdXFpZgcamDDhpcdHQZGbwLx+cVCvTLpmWFFQj09OYRsZhIllkwUwmS/idFTLx/UfLCtkCtMUQArl+x3Y4SOaGqKAmP8xGRD9sNojf/v0HYMuWzcbcLDQzphEH7ZOb0dDowfaycmOchlqX8xYSWeZjCGd5HFYdi6WFUMZsloQ22WUeBzlfC604hNQGvv5yLq9+OyRyooSpiSrtXbhbjiqR5CB5TOj3KEn/BgcctSE7XFzfzpLZxbF3drFNfqJYtKmyVw9j4RSqX4Unn5wD84ALMGQvEMgy8O96vnsVPG1MEVAEFAFFQBFQBBQBRUARUAQUAUVAEeiAgJLIHQDRU0Xg+4CAoZskSSpB44REDdIrWL5UyiCR7CmvxtwvlsArvsM0E27wNqN4WwV2lNNP1+3BmzNmIiM1FWlpSehD1bEQsbJZKBXeXLoDDz3+BOBrwvEnHIf09NSwlQT78rM9UT77aCkRFAsL+iJLgDyytexbgvhRFyubjIT2FyaRRZMlDvr8CDRWw0QbDc/2MtiYbU+h/3JSEoln8Utm/5S1mlneTaVzcnIKSe9mOII2w/fYS38ID/vcViLWAjLzMIFsITEsSXJCJKIN0thglI1sctNCTosSOWyzYTDIVCVrOoARaFqFX1x5nxHoT+w6brjq2N1Wcx/AKOrUFQFFQBFQBBQBRUARUAQUAUVAEVAEDkAElEQ+ABddp/z9R6CElg9Bkq5BkrRiHyFJCNPM9BSqdptQWd+EBVQjR9KKdcVhspVk7+cXXUo+1YK+vbLxzofvGWpfoxxluhKsTqxjQyR2vSSmaxrq6TbhhJ+EsYkB8vyU8zaTQJaYeCa2YfRKpbOJZDKdio0yQgobPsVCIpM4DtE2A42NVCxTjUxPZht9l/0ktmElCS6cM9u20v/Y72+m5QUVyvyfeMIGKHX2kbhuIgldVl5OJXIlywndHaCyWNTTxqiNMRjcMc8NipmktpyHNxLULCoksynsb4HG+t3zRI70pvvvMQJJ/fDbu+5Eld+K7r17I9XeehN9jyelQ1cEFAFFQBFQBBQBRUARUAQUAUVAEVAEvn0ElET+9jHWHhSBvY7Ali3FSHLYqPYN0HqYQfRIkpICFlcJ5GQwkB17rPd4DbLYR4LXSQuE2vpGkrRWjBo5AuvWrKNP8igqjdONsRlaYpLCdqqDfV4P69NCwuOBnbYGPhK6dXWN9EROhdNpJ4kcYF6A3C9JYhLIZvHKILFrMpMYFusKRkozSVC+EIllKoqbGYyPEfGYbaM62Iyqqmos+XoJlq9ahVGHTcCAIYVIrq1HfW0dqiorUbJtM/r06cP2WdcfQqOnEVtKttOn14dkq92YK6dLIrlFfczeDTG0zEQmTrVxiB7JQpRHAusJNW1c4sf6NSulpKYDEgE78voMQN4BOXedtCKgCCgCioAioAgoAoqAIqAIKAKKgCKw+wgoibz72GlNReA7Q0BoW9lEbWvYOPDMENpSdesgWZvhdiDVZUNKRgY2bd6CPv16Ycmy1SSagSMmHAZPbS0GDy6AkypjYVeN9tiYjSSyv55MNK0kxGc5KcmO0u3ldKlwk1BO4t6KusZ6Eth2pKSlwWYQtaSgxU6DhDFMdkOFLG0absRia8EjGjHDbGeQs5xsVJZXoXD0aBzxo9NoWxHCSpLJRSvXoLS0FCXFG5CVnWnUFbLaQwK8vsmLTVu2Ga7zhuhaVMiS2EeYJJZDWlYIk8z2hFGO5If9lo2irBDOD9PJRgv6oQgoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIpAAAi1sTAIltYgioAjsNwj06N5TaFNjPEKgGiSqUK9CoHJvZkA5izDMQb/h+eqto4UDGdgAidmFCxfRjoJB7qgmNpN5FjuMAGlkaU1IZLGrEI9lN32Ks0hCNzY0UIlcR1sJEsIkkb3NflQ31MFLawo/t1BzgEJjL5tvRsjv4TmPucHfRFEwLSr4ljHbGaiNKmJ7Sgp6DxuGnH79aFXRDGuSA0FGylu/ZRPmL5wPC4O2OemLLGpiserwsf2yimr6OVdQG80pmITulpG23XjKWZukI8GC8xYf5PCeyLQ5lnr9Bw2WCpoUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEEkRASeQEgdJiisD+hEAP+rkGxNOhNZFU5f/DClwGnmO+zcZgdySV7RQWJ7scIFfL/CAGD+xP2wkvyeF6WkV44CfRHCBh6yXBzOh4BoFr5z47Kxvdu3eDlWrj+vp62ls0wdPkg92dDB+J5ibaXDRzI+NsEMWiABaiGj5PeAv4DXW0mQpms82JAG0vGhoaUVpVgTWbNmItLTmWrlqJUlpYDBw+gtH2HGggaWxxuRAgue2hirmWXsql9EP20C/Z+NkE+wq1BMczvKDlWCbLzaCQSSCbSSaH/Zo5HI7J2AiOQbCTUHalpLWipgeKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgC8RFQO4v4GGkJRWD/Q0CIU0nihSyKYyFPJaAdSVIhVyXLyiB1kizcW5nBywbxbJCqVBo3kRT2U1XsIDEb9gw2sY4VLqcLOS4n8nNykZ+bRyI5H+s3l6KJthKiQm4OOUhKuw0lsV/8lknQigpYCGqxkxBuO0Q/YwTpj8zjeiqZG+rqUbJ9O5q8XlRV16KOpLTNnoSyHTvgovLYYrPD4XRScVyO9MwMZKamGHOopx/ytu0lxvwkQwL/mcWywpgrG2eSubJHgyQWb2YecST0ihYFcst1CapnBNbjOal1qaBJEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFIEEEVImcIFBaTBHYnxAYOmyEQR4bBCo/DJWtMUCxeyBhTOJYguiJMNhCJbEhFWY5USpbSPiShqUyOIBUBsuzMxCejWWdDgfS09KRmZljXMvLzkEmA/INGzKE515U11TR1oKK5MYmksF+qoo9FC5bSESTLGYgu6BYW5AkDnEvSmex0mjyNOCrxQux5Jul2LJ1GxXNTbDR1qJ3zz5Io6LZabEhLzML6bTOyKVfsrC+G6lSXl5UhKqaOpRX1aCyqkroacPumHy3MT+DCDfYanmFGa7LYfLaOG1RIws48n+DSZZ6TCSWR487LHysn4qAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAIJIaBK5IRg0kKKwP6FQFpGOknVgHCirUmUtuIoIX7GsjeSQaSyEAlXIY/9JGFFPSxlmkn2ilZX7CpMvC6Ec49uPbGurAxJJHhTqUZ2O2wkfLvRHzkJW7dtgdtpRyoJ31raS5hJQlc6K5GVmQm73RruN2ChhQb7s4Tbr6gspwJ5BwlvC/r06ofsjGxYgmYE2HdVUzMyCwbDRMJ7a8k2dMvMo3rYguraKlRU7GBQwExs31FOX2Sx2xB1sXDCHHGLnYXsTfR+DgmZzHrCFodkk3LcG/8zgOCRlGnJFwJakyKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCikDiCCiJnDhWWlIR2G8QSE1t8fU1VLYkk8W6geStWFsISSqEq3gDSyA9C60fQiScRZ1MBhlN9BkO0hKiqamJe5Y0CFdg04YN2FG6HX4qjYcP6gsnzZTtVBp3z83FhPHjMePd91FDdXKVuxb5JI6d9C6WfqWNgJ8KZPZpsVL9LNYWDIDX7KNaubaB1hcp8NDComHbdjRuKEXI46O9BsfGUHm19XXcGlDFbSu9kpNzM5FNOwsJrOdh4L/SskrORdoLy4kjns9iXyHGFKEg80meS5KQgqxoHBk7owxJZhLN4XpSCnCnpIYP9FMRUAQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUUgIQTa6BgTKq+FFAFFYD9AoHDYcI4iTJqaaUcRDiRHspV+v0K6hkj+NvPpDsqZRZTIDHInpsgkZ720prAJwSyKZAbIk3bqGfDuuWf/GfYb9nowcnghkqgutpCgddqsGD2sED3y87Fp/UZUV9cgib7JkpqaPPCyvBDS0nYo2MwdSWwSwB5aV1SVldPiwgeHKKE9zciyu9EjNRupoIVGvRdp3PdIy6KvsgXJDKzXry9tLlJSkN+tB+xJLmyvqOK4ac3RQhqbTVaOlmS5EOPsP8RjUSEbCmT230w5tVgmC6EsJQwvZJm2FJM9qeuCwYXG2PVDEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFIDEEVImcGE5aShHYrxDo0as3LR4YEE+YVEncB4W8lY0EMR0jyK0KUcwyPBa1rpzzsuFhHApQiczAeqJU9pHkffnlV1BWWorctAxkFRSgGxXBYlEhgfZsJG7zaJ8xcfxY/Pvf/6HFRBkqe9UgJdkJk5WELvszk6WtYlC8tPQMBBl8z8K+rCRtvVQajxg6FHn53eEprYKlkYpoaxLVyB7UsT9fgL7JnEeVpx7+JJC4NiMli4H8tpWh7+AChGZ9xqmFg+XJHIUGFjY4bFvBOQk73EIYG5YdxrlRqkV9zPKsLymiRs7r3ss41w9FQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBBSBxBBQEjkxnLSUIrBfIdCrd19IcL2Vy5cafsFm8UPm5qcSOMjNIHbJr4r3sQTYE9cKI8AeZ+Fp9CIzKwepqRl4+qmnsbW0DKUlJcikRUYNg9ilsB1HErXBNiqbhXwmD5tMT+Qhgwow5pBRmD9/EXLzWJ+2EOKn7PKxT/oWmykB9jU2wEYfZQuVykJeDx05DJnZeWRwzSSPc9BcVo1ArRcBE4nh5CQ01vrhoYIYKS6Szk0wO+wImK1wpGei37CR8JEgdjH4noWD4FBIllPtbKyEKI3ZgeRJavE8Fu/lcJDB8AUpxZlzIz6s23/gUHTr2VtqaFIEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFIEAElkRMESospAvsbAmPHT8DKFUsNywrD2piK4DDBSgsLcqfhsxDJW5Nh8ZBks2NA326wm+3oXzAQNrsNC+bOI8lsN0hjv5e+xuRl/fRPbhaylu2ZaBshPsdWWkpkZ2dg4sRDsWlzMb6YNw8ORxJ8PXqgmcrj3PQ0mGiPYaMy2UcSu8lLQpj1U9LSZSAkokOwJlGxnJsGX1IjKreXY1NdBSpraY2RkoyA204i2IUGBusr3lCMk8+9EO7c7hwbrTqoVhbCOETiOchNCGWRXgvBLQy3mHiIdYXojeWKKI7FzkKSBNSTvg1imVkTJp1o5OuHIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKQOIIkN7RpAgoAt9HBH581nmUGpPkpd1EhCQVAlXIW5uod6lAFrsHs8XBIHhpGD1qNPr16svrJJVpY1FXU0f7CCfcrmSkJqeSdhXa2QQPA+KVbC+jVYUdZgbXM5FsZmPISEtBdyqQJ08+ET6fD/O+mI8tDMRXw0B5ZTUMnOfzoolqZBPJ6tq6BtTUNcLb5GWgvgZaMntpc0H7DH8DqhsqUc5tU9lWFFeWos7fyHo+mKl+rqhpRL0vBJs7jUQ2CWAhxkM+csbi3dyShOAWtjzMmIcPDD65hTg2JMthMtkgmllCcBFV9qGTjm9pRHeKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCiSKgJHKiSGk5RWA/Q2DYiFFIYRA6Ed1K8LlwstBGIglWm5u8rwuZGT0xaMgY5OX1JiHrJPnbTK9jBxz2JNht3Nuo9CW56qVyWEjbIO0pgrYkrFq3gTYZDGhHItnEIH3ipyzcbGZaKvr17o2fnP4TFFORPOezz/HlV0uwrbIKQRLSfpLWNfUNSHIno47B+srLKuCn/7LIkYUQtiQ5kJ2XhwED+mPw4IEoGNAP6RkMr8dxSP+bS3cgj3YT2bk5qKa1ht/v45hC8FNvbTgjm0gmcyDkhA2tsaFCptLYODc45LDqWDyajTzWjRDJbhLlAwtH7GerqMNRBBQBRUARUAQUAUVAEVAEFAFFQBFQBBQBRWD/R0DtLPb/NdIRKgKdInDsSafg3Rn/JaFKopf/s9KaImizkDzOgZCmLlcK/FT2+mk5EaRKOJUksJN+xSGql61UGXsY4M5CktjGIHohEr1BIZLpK7y1vBbby2qRm5VNtlZUwLTIIFHtpmdxfk4GhhUOxlGTjsTbb82Ap8lHwjmA6uoqDOrfB6muJASbmlBVV4ue3XvARoUxWW2SuUL8ktx10OfYZKeqOQ9utxulrBegaropRBsMlphyxpno3r07yehGktg2jokqZo5AOGLZyEWTR5bvv2TGQSOPww4rk8VfWWTKPBcVtphcSClRIk+cdBILaVIEYiPgbWhAgF/CuOiwokkRUAQUgf0JAX0/7U+roWNRBBQBRUARUAQUAUXgwEMgIl+MNXOhZyIpchxrL9f2dAszRCJfDG/SXuS447W2+W2PI3Vyb7/99iMjE9C9IvBDQkA0vrM//JiK5Ezk5vZEfn5P5NFLOC01k8SplQpjBtYjKexwONBIcsxKUtbtciEtPQs+fzPtJXz0Q3aA/hcIkGQWJtZM1bEQzkkkXgcNHECVMB8r42myCgVsWGc0s15eXj4VyjasWrUKW7aWoIkWFxYSzTZ6JTc3k/Zlv06X27C+cDNoHxtm4DwnAs0heGh3IaRzJbcdleWoo4VGcWkF+g4ehslTTiN5bEU9y7z8r+dhDdImg0R1kH7JDo5ThkOBsdG+qI1FmRwyWGSeGHvAzjGIctogmTkOIZQvvPJX6N1/ICsknrYUfYMSvxvZKTsZxWBDOZYu2wQ7CXYnPaMjqW7bSqza6kVelgWfvvYy1pl7oV8OCfRoKdSA566+Cv9uKsRxQ7OilUgsb2+1k1hvsUvtT2OJPdKoV02hcvxn2vX44/T/YcZbb2BL9liM75ParuyOTSuxvqQMleXlKOdW5wcyUtztynxrJwni236MJRxnHUyuDJLiO+9VGWP7cuWGlYzNkUaLm/bl2s/Hh41FS7Bo8VKsWV8Cc2oWMsTPvNPU1fKAPEcfz/4YX6/eAmtGPrJitt9px7t/IVSDFcs2wJLR/vne/QZZM8G126M+9tfKnHvc9+G+HntkPTwFOG5Y7r7ufbf6S+T9tFsN70+VIuuyp38XO87p23imO/ah54qAIqAIKAKKgCKgCBCBqVOnfspdGbcwudL5XnRykTJtjyN5ie7ZTGs7chxJUj9a6iw/WtmoeapEjgqLZioC3w8EJhx2JMYfegQJ4QDJWzcy0zNRV1tLEpi8cFIIvspKI6ie6JQdJJAt9BYWP+NNmzaQeE6lGtlBuwobvYt9LE/rCtaTN5jJbMVKWlpsKSlFQf/uBjkckqh7JHeTSDpnZqTCQu/jIw+bgH79+uOL+QuxbOkK1FZXk0AOoX//frTVMGNHdR3Sablhrqyj2plKZnKqdbS+qNi+HV6Oo7KuHvXse9OW7Vixdj3GH3cSLOLBzPGKxQUNMGiHHDLGJOOSyRjnwh5zLqKcNrWQ30YAPSnJS2azMQu+TSUgH5CcnIKRYw+VFhJP/AftrEf/jNlZp+Fvf/gRZFSSVvzvETz0/maMv+IBXH14XjiTZf/74IP40Hw8/vrgRMx45yPUecbgmMJM43rN2s8wr7YAk8e0lGcuXUfoFU0Wsgtpb7XThS67VHR35tSlDr7Fwls+fg7/K2rGBTffi1H2Oli69WjfG9f4zfsexKee5nb5oaTh+O2fbkBBcizytV2V3T6Ji28nY5QOh0++BtecOxZOGWaMckdccDsuP2HQLmMMVi3Dbdf/ESV83ky2NN67NcALwHFXP4ALx++8ryMVu1pe6pUs/BdueWwWn9k0pKAWb736Ik675WGc3vIcRdr+Nveh+mJM++ODmHzL4zivkHZBeynFXbu91M/ebibaO6crfZhCFbu8DxOpv6f9xuvDWI/2j3K8Kt/p9bjvp90Y3beNcbwhRet/bzwnHdv9tp7pePPT64qAIqAIKAKKgCKgCPwQERDlriZFQBH4niKQTIL2pCk/JnFropIYJH23o8HbjGbQnsJsQ3pmtkEiN9G2wkqVsNNhoxeyFQEG1jMC7JFx9VLha6Ja1xwQXpYkLa8F2NiOyhosXbESDQ0eg4wVPwoTSWQryWNXkou2FU707dGNWz6OmXQYDj7kYGzcVIKP5nyBWZ98hsVLlqN4ezm3Cnyzag3WrNuMopVrsL2iGiUkkoup5NxeW4+y6kas37gFZTuqkZUTVoVJoMAAN79wwVQwi3uFfGUmthQcJv2TA+CwqWoW1bRwyyGI+Fnsl8XgwrDlIIFMEw5j/j+54DJaeWR0bZVNbhx2Sh8Eti5AibflCzuSb19+s9Vo56vPv6FXc0vybsHSqgDGnHo4ksy9cdfjT+DPFw2PXMXi15/DW8vkC8n2yUSivCtpb7XTlT4PlLL15dsRcB+HE4b2QF7BEGS7dyWFafuNjMk3Yvr06dyexrSb/w8p3uW4/y9z9hlM8e6Z9mOcjr89+Secf3hPLHvvcdz8jy9bx9mx3NNP3I/TCp2Y89LfsbZ+1y+oza5UFIyYhDse+Ruee+ZRTH/uSZxRaMPM6TPh2bU4ulreFCzBP578CPZh5+Kvzz6KJ559wmj/v3/8O6r4fO+rJPgm8z0zJH/vK8zjrd2+mmNX+unsnZNoG6Eo78NE6u5pvzH7MNmMX9rELLOfXUzk/dTVIX+rGCcwmM7639PnpGO73+YzncA0tYgioAgoAoqAIqAIKAI/KARUifyDWk6dzIGIwMmnTcH7Mz9CRWU16VMqeO12NHm9MJF4aWqsR5CksL+5GVmZ/El7UhLKSeA20yNZvINFvSvXDUsLghdikD0yyIY9RIiK4qJla1BY0B8DBzppEUH3GzEkJpFspz2GjypaJ9XFedkZQtti/CFjGBAvD1988SUWLvwKefm58FO9HAoVk7i2IdXtoio5GVUVFcYyef1elG4vY4C+LVi7YQsq6YH87xdfNsjusrIybCstg6e+luRwg6HYtdE6wgiuRz4pGORMGfhP2GWxtjDJB5XJHCCPzSSThVw26GSOozsuuepXu3Vr9Bo9EaZX/4XVJfXo3TcFwerVmLstgJ6DuqG46BMUe49Ff3o81xYvQxnxPH14d46jAe8/fid2jLselx+di9l/uRXPrfBRwvwgLifXaB10IR67cYIxnpo1c/HUfU9i3soqnttw+NnX4JJTRreqnncO2rdn7fDnvB9NfxjTP95gNJk98iTcfM05yOXYd0kc/xt33wvzjy+AadYzeG0pbUYm34S7zhvGuXWhHWk4TvnaTQvw3N//i0WbthnDkHHdeOU5yDcIXB++ef95PPXSHNQbJKIN/Q89DddeeSoyDCV6V8fSgI9ffALPzVxu9GXOGI5rbroKB3e3Y+GrT+AvM3ZQ9/4uLr74XQyccjvuOHNXNa5UTOLdHk70Bx96PM4f/yr+trbEIFKd6KyPZMC7GQ9f+wcMv/FPOL6gReEqiuBpv8HmMTfjmhP6hZtl3kf/fALTPwqPM2TOxy+m3oXx3cKXE7lndo4RcLizceIVU5FpvxOPf/Q4Fkz5K8blhNtqW86e3A3HnDQeb6z8Knyx46ejNy6//pKdufySpZD3e2hzJ1+EdLF84+blWM0vr372fyeG1dJw49RLL8TrN/4DSzZ7MakPpfvREvF67fe/QTGft+tOCa9ZzYrXcf0Ds3HuHVNbsV7yyl14auM4PHTjSXCi83uH1uz0ZrcixcZ1Ztt77Vng2OOtXczngWN584F7UX/IMaie9QLm8z0k74wTL78J5x/Rcq/GK8N78N5f/g49L7oHF/GLhUgqX/IyrntkPX736K1tFPWdvHNuOg429hP9WeJ93jGx7M73IftsHeOJaJj9AuZuajJqHHTqNfj5maKU76RfvjNndPpeij2ekLccLz3+EN5fGv4CcMwp5yHYIH8vWtKePpvd5Wclnd9TkW7a7mOudduC8HX+forTZ+d9+KP/Pbl2EB7/VZx3FNdvz5+JztdYpr77z0n0eT16Vc+dzzTxjPl3pR32eqIIKAKKgCKgCCgCioAi0BEBC6Nw9gAAIABJREFUMkKaFAFF4PuOwJnnnE1i10l+104fZAbRC/jpd+zltEKopxeygx7ByanpqOO16to6OIxAes1iW0wbDAutJ0jEkoS1kYBNIgktamWhykqobF62rIgEdY2h7g2RZjNkwQyE52B/Sc4kuGlvkUKf5fTUZPTIz8LEiePpl5yLzRs34dPZs7Fo0ddYvnwlNhZvxZpNm7CR/skbtpaiaO0mFK3ZiKLV6+mNXGOond998y1cf/XVuOfWW/HQPXfBEfSRGw5SdUySmCOiawfqPQHUeIKo9dErmRlN5MP9AV4jqezxi3rZTH9m2nZQqizk+cW7SSDLPeHsPgj9Cc685SVyitKVc+CzDMYVl5+PlNAWLFxfb+QXf/U1gtbhKMwOE4zVpTVYVlrNa3YMmPQTow1r3+Nw7bXX4uofjTRIYpfLhIaVs7Eu/RjcesctuODonpj7ysN4fv52o832H3vSjg8fPHQDCeQtOOXy63HzL8+G6Zv3cPM9b0VVkEq/dd5SvP7QNPy3YgiuuPJynHKQsI5dbSd++cp1X2OjaxCuufkW3HTlZFQvfRdTX15iTN2z8UP88cXZGH3mz3HLLbfg5+cdCYfJ1ULixm/baKT1w4d3pv3KIJBPuPh63HHLrzDWWYRHb/01FpdZkT/8KBw5hAEhubY/4xqdGWFZW+t3flBTE0TAI9dj9RHkFyEerPX6DB/ltq1Vb/djbUVDS1a4DSGQDz/rSlx/7RU4ckQBslLpW87UtXumpcmW3SFn/J+hsN1S0aqfN54XuewP+dBQtZm2A3MZmHM08hIS4fr4JdM2WDqx/W7fu5zFLu/3VfDXE/nolhV+hqSGObUncviFQWXjzjFLfrtEMjstNYCvP1rcej9/9d57/LVCDd7+fJ1RVPxk57xPH/P8XgZJGet5MLnzcfoxJyK1hRvfO89CYmsX63mQidTUlOL9f/4TFYPP4jPxG/yENiLvPzMVzy/a+c6IWcaRj7EDrPjghZmoM76YYaMkBee+MgvmjP7o0U5939k7J/Z9bgDe4WPn+zB8ITzGv2Nzt1Na3n398NXbj+PZz2QenfXb+Xup82ebRDHn9/rdt5BA3oFTr7oZd958Barf+ze+bgrA2SKj2PNns6vvIyDeWu+EkF9WRX0/xe+z8z6iY2xtTuQd1fk6xHquds5HjqL3L49cIu+4rs5LviCLPNOx/660H6WeKQKKgCKgCCgCioAioAjsioAqkXfFRHMUge8dAkccOQGvv/4mVb5VJJDlH85B+KlG9nmbYKNyOC0jk2SxE830KK6lhUROv55UIdPsgaQx3SJ4HKBNhQSg49RZP0jSVgLsUZSMzVtKsWH9FqSnZzBQHsksNm+ykE6ml7LT6aT9RTP8firQWD7Efi0kmE3BocjJTseGDRtRzE00X0WriuCiGtlCmw1RCUuwPPFQ9pJYs0ggPGsSLByTh+Nz0yqjd34O3DRRTs/JRoADW7N6LS0vykgONaOmqVEGKrQy65jgIpntb/YZ3tAOe4AkaDOcjMA3avhQnHrGubu9nvJT7ImDrXhx3kqAKsflc5bB2vcc9M0bgvEZFnw0eyXOLhyFRfO2IWn4SS0K2XB3EZVnz8JxKEx/Dk0jxmPkyJ2KwcbGEGzDL8WDVx1lVBhScCM2f3Etvl5VBkTxmN3ddgI7vsTzS304hR6vZxser6Nw1031uHram9jcMAWDO/HyNfc8CU/84dwWVSjR3vFZ7HY6EI+J9Nv3mJ/hoWMiy1OIX65fhD999g08l46Gr7HWuDBwBMn5PlTuFhZiYkvRRNqOtCp7Kf/vIj8m0b/3ghZsB02diqrLb8P0d1fgkYvG4NBlefiguD/GHXxwFCX4ztYaasohSvn68lLMm/EPvM92J15xNOxlsfsYc3Ynil02HblXIuMUv+0rWvy2Rx18eLhzfo/S1Xtm56h5FPKjicRhTa08O8kGWVP94YO4+MN2pXDVffyCxHgRtM/veFay8AW8zrmf/JujW++RjmXansctz0CgpmApiW3WCnPmPGiGwc+3bSjK8fCjxiL0xFfY2nAOBrqKMXsZvyDjf91UzPkMVReOQlrVeizkl0qnjaU9TdznIQ2nXHRWuBf57oqpy89ClGcqkbWL9TwIVx8iGK4JP8edl4SfhMLCIWjeejVm/Hc+zhjzIyqs45cZf/pkPP+HN7Fo8/mGult+XfHWFnk2dl3HaO8ceQ/EepbGtLHxEewiKXKPy7nMQ95993R49y0r5rsPeYjWr5DBkqKtRazxjDq2wpjfCb95GGeNDHvU3/knN6749Z8ZrNVo0rhXwke7fkbGHevZjH9P7fxiJNJDzLXuULxn4a7vp7jvY96DsfqIinGT/CImeorgELkabR268ncmav9c4z19TqK2y0FHnumaGH9XInPTvSKgCCgCioAioAgoAopA5wgoidw5NnpFEfheIXD55Rdi6t0PwE7S2O+nfQJTMwnejLQ0pNE7ub6+jgH0PPB6mgyiV+wsbPQ3lrh0YhNhsooi2UQ1M4llWxANNT7j2tZtpVi3fiNycrIYRK8X7SZEE0ySmVYYhr8yCdxktiEB7PxUB9c3mKlKJmHdnM5/pHeDlfmN3gA8Pg+qq6qoEBZmhnYTJKubfc0kq22G0tjna2DbtKwggWUjQS1Es4dEczVJr7yePXDooRP5D8xGLFqyBFVr1xrzs5N89pIob+B8RbEsPsrNJKX9bDuFHq6/ueMeo9yefAybMBzNzy3D1rpR+HxVM8ZeOoLN2THh2D6Y+cYCBgfMMPyQJ547IHo3LeRdtCB62T2z29URn1qn/Iw+WtrNdoTslPTOn67DXCrGJdXU1Bj7JcX1GBwleJiQPPmHjWlHDsZtZ0j7H7bELc9+m8rW4aOZM/HJgiJUNjQatiXm7DDZmjZgAsZmvI9nf3sNXu4zDuedeQqOGtnXGHcibRsFWz7qy7cYwdqOGBb23JbskLkbTjnShYeXLKOClWscEnJV/LZJcHWyBKKSq533D9wwzyjK2yAfP77q9/jJoXmoWfFJ7D7OHt1SqfNdZJwnjN45zo6lu3TPtKksvqBiA+JyhvEVsiZ1wqW47YyhBu4N5esx69V/4K+3/w6ZD9/PLz46AYFt1hS9ywB4nyDv2Otwzsi8Nr1EP0y0vATUa+WPW5oSYjReyhswFrbgZ/im1IvuoXlYF+qBm2+ZjIemPo1vyq7CyM1fGyrnQ/ono35d156H3XoWojxTMod4axfreYhgkMb3+c5kR+GobvjfJ+HnOZIfq0xawVE4xDoDr8z6BpMuG4vNCz6Enwrwo6Ldc1HeOZF7NNazZARvjAymk300LFqJyij9SjPR1yL2s11+sNS0YWTvDDkwkjl9ECZQhhz+KxLJjb2PzDvas9nV95H0lMhatx1Rx/dTIn3G7KMTjNv22dlx9HXo2nMV+VJrd/4u7sm8Yv1d6Wy+mq8IKAKKgCKgCCgCioAisBMBJZF3YqFHisD3GoHhI4Zi2NBBWEXrCL/XYwTasxtqYReVyKkoKduOmuoqWGllIcHxhCIy0zs4Ly+PAfjS4fX5qVz2Gh7DNtpZhHJzUVm2Aw6yxmvXbUIuSeSUFBcyM1MNYtjwTxYGmoSwhWWsrCN+zMlUGwuxW1dH2wwS2vmsJ8H7SumFbLc50ODx0ZJCSO6g2CvTHYMjofJZ7DQkcJ6V9hj5PXuScKbHM681s+42qqFrquqQ2y0PPbr3oBXGWvblJMkdJi6ljJDikSQk9+ETD8OEI46IZO32Pm/IIQw6+Dd88vHHWB+w0Pc4TPANGHcULCTd3v3YTj9kKw4Z3Dnxt9ud74WKjCFlpElnXYbhacSTZ0IokkNA395RPExb+uz4j/v47YRJ2Jbq7CN81Fm/gR0L8Isbn0CQ3sRnnXkR+ndLx5o37sdrJS0t0FP3mj8/hQ1LF+Bt4vyPPy3A9H5n4JHfTYnbdmQMcfe2RCjKna0I8ZpO4vSRi6iU9vlg5/0eN3Xow9zhr24S7/lIMvEZksS7ea+nxuL1hm+3jWsfSe60bHTLyQmfdu+Ogn5uLLzmz/iGHuCF6S2+zZHCLXshhK+9/2WDgJ5KHOKlRMuH/C2y0DYNij8xv88w7tk22bscmtP7057EgqVfrUR+w2yqVadg2MCDcAh/XTGHX1BYS7428ro5TPDEuS93aZwZXX8WorUSOy/u8xCjOr8OjHE1fClSJmTKxpSzh+LLl/+Hsp8OxSdv8Bci4680vN3jNhKrQIf7PFbRPbnWcS06batlPMa7jjY4EeuKSPlUfiHUMe3usxnvXdexnz1Z60hb8frckz5i4RDpv+M6xBtPpN6e7vdkXkbfMf6uJPILjD0dv9ZXBBQBRUARUAQUAUXg+45Ah3/Oft+no+NXBA5sBP7v4vPxB6pvGxk0yEdFbg4D3TldbjQ0egzrisrKCqqEU6lUbqbdRBaSqVCuJdm7Y8cOMiWkg0loySYKZiHJvB4PVczJ/Jk5fVs3FJOMTqPa0mTkkYqmapherwxuFzIC6ImK2UplMaXKolWmh4XbSQ9bBuGroAJZ1ND2pFSUVVTD7myCh4roZq+8goJorG+gOpqEMO01ZCstr0Cf3r1QsaOSLdFqg+poIYpL6aVs4fUc+jtX0+s5RBKbvRv8sVDIYt3RTA+O1OQUXH/bHXvlZrDmDMYhSRbMfP1jIOs4FJCIlWTJGdaSP5f5R6FvW4FglJ6FzNgbqavt2J3hgbl6D8chnSgkExlX3HZ2cvhGc/HKr/30PUMBOZV+zb3kiwSmdWGLaeM4/GFHv5GH45fcts17BLf8dRa204KjZxfnlJzdj19SvIPFVF4XtGAgPrmfflQJ59gB7RTXbTqPeuhsWceOBHK8PpKaTYbdwLbtJNsHthC03i1YXLWTPLXZ0jjOGnSmEI86oCiZEcIwcilUvw5//eOrhm/3EUPki4Mw4d+xXNDTGJOwjRDCfSdfx0CLiRPIiZRP7TWMAdvewfz1VShosR2oWfelEVSxILuDV0pkYpE9FcyHHtkDD9Fe5Bn+JH7cFWP4CnJj4gnMe/VhbKDtzUGXjDCo1kAX751IF2338e7ttmUTPd6wOJHnYeevCCLtblpfQl/qYZFTYx/5pUEks2OZPodNQcpL9+HFF17E0sZmnHvckEjRqPu275x493kiKuSonUTJbNtvlMtGVrzxpNjLjWdqaZtnH3zuFlQ28y9YOMmXFfJ10u4+m129HxJd65bhRd3F6zOx92v4C8VIB4ngECnbcR9vPB3LR84TWeNIWdknil3sdqP/XeF/6mhSBBQBRUARUAQUAUVAEYiDQPvfH8cprJcVAUVg/0agb/++uP7W60kIiy+ykLoOdO/eE+Xby6hCrkEdydpuVBzm5+cZZGvZju1oaqw3iFgyxfQV9pOs5UZ7CLtBBofQxHMPSecNm7dg7fpN2L6jAg20HvCJdzL7CAVNtKZg2CxaUzQ0NBlexwEqi51JTqSlZVCh7KDC2Iw+ffpxLN2RShI7yZ5kBPtzJbsN8tjmoIrZYYPFUElbZOioqqxCNyqPhV+00LiZJhuGZ7OQxEMKBmPsyJEYQ0/Qof36ooDlUqniNPOaiYrkF19+GYXDxXZiz5Mo9w4+JMloqB+DBkZIEsk/fGLYYzNv9PhdfGSbhJWXRIlWWqoJJZ99gtXbdqCsPOztKZday8hJvLSb7ST1mIApPW2Ycf91+O8XKww/37Ur5uKF1+a1BiKL1nXHsSXaTqRevPI5vfsbHrhfLFhjjGnuKw/glQ1+mMNQw7P1Mzzz0hys31ZmXF+3XvxSwyle25Fykb0Q/oLB29Nux0dFW1FfXYK3/nKv4ZN7RhwCLdJGvH28PkzunhhJH+0Fr7+GFVt3oHrHOjx77zSU8IuQiIWDs88EHJlpwdsP/AEfr9hID/BNWEC7j9VlEiQznCL4Rs6j7au3rURRURG3pXjnhYdwyS/uNgKJXXjjlUagukidneWKsHDOq7j5pqf57KVhRLdd2RTxYBUFcsjcC5NH2bFk0SIGzVyEhfMXobia97p3M+669Ke44oFZpGzFh7pr5U0pg3BGoQ3vPzwN89buwPY1c/GHhxnwjd7chdn8T5Wmdbjhkktwy0vLI8Nvt+8/drRBFvo5/mNbrBkGTzyKZfg+4+eE4d2N8l29d6RSR8x3p41o7RgDavmI9zxIMbFTaZz3Vzwzczlq6suw+K2HDX/iMace3vpeSqSMKXkwzh7nwuJZc+Fz0d5iwK7rbQwryjsn3n3eMp1ddh0x7HjerkKUfiPXO9aLNx5nn4m0rrDgvw8+hi95X5XxuXv+3gcMVX7kudvTZ7Or90Miax2Zb2f7eH3G7SMKxongEBlPx3WIN55IvdZ9lP4j1zq2HcmX/e7Mq239WH9X2pbTY0VAEVAEFAFFQBFQBBSB6AhEhBjRr2quIqAIfO8QGDpiGH5x3TV45rGnEfQzeB6tFjweLyorK+mBbCMpa6byuIw/xbdRuWth8Dw6IpN4tfC8iZ7JpeUMHFZB4o7qZJ+fpCw9i620xTjuiAkoIYGcmroNTpK+WenpBrEr5LGX3sWidm6iJYaZv4V1MIhfSirjYzn89DSuIRncDTkks2vrPEgqLWPAPDetKuwGSbxp3WqOk7QTieIA+5Jgf0Jgi7+yBOrLzMwwCHAJBGjiPzytDrtBKpsCJJ6tdmSQlLaamjGwdw/UNTbh57++HocdeeReXbdB4xjIau4HmDS2d7t2B0ycAHz0Jg7tkC+FslIjVgd2HH7O6Xhz2r8x9dbPEHQfh789cbrRzs4y4WaFAOo87WY7VGSe8dv74XtsKt74yzS80dKBe9SFODtGdx3HJsrOmO20cOat9eKUdw44loG9PsXbf5mKtzkmU+Y4nHnyULy2IDxACZr46XvPcosgYsOUq3+PAiNoWZyxRKpE9hzLmb+9Bw0P/R7T72cwPeYLWXr6rx7A8QUR2wYnFZ2RCtH3MdcngT5+/KsLsfT3z2HabeFJZg05DAMc8xCMqNTZxqX33I7gAw/guWm/ax3EhYMmYJAQqUyt+LZc7Tgm+cKiaenruH9pSwHqb4cdcR7OP+9E9HTvXPBdywEZfQ/DzT8/P6ofckNN2PPUFCzGU9OmRRo39hK0sVc/P+pIiDfTw1x8pf1dLG8z2XHydfdg+9Tb8dQ9NxrtWnochntuO8cgSJvKNxjE32mj2z+DkYGk9hqNbua3sKPPcejdMk9nj9H8tcCLWGA+FAOzW+Ye576MtNd23xHzuM9C28ptjju203bt0uI8D9KM2KnkDB+HlS8+iGtfCD9wBSdeg6uP7tnaSyJlpPC4k6fgH/NfxtBTjw4HBG1toe1BtHfOhQk8S23bCB93nHvH87ZYiOd8ou9MWYt4z/bP7rsZlTffj8db7qvsEZN4j89BU5vnbo+ezZyU2O/GDnAkstYdqvC0w/spzn0c7/0aHeMLEReHloF1XL+uPxOJr3HbeyM+dtHavbD1S5bYf1d2RV1zFAFFQBFQBBQBRUARUATaI7DzX5Tt89uetS0TOe64jyiaJb/tJvkdzyN5su9sk9/DyzXZdzwW4jtyTY4jZTruI2WGMRjX7SynSRE4oBD422P0k12zBXSmwMYt67F67RqkJCdj4ID+SHI6Df/hAH+/GjKHSE40YNkyBo/bspVPLC0taB/ho31Eks1FL+Q8I8DeuNEjkOIwY2RhAZXAvdGD6l8hiyU4Xn1tHSqrq6laZjA+EklB8SjmE7iluBjlZeUYOGQQHO40FFOJ+9WS5WHVMglfH4niqvLtCPi97JbEMQluqe+gqtjOf+CLdUWvXr1QvLGYHs8cj8vJ8YpSmZvIlZknBLLDyj5puTHhmGNxw507ybf9a8FJtDf4DQJ9z8a1++2EGLywkXy9zebmlwi7P4quthOrvJe2JM0kOt3u6ANq4HVJ8sVDtBSr7Vjl7Wxv7xiM7NpLZEyd9SFzMnENXNGnbDQYxoVUz7c4zl1Hvmc53oZqBGzpMefVtofOykdb800f/hF3vBjCo8/cEIP0bNt6/OPIOu3J87A32mg70k6fB9p0/PP6a1F02M2478xBkHKBjvdQImVaOitb+CxueOwz3PDI0xgRI4hiuHj0d05k7t/ePRq937Z4tT2ON57wfdX5u0ba2tNnMzKGRO6pTte67aQSOI7VZ/w+omOcCA6dDS3WeHatE73/Xcu1z9ndeUVaifaOiVzTvSKgCCgCioAioAgoAruLgMvlmsq68tNJCXPDn4cbeznuuMmPJSNlIseR80jZSH3Zd7aJsiRyTY4jm+RFjiN7ZhllZS95kjru2+YZBTp+qBK5IyJ6rgj8QBD42S+vxL//+Rr+998ZKCkpNbyOXW6SxyRmRXnsZRA92M0oWrESK1eupLo4CdmZOUgWu4lkF20tgiR4qTxOdiKZ3sab1q9H4eACbC+rYLl0JCUxiJ7Lbzhn1JKE9tJDWUhfJ5kxG1XNEqQvRAa7cNhg9OrdGx56whZvr0AzSWITX1USgG9+0TIGd+sFb309SWTaVdAiw09Vcoh7s40B+0xWKqirGPgvg2R0hUE0C3EdYn4ypc5WYy4M1FdZjhGjD9qPCWS5qeydEqVdu+V2vx2T3Y1OuNouDaGr7cQq7yBJGvlZebRBdEYeR8rGajtSpu2+q+Xb1k30OF4f8eYk/cTDJdGx7MtyDnd6l7rrrHw0fHzNVow/57S9RiDLQOOtUyKT2RtttO0n3rpHAppJuc5SvDKh+lV48sk5MA+4AEPiEsjSS/R3zt6e+67zid7vruXCOfHGE+2+6thWImVirVG8MbTtL1Y7bcvFO47VZ/w+omOcCA6djSvWeHatE73/Xcu1z9ndeUVa2ZP5RdrQvSKgCCgCioAioAgoAgciAkoiH4irrnM+YBD40Vmn4v2ZH8HT1AQXVciyeUWaHLKQpHJi3hfzULK9BJnpmcjJzORP5TOoLnbAzk2C5JVQ8RugJ3JeZi79lBn1zGzDFvq59qA9RWpyo6EaphsG6usYGI/K47TUFKRnSBt2qpA3ozdVxD379EZ6WiaqqML1+kNs281mgux3G7aVlWJgwUA4s5LgIlFdVl6G+npRMjNgH72WrSSqLbS48DBIYHZePrKystHk9RvEclVFJcnmAH+KEMCgIQNxw92/O2DWVSeqCBxoCAw88dcYeKBNusN8vXVAHd+hsVLMMk2r8Isr7zOCFYbM+bjhqmO/NTV+rDHqNUVAEVAEFAFFQBFQBBQBRUAR+H4ioCTy93PddNSKQEIIOJ1JuOWO63DLDXeiweOhhYFELSPbSyuISiFhvc3IJcGbTFVbFonk9LQ0Q7FskaB6tLXIzs5GxY5y+h03ITMrF7XVjXDaQlj81TdwO8fSYiIIH32UQ7SvyMvNQa8e3Q2FsNfXhFSGOs/JzUNKSjqD8Jmwas1q2mWUwuF0I8DrRStXsz5Qy2B/okCmOBqp6Rn0YLajuqqGRjV8PdFfOZ15TRx7XW09tnlLSCpb6JFDf2Qz1cpUIvfv3x9X/uaX7DfibZsQNFpIEVAEFIHvDwL0wP3RLTdiSna/zsccr0xSP/z2rjtR5beiO38dkmoXtzFNioAioAgoAoqAIqAIKAKKgCKgCCSGgJLIieGkpRSB7y0CotL958vP4LGH/2qQvxaStBIMT1KvXj0MywkbA+dl5+QaXslBErrBUMAgaIWElmB8xcUlyCdBXE3i2ex2oKqmCou+WYWhg+mvbAki1elABknjNJLQdlphWLwWQ4EchJVlG/HSy6+jjoR1Pcloi40q5a0ltL+gipgk8cbNG3Hw6DFUPpvRWF9nBPcLkecOkixOz82lrYYP1Qz2J/o7N5XOzQEG72PZIKN3DR0xHLfdfasSyMZq6ocioAj8kBHIKxgSd3qxy9iR12cA8uK2ogUUAUVAEVAEFAFFQBFQBBQBRUAR2BUBUjWaFAFF4IeOQDJtLG698zc444zTIIRxUpKLlhMuehtnozvJ4zQXrS54Lipfq5UbFb4SqdLEwHXJDGaXl5OFqspK+JubUdfQRH/jEFas24zZn3+Jmnof0jKySUAns66dBK8DSalpSKWK2USS+D9vvIXqRh9Kymuxo6ySpHAAa9dtoKWFDWnJ6VQl+zF/wRfYsHETvZhTYGVQPafLjT79+hm+zR4qna1UJYtnsoXksU28ks0mTD51Mu59+F4lkH/oN6/OTxFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBL5zBFSJ/J0vgQ5AEdh3CJx7wU/Qs1c+3p3xoUEKW0gSBzyNVCaH6HBhIolspcNwM4K0nzBLoDuStTQ+ps9xGhrqGtHs98JhcyGNlhTNVCtXVdZh4cJv6KmcTSuL3lQwsx1Khk1W2mYwgN7cL2ajlMRxQzOVw2w/iYR0fV0NyeEGuF0uBAJ2WE3JVBkH0UBbi80bN6N79+6oqqrDls3FcEnQNY7JbLfTesMHJ32TJaDo//3sMkw6/th9B5z2pAgoAoqAIqAIKAKKgCKgCCgCioAioAgoAorAAYyAksgH8OLr1A9MBA4/cgK6dcvHhx/MQcX27fA2NMBHgrZXvz4GkdxA5a/f46XncZJBCjfT3sJMAriiogJrvatof+GHO8VtBN6zOLKpTvbjw7lfIJfKYzsD6mVTySyWFYsXL8Uc5jexvpX5Vgb0q6wqw8Z16+mTnEx/Zns44F+SE93y86gytqGcdhmikg74qmCnotkmimgqlv0+G4npEJxUVF99/S9ROGLYgbl4OmtFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBL4DBJRE/g5A1y4Vge8agQED+5GsdeCV5/+NNSs2k6T1oZHB6+gbgUafhyRuwLC0kOB6VqsVDrtDDtGjdw+sWrYCziQbUjMyGfzOAhuvuZLd+Gzh13ClOKkatmD1oqV4850P4BdzYyqJV61eiVXLV7HPJAbvSyUJTaLOzd+sAAAgAElEQVSYSmWxx0hyJFGRHITH28iiVpSRSLZYbCSRabvhcMLKvqhtxsHjx+L8n56Hvv37ftfwaf+KgCKwHyAgX4AFbG647PvBYHQIioAioAgoAoqAIqAIKAKKgCKgCPzAEVBP5B/4Auv0FIHOEOjRqzuuu/U63PjbG5GXn03SmISxKQQHbSyCVBeHJLgeiWMT7Sz8nibUVpShrqoCyWkpCJLszaKauTfVy3369GJ5eh6XlWPZ6vVYsKQIr7/5Lk0xLKisqcOcT2Zj89r1yMnIQM/u3ZCfn48sEtAZ6elwkkA2s88MEstJNgtSSUan0MIiOdWNzDz6LJNs7lfQn8HzbsNt99y67wnkUAOeu+oy3Pra6s5g/OHlc87PXHkZXimq23VuvPbpq//ER0WVu177vuXs67Xd1/11th4/gDU0hcrxn/uvxM+uvhpXXXExHvt0S2ez/eHn/wDWc58vUuRZfHX5vut6b63TdzH2bxslzqnTvznfdt/aviKgCCgCioAioAgoAopAlxBQJXKX4NLCisAPD4HCEUPxx78+gi/mzsPMt99D6fYdCIlXcoBWEpYQTCSTJZCdzRL+zinFTeUwCeL16zcwOJ+D18xUDDvg9fuwmCplsaYIUEm8pXgLNm/eQoI4zQjm56ClhcudzAB8LpjZntfvp7+ynRrjZvhooWEmWW2V/thPcmYacvJzMOUnp+LwIyd+p6Cbae8c4lgPpGTllwfRkilUgRnvfIQ6zxgcU0gl+vco1az9DPNqCzB5TF7rqPf12u7r/lon2ubg+7yGkWls+fg5/K+oGRfcfC9G2etg6dYjcukHv+94H/8Q1vO7WDTjWWzedz3vzXXa12PfFyh19jdnX/StfSgCioAioAgoAoqAIqAIJI6AksiJY6UlFYEfNAKHHj4Bsr3+6huY8Z+30eT1kuy1IEhSN9jYZATVs9OawmqiYjg1A1W1NWDoPZLLViOYXl1dneGJvHFjMeZ//rlhTZGdnYs0+idn5WQjK4tqZ/ob+0jI1lRXw9zURJsMO600mg3PZZvZCjvJZxf9ko8/7RT8+Oyf7Dd4N+HAelU2MzhitBQy98Zdjz8BM9Xi37e0+PXn8Fa3X7UjkWUOJt6TB1L6Pq9hZJ3qy7cj4D4OJww9cMjjyNw73sc/hPWMzG2f7U20ShJ/pn2Y9to6fQdj3xcwdfY3Z1/0rX0oAoqAIqAIKAKKgCKgCCSOwIHFjCSOi5ZUBA5YBM4468c4cfJxWF20Gt8sWY6Fi5egmp7JJpLFzbS6oESZfsV2Er52NNY3wkQfZBv/YZtGxfHGjZuxedMmw/fYSf9jG4uLyrimshzNPq9BIruTU5Cdk8XAeg7DI3nVimWG+vjIE47F2MPGY/DQIfRMTt6v8M8JrMZf7pyGLzYHGHwwDZMvvw7nH95v5xhDNfho+sOY/vEGIy975Em4+ZpzkOtoISpiXedPed984F7UH3IiGma/gLmbmow2Djr1Gvz8zLFwdsZ1sN5H/3wC0z8K/yQ7ZM7HL6behfHdRTrdgI9ffALPzQxfM2cMxzU3XYWDu7fgGu/6zpkZbb310J14fcsQPPinCzDv8TuxY9z1uPzonsa1RMYu6sn7pz2NbT5hp20M7JiNutJSDDz/d/j1CW1wjPQba3y8lkifkaZ4B2L2X27Fcyt8wIoHcfkcWn8PuhCP3TjBKFKzZi6euu9JzFtZZYzt8LOvwSWnjOYoW1KstYuUad378M37z+Opl+agPhSea/9DT8O1V56KjNYybQ46m2c3E177/W9QTJyvO2WQUaFmxeu4/oHZOPeOqTi+IMXIW/LKXXhq4zg8dONJHe6TWONoxPtR1/AYVM96AfO3he/xS26+AwMb5uD+x9825iL30HW3X4uROY42696FOjLiWFgSizfuvhfmH18A06xn8NrSCvSdfBPuOq9tEE0fFr76BP4yYwd/C/EuLr74XQyccjvuOJMYdYal3PMJtS0DjIGbkI5x+gjfl3sRExlSa+r8Pt7j9ZQ+Yq2NdzPuuup32DLkbDx500k7n402Y+v0vjdwi/d+3M13GdcjkXdByFuOlx5/CO8v3WqMeMwp5yHYEGwdvRzUblqA5/7+XyzatM3Il3f4jVeeg3x3eN073pv9jr0Y9rn/Qs+L7sFFh/Nd2JLKl7yM6x5Zj989eisKktu8vDnW6OsU+72fyNhjrd2Ktx/E/W8Bv/3TDS3j8WHOM3fj7yv6489/+infS7Ux/nbFeR4ik46yj4lnlPLtsohV69+ch65ATgfCf4/abteRnigCioAioAgoAoqAIqAIdBUBSwIV2vxXMGWH4RRrL9f2dJPfzUsbsu94HO08Uq7tPlI/9/bbbz+S7WhSBBSBBBGw03qiW49uGH3wKJx86gkYM2Y0CV8nvE1eNDR46FmcxgB8XgbNMxsqZK+3CV9/tQTby8qQn5eH7KwMKpbF5oIWFvQ9Tk1NgdPpZO8heKlwrqGK2U1vZVE+X3rVz/DTq67AIRPGoVvP7oaaOcFh7oNifqz59D3M+3oZLCPPwVXnnwqGFsSbb7yJht4TMdIgZX344KFf41/za3HK5b/G6Yf1wtdvv4k3v7bgxKMHk2CPcx1+LHjnVXwwdxFQeBquvuQ09LFsxcyZM1GWMxFje0cj1H14Z9ov8cKXpTj8rCtx5nEHweYJYujEcci0+8PX5pfihIuvx3knjUPTinfwnzfeR5/DT0U3d5zrrmYsnvEuHIdOxrDsZrz70K/wylIvrr7zRgxKNWH+629gSdpBmDwil/gnMPamVbjjpkfgGXsO7r7hEhyUSxLzs+XoceLPccXxQxgUreOfoZa5dTZ+jq9reFlgpdf2xnlfo67PsfjVT0/F2KGD0D3bbqztsvXr4Ss4BdcauBdjBude230iDuopuMdZO/kr0yZ5Ns7EbY/NwDiuyfk/Og7DetmwtSYLhx/Sn8SbH0vefxdlPSbgOAO7WPM8HcGVb2LmUicmnzCc9xDwxb8exuLSRmy2DcZJo/JpM1OOVx5+DTXDJ2PKaFmLnSneOKKv4Vdwjv0pfn7BMcCmeXiLOHy0YDUm8R4669jB2DpnFt5Z5A+Pp3Xdu1Angefgy5mvYsbMT7HKOgaXX3AiCvv1Ro/stqp3/jLC7ECwfAnWVQ3Az395AQ4Z1BPZaZbY9zzvmfhtAzFx4/iNZy7ufbkXMWl3f3V+H+/xesZbm+ZyvP3WbNSGBuOU4+WdtvNek6N4uMV7P+72uyyRdwEJydd/dwPeWdOAU6+6EeccOxRf/vNfKPIHkTvkMEwaFn52ShbPwPs7cnHZZedi0ohkfDzjPXxR1w8nj8nnDP273D9DBgxEVtkc/PdTH47nl06Oli8ZZj72JFbZDsb5p47ogJO/6+/OhMYe+x3VrUc2Frz9H7xXlITTJg1E2cJ/YtqrS3Hy1b/GIfnWmH+7mjfFeJ91uAfa3xFAbDw7lvbH+JvDL606pK613aGynioCioAioAgoAoqAIvAtIjB16tRP2XwZN1EUxdpE0RC53vY4kpfons20tiPHkST1o6XO8qOVjZqnSuSosGimIqAItEWgb/8+DGrXx8gq216G2tp6rF2zjoRwk/HG+mDmLPQuGGAojf0kia1WC3Ly8pGbk2N4KY84eDQVvCa4XE706NULWdmZyM7NadvFfnvc2BiCbfiluPvyo4wxFhZOhanicrz80nycMeZHsJd9ieeX+nDKLY/j7EJRiI7CXTfV4+ppb2JzwxQUNMa+PpgcWchDfS77uOeqcB9DCm7E5i+uxbJi+fuz08M3AlJgx5f4d5Ef4694AFccHr4+6uDDjcuRa5OufgAXjA9fGzR1Kqouvw3T312BUZNrjLqdXR9zYT+jHZe1EZ///QG8vNSPn979OMb3CCs65WJS6/eJ8cdes/5rlIWsuO3/2XsXcLuq8l5/7IQdSIIkCBSo4X5XRIqKohzFu61S+6/3trQWi6UWtVoRPJ56OYICKmqFqj3ej3fpo6ei1RapojzYWFGRYlUuAoJKEIkmARKS/Z+/ufZv72+PjDnXXGuvneyEdzzPXN/9G2O+c6wVHaysnPTUtFf1zby9nnBSetoXrkjfHqt+4mTponqu+NJv/VrfoLxWHHFsOmL5h9LdD35EOuqo3jd79a1SP9u3ZNy/+8OKe8VOa2l7tofFbxpWN7F+3a/rWznkwUemI/ar9sIRR6SpX/TO/rjud59nPvbhaeLC76Rb1j43HbLk5vS1q+9NY9Wf2L+87PL0q5Mekpb96vr0n/duTM94eO99GRl2WUf+DBcd/Zfp7/6st9pDT/uj9I3TP5DiHjnllB+nM/+xt56DJ/fsIDUHdHgf6B4WrPjddOFZz8u+WT19dyuOOCY98uo907/dfGA69qEPrb8Vu/G2yzvt6X6927j1e17elyNlku2vpn0sOrN5nn2fzc4HpbMvfEfaOF79Y6iFw8N+3NreQ/p8HPazzMzbPjs33vqf6fM/3ZCe/LdvT88+qvc77n/3tqXplL95R/UPwk7vq/0f/6J0fvXfT3rjiPSS67+d3nb599NdJx+d9J8/NfL98+sdnpo+etY/p2/f9EfphP12Spvu/FE91wkvflyRk3rkz2m2a+//GXVYevXpJ6aXnvvJ9Pef+nW69UtfS8sec1p6bsVC75u2Z7NX2+eZbqZltPIs7CG1Kv6ZU5hjmN6FNrggAAEIQAACEIAABIYgwCHyENAogcB9mcAee+5RHRDvkQ46pHfYKBbPqP4BvO157L5i9xm3t9+Be6eJm1bXvjW3/7yWX3zby9M3liyp9dWre7Hv3bwm7TXRHj/scP0FipTyORZVJxfxwKFOmnxZc/tP65/VeHL2DVSFHfsfk9+wk29iwd7paY9Zkt7+vavT7Q+t7OonOZrid1WHtDtWZy0Xnfua+h8U1EH1CToQbRlta995d+2TDek7P7wtHfbQPdPEmhvSlb+6t/o2e7lhv/VrfRptc27WeWJDurv6eYnSP5BY6rN48quW/Z7tYfV/NJiebdlBx6WH7/rl9MHXnpY+ud+x6fnPelp67FH7TycErd997vL0h6XxTZen7//8nvTbE1ek6yYekM4486np/LP/T/r+qr9KR9303eq57pUeduDm31QfZB1e0m57LbOaFuyyov4r5Mt26e1nBZbvvlu1ca6eypEySE1fltX7QP9xYK9HH9N4AOfJ751YV6v6HVU9qn4stWe69G7j1mWOkTPJ9le1gRv3sdlYjvTZVOvYcelyt95MtnNr//zba2L4z7IunwVrVmv+8XTUvtM/KLNg+aHpuMU7pGvDndy96rp0afW3P7668gfpjrXr6s+KBbtP/ahNcf8sO/ix6WE7fCF9+pLvpxNe+PB008qvpA3Ve/Kxhc/lMNUMtfT548/9Lmvv+76qnt2yBz4zveJpV6fzv/DFtHHRo9O7Tn5YvYa+tQN8ns24qcroxzPPH+TPnEF753NhQwACEIAABCAAAQgMT4BD5OHZUQkBCNyHCVTfT67vvvo56Hqc8OwXpiOXjSV9uU3/WFt13pP2r36KYqz3E5upKZ5S70Cs16Xb69h476N7Y7f0Xta4v0/XUBTii6tvjWv9muWbH70oPfvRL97sdykbumzmXvhbR6eTH7l7+sDfv6r6FdvJsdtj01ueeIitbjKsr1vB7LP6PdvNZthx33TaO96TbrhqZbr4Mx9IH3jbyvThA56Z3vm6E1P7MXzoNHmfC5cfmB6+eGG66jv/nfZa+7XqW5Anpgcd8jvpYeML02XVQdcOP/tu7dvbv7sdWqRZr+PeVJ3nzhjhS5sz/NNGe01/lr33Qemgf3qOAbVsz/Tt3cKtceZsjpl5s2Uys9vw1hyvo4Vbv+c+duscfJYFUPqsnBhbkqoz4xljlyXVf32YHBtvW5n++vQL06bqd7+f/aw/TQfuvTz9+HPnpIt+5oyezPfPRPW3KU58TvXzGJ/8f2nVnz8wffVzP0hLHnFqOrD0npzZqpPVZe39+HqiiXsn38H6YJ8cfWt3vF/z51n2O8XuKdmVZ6zp+mfOML3jPOgQgAAEIAABCEAAArMjkP3P6tk1oxoCEIDA9kjA3yz2vd1688/TwsUPqs1Fi3vf4Fyy75HpYfk3B6uMu/vE698DceOOcnx8WfWbuKuTvumcfxtW3/wdm/hiurKKHTy5Hv1+7tcvvaP6zduDqn/UcKKK/0tjXEfNa+6YSE898x3peSuuTX9x2jvSa95+WLrwFU+cPDbvuMiQtv7Xv06LHvS89OZTqm/AVQc6uy+vfg+hYfRbf5+j8IauPbcO9wcZ/Z5tudeidMBRx6eXVNetV7wznfneS9Ivqp81uV92y/3uc6cFy9MjH/OA6tuDH0jvq35649hTjqnYLU2PenLl+8zb0w3Vt7t/5wXV766WF1F5u62jsXzEgb4ss5/7GGT6fiwH2zNlbgf0eV8NNkfv7voyaYAw6D5uaDPlHnYdUw1qpcxtRZ/Pv7tm8VnWhfn4+JL6s/Kq8HmY7vlpWnnHvfV/JNPSb7jyS/U3iM8+/5VpnwW9w+Xr1sy8uyZrv0dX7+1PvDl9/GMfT1etuzc974mHN6UO7O+y9i7PbvU1n0pv//JN6dG/93vp+i/9S/qf770ivfvUR6UutY2fI5v/BYip+xuGZ9c/c4bpPbUwFAhAAAIQgAAEIACBWRPo/T3qWbehAQQgAIHtk8CS6htr6654b3rfv/5XWr3mzvT9L7+3/h3JY55+fP3X7neq/qG0E1eMpy+c8/L02W9ek1ZV/7jgtdd8I33soivSXdXBWL+4qfV+XdpWu1y833HpMfdfmC4+76z079f8JK267ca0svqr2D9adU9auMeD6vVcXP0cxaU/uCWtufNn6fPvflP9+7nPrA44+sU1s34mQP/c3dj9fied9ZIT0j3f+7/pHy69YWpR+VpzeypxUvnVLybSvbdenb72H1emb379C+mii7+Srl9VPqXpsj617TfnjDVUX7lbVv2jgD+7/KvpR7fellbdvnYq3Nan67Nzs7tuuTy97xOXpetvXVXvg+uuX+XQlPR8Xe7zwIcfXR+Abah+fuQJk39F/rBHPbbqtaH+xvtxR/72VN+oDLIO13ldtrvIQWq6shykp9fYhaVy+/Vu4zaqObxmya5MpmoG2Mf97nWqZ5d13HNTesPJf55OOe+SaudtPtq49bvH2XyWeSVt97p4v0dVP12xMH32Le9K37q2eu/fdl366JvOq36nfSL5n2zbY98D09imn6dvrvxx/b79xqfPS5++YUNasJNn6MnSPGM7H5aec+ySdOUl30jrl1Q/b3FQy+lq1Sbvkdtxxi5r78d3Ys0P05vf8i/Vf8Q7Kb3ouc9Nr/ybJ9Z/nn3027/ou//anmu6+7r0yhe8IJ35if+KS671vjwL+6nxz5wsd5jemy0QBwQgAAEIQAACEIDA0AT4JvLQ6CiEAATuCwTumliYjnnSo9N/f/wt6aUfq05Xq3HwU05LL37cit7tV98OfeZrz0nr33V2+ty7z02f63nT0oeclJ5Tf6mtT7zXMu22y8x/ZE6H142jmvPkN74mbTrvvPShc183lXbSocelQ/e4X3rWa9+Y1p7/+vThc6p/TK+K6jeQ//Bl56UnHdz7UYXWePWt1x3C1Hs/7M/TqY+7Lr3nw2enbx35jnqufK25Hdd+1y3fTV/+5Ya0cezm9K2v/jJtumtd+sWdq9PnP/OJ9Mp3/p/04OVhMnWv7q3f+pTWNqfiM8eidPxz/zD987mfSme/+vK0aekT0z9e+Id1Smufvs925ixj1RHb17/0weqyfzyd+OLXp4P1D6Tlz7nffVYtdtnn6LT3gs+n2/Z7Ytp3aY/T4gccnR6208fTygWPTIfsnrGbnHagdUzW5Bz0Lc/Nvrg9tjgtCF99HqimH8ucz+S6ymJx9TcBQqQfy2pPa+TrDR1qtZVbGm5ftnLsxyRfYPXt8q77OL/XWa2j+gmE32yq/kPQr9fV/4Fp8ifDp1bXj1u/z8ehP8sanmv8/EnVZ9+L3nxGuuOMc9IFbzy9XvPuDz6h+oc2L0t3T27wZQc9ofrd96+ni999drq4yhi7/7HpWb/3wHTRyqlbrJWcqaPH/t6J6QP/8cn0wKc/Lu3a8jMPys975Paga9fnZRvfS9771nTL2KHp7Jc9oV7u7g/5k/TC47+T3nfBu9Jj3vPG1tqNLZ9nd//0hvog/hlH72sMU7Ivz3w/VZVNf+asPPSMGXtv4N7lj8iptaJAAAIQgAAEIAABCAxGoMv/vIo51nPpbzTLHy/5c9s+yaZLX4JTTDLXdfDtmHTn5NI5D1q3bt1rqjwGBCAAgVkRWLt2bfV7x0vTkpnnvVM9J9avTeuqr+qNVzmLCjn94lONBlDuqdakX7tctHTpZj9t4PlKMU3RLz7AMsqp1SHPp//2ZemSfU5K//jyx07n3P3D9Nenvjk99ox3pecUfgLEiaNf3/q0du2GtLRiNejwWpqebeynfaLRdR73bnpOsfcg+qDrGKT3bHJ9v11YDjqPe8+GZT9uo5gjvy/37MZk+H2cz5vbTeu4Z+2daeP48sbPPvXpyq3pHmfzWZbfR8nurW+8el8WPpyrgt78zfFST/lW/ecH0yvfdXn5P4o1FQ3o77d2tWt6dl2maqstPdcbv/LW9L8+PpH+/n2vbDw4b+PZZT953aXcUfX2HEgIQAACEIAABCAwCgJLliw5u+qjv6qlf75o06SUnl/6v/DOsW7bua6XbLr0VRzHpPuSz7pl5apzJeXTyGX01Qn5C99EzolgQwACEGgg0O9QcGzR0tRwPlF37BdvmLbVvWN1IOq/lp0n9puvXzzvN4y9rvpND32DUT/tsbj+z4/r0w9XXp7WVH+dfHH4Vmup9+jXt6jxAKk0f/QNspZ++yT2lT5I77y2zR50HW29Rhmbq/vVGkfRux+3UcyR8xys5/D7OJ83t5vWsePS5XnqZvZsuc3ms2yzxRQc/dbXNn+hXe3Sz0X8wz9clhYc9Mfp8PxvVTQVDeHvt3a1bHp2XaZrqy3Nvf7eHdIjnvuMxgNkzdnGs8t+8rpLuaPq7TmQEIAABCAAAQhAAALdCHCI3I0TWRCAAAQgMCiB6q9aP/XUJ6V/P/+T6dQXfHJG9YNPfHk6cfLnNWYEMCAAAQjMdwKTf5tC/zFsYsFe6ZV/9YTN/ibIfL+F2azvkKf8TTpkNg2ohQAEIAABCEAAAhDYJgnU3wvrs/KYYz2X+ukIDfnjJX9u2yfZdOU/YaE8/1wFP2dRwWBAAAIQ2FYI6K9K33LTzek3GybSoiXL0t57/3brX4vfVu6LdUIAAvdVAuvTL268Of1qww7pt/fdN+2yyP+z+L7Kg/uGAAQgAAEIQAACEODnLNgDEIAABCAAgVkS0F+VXnHw4bPsQjkEIACB+UJgUdpzv4PSnvNlOawDAhCAAAQgAAEIQAACW4CAvuHLgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQgUCXCIXMSCEwIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABESAQ2T2AQQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCDQS4BC5EQ0BCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ4BCZPQABCEBgvhGYWJu+/pmPpEt/cMd8W9m8W8+mtben7135g/SbiYnRra3i/6G/emF69Wf+a3Q96QQBCEAAAhCAAAQgAAEIQAACENiGCXCIvA0/PJYOAQhsnwTGJn6ZvvDFS9M/fevWTje4+trL05eu/EWn3EGS5qrvIGvol3vV516X3nrBZ9Pd/RIHjC/YKaWJewcsIh0CEIAABCAAAQhAAAIQgAAEILCdEuAQeTt9sNwWBCCw7RKYWLBvesMFF6Z3/OmRnW7iyn/6UPr81as65Q6SNFd9B1lDW+7YxO3pC19Zl1b87jPSHmNjbamDxcbG006j7DfY7GRDAAIQgAAEIAABCEAAAhCAAATmHYEd5t2KWBAEIACB+UKg+lmDfz7vTWnNwx6f7rzkY+k/bt1YrWw8PeUvXpX+6H8cOr3KidXp0g+/PX3432+ofbsf9bvpjNOem35rx+pgs+rxuf/9prTgD/44jV3yvnTRVb9M+z/1VekNzz8kff/LH03v+cRlaU39Uwzj6cBHPiO99NSnp13TuvTlC/4u3XbsK9JfPG5F1XN9Q+5T0lXveXX60DXrU7rmLekvLktph0NPSu961RPTeJ819e7rKWnt1z6WvnFj73u8v/P009JfPuvhafHY+vS1dzf0nb7r+t5yPhNjy9ILzvhf6ZC1l6VzLri4vrcFux6ZXv6al6aj9tixrv71jSvTh97/2fTtG3vftBav0099btpraY9X3rPIvOp05w++kn60cVP66xOOaOH8oCrW8nyqPhP33J4+ccH56ctX3VKv75inPT9tWrup1uuXe25Kb3/pWenI09+WnnTw/Xp+7Y1z/zbddMwZ6bQnHzDlu/QjF6YPX9r7GYyJBXulvz77DekRv62vNbevYXoyNAhAAAIQgAAEIAABCEAAAhCAwPwjwCHy/HsmrAgCEJhHBFav/nm65CMfSQc/7nnpzD99QPrhv38qffZ9Z6dNS85Lf/LQPauVrk//dv4r00evmkhP+4tXpCMX/zR94ILPpDPeuCT9wxt/Py2uMn5zT9Xj/HPTwgc8Op1y6hFp0a57pLt+8pX01o9/LR3/7FPT8QctT7+68Vvpsp8sSTul3jdq7/z56nT1z++sqle05C5KB53w/6UDv/X+dNM+j08vfeYDU1q0T3XM3X9Nvft6f9r3kc9Mrz7pkHTT5Z9KH7v4gvTBvc9LLz5+z4a+mz+YKT6PPzm9+uRd09f/b3WIes7pdeKT/+wV6Zjd7kiffudH0tvO+Wx6z1ufVx1Qp3THdd9NP1lyaDrtjD9NS9PjEZsAACAASURBVFZ/N53/nn9JZ3/y8PSuFx5d1031bGTeW8d3vnRJSrv/bnrw7r2/VFPi3P/5rE3/9L/PTF/+aUpP/6sz0u/sckf62Fvfn66vDqcPnPwTcmLDXenae9an/TbMvP87f7EhXfvLtZPO9emL574sfeoHG+pneuzeG9O3vvaDtNsuOjjv8zx6j3xmcywIQAACEIAABCAAAQhAAAIQgMA8IsAh8jx6GCwFAhCYfwQm7kppyXF/mf7uBY+qF3fEEYene295cfrCZ/8jPfOY30+LVn2rOkBen5525gXpOUfoW6oPSW941Zr04nP/Od209sR02NLePS1Y8bvpwrN6h6jyrL7m13XgkAcfmY7Yr6o74ojUm6FyT/4bcT5QXr+uOXfFEcemI5Z/KN394Eeko47qfTt6422X912T7mv8yJPTG//qsfU6Dj/49HTTN1+arr5ZP4uxZyr1rROzF/VZdHTF5896qz/0tD9K3zj9A+mEF5+X/vgROmRP6ZRTfpzO/MfvpFvWPjcdvPNY2v/xL0rnP96Njkgvuf7b6W2Xfz/ddfLR9aF7P+Y6iJ5Y88N08VUb0nGnPq4+mDaznHM/Fgev/s/0+Z9uSE/+27enZx91/3pRf/e2pemUv3lH2jT5m8hjLX9S+hltvO1b9QHyI045L51SHcJrPOShx9dSsdY9UjFhQAACEIAABCAAAQhAAAIQgAAE5jOBlv9rPJ+XzdogAAEIbDkCy5YtC5MtSkc8ZO/0/766uvatuf3ntfzi216evrFkSa2vXt2Lfe/mNemwwxckHYru9ehjeoedk52WHXRceviuX04ffO1p6ZP7HZue/6ynpccetf9kdKZozZ3YkO6ufg5jYsP012S7rEkz7L5i9xkTLaq+Nu1D0arhZn1nJAdjt72m+SzYZUX9+8TLdumxUNry3XerTn2vnqq4e9V16dJ//df01ZU/SHesXVevfcHu41NxKW3MFf/Z97+UbhvbM5165G/JrEeJcz8We03o+Y2no/bddbJLSguWH5qOW7xDunbK019Zc/tPk37K48lHT6/HVf3WcFj9Hx+cjYQABCAAAQhAAAIQgAAEIAABCMw/Ahwiz79nwoogAIFtgMBEdfCoUf0bbPU44dkvTEcuG0v68urY+LjOYNP+++5cWevqeDzkrR077ptOe8d70g1XrUwXf+YD6QNvW5k+fMAz0ztfd2Ka/NXdOm3g3Kqg65qmJxildm+qzsxnjMkv9Na+jbetTH99+oVpU/U7yc9+1p+mA/denn78uXPSRT+bUVI0zFy/M33Jp69KOx71wvqbzTE559yPxditO1SHv0tSdWY8Y+yyZPNvBy/IcuI/vjc23gvqV7Pz0W8NeT42BCAAAQhAAAIQgAAEIAABCEBgvhHI/i/xfFse64EABCCw9Qn4m8VeyY3X/ywtXFz9g23VWLS49y3cJfsemR5W+kbp5E9TuHamXJQOOOr49JLquvWKd6Yz33tJ+kX1Exj3m/wJjEFydXDtMbs1uUtPxr4zI8NZN1z5pbSh+gfnzq5+R3qfBb2D2uvWbN6rjfnGVd9NX7nj3vSMFz1488LM04/FXeNL0lj1j95dVX1r/GA/v3t+mlZW/f0H5ER1Cq7ftr71F9V/EDhk8oi/yrnyV9PH4+Pjy+o+9bfP3WdyLf3WkC0ZEwIQgAAEIAABCEAAAhCAAAQgMO8I9P41onm3LBYEAQhAYH4QWFJ9I3XdFe9N7/vX/0qr16xKV37+7fVv3x7z9OPrn6fY6QHHpRNXjKcvnPPy9NlvXpNWrVqVrr3mG+ljF12R7goHyHf7R3snb+uuWy5P7/vEZen6W1fVNdddr98injlc05pbfc112S5j6WeXfzX96Nbb0qrb16Zh1zRj9kLfGfFgeJ3B1ajuse+BaWzTz9M3V/64vu9vfPq89OkbNqQFO02X9GN+9Ve/lDbtcGR63OH6pvfMka+lH4vF+z2q+umKhemzb3lX+ta1Fb/brksffdN5aVX1EyH6J/E0xpauSEftujCt/KeL0jW33JburHI++KZz0882Tecs3u+49Jj7L0wXn3dW+vdrflL1uTGtrH6y40er7un/PO65Kb3h5D9Pp5x3SZr+UZLe3LxCAAIQgAAEIAABCEAAAhCAAATmAwF/0Wo+rIU1QAACEJh3BNatm0h7HHls+u+PvyW99GO9U+GDn3JaevHjVvTWOrY0PfO156T17zo7fe7d56bPTd7B0oeclJ6jL9pOHiTvtsuiGfc2Vh0Xfv1LH6wuu8fTiS9+fe/nGbKa1ty0KB3/3D9M/3zup9LZr748bVr6xPSPF5401Jp0eDs9yn31j9rlI783fWs3fDG6lz62OC2oviy97KAnpBP2+3q6+N1np4uryNj9j03P+r0HpotWTndtZV59a/iKS29JD3ji89KuY5svJl9LdQLcziItSy968xnpjjPOSRe88fR6Ebs/+ITqHyu8LN3tm6h6/MHLTkpXvf5D6dz/2Vvoboc/Oh204xVpU8g5+Y2vSZvOOy996NzXTd3MSYcelw7d437ta6h+++Q31YH0vb9el+6tnv345rc11Q8FAhCAAAQgAAEIQAACEIAABCCwNQh0+b+qMcd6Lv2NZvnjJX9u2yfZdC2cjEnmug6+VSe/dOfk0jkPWrdu3WuqPAYEIACBwQhUv737kVe8NP3g0WekNz/r0HTP2rVp4/jStGTmefBUz4n1a9O66quk41XOooacqeRJZW3VU2Pp0uJvWExm9UR77vq0du2GzfoMs6YZk6Zy35k5g1tieW/1u9JLl2agBmQ+yMz9WPT4FtYUJlHOWMseUGrv3qqfOqme6fSPjPSaNK3hnrV3VntreePeCktAhQAEIAABCEAAAhCAAAQgAIF5RmDJkiVnV0v6r+rSP5WzaVJKzy/9LqJzrNt2ruslmy59/cwx6b7ks25ZuepcSfk0chl9dUL+wjeRcyLYEIAABDIC/sfaduxz0Du2aGnKz0SzVpuZXQ6PXdSeu2jzA9mqcJg1eb6eLPedmTO4JZb+uYhSdVfmpdomXz8W7Xx7XbvktN1b0xp2XLq8adn4IQABCEAAAhCAAAQgAAEIQAACW52Avq3LgAAEIACBBgL3/Cal32zwf6BrSMI9UgIwHylOmkEAAhCAAAQgAAEIQAACEIAABGZNgG8izxohDSAAge2WQPVbuL9/5unpxN0P2G5vcd7dGMzn3SNhQRCAAAQgAAEIQAACEIAABCAAAQ6R2QMQgAAEWgjsefDhLVFCc0EA5nNBlZ4QgAAEIAABCEAAAhCAAAQgAIHhCfBzFsOzoxICEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwHZPgEPk7f4Rc4MQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABIYnwCHy8OyohAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCCw3RPgEHm7f8TcIAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIACB4QlwiDw8OyohAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCGz3BDhE3u4fMTcIAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGB4AhwiD8+OSghAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC2z0BDpG3+0fMDUIAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQGJ4Ah8jDs6MSAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMB2T4BD5O3+EXODEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAASGJ8Ah8vDsqIQABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsN0T4BB5u3/E3CAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgeEJcIg8PDsqIQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhs9wQ4RN7uHzE3CAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgeAI7DF9KJQQgAIHtnMDE2rThhzfWNzmxIaXxgx6YxpYMds/33nxNqtqkiQ0b0sI9D04Lf2vpYA3IhgAEIAABCEAAAhCAAAQgAAEIQAACW5kAh8hb+QEwPQQgMI8J3HNjWnvWW6YWuPNZF6Yd9h/gFLk6PV773rekiZ/0Wow/6/S09A8eONUPBQIQgAAEIAABCEAAAhCAAAQgAAEIbAsEOETeFp4Sa4QABLYagYlq5vsNenjs1Y4tTcvO+mD1NeS16c6/OS2NjTuAhAAEIAABCEAAAhCAAAQgAAEIQAAC2w4BfhN523lWrBQCENgKBMa2wpxMCQEIQAACEIAABCAAAQhAAAIQgAAE5hMBDpHn09NgLRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5hkBDpHn2QNhORCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5hMBDpHn09NgLRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5hkBDpHn2QNhORCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5hMBDpHn09NgLRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5hkBDpHn2QNhORCAwDwncM9P0q/+5M/Tr995SRrTUvvZ8/x2WB4EIAABCEAAAhCAAAQgAAEIQAACEOhHgEPkfoSIQwACEIgEJjbU1sTqdT1vPzvWokMAAhCAAAQgAAEIQAACEIAABCAAgW2QwA7b4JpZMgQgAIEtRmCimmnT2rUprZ9IY4uWpomdDknL3/P2NLbj8qRY6mNPrF+bxibWpYm7t9iSmQgCEIAABCAAAQhAAAIQgAAEIAABCIyUAIfII8VJMwhAYHsjoJ+sWPfmVyV973jp6y5M44csSWM7L59xm432xNp058mn1T97oT6TX1qeUYsBAQhAAAIQgAAEIAABCEAAAhCAAATmOwEOkef7E2J9EIDA1iOw0wPTsvecV80/Xh0Ab0gLdl4y2FrGltbfWu4dHqt+j8HqyYYABCAAAQhAAAIQgAAEIAABCEAAAvOAAIfI8+AhsAQIQGD+EhibPPit/xG9IZapbykPWzvEdJRAAAIQgAAEIAABCEAAAhCAAAQgAIGRE7gv/MN69c+WjpwcDSEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIVL9gub1D2BYOkZsegvy+/JxsR+kYEgIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAXBCI55HWPY9tydJo8pdyt4pvPhwit0HMATo3h9Xkz/OwIQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhsCQJNZ5Ylv3z5cF4plufOqb01D5ENId6gfSUwJV+sRYcABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsK0QKJ13Np2P2r9V7m0uD5GbbqwEZ65uvmkNczUffSEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIH7FoEtfQZZOl+d0zXMxSFy04JLNzeb7eR52uRs+lMLAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQKArgbZzSse69uqSp575mIt50qgPkedi4b7xXOaAmuz1TQH8EIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAARmSWCQ88f8jNP2sEtoqpd/ZGNUh8gjXVR1d775rn1jXqyVvnrnnXc+a2TEaAQBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAoCIwee64ulLzM0nzieeW9pVkrC/Fh/V1nb+1/6gOkVsn6RAcFFLMNwj78ul+s2nTpnXVA31THsCGAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIDAMAZ036tyxqv1NoT6eVVq3LKRv5nKu5FYfYx1WEHOsl2T0SdelQ2rrkguDv1LruHLipRzZllGXb4cQy3XnulZS1+Lq2rW6llfXjtXlPEmv075oe+3qYb0kq3DdU1Jxj6jbh4QABCAAAQhAAAIQgAAEIAABCEAAAhCAAARGTyAeuFrfNDlNPJTN9Y1Vjn3K1yVb/mhLt++eSr+juvQt5Lsm/Y5JWr+30l2X686xdF6U0uNVmTPW53VLKi/ayrVtvSSjT/pmQ4ewsxlaxKAHpV54vzrnta0v5kjPh+N3V4FfVNft1aXD4qZLa9IVD5RtO1aSVckUB8U91IcBAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzD0BHaJ6+KwwSp8V5jIevvpA1znxADfX81zPbZnPbX9Jer5SLPq65sUa6V5L7u9kD3uIrEnjYWmnyaqkfnWG0HRTpXj05brWlfvabN+Tc3xfsocZceMOU08NBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQg0I1APMOzHqX0Lpdn65LrHNVYL8lST/uijLXRn+vKG2YMVTfsIXLXBWpRPphtq2lbvGJ53L7otx5j9mlu63k8t71OHQD7m8SudQwJAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzC8C8QzPepTS2y6dB7bFY0x3Ltsjxuy3VE6Muyb6oy/qsUf053rXvLyukz3Xh8hehG6idJjcdHPy5zH7oj/3ORb91jW/NoJ+39i+kqzC9VDMB8nSGRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMD8JRDP8KxHKb3pGvQAWfkapX72WzpHtoZtyTjsjz7reW4/v+MjkXN1iKybKh0ae9GluEHEmHRfsTb6rEep3Gjnels8ziNdG6LtXpyPhAAEIAABCEAAAhCAAAQgAAEIQAACEIAABLYeAZ0BeliPMj8jtD3IAbJrmqTmL8Vyf1yn89t8MWa9JNVr5GPQQ2QtYjYHqqX6phuLfum+DCHa1qPUOqNtXZtCP1NhO0ofGDse57KeS9VrmItl9NUJvEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAJzRsDndJrAuqV9svtd/Q6Vm+JNc0S/dI24hp5nes22Y1702Z/7BrEjl751gx4i9204YEJpsdFnmLFt7nO+/cNKHy5rLvfwvPqXFnU4rMNlyfyqXAwIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgKxLwOaGWYD1Kn/lZNh0Gd407r03GtVhXfhyuty+Py1/yOX/O5SgPkXUj8Vu4Xrz9lvJLj7Z9sV5xD+fLtj5K6QNkzykpnw+L/Q/sOU/rYEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALzh4DP9rQi61FK9xUPkKPuuGVbzDnDSK9RtR5Rl69kR591S/exbPI73lmO6hBZC4oHwF5AyZ/7oi3dl/pJ97B/WKkH7p7qYVvSP1/h+eyLc1svfStZMd+/ZfS5FgkBCEAAAhCAAAQgAAEIQAACEIAABCAAAQjMDQGf7am79Sil69wv98n25bhtSfssHctt+weRVft6qEYj1vY80+ttsl3neJTuG30D66M6RC5NrAXGA1XlRF/USzHfoGTUnWtftJ0rqYcYD41jnmI6OLZ0nWt8qOwaSfXyJTvWeh75/a1l6XGNspXHgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABIYnkJ+5lTrp7M7D+fL5HDBK59pXyrPP0rlRNsXiOpSvEWVJjzl1QagpxZp8rp2VHMUhsm6y3+GoQZTyFHMP674p19lvqbj1Jhlz9AB9MBx118qn4QNg21qvLuVpSNpnv6RGXiufY9I13Kdn8QoBCEAAAhCAAAQgAAEIQAACEIAABCAAAQiMikA8e7Pucz7Z+aV5c5/y7ZMe7egv6fa1ydKc9klquD7X62B4iXnBvZmqvFmNLofIniQ/EG2aWPkxt82OsVxXf/nsl/TQw9McjudS8dKhce53v5irvrYV97zyl+7LvpinOg0fLPcsXiEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIG5IqCzPw+f1UWZ67J1uS7a1h1Xji77u+jOjdJzVa2mzh0dj76uep5XsuVrGpq77+hyiNy3yZAJWqAOYA3Jutq1+fI62Rqu0YNwrzbdB8XxwfnQ1z710eU+ti2r0NTDlk/DUrrXJp0BAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzB2BeBZn3VKzSu936RzQOdJ9Rd8getViqp/qNFwf7ei3bpnnyb9Fx2wOkbX4eGCqhUdf1POb6hJTTrzcP/qinsd98Ksc6TogltRo0hXTPTku3bZi6mVflI5Jyu8RdfuQEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwOgJ6OzOI+ryyc4v+3VmGGO2JbvornWu7WGk1yRZGurZNGIs6s4v+RxrlbM5RM4baxGlQ1MvzrGYZ13Seeobdduqj3nS9WDkl1yY2fEgOOquky/q6qHhdUr6avKX4urp4V62kRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMDcEIjncp7BPsn8Uo58+eGv7VzmuTEedeepf+6Xz+uwLumhmIZzot2L9GJRd459lk1+xzvLUR4ix0m1QB2gWjpm29L+KB2TbLoE34fAMUd9FPPcjjlfUsOHytJ90GtftFVvW1KXfbZjvArPGI7NcGJAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACIyegc7t82CcZL+XZ1pmh86Tbli/a9pd87uWaaEfdPaIv6tWUU2uRng/lalj2rGk79zs+KzlXh8ilRekG4qGqbyhKxWWXLvWM/tzWA9C3kZUj3UM94wGxY16LY8qXz371UUxSI8asW/YypmubbPuREIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwGgJ+BzPXaMtPV7Kse3zQkn5LKMun/0l6bhjVfpUvueRz7qkRrSj3hSriyZf3CP65kQf5hBZi/NBa9dFuSaXeX288VyPtdJ96cFoPbKl++A3xiv31EGyD40tFfP9uNY+9XBMMtejrRoN+3K9DvICAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzAkBneV5lHSfFzpm2we/0VYf+R1rk465XjL6ou4c9Y+6bUvFSsP+XJZym3yubYpv5h/mEHmzJsGhBcRD1BCqoSjmnJJUfswRYPdTfrwcky/qtit3PVSveBzuaRkPlJ2nmK+Sz7VNUjWOuR4JAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzA0BnQt6WC9J+XwpX2eHtiV9lmi/ZNSdk/uj7X6uc439uVSehvwajltvk4rlw31y/1D2bA+RtZi2g9Kucd+Ue8l2raVAKu6Ypf0GrRxd0e++lbsetuPhsX0xRz5dXoNt5ViX1Mhlz8srBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsKUJ6DxPI0qfJ9pvO5c+Z5RULMpct+0895bfMcumeeTXcLxnzbSd41guZxvP+82wZ3uI7GZapA9Rrecyz41xxVQvny4N65Yln2Kq04NwvXSNeEAc9TzmOuW4n3LkL115TLaGcjUsc70O8gIBCEAAAhCAAAQgAAEIQAACEIAABCAAAQjMCQGd7XlYt5Rfuq/ctl8yHvqWdPl8OV+2RvQ7Jn/s31WPddajlK6hfhq5jL46YdiXUR0id5nfcHTIKj1K18eckk8PwXXKta1cPyjpypEdD4/l81CtYhryO2bdcfuVa9050XafKKUzIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgS1PQOd7GiUpX/T7XFE+6Y7ntmKO53rMdcy5MebeimnY7lm91yaf8y2Vt0XGljpE1g350LV0YwajHOuWyi/pAq18SR8Wu96xKjQjJlvDa1HftgNi5ypPNb7sdx9L+yU1or/n4RUCEIAABCAAAQhAAAIQgAAEIAABCEAAAhCYCwI6w/Mo6fLZbz1K1epcMfpsl6R9ypcebftKMvZv0qt2U+uQ3jRUP+dj2ENkLS4/ILXPC3fcft2MdefkPtfYH/NLuh6Mhup02Y4+z2XpmKX8Oki2lN+2+1oqZl1SI5c9b+/VsehDhwAEIAABCEAAAhCAAAQgAAEIQAACEIAABEZPIJ7/ubt9UUov2fb7jNGHwpaKW5fUpRHrnBNjpdxYl+uyNdRLw/0t7auDk/Goxzr7LR2z3UkOe4gcm2vipsNSxyxVF3XbkhqKaTjHsOM3je1Tng977XOeY/ZrfbqirTmUL791z2u7CtVx11tGv3QNxTQse9bM17bYzEwsCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAoERAZ3f9hnMslS/dtvUolaPzw+iLdpOufMckS7pz8nj0V6Uz5o7rUMxDfg/rlvZH2RaLeY36IIfImmw2h6BxserjfpZapHXJXFdckBdOxpwjXxzxINl+zafLMdvqkR8kq0Y+z+9cSQ3buV4HJ+Ml3T4kBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgMHoCOs/ziLp8su0r6fZJ+rxR0v6ol3yK+3IP23ltlTp10Oxe8uW6fBrya0QZc3vRwV/dr2/lIIfIfZtVCZpYh6xegA9e89qY53xL1wquDnM1Yr79kqpxnWwP1W2cNFTrg2K5lB8PiWM8zuPeuXQPS8U9oi5fbjsPCQEIQAACEIAABCAAAQhAAAIQgAAEIAABCIyWgM724oi2dNtR2t8mde7ouPrbzqXPI+X3FefK89XLfSUdt8/xkpQvH6W6PGcoe9SHyKVFaPE6TI1Sebkvxh2LPukaktYFVsOHzbblUw89OMdka7i3pA+TPU/MjbpyY31uu69kHK6JPnQIQAACEIAABCAAAQhAAAIQgAAEIAABCEBg9AR8Zhg72xel9CbbB7nqYd250ZbPtqR1+9ts5cSrMqds65bKs25Z8vWy5uh1NofIWuygh6SxxnqUvs3ok64h8DrYldSIum1Jx7U256iHdEsfAnsex2wrbr1S6/t0jW1L+a1PqlPCsSkHCgQgAAEIQAACEIAABCAAAQhAAAIQgAAEIDAnBHSelw/7JKOuPPuiP/rsjwfCjttnKb91S/tk25fr7iepEe3oc6xOmsyz3lW6X9f8qbzZHCJPNakULSA/MPWi5M/jjsUe1pUvmDrY1Yi6QMFIsAAAIABJREFU+8inod9Hti7bh8HSvR738beS3UNxxeL6pLsu6u5RitlXldYj2lF3HAkBCEAAAhCAAAQgAAEIQAACEIAABCAAAQiMnkA8c4y6ZrItGXXFfL6Yx2xbKs+6ZKyT7rj99uV2lbpZH/d1ru2SVL2H4hrO61nTr45Pe4bQBj1E1qT9Dkbbcrxo9Yh51iWj7jz5NAzRh8WypduvHNXI9jpV68Ni59n2XMptuqpQvSZJ94zSuuIaud3z9l7bYjEPHQIQgAAEIAABCEAAAhCAAAQgAAEIQAACECgT8FlhOdrz5jmy7WuTzmuTPmN0jmzpltHvXMe0Oum2nSu/dI2Sz35L58rOR1vMuV1ynJsGPUSeKpxUNJkPRqPuvOiLeoxLVw/HJT0E04fE8eA3+pWrevk0pCtXI//2sXvkuarxpTrrUdov6aG4hmWu10FeIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgS1KIJ4xWrf0QmxL5pdyok/niXm+ffL7vNF6lFF3jfu7zn7l6tKI0nov0nuNvqg7J/qi7nhnOdtD5KaJtCgfrEZd+V6w4tblz4fjrpcUTB8QW5dUrvzWK3XqINg+95OMl/vbF2vl0/CctnOpHPukMyAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIGtTyCeP1rPpc4PNeT3ldv2d5Hq57x+epwn6q6PMsaleyjHI+r2zVqO+hBZiywdptofpRaf58a4APtg2Ie4qrFfuRqKWVc/2foGsnXJrleVWo+YL4fmlE+jScZYnRhybSMhAAEIQAACEIAABCAAAQhAAAIQgAAEIACBuSHgM0J3j7b1kow+6bbVx3YX6QNj1VmX1JCMeuyX+5Uf1yBbwzXWo5QeR6k+xgfSR3GIrAX5YDVObn8unVO6EfWJ+dYFsnSQbMCqk+51WPrnLGTHqzJn2E0x5Wk4br0k5dNQLgMCEIAABCAAAQhAAAIQgAAEIAABCEAAAhDYegTys0fbJWmfVivdtvVcxjzHfE4ZbeuSjkuW/Pa5t6X9lvJ7yKeRy553+tXxac+A2jCHyJp00IPSWBN1L7d0I5pDUHV4HHXXOCapuA+Z84Njx1XnXsqP65DtS3nWJTVs96zpV8edE+V0FhoEIAABCEAAAhCAAAQgAAEIQAACEIAABCCwJQn4vNFSc0fda5HPfutttvsoR+eOGrEu9yvH/aw7P9ZH3XHLepLw4n5yRT2ktKoD18RD0NbOWTCva7NjzAe9ame/ZK7bZ78Pf1VX0mN+m676prhiGo5bt5Tfw7ql/FF3HhICEIAABCAAAQhAAAIQgAAEIAABCEAAAhDYegTigal1S61Kuu0orccc51q2xZwTZTwobtJjvvQ4h/Wed/oQO/e7znn9bOc1ymEPPkt1uc+2pRYhPbdzv3OiVE7p8Dj63VfSh9WxR9RVpxF91u2vEyZzok95Hk16KW4fEgIQgAAEIAABCEAAAhCAAAQgAAEIQAACEBg9gfywVDNEX0m3zzLWyJdfimvkftuK6YBYtob9TYfG0e9cy1hvXVIj5tiOUrqG8vJR8uU5M+x4CDoj0MHIa9vsGJNu21LT5f78INg50R9111sqX/F8jrxGeRqxrknvZfZeY1/Xx3iTL8/BhgAEIAABCEAAAhCAAAQgAAEIQAACEIAABGZPoHQ4mvtyW7PKZ3+TnufFg2LH+h0Ix5qoxzmb/J7D0uu1LakR/V3suqjfS34Q2i8/xku1uS/a1geRyo2X5pedHwTHnvHg2LWui3ny5X3k08jzcjvm5LpsBgQgAAEIQAACEIAABCAAAQhAAAIQgAAEIDA/CMSD1ZJuXy61evnsj4fEeSzmSS8dBsc+1l0XpXsPImOudA3P0bN6ryVfjBd1H44Wgx2cpfroi7ra2W6Szolx6fGKOdHfVKN8jVKu/ZZ5D/k9HJPdpOcx1yIhAAEIQAACEIAABCAAAQhAAAIQgAAEIACBLUcgPyyNdpOu1SnmeK579fZbtvmdk0vV5D7ZGvb3rJnrcTzKPK8Ua/K5tlXu0BqdfVA3HA9c3dH+XJbi9lmqn+ricB/PFW37lG+/dPndy9J+S9fm8Xx+5Xu4xjYSAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ2LIE2s7vtJIYty4Zda84+qIe+7g2xu1zXpOd+z2v60oy5sR47h+JPdeHyPkiBcSHrFFXnm1L18qOI8at5z1zW/Xy2S/bfaNfuns6rlzXWUafdA3HYl3010m8QAACEIAABCAAAQhAAAIQgAAEIAABCEAAAiMnkJ/JeYLcH23rlnmN/ZLWY070O25fP1t98tzY23H7ctv9Y3zOdB98zmaCUo/c12YrFuPWSzLmlnTX6H4cL/kcjzLqrrGMMelxxJzol94Wy3OxIQABCEAAAhCAAAQgAAEIQAACEIAABCAAgeEJtB2sNsWi33outaLcJ9s+x/v5Yty6ezTJ2Fu6hnN7Vn+7VOPaTnJUh5ylPrmvzVYsxnPdtvNy2zebx+W3z3rMjb7Y0zkx3qY35Uc/OgQgAAEIQAACEIAABCAAAQhAAAIQgAAEILBlCOQHrZ41+pt05TrWJPMc59kvu+QrxUu5ytNoizleJ06+xDntL/kc6yR9cNopuSWp1KeLL+ZIz21PGWPOyX32qyaPtfWJMddGmevOt4zz2mfZFnMOEgIQgAAEIAABCEAAAhCAAAQgAAEIQAACEJg9gbbD0q4x5+XSq4t+64pZl7Ruv+0YK/mcL6kR823XgckX9xjGF2v66qM65Gzqk/u72DEn10t2yecbd0zSeikmX1O8XyzvZxsJAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIbF0CXQ5aY07UtXLbufRdyV+KRb/7NPlir6i7b/RZl+wXd26eZ39nmR+cdi4sJDb1yv1d7ZiX67ajtK6lWbcs+WKsFI8+6fnI6x1v8juOhAAEIAABCEAAAhCAAAQgAAEIQAACEIAABOaWQNPBaZNfq4kx65Zere1cxnrH7LMdpXXnNPXP/V3tpjz7B5KjPvAs9RvG5xpL3VSu57ZzmvwRjHMsXRtzcl/MdV7J5xgSAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQmD8E4sGtVxV9UW+L53m2LVUr3bZl7rctqeE8y+irEyZfYtz+rj7nDyRHfQja1q8Uy33Rtm7pG4u29NxWnn2WTT75NUp5ub9OzF5iXRaaMrvkTCWjQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAgMTKB2i5k365cR4k+6ejlvKbz2XjtlvW9LDMUv5o16ym3zya+T1Pe8Qr3NxwNnWsxTLfU129Jf06BMK27k0JvtjrmMlX8x3XsnnGBICEIAABCAAAQhAAAIQgAAEIAABCEAAAhCYPwRKh6q5L7e1+uiLeozZb+m7tm0Za6Ie49Gf97Fdyukai3md9Lk6BG3q29Wf59m29M2V7NynXPsso8+9cl/MjTlR75IT89EhAAEIQAACEIAABCAAAQhAAAIQgAAEIACBrUMgP6gtrSLmRN250Wfd0jmS8uX+JrvJ7355fFi/6waWc3kI2tR7EH+ea9vSN9xk537lR1+T7r6WMa/N5xgSAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQmH8ESgeyJZ9XHmNNep4b8xRrspv87leqdSyv7ed3fChZOhwdqlGhqF/vpnjuz21NZZ+lp8/tmJvrrin58z65HWvb9GHr2noSgwAEIAABCEAAAhCAAAQgAAEIQAACEIAABDYn0HSwunnmTE9e1892dcyLeikun3MsnRdj9pVySnnOt2yqc3woOdeHnP36N8VL/jZfWywHE3OjnufJboo3+fMeXfPyOmwIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgMAJdD1Cb8pr8XkWMR91xyZLfPsuu+TGvqXfMKfWP8aH1LXHI2W+Otngp1uYrxQSnyW9weTy3ndcmh6lp60cMAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQmB2BYQ5W85rczlfUFLffMtZ19bmmlO+YZL94zB1Y35IHn/3maorPxt9UK1BtMYNsy2mLuR4JAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIzB8CbYetbTHfQVtOjEXdtZKj8rtnUz/HRyK39EFol/macgb1C1Bek9sliF1ySnX2zbbefZAQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAcARme7japT7Pye248qbYoP4uPWPOSPSFI+kyWJMuh6xtOcPGmlbZ1m+UNU298EMAAhCAAAQgAAEIQAACEIAABCAAAQhAAAJbjkDTwW3bCko1JV/s0RYfNub+bfXOGZkc5gB1VJN3mbtfzmzjvpe2Pm0x1yMhAAEIQAACEIAABCAAAQhAAAIQgAAEIACBbZdA26FsWyzecb+82cY1V78ecT0j07f2Aekg8/fL7RcXtC45JbjD1pV64YMABCAAAQhAAAIQgAAEIAABCEAAAhCAAATmD4FhD2a71PXL6RePlAbJjXWz1ufL4egg6+iS2yUnhzdMTd4DGwIQgAAEIAABCEAAAhCAAAQgAAEIQAACENh+CAxzcNulpkuOKQ6S65qRyvl4cDrImgbJFbhB85tgj6pPU3/8EIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwNwQGNWh7KB9BskfJHduKIWu8/kwdNC1DZofMNTqbOvzftgQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAtk1gtoe5g9YPmr9F6G4rB6fDrnPYuq7w57p/13WQBwEIQAACEIAABCAAAQhAAAIQgAAEIAABCLQTmOsD2mH7D1vXfrcjjG6Lh6CjWvOo+ozwcdAKAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQmMcERnXgO6o+WwTV9nCQuqXuYUvNs0UePJNAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACaUsd5m6peebkkW6vB6Pb633NySagKQQgAAEIQAACEIAABCAAAQhAAAIQgAAEIDAyAtv0gXGJwn3xsPW+eM+lZ48PAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQGI7AdndQ3IaBA9U2OuUYzMpc8EIAAhCAAAQgAAEIQAACEIAABCAAAQhAYFshcJ86BN5WHgrrhAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEOhGYKxbGlmBAMwCDFQIQAACEIAABCAAAQhAAAIQgAAEIAABCGyDBCa2wTVvtSXfFw9E74v3vNU2GBNDAAIQgAAEIAABCEAAAhCAAAQgAAEIQGA7JHCfOoTeXg9Ut9f72g7fb9wSBCAAAQhAAAIQgAAEIAABCEAAAhCAAAS2KwLb3QHz9nDYuqXuYUvNs129Y7gZCEAAAhCAAAQgAAEIQAACEIAABCAAAQjMYwJb6sB3S80zJ6i3xYPRUa15VH3m5MHQFAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEJh3BEZ1GDyqPlsE0LZykDrsOoet6wp/rvt3XQd5EIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQDuBuT64Hbb/sHXtdzvC6Hw+BB10bYPm5xhnW5/3w4YABCAAAQhAAAIQgAAEIAABCEAAAhCAAAS2bQKzPeAdtH7Q/C1Cdz4enA6ypkFyBXTQ/KaHMKo+Tf3xQwACEIAABCAAAQhAAAIQgAAEIAABCEAAAnNDYFQHtYP2GSR/kNy5oRS6zpfD0EHW0SW3S07AUKvD1OQ9sCEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIHth8Awh7ldarrkmOIgua4ZqdzaB6eDzN8vt19c4LrklAAPW1fqhQ8CEIAABCAAAQhAAAIQgAAEIAABCEAAAhCYPwSGPaTtUtcvp188UhokN9bNWt+ah6Nd5u6XM9u4Abb1aYu5HgkBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhsuwTaDmjbYvGO++XNNq65+vWI6xmZvjUOSLvM2ZYzbEzQSrUlXz/Aw9T060kcAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQmHsCwxzElmpKvrj6tviwMfdvq3fOyOSWPgztMl9TzqB+QcprcrsEsktOqc6+2da7DxICEIAABCAAAQhAAAIQgAAEIAABCEAAAhAYjsBsD1m71Oc5uR1X3hQb1N+lZ8wZib4lDzz7zdUUn42/qVbw2mKG25bTFnM9EgIQgAAEIAABCEAAAhCAAAQgAAEIQAACEJg/BJoObbXCtpjvoC0nxqLu2rY5Bs13z6Y6x0cit8RBaL852uKlWJuvFBOoJr8h5vHcdl6bHKamrR8xCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYHYEhjlkzWtyO19RU9x+y1jX1eeaUr5jkv3iMXdgfa4PPvv1b4qX/G2+tlgOJeZGPc+T3RRv8uc9uublddgQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAYAS6HqQ25TX5vYoYj7rjkiW/fZZd82NeU++YU+of40Prc3nI2a93Uzz357Zu1j5LA8jtmJvrrin58z65HWvb9GHr2noSgwAEIAABCEAAAhCAAAQgAAEIQAACEIAABDYnMOwhal7Xz/bMMS/qpbh8zrF0XozZV8op5TnfsqnO8aHkXB5yNvUexJ/n2rb0TTfZuV/50deku69lzGvzOYaEAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE5h+B0iFryeeVx1iTnufGPMWa7Ca/+5VqHctr+/kdH0qWDkeHapQVNfXt6s/zbFt6upKd+5Rrn2X0uVfui7kxJ+pdcmI+OgQgAAEIQAACEIAABCAAAQhAAAIQgAAEILB1CDQdvMbVxJyoOyf6rFs6R1K+3N9kN/ndL48P63fdwHIuDkHbepZiua/Jjv6SHn0CYTuXhmR/zHWs5Iv5ziv5HENCAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC84dA6TA29+W2Vh99UY8x+y1917YtY03UYzz68z62SzldYzGvkz7qQ9C2fqVY7ou2dUvfULSl57by7LNs8smvUcrL/XVi9hLrstCU2SVnKhkFAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQGJhAfghbatAvJ8abdPd13FJ+67l0zH7bkh6OWcof9ZLd5JNfI6/veYd4HfUBZ6nfMD7XWOrWcj23ndPkj3icY+namJP7Yq7zSj7HkBCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMD8IVA6VI2+qHvV0WfdMs+Jfum2LZUf/bYlNZxnGX11wuRLjNvf1ef8geQoD0GbeuX+rnbMy3XbUVoXAOuWJV+MleLRJz0feb3jTX7HkRCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMDcEigdqmrGJn8ec56lV2s7l7HeMftsR2ndOU39c39XuynP/oHkqA48m/rk/i52zMn1kl3yGYJjktZLMfma4v1ieT/bSAhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGDrEoiHtV5J7ot21JVvO5exVykmn/3u0+SLvaIe693D8S62c/M+9neW+cFp58IssdSniy/mSM9tTxNjzsl99qsmj7X1iTHXRpnrzreM89pn2RZzDhICEIAABCAAAQhAAAIQgAAEIAABCEAAAhCYPYG2w9KuMefl0quLfuuKWZe0br/tGCv5nC+pEfNt14HJF/cYxhdr+uqjOuQs9cl9bbZiMZ7rtp2X277RPC6/fdZjbvTFns6J8Ta9KT/60SEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIEtQ6B0wKqZo79Jj3nOyWWe47j9sku+UryUqzyNtpjjdeLkS5zT/pLPsU7SB6edkhuSSj1yX5utWIxbL8mYW9Jdo6U6LjleXTtPXosqqeFc50VfnRBy8phrc7/rLGOefUgIQAACEIAABCAAAQhAAAIQgAAEIAABCEBg9ATaDktjrIuu1TlPMuqK3VNd66rrN9W1obqc47zKtZnPOU0x+6O0nveV3yPG5MvtJp/r+8rZHnKW6nNfm61YjFsv+aOvpOe1tnes5rj/a1/72qNPPPHEJ+6zzz4nLFmyZN+JiYk0NuaUaU72S+ZD+TEebeW6xv68vsl2T69n2D6et0l6fsdtt0nnWirXuqXrZW/atKnI1TlR6j4XLFgwxc0x982l401S+RrmaY7yuZf0fqMp1/6SVE/P53i/eRz3elWnMWwfz9skPZ/jttukcy2Va93S9bJ5/tN8zKWf5PnP/Kz1vsplP47K1zBPv4/kcy/p/UZTrv0lqZ6ez/F+8zju9apOY9g+nrdJej7HbbdJ51oq17ql62Xz/p/mYy79JM+f97/eO7o0eP+X/3d2v/dR5CfdHFWX2229mnLtL0n183yOt80RY7z/ef9rz+jSGHYfed81Se85x223SedaKte6petl8+f/NB9z6Sd5//P+13tHlwbv//n/53/Te3rdunU33nLLLZddfPHF//a6173uqirv9urSobKGNrqvNrsUiz7rkhqxp+06MPky8w3Wy4/xUk0eb7R7u7Yx3DdQqs990S7p9rVJxeKlhXW1d33961//iJNOOullu+yyyzH6Q06Xht6sCxcunPqDr+0PRf/hKKmDzzjyujwmO34wxLj/AMmlcvyh4rld517Ose11lKRynRfrPId8TcN1zpU0Q9c4Jlv5tl2b5zknSudIqj6vFXeziHXy6TlquMZx98lt5/L8/bar8RVfzNTPVJLnP43Ke2zaM62ZWc7QGd6XuVTctd7zscZ6nNt6SSrfa5Aec2S3DdepRkOS5z9NzCynPdOameUMnZE/d9uKu5bn36PF53+Pg/eS94ht78OSVK7zYp33mHxNw3XOleT9P03LvKc905qZ5QydIb/ro1Tctbz/e7R4//c4eC95j9iO+yffV8p1XqzzHpOvabjOuZK8/6dpmfu0Z1ozs5yhM/LnZFtx1/L+79Hi/d/j4L3kPWLb+7Akleu8WOc9Jl/TcJ1zJXn/T9My72nPtGZmOUNnyO/6KBV3Le//Hq1t4f2vZ6YzpTVr1nznwx/+8Duqs8f/qFb/q+qKB73WfbjbZjsmCDG/zY6xXC/ZTT75+47eyVvftMaE0glU9EVdTWw3SefEuPR4xRz7daqrK7fl+62zzz77+XvttddT9Wb0G1JvXl0l2294TeShzeE3taU/AGKOfZaKKd89NZ902+5l6fWozrp7ucY9Y1/5NGKO69zH+ZL2Od9Sfvexr3ZUL653XDK+sWVrKE/D9a6L/hirk8OL85Wj/hr2Rem1Ose2cpynWvmVI590x9S/ZHttqvVwT9nSNZRnXbb7Rhn90jWf6jyH6y29HufGXq5xT8dke8Qc6cpxT+dHn/Mtlash2z73dr3jkjz/3l4QC/OJMvql8/xn7i2xyof5af/5vW1flN6rzrGtHOeZOe//aSZiI1aRkd/rZsj7f+au9J6SV7qGGFmXbZ5RRr908Y1sXW/p5+Lc2MvPyD0dk+0Rc7w+93S+pH3Ot5RfQ7Z97u16xyX5/J/+/DKfKMXItnTxjWwV07D0c5HPuvJjD+fnPvnjM3Od+zhf0j7nW8rvPvbVjurF9Y5L8vx5/t5L2g8a2ica3j/eN9EfY3VyeHG+cvxnu31Req86x7ZynKe28itHPq9VvXWVbK8tLKmuVb2GpfKs22+fZfRL13yK6XIsSq9HPuvu5Rrna+7okz/arnMf50va53xL+d3HvtpRvbjecUne/7z/vZe0HzS0TzS8f7xvoj/G6uTw4nzl+L1tX5Teq86xrRznqa38vP+nmYiNn5mfg6UZyrbPjyYydYz3/8z3v/iJzfj4+N73v//917z//e//XsVPP2uhxOnkzW1jlox5bX7n5TLWtPXL84ayPfkwxaXa3Bdt64NI5cZL65TdO1lsjsU5Drzxxhs/UT3UffRwtekl/UZSQ/k2btw49YHlN4hyPFzjmP35G0v/FcK9Yq7rXWeZ18svn+d2j5gXdb+JJTX8IVAbky/Kl185eV/1l1/SOV6rpHW18ryWjlk6Z3LautZ6LtXDnByLfaKuuPK1PkkP5Xjt9rsuStfn+WalHnEtynNNnEtzOGZ/9CnG85/5fMwpl+IWmSsufvlzdJ38PP/pfel9qL3r961YeU+bm6TZKTfyVUx9/B5yHz8HSevuYzvG7HOOpIb8TUPr4PlPf6ZGXmKTPyfZ5hl1nv/0n+dmaD6W8lv3Xpft94p8cS9GzqrV8B53rOed7uscPv/5/PdeinvF+8f7xtL70vtHUj5duc/9Yg3vf97//nNb+8WfafXmmXzRfnFOvq+0p/yZ6BzvVUnrauV9Z+mYpXMmp53688p2lOrh94n9sU8t/QAVAAAgAElEQVTUFVe+1ifpoRyv3X7XRen6PN+s+Pzn///Fvah94j0T95r2mGP2R59i/Pk/8/1pTrkUt8hccfHL38euk5/3//S+9D7kz//5++f/hg0bbt5vv/2eX+3h67W9J/eypP5LXbSl226KxRzndpWa2rnSNXK7yVcnt71Mv+PbssqxvLbNjjHpti01Q+7PD4qdE/1Rd72l8hU/8NZbb73M/4NBTg2/Cf2HgGTU/YFlX69q5v+Qkk95eiNrqKcu/w+bqCse82RreB09a7q//JpbQ9LzON/rckxSl4ZzJL0W+50Tbee7h+9dtdLzuOw81zmSulSrnLhuz21faQ3yaTjXvVTjoZjnc57i9kfpXs53D9sxN+ruZ5/rbEtq5Pfi9UpGXbk8/zIzMxUjD/M1Q55/73NGPDTMTDLuVcWcY3bRNlfnuY9s6bEf7//pPxPER8O8JDV4/09/7oqH9pr3nfeS9pF8TczMVPUeznUv3v+8/+Pe0L7Q8D7xZ6D3maVznF8XVS+2vfcko+5+9rnOtqQG73/e//F/12lf+fMu6torMU+2hvdhz5r+80V+7zFJ7zPnx30Y92rsmc8fezrPfWRL91ySWq96xzmdn+c6R1KXat3LPGRr+F6kK9c9ZXs4171U4xHznWcGsZ9jMd89lKfhmGTU3c8+19mW1MjvxeuVjLpyef5lZmYqRh7ma4Y8f/78j3tD+0LD+8TvV/m9nxyz7XrJWO8a50m6n32utS2pwfufP//j57r2kv+80/5YsWLFYypxvbaK7Gpo4+aX/Ir3NvVM3bl5TvQr5tomf8yRruGanrW5bX+r7L0TWlOKwVJd7rNtqUbSczv3OydK5eik1rUl3THJ3qluL/+gm2+++at+uGqUf4DIp+EPBsd73p5fPl3+EIkx1+Z/0Dmnq4y9o+76ks8xrU2b1x9+9uc1tp3re3K+7fhGsE/SI/rUMw7PEX2eTz7ne62yzS7O6/oYl27buV6L/NJtq966pPLtk3R+7Zy0pSs3DufFXo4rpiHpe7BdBwZ48Tyub1pHqaXvz0ydE3vGvn4evifn2zZb+e2T9Ig+M3Asn1N+zyfd+V6rbLOL8ypXI8al23au1yK/dNuqtS6pfPsknV87J23pyo3DebGX44ppSPoebNeBAV48j+ub1lFq6fszU+fEnrGvn4fvyfm2zVZ++yQ9os8MHMvnlN/zSXe+1yrb7OK8ytWIcem2neu1yC/dtmqtSyrfPknn185JW7py43Be7OW4YhqSvgfbdWCAF8/j+qZ1lFr6/szUObFn7Ovn4Xtyvm2zld8+SY/oMwPH8jnl93zSne+1yja7OK9yNWJcum3nei3yS7etWuuSyrdP0vm1c9KWrtw4nBd7Oa6YhqTvwXYdGODF87i+aR2llr4/M3VO7Bn7+nn4npxv22zlt0/SI/rMwLF8Tvk9n3Tne62yzS7Oq1yNGJdu27lei/zSbavWuqTy7ZN0fu2ctKUrNw7nxV6OK6Yh6XuwXQcGePE8rm9aR6ml789MnRN7xr5+Hr4n59s2W/ntk/SIPjNwLJ9Tfs8n3fleq2yzi/MqVyPGpdt2rtciv3TbqrUuqXz7JJ1fOydt6cqNw3mxl+OKaUj6HmzXgQFePI/rm9ZRaun7M1PnxJ6xr5+H78n5ts1WfvskPaLPDBzL55Tf80l3vtcq2+zivMrViHHptp3rtcgv3bZqrUsq3z5J59fOSVu6cuNwXuzluGIakr4H23VggBfP4/qmdZRa+v7M1DmxZ+zr5+F7cr5ts5XfPkmP6DMDx/I55fd80p3vtco2uzivcjViXLpt53ot8ku3rVrrksq3T9L5tXPSlq7cOJwXezmumIak78F2HRjgxfO4vmkdpZa+PzN1TuwZ+/p5+J6cb9ts5bdP0iP6zMCxfE75PZ9053utss0uzqtcjRiXbtu5Xov80m2r1rqk8u2TdH7tnLSlKzcO58VejiumIel7sF0HBnjxPK5vWkeppe/PTJ0Te8a+fh6+J+fbNlv57ZP0iD4zcCyfU37PJ935Xqtss4vzKlcjxqXbdq7XIr9026q1Lql8+ySdXzsnbenKjcN5sZfjimlI+h5sS+6zzz4nVOK66nLTeFgsn654wNykO9eyKqtrZWtYWs9t+yU9Yk6bz7Gi7BEohlqdeV2bHWO9p9hrbb9krttnv+ra9Jif6zpEvlRTxk3gjeGH7w2pPOveFPnmU443j3L0V1icq5iGavTXNTxPzzvd2/Vxw3otrvG86u189ylJ5XhO57tXlKr1vJKax3NIyrZfUlde7x72x/XY57/aI1uX53A/95D0vbqPcjy8JtuuV08P50h6lHp6bVG61nP6/t3LfRxXf8+tHJ7/9LMyG7Hi+fP+j59Heq/E9532it9Tfo/Jp2G/dL8/pWsopj5+D8rnHEmPUs84v/u41nPy/ufzX3vBe8n7yPtD+8t7Tzl8/vP5770SP3v82Rf3jT9bvH9iTD718WeU95197t0kVec53d+9olS955XUPJ5D0mu0VE5e7x72xzXZx5///Pkf96P3mPeT95Ck97r3kfenbO/JGNMe0+XhHEmPUk/vzShd6zm9793LfRxXf8+tHD7/+fz3Xol7z3s/7hvvLe+fGJNPfbw3ve/sc+8mqTrP6f7uFaXqPa+k5vEckl6jpXLyevewP67JPj7/+fyP+9F7zPvJe0jSe937yPtTtvdkjGmP6fJwjqRHqaf3ZpSu9Zze9+7lPo6rv+dWTtvnf/VzFo+v0n2IrA/KpssLV7xJz2ur1Kl+1iU13EO66jyiLl8/23WNcvopNKYUA3ldtNt0x6LMddm+NHnpANlxH0rLbso7+Cc/+cm/6aHHjeMNIWm/JrMeZfRL11BcwxtQ0jXyW5d0bj6X8vLhfl6f4q7z5nbMfV3jXo67zmvwGmOec+xTrutjf71R7LfUemJPr88+1ytfV3wzxpjntnRf2cqLH0Qxpnm8LuVpDvm8DtfLr7hzLBV3TDLPdyz666TqRT00PJ/vudTHue7nnLpB9uJ+Mcd1vi/H3Nc1buW465Sny2uMec6xT3muj/3NWXmO+1k4z+vzPPYrX5firo+x2hle3Fcu5fH8e/vXfM3fDHn+05/hZhEZSRcrXdYdz+08x4zt9za13/N5z7uv8yWdm8/lXlG6n/so5jqe//RfsRYXsfLnknnn/Oz3czBL883tmO+Y5rJfuoZsDc8nGXOsSzrX/Tx33SB7cb+Y4zqeP89fe8F7w/vKe8ZbyXHvG+9B79GY5xz7lOv62N/vM+U57j+nnef96XnsV74uxV0fY7UzvLivXMrjz3/+/Nc+0BX3hvaZ96Vi2mN+L3iP2u96+e3T/sptx6L0PnRP25Kez3veObFeukY+V+3MXtzPfWKd31+Oua9r3Mpxz6c8XV5jzHOOfcpzfexvzl6PpJ+F87w+z2O/+ulS3PUxVjvDi/vKpTze/7z/tQ90xb2hfeZ9qZj2mN8LcQ9Ld711x3PbfaL0PnSNbUnP5z3vnFgvXSOfq3ZmL+7nPrHO7y/H3Nc1buW451OeLq8x5jnHPuW5PvY3Z69H0s/CeV6f57Ff/XQp7voYq53hxX3lUt62/P7ff//9n1TdxrXVpQMmXT7ctd47eOr5neNYlb5ZTcxxrX3Ot3TctqRGkz+P1cn9Xnq7u1/WzHipJvpKun2S1tXVdkkqrl3nfOvO7e3I6Zzot64eh1SHyF8uvVkU9BtGujas87Rx42Z2XD7HnJu/idVHPtc4T1L1krocl4w9vA75nSfdb6gddtihXoN86qfhOV3reergZFy9/AbP/Xm+4p7bPV0jf5xXtnI0xMYfOM6LLJwXe8c1leaKNe6puTyvfe6pmEbs5dxepBeTHmucL+ln7LUrV37dt2PuqRzzcJ7rYk/lm7PnVVwj9nCN/M6TLr/m5vn39rz5R67i5JFzNGvFred83dPP2M/RNTz/3p70fjdj8xQ33v98/ut95Pel30PaI94nft/JVtx+Scf0npPumHRd3nuO2ScZR+zlXMdjz+hzHu//6T97IkexMm/pjpkn7/8ek7jnvafMTVKX+Ukq3/vaTOV3nnT5xZc///nzX/tAI+4Zf47GfVYnVS/eU87J/eoT95ritl3rGveX7ZikBu9/3v/87z/+958+I/w5Ef8s9OdE/GyJn0n+PKk/TKoX5cUa91TcMfsk44i9nOt47Bl9ztPnmD4TvXblqEY+x5yrHH8OO891XoOlP2e9Vq8j9nCuejnPfTU3f/5vO3/+H3DAAU+pnt2P9fyqoQ2qS4eD1m1XrkZ/zIl1ua4eGvZbj7JNV0xD9Z3Hws6Z04m9/7XQ33Zem1QsXura2yE9v3XJmBf9jkn6cq7ub7eXvOQlf6I3oy+/SW3rDWxdMo6mDwfnu5ekLveybqme0lUXfbL1wRCHe8gXddmujetyT+c7R34N9ZfPfsk8pnnk94ec6txXMs4nPa7Zca9Vdoyrl4b8GsrLpdfkWJ0w+aL53Nu68jU8t3t7Xtnu5Vr5dHku23l8ctpaxPtWnXu61r0kHfccyrVPzWJu7OM1e16vR3bUZbtfXJfnc75z5NdQf/nsl8xjXqv6Oua+knE+6XHNjnutsmO8XkT1Ir+G8nLpNTlWJ0y+aD73tq58Dc/t3p5Xtnu5Vj5dnst2Hp+cthbxvlXnnq51L0nHPYdy7VOzmBv7eM2e1+uRHXXZ7hfX5fmc7xz5NdRfPvsl85jX+v+z9y5wdlXl3f9zzpmZzGQmmVwmd3IBAiHhDpabgAiIgFZpK/bVVkVt/XipvWrVWv1Y29f39bW+rVbrWytFaq3oH6VatYiiRUAQFMIt4ZqEW8gFcr9NZuac/++79vwyK5tJSAAVdK9kn7XWs57betaz1t7nOWvWhq/bzJc8l0c519nt1pV63p6U0AdwEnjl3Dq5LSEMfyDPvF0Gn2TZ5m251M3LtMC4LMv1cvuw2JTl/YbOPE1rXuRutwxwDYNZjpvzsc6Wa32o52Xq5pfrZXnGNw5wEvyBGU5ebrOu8HWb+ZLn8ijnOrvdulLP25MS+gBOAq+cWye3JYThD+SZt8vgkyzbvC2XunmZFhiXZblebh8Wm7K839CZp2nNi9ztlgGuYTDLcXM+1tlyrQ/1vEzd/HK9LM/4xgFOgj8ww8nLbdYVvm4zX/JcHuVcZ7dbV+p5e1JCH8BJ4JVz6+S2hDD8gTzzdhl8kmWbt+VSNy/TAuOyLNfL7cNiU5b3GzrzNK15kbvdMsA1DGY5bs7HOluu9aGel6mbX66X5RnfOMBJ8AdmOHm5zbrC123mS57Lo5zr7HbrSj1vT0roAzgJvHJundyWEIY/kGfeLoNPsmzztlzq5mVaYFyW5Xq5fVhsyvJ+Q2eepjUvcrdbBriGwSzHzflYZ8u1PtTzMnXzy/WyPOMbBzgJ/sAMJy+3WVf4us18yXN5lHOd3W5dqeftSQl9ACeBV86tk9sSwvAH8szbZfBJlm3elkvdvEwLjMuyXC+3D4tNWd5v6MzTtOZF7nbLANcwmOW4OR/rbLnWh3pepm5+uV6WZ3zjACfBH5jh5OU26wpft5kveS6Pcq6z260r9bw9KaEP4CTwyrl1cltCGP5Annm7DD7Jss3bcqmbl2mBcVmW6+X2YbEpy/sNnXma1rzI3W4Z4BoGsxw352OdLdf6UM/L1M0v18vyjG8c4CT4AzOcvNxmXeHrNvMlz+VRznV2u3WlnrcnJfQBnAReObdObksIwx/IM2+XwSdZtnlbLnXzMi0wLstyvdw+LDZleb+hM0/Tmhe52y0DXMNgluPmfKyz5Vof6nmZuvnlelme8Y0DnAR/YIaTl9usK3zdZr7kuTzKuc5ut67U8/akhD6Ak8Ar59bJbQlh+AN55u0y+CTLNm/LpW5epgXGZVmul9uHxaYs7zd05mla8yJ3u2WA+8lPfvLfxWhDxrNQXEM5DHOOcVw2OvUyfDSY8fPcvMp5jkPZ7WX4PtefDoMyTV4frQzM8Dwvl43nPA8UG0buoPG+lg954IEHvulB9uCT20FcZtDtFLZguW5c5zitf3k1DXzMOy/nTmZc8OBFMk9yLutMjpycJ7DRkuG5XPfLbZZHPZcDHilvp16mA0ai39YLGsss84TeOkBnfpTBNT79M55h5LaR26DLYTkdbeCVxwSZXJZnvuC7bP7UnUzjunGdV+Nf+CX2wH4eF9vbNnWOHWlzgo4LWD6OhpGbZ84jh+V08AWvGv/d1yCPB/bBpiRgtjNl7EbK26nTRjI8VfRRzf/iYarsa9gRnyTlZds4t6P9GFzgrlMG35fXWfP0mFDPk+G5XMrmA67lA8vlgFdup26epktI+qjGvxp/+yW+YZ8r+xT+Yx/M/YkyuMbP13HDyD0nch45LKeDJ3jlOWn/tzzztQ45D9qcPEdcN53z6v5f3f/LvuZ5gM/kZc+D3L/sx+Dap8i57LPknmfmCWy0ZHgul7J5QWP5wHI54JXbqZun6RKSPqr1v1r/7Zf4hn2u7FP4j30w9yfK4Bq/vAbbPz1Hch45LKeDJ3jlOQkv87NM6EjUcx7UnUzjunGdV+t/tf6Xfc3zAJ/Jy/gS9dy/7Mfg2qfIueyz5J5n5glstGR4LpeyeUFj+cByOeCV26mbp+kSkj5+mdf/zZs3x6WXXhrk7PzO044dO+IDH/hAWjOeav4fdNBBLxctO5FZVLgw8v6UTSOy3WjNwznt5fKeYIaTk6DLU7metz2pPLonPgltN0CZJq+77BxCB4MpA/dVrhtezk1PzuV2l50Dd9k5Mg5VEPkbTAAuHN+TKp8UlD3RaPfCYDi5yzAF13zIfUPK4ZShIZnWi4ZvWrkTmo9pTE9u/sYnNz78rS9lJ+tn2fDhgtZlt5HnZesJL3BJ8COBt27duli5cmVs3bo1BgcHE9xt5k3dOuxC2EsBviTorYvRDcvb8/4bL2/PYZThmfcrb8/l7QkvxzE/9CrrUcbLcd0Pj39O6zL0JOOSc5GMQ57LGa1fbncOPXygNT9gTsZzbrjzMty6uJ3cOOa/J1k5jcvQkqA1H7cZlrePJj9vN61zeI5mJ9pp42Yxfvz4mDZtWkyZMsVku/TJdUIf9y3XI4fnOpvW8j3+ns+0mw9lkunJwScZ/xc1/9HFCX3zdYc22yTXN6cxrWHuK3CXbRvj0GaYy+DaFsCoG5+cuvnl9Wr9f2brv22MzavxL9ZRz1tsgn08B+x3wO2f+DFl+7N9GJj5lP0WPuCTjF/N/2r+21/wi3wdpk6yH9r38CMufMdlt5HnZfspfMAlmV+qDNdzueAZJ/dX05uO3DBkOrnsuWEc2g1zGVzPBWDWnTJ01M0vr1frfzX+9lH7R+4/+Art9mv7lf3JPmk85/Z318m5LMN8wKNsf7YPA0Ou23M/ho/5G5/c+OBaX8pOeT+tDzm0rlsv8rxc1gOe5pfzz+XC0zi5vsDLyTBkOrkMrfm4zTDq1s22AGbdKcObuvnl9Wr+V+Nv37J/5P6Dr9Buv7Zf2Z/st8Zzbn93nZzLMszHvmt/tg/Tjly3534MH/M3PrnxwbW+lJ3yflofcmhdt17kebmsBzzNL+efy4WncXJ9gZeTYch0chla83GbYdStm20BzLpThjd188vr+zr/29vbE/3VV18dlIkNWMb69evjvPPO26Ujurq/yLLulA8++OBXSKV70UuJzjqI7HxvsCLgNkID7t4uyzAOdZL5UKaN5LxcHq0ObI9p9xD7HtH22JB7R142QQ7Ly3m74XlOmav45lTkebuDxOQ5juE5fd2TBqEEPHEkw/JBz53B7XYIOy48gHnyALcD2XHhiRzglJ2gs2M7Bwc4CVw7anmCmLYs2zTmAR/zpuwEzDg5jScVbdYX3JwHbVymu++++6J77Ng49bTToqenJxqyerOpvkpYswUeAR3qmlA1HdWhttRYIERLOa0t8OzugrVoGPZtaGt1LXjw459MlNiApzKYyAG/1RI30TZV1yMaLWnW1CAqMBNeKrNooQ5ow23ojOM0BWswBsAtBJ2ELBHR4tSRRKsxBzaMl/LESzDJhFfijXgZB1uCX9mIUXvu2kj31ti6eWvctfTOWLp0aRx66KHJ5/F75obnBHPhV3H+YwMnbOL1wHbJc9YvrymGg+91pEwLX/j7B6mchjJ05OaRl6E1P8sEZlnOgVXr/+622p/1vxr/dNNIflXN/2r+swYxJzwvqHtd+mV8/nM/WUdZb73m0mdSnlfr/y/f8381/tX6nya6Pqr5X7xovlr/i3tetf4X97/q/l/Y4fl+/x8YGEjf8U888cS46aabUiA5f76xvz/V/BceX5o5VpdoEIl6cSMpYARFSLTTRk47cNedC5SS250DNM8Co6A3rAi8uKXIc1he3h1rH2oQ708q4+d1l53Dl7LrLo9Wz9swGInccJfJ83af6Wx43gYt9UPvueeer/qBN7/5qW1X4MLOgKM4YLFp7ZpYes0PY/nti2P18uVplKYfeGDMPeqoWHT6i2LCtOnpZgofkheQ3Nn8ZRO56x9fGffd+oN45P6fxuqHlieaKXMOjDnzj49Djn1xjJ84bRc/9HHwA1rK8GJykoA9sX5N/Pj26+Lu5XfEQ489JAWaMXvmvFg474g46ZjTY2JvX+ofNOA7YECZhJ7IcXsOs+y8T8Aee+yxGNvZFUcfc2z0N/ujNUhQUH/SkkytLxZDCgSFDn9vyI4MX1MBOAVWi/irgr2K1AoSLbXj4fAXSgrqNhQ0JlLcioGUK4ocQw0dF6JAbm2Q4DRtCiw3hEefCPA2NOda+i1EQVr9WpCCtgSbYwBMgsmSov7WxTuFo0GvE4xCIz0IKG8bbJd+apVOSb9WIwaFU0dX8W9JwWbSrSFxYiD+BKzRXypFPemmlx3CFw3pkGhbNY1Xm2yjemUjxu+5b6O6fKtD8+zW224L/mxl1qxZaY54PngukntuyA1Scp2cRJ7Pf8Np83w2nmGem/sy/61DzsMwrxX5/H6m8x85JGRYTp7TJ7fTV2STctslQPYBnm3BOmQdQYE3yfS2JTTmTw6eZYNvnSi73TByl2lHRwd8KIMPL3LkOVkHaF02b+O4Tk4yjzKcNniYv/HNl3Z0cd0ywc/X/7wf5mGYceHj9R2YeSIDmrw9hxlvNN2RYTl5Dg3JMHiTzAt4OcGfdutrHcEzvulpA98X/K2fZZsOOMnt1oncZdrhUY1/8Xxge2ET29z2sz3ByW1oW5J7DAyrxr9a//EX+xJ+UU74Fe3V/B+xEzbK56Dnlm1EOzDPM+qen4YZFz7V+j9iq7LdsE+1/lfrP37A5fWInDnklK9hLoODPzm5Tk4yjzKcNq95xjPM/NDFcoAZv3r+q57/8JXyOmafA26/w1fwo2r9f3rrP0dZXHHFFXHIIYfsOtIC+/JX+Oeee26yM3Wn8jynfthhh/2W2tmJzJcjFobiS1KRU3adgJTLhhuf3GUVd/EyPM9p31OdNhLtJOfl8mh1YKOmkVVy1OYnAUcsVjS57hyoy+R52W2G7y3n26fbRysDM9zl0erA+vRivVd7cuUDzcLMxUTLE7gP3XlH/PBzF8c93/2vmDy4M46aOSPmjBsXW1c+GktvvCHWrngoeqZOid6p03ZzptypLBPeD993a9z4rc/Eiuu/EdPat8dx86fHQVO7o3/Nw3HvT6+NNWtXRHfv1JjQNzPpBI1vauhMIvd177K74mvf+7f44e3fjfrEwZi3aHpMmtUTqzetjJ/eflM8+tjDMWnc5OibNDXR5PTmS9/N23q77tx05DxsLVcw/dTTTldgVWHXgUEFUeXvQ21pN3KLIC+BoHbZld3BCqTq60FqIzg8JJ+tKbDaFA0bfZsEgIcU4BVuA1wFYQnm1onMqsv1uuaVeBOAbUV7wlOMWjIHpTe7gQlMEpLWDZegcE04wNKWZdlKOre0E5gdy82hZrQR4pUNYY8+LQWGa0PCkqcxa1kPFGqnKdoUoFYsWQFg8UCG6OqSMQRQeteUI4v2xFn4KXYMXwLoqrQpIFmT3MpGzx8bDeknEHxr5oxpceuti9OxFswT/MzzOfmQ6p4jrsuFEg45yfiUjQuvPOVzEBzmpnE8T01L7gvepPyhkjbgpnednGRa881lm1+Om4iG6XK+5gXMcJdpo2w+1sU57ST0tj7UcxrgrrtM3TSU6YPr0DvldNCCR8rhLqMTl3FyHsaBR9nG1omc5Dpl6JzMg7pxy3ag7jZydDEOZWB5u+uWU9YNuOnBLesAzHxz2eaXy3I/zMd83R9oLM9l2iibj2mcm6fHzng5jeWRu0y7aSjTB9fNM5dtWvDKcMtCJy7jmA/txoFP2cbWiZzkOmXonMyDunHLdqDuNnJ0MQ5lYHm765ZT1g246cEt6wDMfHPZ5pfLcj/Mx3zdH2gsz2XaKJuPaZybp8fOeDmN5ZG7TLtpKNMH180zl21a8Mpwy0InLuOYD+3GgU/ZxtaJnOQ6ZeiczIO6cct2oO42cnQxDmVgebvrllPWDbjpwS3rAMx8c9nml8tyP8zHfN0faCzPZdoom49pnJunx854OY3lkbtMu2ko0wfXzTOXbVrwynDLQicu45gP7caBT9nG1omc5Dpl6JzMg7pxy3ag7jZydDEOZWB5u+uWU9YNuOnBLesAzHxz2eaXy3I/zMd83R9oLM9l2iibj2mcm6fHzng5jeWRu0y7aSjTB9fNM5dtWvDKcMtCJy7jmA/txoFP2cbWiZzkOmXonMyDunHLdqDuNnJ0MQ5lYHm765ZT1g246cEt6wDMfHPZ5pfLcj/Mx3zdH2gsz2XaKJuPaZybp8fOeDmN5ZG7TLtpKNMH180zl21a8Mpwy0InLuOYD+3GgU/ZxtaJnOQ6ZeiczIO6cct2oO42cnQxDmVgebvrllPWDbjpwS3rAMx8c9nml8tyP8zHfN0faCzPZdoom49pnJunx854OYqilzwAACAASURBVI3lkbtMu2ko0wfXzTOXbVrwynDLQicu45gP7caBT9nG1omc5Dpl6JzMg7pxy3ag7jZydDEOZWB5u+uWU9YNuOnBLesAzHxz2eaXy3I/zMd83R9oLM9l2iibj2mcm6fHzng5jeWRu0y7aSjTB9fNM5dtWvDKcMtCJy7jmA/tXF/5ylfigAMOSLuQkUX8C/z+/v4UWEYGyTpShs6J8qc+9anLVV83DBtpFKrxlMPI9YLpSKPhQCiX20cwn1wyrfMyxp7gZby91p/JcRZPR4GcxuU8p+wLxV0mxxucl8uul9tTHQfwxIGpnQ8YToETkPPLI+X1qx6Lm7/05dh81+L4k3PPiWlnnRldp5wCaWy/7kex6vtXx+eu+l785LKInsmT045kOxJ5nuC7af3qWPzf/xqt+2+Jt7/1/Jhyysuio/cModViYMN/x5obvxmXXfxfcZuCqD3ajTxh8oykD7SkXHfqj2sH8rev/2rc9/hd8Ya3XRAvWXheTOk5mqZYveWW+M6Sb8eXLv1WtK5rxsQJfTFl0rTUZt2YDCScHBnktGEX24B2YFxuf/zxx2PhwoXSpxb9Co422Gmrf3zqj/eiTYHlASK0Yo8ZmgqiEicekIx6o01BXJjqvwKstTbxJXgsgCRHs006qNYm/KE2cZNOA0MKCsO5qYAtO4JlL3Yf1xR4FiTt/E2/gohnG8HpIQUAESFcTJeCuNBot/QQfRS8ofqQAscEhhuKZDcVZGYnsQSKVhKaWijqKdycgsSDKotB1LWzudkud8JG0mEQjysi2gpGq3/ilewkcF22CfWX3cwNBZsrG+lm+Hyy0aB2wtfb+RUx1q5dGzNmFPOR+cEYk1wmJ+XzJAGGP5hfvkl5PhsfGp+1RJnk+Uhu/PL8RwfaoPEaZhneVeN262WZ5E93/kNLct8p2x6W6/ZcZ3SxfvyZkMvuMzTW17jO05watg140CA/5296YNDZPuQenxwfWG47ytDla1+ODxwaLvfXZXLrVdY118vlhKwPZHJV419YBPt7HDyO5GWbgoPN8/GxbU0Hjf3A45PjA4OP8S23Gv+93//tu9jP88B5Nf9HnpNsp9wvXXYbPsdVzf/CItX8r+7/Xoe9LpNX6/+Tv//5/oa9clsxk7wOez6B4zWasnHIzcc2Zl3P74Hgm9600FXr/4gNsAVpNDsBZxwYI5dTQR+2bbX+Fxaxv9pezu2bud2wOTbNfdL45Llfe3xyfGDQeu5Qhi73/Ry/ev4v4kMeA+yHjUnOve4AK4+Px4a259P3v66urujo6EhrKv07Tce3Xn/99akPtgE5CR8q+2pq0PKtPMUhQRuGKUCUUrEwFGVgrrtsPOihJS8Mr4KSYXkO3PiU9zU9HZrE+5nsRM47M1oZmC+Eubyn3Aa00cFzmXy0Mvobbvwcl/a+P/iDP3iV8l3JTu08dwSQbv/2t2Pld6+MCxctiFlHHhHNDeuj/5Zbon/x4mht2hBje8fHzG3bYvEdd0VjwqSYdfjhuyZTPoG8yN198zdj483figvOXRDTfu2UqA1sj8F1t8TQhsW662+Nrkni0bYu7r75zhjqmRhTZi/a9eUCfeyw6IujXvuTq+JH918dp73s6Dhx0a/F5tgUK7bcEY9sWxLbY2tMGT85Bnu26E/y74je9glx0OwFsNm16OYOTzlfTOE/2mRAh2XLlsVxxx+vkdSNUQFUhVLFU0FWBVDhQbrq4dviprX3x5GTD0hHS9RoU2CZTcWErtm9SzD3P1ffGY9sXxfzxupIEJFy5ENDuigaK/ZatJSzs5ngrm4XklEsZBxpIUTZRJn2AKezlzXV1AvtfhYNatAHbjLsMlZL2jWMmgrocq4xZy0LU3WxF4ZuSQKqjR3PaecyQWrp2WxTy4Dw2kUsV0q7neVm+k+QmyMx4KMuCU91GpAzzLWh4PdoNsJROR4DW7BNe082kmIKwisQpmMgKhuN7kc/Mxtp9zov2bv99ttjkuan/dtzcPv27bF69er0py0bN24Mrg0bNsQTTzwRmzZtCg7f5wJmODi0GZc/lwGfP48BBzg01Hfu3CkviXQTK89/z1/aXUYvz2Vyl41Tzj3HjWf6Pc1/6I2TP2BBT8phlMF1ct24lp3n4NIOHfjuMzAu4+ZlaMADn0SbaQ0DDm2eLMM5PEjQO3eZOnjmkZctgza3Wx/ocx7uDzTG9cMpPEnAoQHXXy6Am9aywTEPl2mjDH9yl6GnXM4ty3imB+62RJR9GMcycp45jDK4Tq5bD/PPc/OCDnz3GRou4+ZlaMAD3/SmNQw4tHmyDOfwIFk/yzQNeOaRly2DNrdbnzIP9wca41bj73t6MT7YLB8T7GQ7jlZmfGxvyuBW41/N/9wn8AvPN8ok+5hz8En4j3OXqedzPi9X83/EZtjCNqOMnZxcd7vncp6DS3s+Jm4HPloZmnyswUNWDgMH2jxZhvNq/Ivxsp1t69xmlLGXbUxOcl6Nf+Fj9j3sYttgJ+DYFTvZH6v7f3X/xy+YVyTPO2DV838xXzyPbBvqLmMzzzfKtO3v+r9169b044HpncOrt7c3VqxYkXYin3XWWQlv3rx58cADD8T8+fOTLPDRh4tkfaz3pz/96a8JvF4XC+buNyIBMlixoBaw/HM0+J545XQujybTbc9KrpDXs5qsMLnLowlw22i5aflm6HKOZ7hz+NNO3VdeT4FyBpeBxslInrjkdko7wvrbb40jusfEtKGBGLzrrqiN641aZ2dBp3NSW5s3xrTmQBw+tjMev/WWiAsvTG3IwHn8q4xlrHv4ljhidneMF8/BFUuj0TMh6h1dBc3AjhjasjG1gbPskVul42tSEImbDPzQC54sLMi4f+XSmHroxOge3xl3r14aPZ290aE3SJJ2DvTH5u2bY+z4rpi2YGLCPad2QWqDFzphA3LqlMlJhqdK9gHuNgXNmVRdHZ3RL53ZRSzNiO1GvY3dtrppKmi7+PH745H1OupjTGf8+rxjNTI6joJ/Demvf5Ia1zz+QPxk/Z3R2zk5zpqwiBMtFLTVmDARiZYKhz6zUxgBiqNq17N0FP+m+NTQWzuX60MEhRXm1S7XdkWH27S7eVDITQV8CUhLdAxpy/BguwINOhYjdL6ybuGhjcnKh3dBC69NwdwBBXXbpcWAdiUji03GTR2boYM6knc1ddxGm4LKxJJb7FZOgW4CwRxrIYYcYcEO6YHi/Gc8EbOOZiN1QLwUpm5nx7NC66PYqCW96WOLZtm/stGT/ehnayMFcHX2N4FkAsZj9SJJ3tLKXOBas2ZNzDlgbowZO0Yeoi8u+mGkJn+U1+iSl8knNXqpzBEtck2NtG42TJjk33gi69Cwyycy/FPnccu/tmzdHuvXPR4EmqdNm7bb/C+vV14jvE54jfOaAZz0dOe/+ZuH14u8Dgy5lomNvLZQZi1DD8qmp5wn8/BabR7gAOMyT/fJMslJOX/4UffDOjQ5nvGBg2ueluvceKy/wLiccjr0o15e/5FpGeBAj07+VZ424OTgcvEjwp7Wf/MiJ1kH6pYN3GOR47lP5NAhi5xEOe9bAurD/KlTNn5eBwa9ZVoOcMrV+Bc+Vo1/Nf89H6r5P7KOei1hDfFa6DWENmBcXq+8pnnNISdB4/UpX3vMM8czPrzANU/LdW68av2v1n98gssp9xt8jLrvwcbD5+xj4ACv7v/FXLUdybEdtvJcxU6er8C4qOc2p257wwMa2knktrV5mh9wErnHppr/1fOffQI/wTdyf6nW/1++9f+LX/xivOY1r4menp70XfvrX/968Bf3L3rRi+Lkk0+OI444Iq07bPCyT5x//vnpuxu+kq9FrDHUvR4NrzEEBYqHEy03WRly6ixWfJEDx+3ADC++5I20qynhu320HJxyMp8cv4zztOr7E0S2Ek9LkIig9wUP83NehhluGnIPRhkG3JfxXNf71oqbD4M6PLC7bjRJaPZlnPbBhx6JQxQg7tCvFARAY7vyMWNBjejfFq2t26Jj21bhdMSqlY/suun5ZgSab1rABratjJmzx4fiqgpKbit28erPukm1we0KLG1JbeDcqxfXoYMdFhwc0zdE8k39q2PmEX1RUxx6Z21HbFOAc2CgCCIPKPANrN7ZihlzpsTqnzyWdIGPk/XMbWEYOZfbXGbX5dFHH61AGEdNiBNbi2XyOkdIKKCaBkZHP6zbsV6x3qG4ZvlPYl7nxDh62vx0nES0K4ikIPBDO9fFdevviEHt4t02uEXHVKh/2F80nJes7mn3LUFT6YAE1TkKgbLOp5DTCKD+JjoFspsK3razsxgbSSX2DusxIrUPKGDXJlrOuG0pIN3UkRQSIljxcAEeAd0htTd0FIeyFBBvDoqfVGqTvnQ1JRXYeTw4iASVJZNjLVSiQQOOp0hGOpZDD4livScbNWU7cDmWo3g5oFgQ2R62kQZfnRa9bCtrVDbCzvKTn7eNYnAoFi1apLORb42DDz54V9BPg1L4m3TaorWgLv1azAcmhn59kAvoRxXmkR58B/WDhpyhcBH90KG5MogP6keEQf1IwY725GwacPywnaHX2HeN6Yju2XPi4UceTjuT+QGHOYmfMydJrrNWJP+HUIkyCTg3NOMnoD6og+M5bp7OPefBN67L5DkdNA4Q0oZMr7fUSebnoOhoehvH+JZrXMPJrafbTOvc9jCN9QGfyzxSQR/QGUY7dWiQQwKWf+kzrtd400BnGreZl2Wgm/Uznftjeurg0G5ZwKgbF7jr5keb8cmBV+NfjKXtmds0GUsfHhvb2GNme0JTjf+InXIbYqNq/hdrhucvflXNf56SioRdPIc8x8jzdcs4UFC2LaHzPARGom78vGyY+YILjLGo5j/WKBI2wW75PDaMnMtthkNJmeQ2eHBV87+a//YN5pnnW3IWfdif8BP7HbnnKWXjQEOZK8c1nDzHz8vmYb6msT74be67tJOgI1kedWiok6Cp7v8jdsptiI2q+V/Nf8+h59v87+vri6997WtxzjnnxJVXXhkzZ86MuXPnxi06eeCoo45KG8g8//N1hHWButccci6vGW4TGg9CIw9DWk5KdVUTjEWIi0UH/GLxGYHl7cYT2i4aw8idzMP1/cnN7ylp9ieIvCdmudJlHLc5pz0vuw6sfNHmAaCNsvMcnsNGLTOw/nUgG1z4J0dghyEJHMqdHY0YryByaCdiTeeiROfYqI1RLqnpZWwqEPjsVSSzcxvHHRQPZCym8OcXK3h5ce3o7IiOiWOibcL4aGhnYx1ejTFJJkGn2hgFnhTY7Ji4I9rX9Sdn9Jd/T05yeMOzvaMevfrlpKdrrHYhd0WneI3RhR47m9rBRiRKgavecTtjQ+fW3ZwbPuxys8ND4zI5F5PGZfSgzp/Y9/VNFq0CXwRthddSMLelwC+jko6iUCC2v19Bcf3bvnNLXP7Aj2LmuKnR0+iQcRUkE+oVj90c24e2pYEclK7Ib1OANx1fwdkE2u3bZNvmgALT7QRm1RftyoW2Jlvxsj12/6ITx2KAMaSgbwroCmdQPIjlES8mUDekQ5bZyctxFcVJx6Id2hk3f/s/onHMuXG8AvdinKYxLwPUyGpItCuZoDDjLdp0BrJ2MROMrrXpTFcFfwkaNvUSvboCgU22PBPoFA2ym2xjTsdxjG4j+A7oOI+vXN8fv3HB8dEtmWkXtnYxw0os9I5AkIb50Jefo422bVwfWyR7TG9P9I5RH7RH+xdhI4LsLUVk2V3OPuRnYiPG3z64z34km0/SmeccQcGuMea15wvnJW3aoL8gGNej3zQ4J1tBP52F3ZIfDLBrPd0XNC/kN7xgchBf0Rnh6UgVwbRqyNfk1/xOID9vw2fEhx8+cMYBzZcxmmszZ8yMu5cuSTuimf9+QKZsXTxn3cbCQtnzmLoTuPsz/y0z54VcLtYiEm1cyCS5nbUDmHkAJ1G3zuTgYVsSfEjUTQeOebqP4FkH88vxDAPHMqwLdSfw8vXfY0y7+VG2XuZrWI4z2vpvPNuKvpJsq5wf5RwP3taVnHb3n7L7RpvtD8z8gZk+AfVBvRr/avzxA3zFPuTcvkTOZZ/Lfcl09lXa7H/4mdur+T+yPtpW1fyv1n/mSLX+j3zPqO7/xf2ouv+PPGdVz3/F5g/uwaT8Xsz9tXr+q57/y89s/m6Av1DOn9mAkfCj6vl/5Pm/UycMTJw4MQWQ58yZE+PGjUv2Oeigg5KtsDEJW5KYdy7bvsbhGY921i7uacPPfHwp5oJR8QVZ7LIycBRym4q72nM8yuBZeefgF0pSKtpdB8f8DUtI2YdxMtD+FXPF94cy74DpDCN3mbbRysZxXsZz3bRlPMPRn6tcz+GpjYH2Azw5DuBJaMdg4tE27qCDY1OHAscTJkZNf0penzM3GoccEo35h0Zj7ryoTZ2mtkmxqas7eg48ODmbHch5PqHHTZ4bG5tdUR87LupdPVEfNzEavdPSlcoKCNe7x+pk487omTSHvtsBU9m6UqE8bdK8aG5RbFuB43E6FmOSdvxO6ZwaU7umpXKPYLQ1t0ZMnzhvFw9ouVhIuKyj+08b/betCJyReLnYETr3GXckeEzQbEjHPrSUE1TnGAt2H/OyuUldE9VeBG7WblkdH/3pl+IjP/1y/N8V346/e/C/YvXONYknHt3V6KFDmjH6hVpBs0EF22rbFsfr9EbMiZMnxMTxk2LG6W+OK29flXbtcraDprDkaqeyplRNE1bS9U+BuxQjVGBO/HQOhXC41NedCmJJGMcPD+n84SZBvfrW+N573xc/fmy7+iMcjqZgNzX55tviornTY/ykidGr8e/VebivfMdH4sZl26Sx+OsM68++7fCY0DtRi09vTD3tLfH1xSsVoFRwGV0Uj5Zx92ojncgRmx69Nt7xVz9MLx0cUr+H2J1M4FmBU/QdIiCpPqHbk2wkKwwpEH/xGxfGRZ/7qdolm76K9pnZaEd881NvjhkHHhSHHDov5kzri0tv3fRkG0k3AvN4B+NOcLfVGNCu6kb8+BMviNM/dpOC+clZ1KZcvjLEuRz7aKMB0fz9//l4fOIf/yE++/8+G//+hS/E1Vd/P7Zr1/5+2Uh+UCPY3z8YS+68HS/bZSP0WrFiucZJc2GPfoR31WLRwkXp7GLPHeYHx1usW/eEVh85vcaNV0vKxYpjLAgaaygUQhV/zSnZh3OveaHjQE1jJdvJKxV0lk300saGfvEYkH0a2BFdRKw/n4h+wQhM9+qHJ/6chuS56rWLeYxebgPuMrhcwMDxtb/zHx6kfN1knYOv9WAtIRkXWYaRI9PJZetFO/jUKXMhi9w4ps37Qxt194v1ymXwzZMyuPAk5f1AF/NAHjzAtVxycFx32f0ETvK679y6m966mT4R6QO8XD66QQMfp7wfxjVf+NFOos36UPYFzHYhh4bLOponbZZP7vWfdlJut2r8C5vY3h5357atx6ka/2r+e+7ZZ5hT1fwf+as77II9uFhrPIewmxNrEXjAyPO1y3PM+MaBFlx4kvJ1jHXQPJAHD3BzGeC47rLXROAkz3vn1p12aKyb6RORPsDL5aMbNPBxyvthXPOFn/tLm/Wh7AsYOL6g4bKO5km75ZOjM4l2Um439IOv9YAXybjwMowceU4uWy/awadOmQtZ5MYxLfwNI891t43hRTJPyuDCk5T3A13MA3nV+D/5+5/HNLdbNf7V/Z85xeW1hLllX6nmf7F22T5em7AVMCfWnHz9YY7RXq3/P5/1H/uzIeywww5LR1r09/ene8AZZ5yx6/7hMcOnXbafeywZL2DOfe/SOHPj4+IGmV+q7gZ33TdK05Xh1EllvDJ+gTWCZ5qczjjO3eb6PuXFnX+fUJ8R0lMpVzaA63vL0Z32cm7YrgHjlxcnP2BQtwPYOXACnGT8UcfEqo4xKVhc71OwV39W3jhwfrrqB8yO+pQZUZ86I1YpUNt71NHJ2fIbbC4Dnr0zjom1/QPRr+MY6mPbtfN4vHY4K0DNNWacrvbUtmb7YMI1L/hwoaedFuec23do7Fi3M8Y022NsbaxenterHaOT0zVe5e56V4zRGcA7Hu+PA6ctSDzoF7xYzFw2T9vBNqHOZEAWNJz/euCBByrgqQVOwV7FyNJxDjXJaPHQzU5edukqjPamhefFzPEzFHzTQ6Rkbtuhl4dtXRtba1u1A1nHVwiLJXRSx6S4cOopKfCmxzrRS57kDiogt12Bsw9//ZZ45P6b4iPHXR+vfeNlsU7wNNR6PuQRsUHwmuMteHmdAoWKyenIY25qxY2sTTuE1QHt/uS8ZPVDO5J5SZ02SyvVonOGdtoq2M4RF5yz3FSAmV3HBAS3asz+5vKb49EHl8Vtt343Ttp8cbzshHPi+se0g1t4O9e04rT3fzWWL7sp3r/wh3HRu74WmwmWqneDykez0e1felNM+u1/V7CQoLk0aNPu3nqnji+g3xxvQKBRl6yjDavqJA/pCjwmS6qe2WhIOnJkwrYt4sUO1pp4tamP6XuH6k/TRgPrfhS/88Er4v/76YOxfsOaWPLjG+KMeWNHsZEEqJ/sDiZgr6io4sTt0ncoDn31v8fn/sdh6hO7djWfNCBN+VJNO5vR2za68tv/FW996zv26EfY6Dd/44J40++/OV716t+Opo6W+P6V31WuhXwfbYQdh2Sb+3QQ/rck79obrk87mzk25bofXheXfeUr8cjDD+3Vj1qtncn3V61aleYC84F5M2ZMsfN/O2ek92t+Ct6Ucw3yY4h8Dj21lTzREDzGVHLHdCTHADyEq5mtIPtQ7Ey/PChozPxSW6uus9g19gS3d+r88Ym9k9IL98QwzUnkM4eZnyR04vKNy3Xmsee68/2d//naAF8SMMrkXOhDndxrhuHG8ZrmhyRwaSO5zXpTJ9FuGPhOOW/jAaOPJPcVGNf+rv/IJEFLuZxbF/MHx30wbmKgD+N6bKwL40CbZYEPD3Q3L9osP+dDGbxq/Av/8ThU4z8SdLHfeC44r+Z/MbeZb/gNCVthH88r6iTP5XLuuWi/A99z1riJgT6MW83/YuMGdsJG2IWcZNthR9sSuG0JzHY0PKcHj6ua/9X8xz+81tkvfM+lDV9yop0ErJr/hVVsM3//s41sJ3Jg2My4zEXP0er5r7BNYc1q/bePeI2v1v8iFlU9/z937v/4qNct1rFTTjkl3Q/ydc7rndc5r4PGsX+77vmvnC/p+cWXVC5go+Vu31su0kQLzt7SU7XvjXaf24ooxD6jPyNEGwUm7pxzM85xRoPZ8MbL65R90e62OjfE/AETh6HOgHORvLjhJDNPOCF2zDsw7tihXYMKFtcnTdHuYR1DoRfs1SdNjfr0aXG7AtM7dHbKrBNPTLTQk/xwCx8u0vSDToodbeK3fLWOCVCgid2bwxfBImB3LFsT2xsHxsz5pyQaPvIHG/SEN9fCecdFb21mPLx0rQJYCiYomFtPQVgFJAnsCkZbb8wS7vFJD+uCLfK+Wt98ElD2xUvFuru7o2usjuBQIK/OS+p4+Z2ClzUFZjmwV6ZUMFA3TxUO6O6L1y88Jzrbu3f1o1zgBXvn9b0gDh47UU0KLtI3osAK9vJH7ZskZ6J2AHf1HRznvEwvLdy6PLZoI/DKmy+L82ZM1w7gSTHvle+Jnz66Ndly49IvxwV/+IXQezalTj2WfPm98Uefv1s6aSeFdj7/61+/ISYpENerncPv/NdbFFjkgAYFuB+5IT5+0SExubcvfu/j31GgW19WxGOzAoDj+6bHmJ7xccDcE+J9l1wZF/U+Gp/5z9sVypW/qL+TpkzXLuWD48TDD454XC9O4+V4om8owl620dbl34gX/8EVEd/9w5g+7bS44q4imB6T++O6//hYTJg0ISbM+534wYMbiI5L50fin9/14pg0cXL0nf3euO1xWSezEbFixjOdxSv/YTfr8u/9Y5yi40YmaQf39DP/JG5ZPRhP/PhzcfrrPy31tINbaK2td8TvHvW2uHdbf3z/H9+p3dR9MUE2+Y13XRKrdjajfwO7rSOeWL852WHGoYfFnPFjGGKpdHv8z9e9KCb0TRRNX3x5yaZo7lgWf3bhn8TXv3Zx9E3qjUtvXx+rbvpCfP66R+QbQ3HX5R+Kf/jUJ+Ptb39HLFg4P377Vb+dXsq4beOm+Pj//Vja3fu6174uNmxmR+/ufkQgfLzszziN6WiPM885O83oh1c+lGy0etXqWLbsnnj44Udii15MSeOgbGI/so1q2u172OEL48UvPiMW37o4blTw+EfXXatzjhfHmWedFQfqrwxqMg5zEhtp+CW68CNNFc23WozVCzE5eJ83uTIvSNifl+5t0DEv9TbNP36gkG/UNBYtBYgVShY/+YrOYWlj7DgOReeVy0lELJ8XG3bLk/gBAd/nHO265tGQAvDolNo1LcZ268cOyduyZcuuuez1gIcRByjAMTwx1ofnN22k/Zn/0JLMF1r4e12inMsDD32AmcbyEyN9QOsLHC7qJNPkOXDr4dxywWM8rAPt8DIMWtr2Z/237vDmIlkuuctus2z7Be05D/QxDF78qZP7m+ua88vboaVuOdbL9Wr8q/Gv5v/Is1E+p5hvzJNq/o8ENqr1v/jxzWsq/kHyPYO611ivyV7zyV12m9fhav0v7t/V/b+6/3sOeW6QOzHvfHmeUSdRz2k9xzznnINjPM9bz014GQZP8Kr1v1r/7WPke4v/2K/sm/iQ/c4+Bsy+CT7wav1/fq//jCFjiX9cdtlladOWx/iZjL9chS/5LHB5Ttn1vI2y6yqmMvU8GacMo27c0XBy/Ge1TEeejWTl4eVyObecMpx6DnN9X3P4lgfE/SLXX48XOxmY6F4ceNhxHeexA+EwYydNjgPOfmms13EG191/f9y/Zm2s0wu01m3dEvevXhPX3XNvbOjpjtnnnBddCmiyKHHBm1+97XReYLp6+uKAwy+IdVtmxw033RNLefDxgwAAIABJREFU77s7Vq1ZkS7KwGibfcQrYszYSYkP+tmJKXsRhHdvz8Q44bCXRPv2ibH4xqVx75IVsfLRx9J175LlcesNd6ttUpyw6CUJFz1yG8DDdoAvZX8RxZgktz+mF/0ddcSRspXCYgp0saOUcyvY4Uudf5w1nMIt7LhUEG3p+se0g3Jk93fBceSz2RqI+7eulJ10kxclu5Mb2lXMMBKIHqddtZs2rY9tD/4k/vZtl8acV54T0zd8P444961x4VdujCfWPRoXn7smzj7zw/GEaId2bNUu081JNnG7LZsfjBWb9GcJ0vkbf3VOvPNL0+Oq25bHyofujQ+ef4hU1FnWM2rxgd+9MKa85Ttx1zX/Eld89ENxv1hoa3Nyxpb6UWu0K1Arn2k/MF77ZyfGf15+k856VgC6uxb/fcUX4pP/6+3x0r/eGP/x9TdGtwRz3u1oNhp38MviK+87MWL2n8dNd3wjXr5grHYs68ztm/8q3v4f3bH4nqXxT6+6Iz741Xu0eXUovv6hl8c/j/3TWK3jEr77prXxyvd+VXtaR2yUXkSYdvVKX8nkGIn69GPj0jseiE1P3Bfvn3hlfPLKe2LcghOi68oPxbX3cy52Pe75zmfjW4e/MGZL/ym/dlHc/ei6WHP/1bH1394TV92/MboOOiO++L6z461nHxHn/8k/xZLVxYsl6/FofPjM34orpr457nxwZay4f0m8ZM4YBUJ3xIM/viwu+odH49rb7oz/ccjE2PTYT2LJmn6NbSP6Nz0Sf/1Xfx2/+coLdJzEnRqXzfGOd/xhdPX0xoW/qR8HNP6fv/RfYtyEyU/yI4Kp+oOWFBjWrxZyyIjDFiyMB5c9JP+rRbeOEznkwENi5gGzYvsOzTkFyhvqo/0IG/HDBruWdYJEnHTiSXHyC18Yt915W9yhoy1edNppceIJJ2n3r4KFwmoTLTZK+JxzLT9KIVT59E6N+VFHHpXe2sq8IJHz4wpvcpWnCFdc1DSkne1tCjw30s50PWBopzG709O53popOupbbq7AIOuF5kFd28d3ctQHaxDzR31OPsgNTUoMaZc3/ZuqI3Q40sLyvV55jSH3gww4lIE5AWPeA9/X+Z/zNj25y15DkQEMfC7jUGZ9Mcw58imTjGOd0M9rUZmn6UxjPcwLWbYBMNvAeNStm3XPZXgtRC9kOQeHxJcRyzIf6sD3tP6b1vqgQ64jcMtChvXZ0/qf87NtbRfzBYeydTVf8ICTg8PlPtvm4JJos27k1HM6yrZhjm9c01tH183HupGDY97oZ11MY57gUDZNmRd8bANwbAPjUafMZd0pl3nSH2Q5B4dUjf+I31TjX/gRvlPN/5H1Ant4jlGu5n+xdmAL1h9frCfAuLzWAPN6VK3/hR/ZRtilWv8L/7DveG7ZLviWfYgytnOy/YCD7zkKD8q+5+b49k1y05sOHr6HWmY+VuBRt46umw9tJONYJ/SzLqYBJ6czTQ6DF7JsA3BsA+NRp8xl3SmDm/OEF/o4B4dU3f9H/KYa/+r+7znE3MjnEWXXn+vzn41ZGzZsSBffrzcrRsHxFl/60pfSpi2vS093/osuxSChV3LZsU3qJNf3J8/pXM5zyiR4ksp5DksIT/ejeJvR06UeUWxPHKz4U7XbeMbL6+aBwQ3Pc8PzAYLPLnh+E/BNCgRuCnZ4blw4DBc3lPHaZTx+6pR4YsmSePiB+2PJ4lshiXEK5kw88uiYtHChDvUdm97eCJzJwsVLmnI+8ELG+MkHRs8LXhfrVt4SKx68Q0G1xZBF9/i50TvlvJh9wPHavdmTgtDW17qgm/VEBvDpE2fHpGNfFctW3hGPPnZ/LF16o7i1YsL4aXHItJPjwBlHxJi2selmaX7QugxPEvYAXi4Do40JNm3GtBjcyZ+q62bLjkvtqiTkS9BOkBREUxiFzcmxdvvmuObhmxVSI7TmoUvsd30Q4Fu8+b44dvycmNuloHnaJqsAHsE7BdJ6FFB+/8uOjfeL4vf+6l/ie289P1Z+730RB/3PuPC0uem4hzPe8Cdx4ofOjptX/GWcUrwXUQE76SMdFVYtAoj9K+N7X14f7/y7t8Vxs7WLXDtAx/QwTlui/7FWvPurd8QbT5sVQ1s2xwndk+QPEsiuUKWaAtCyjsaEXaN6iNAO0gmzdAyJAoI71btx02fHIQfPiENal8eVV98Yp7zhjOjgPIlRbdQRE6fMipg1LWZO7YsOWLe063fWH8WNn397TJHIdQsOj8kDHJGwIr7/5Y2xbtFV8dG/uSW23H11bFpypF6YqDOwCXImGynoyfZgknYic+7u3IW/Fg/ccnX889eXx0NDO6K5c4de5Hh8/Nnvz4r3ffGmeOWHj41/+8tvxocv+ct0XvYRxx8SN3//q3HFA4/J3ho49belo1HO+7PL4/aXfDPef8Fb4oWX/EV89r/vj1eMuzU+s3p9fOWPL4wDejsUsJ2h3bXyya2t2CLbXPWVD8YibSoHNlgbh1K69IVJL1d897vfFS9+6Vnyjlb8r//9kXjL7781+dEM7Sjv6unSfFFgbvgfHoMfMYYEcTkOQl1WkJwfafRAqvIYLfCttsHo1jEVm/TDDv2va0za2MGd7JrZiPkt23JEBD8oaItvdI/lNYY6g1hB5+ZQv/gis5ijNdmUlygO6LiLuoK37Biu6SWPQ3rh4dTpU2PdNetixowZKLZrznA28sYN63Qgv/hKD8Xz03jg0ujclNw01cS7zg8UwmnqrwVqChwzB3dqSzLHbnAESk3zakgvlqxpV3RTu5GbCja3SYdBHanR2zsuli9fFpP1oj+vB37wtT7UWRs8z5nr4AIzzr7Of8sg9xqWw7xmwNftSchw3XC35XoAI8Ej1406F+uO11HqfngnN35ioA/zIvflfoNjGGXo92X9B48ErXnldgVOos32tO7WG3zLpu+0g8tOZB6+jJe3mYd5moftDhwcy4a/6+TUcz3Bz+0OjnkDJ+1p/bdMcvial3PLhYfbKZOoO3dbrofb4YG+JMq+qvHX4qFUjX+xllXzf/fnP3yDecg88jwkp17N/5G1CjthE6831fpfrf/V/b+4t1T3/z1//6+e//juUtxzque/kWdo7rG+7/oeTJ3kZ1c/1/vZjXsPNjRt9fw/8v0Am/yin//f8pa37Bo/PyugF/eJdforY76rMX75c5WfJxj7pxp/MeeLFl/ayHEWl1VMEYscTpsv4Hw5ok4yvPhyNQKnTpvh4JbTM20v89ut/kyDyLsxU8UdLsOpu21vebnNAwC8fOVteRk86r7kEwVbdgl3dCgINvwF346Bk9hZRJceOjlgu31MZxxw6mlx8Flnpy//OA/ORRu/YOzQxaJg54MWGcDAIyGbdo6FaGsTvwUvjYOO/PUURACOXC7zM42/OFG3s8LLN7hCzpg49tAXxUlHnpPgtJsfv6rw5/fgQ08fScgED3rrlufGgeaJJ56IhQsPE5H6UFfolIgcfLSTt6lAXlM7LlsKttUU6GoqQFZXfdU27SDeuU2DVdg8CR3lY1ABvPU7N8esMQruErhT0JE/+xdDHScxFB+/6t54wwum6ngIBdY091Zv0VsC+yLaFagd5BgN6cKs2dqvL1NE7KZ0KAAoXbQDtrmTl8Fp8W5sj21qm6ogMy+CSztAUx90dINwp04cJ1/Q4QWIFS82hKbgIeWkvvTShuqO2qq44hM3xYve+xfRQbBySy2OO+v0OO83F8VpCyfGnNN+Ky449/E4cTq7x0e3Uatf+ksKwWmCg5wVHLOm6uxq6a/+ECRmjWkpqLhN/X/JeefHb50yLQZ+/eXx+rFTYqxabSN2HnO2Mht0iaw2hjbEZ9/0wvh46/Xx+fdfGJNWfy0+L73R5YTXvieWvfzL8Z1T7ozP1F4dd584KWLDXfGmI8+N9nd8PN7zqlPj0X/oFm/GsbDRAUedG19YcXt8+g2nxkcv/0mc+3qsI9ur69gIO2Mfdtm2uk5M8CIUrDb6IR+pKWCr3kZXZ5dgCkTJP3hpIONC0HubgtwwEfTJfpSmjqhlI35waMkeHJ1y1113xzHH6Qxy2fDOJXfHjClTdETJ5OjfsU07lhVwVTg4t9FOyWnXNaQd5Tdc+8O47Y7b47RTT5XMiBuu+1Hs6N8Rp5x8mgK5BPeko+bskPyvQQBZfiTRGi+V1alWjIkFCxakGwuBXBJzacKECbFq1WMxqe+I2LFtqxYdrQcKHrP6pJc1anzA04KQjqlotg2ks7u1T0T8FRyXHM4Bb8g++plGohR8F60EC083WR3JMqRxbNdgI4tfSnmbLMnrl9cz5jHzljnP+kP96c5/80R3rx3wpu4cHZBBym+0CTD8AT46wM+Jutdb65zn4Hn9RJblWRdy8JGZ0xkP+pw/ddL+rP/mCx3ySPB3DoxrX9d/cKH3mFlX62l+8Ec2NgJmeeAbnoD6MC+PlXWGthr/4uEPmzhV41/4MjZ5qvu/fQofrOb/yDzElzx3sU01/6v1P1+7mVejPf+DU63/xUpc3f9HglHV/b+whZ9dfL+unv+q5z/fa/P7Lc8irKX4SfX8X/zI7mc1z6Hq+X/fv/89+uijyY9Yb+xbuV/hg/ibfdG57/lP9fwnfB6Q+EbvxJdIYIbDvFx2OzkJ+nJAGbhp95aDV07wLTpVbnka9bxz+0ruju0rPnimKedlHrSPhlOGu06eQi7DdHnZOHVu1P7CTQCYRcmXH+5QJF+swCcIy05c/mR99erV6QVzlDdt2pSCFPzqZD6mx6mA+WYInIQcHjChNT9yfu1Ahr/UOXhgXaCFFxc8cHb6Q75DL/WCdu3atelCR/gRQKaf8IIPyf0kp285f2Ck8mJUvFDvIO28VcBYL05rcHQCwUZ2VGqraDr/V+WGgokEDRVbjgW902NO78zEb28fvZ19Mb9rmoyuX3nYf6rgomJ5Kg2l3a0d2qFKuaYIL0dmzD/xpRE3vT++e88T2lHciqVX/VvcNPYVceKB3em4grj3xli+YShWXPO5OPeDN8TUDt1s2ubGy147KT72sUvjgQ0KWmqH7uondGaF+otV9NOBPrTTc1hRgn/spu5WQHHj5o3agbo9Nqy+Kz7zjrPiM9tPjHe/cmG0S0mcbL3GbuvQ1liy5F5FVxdGo7MVK2/9fnzu0u/E4zqSomyj8TPmRKzaFJvoD4FFjgV5vNCDl+M11X+mda0xL379tZPjezc+HH2Ljoqj9eLGA/p6d7MRGqdjRaTHNrW0tj0UX73q8XjDG14XJy3o1AsJH5JdFURRkHb8/BfHu+f+IF7zmg/FGz/4mlBYPjbphYXf2LQtLnrDhXFg9/ZYslln/e6QtZ94IG65b206Mzr5ixTq6h0bPQcdE2+ZOiH+9pJvxTr1f/u2J2LVFp19m6LYmFCKqzsKf6YxlLOoqgDfmO74xCc/Gf2D/ADRir//1CfinJe8NPnR7NkHxDYFXffkR/j79u36oUO7gHcqiPyD718rGa2YOX1W7BRc4tL5zG0dmua4b8mPbKNavS3uvP3WuPW2W+KUk06OY445No5TIPqEU06MW27+adyvo2k0S9Juc7mydtkTKJXu4smL8ggqt6T7oPp98EHzFTBeJWH0uZ5+COrs7EzzcavOeWb3sH4WSr5V0859XqjXVFC4rkA2AXN+iMHBBhQgRue0Ax8fZz6mOQSNfECBZeLYHIPBDwHsix3Q+ezTtIudue757zntecua4HUCHZ/J/PeaYBmsF1z0m9xrCDJJrpMDg8606Os67ax1e9LN+psfdMCoI5tkPYCZr3O3gwMMnKe7/rsf7q91Qh+PP21clru39R8646ETyf0l59qf9Z/+WTfK1fizEBT+gV2q8X/6939sR7KP2c+r+V8821Xzv3iGrNb/av1nnfC9kdz3Ta8d1f2/WEer+3/xPFY9/xXHaTBvque/kWcM1gvbw+uJYdSr5//d4z9eX7EN5er5/zn5/M+XVscineewvOz2tDQM01EmFV8eR3gV0N0/c5ycZnesvdfMY+9YWeuzvRM5Y/2kYlk56uULojLM9XJbuV5EGAp6yrsuByy8ILEYeeIB43LylyTXmZhcDhSwyOUPA8aDH8m8wMkDAtADI7hrPPMhpx18LwTgjLZwgufFlHbX/aBm3u6Xc8uinQQcWfDiop73nQA1ATJeHrZtu/7sX57CsQB16TqkQGhzQAF0Bb7adMhriyMfdMyCQm8606Ajzj/wpPjs5lUK/ilwO0qq67iAcyYcqV292juqyJ3Yaheohkv/CRlzJnJDQWTFBQWXYOGMmXV+XP/5D8QLXzi/4Dj2hfGlK/815nRp1/ehp8fb5n4kTj14Wow/4w/jA289NhYThat3xsve9/X44NtfGifM//tE9/KPfi/+9S3zFRxVn9Vvji/YORwMZXdzQ+WxGocPvvLY+OCw7q94+8fj5lteHwePF0DtbYp9X/s3vxGz/0Z1BZA/8Om/i0U9DR15cnG8988fjhe+6qXRN253G8074RVx5tpXxcLJH47/d/1Dcba6FX0KRukFdC0dYdCRZMkP6+3x8vf9Zzz0rpfEginvTtC2sz8WD1725mizjaQzp1ns3NSKcZ06PqX7sPiDP31ZvO7CI+L/tC+Kt/7e6XHNB8+Py854IF67aFr85h//TnzsnffE756rI1gUwB5/+Nnx3jP64tcP64sxR10YbzjvsPjzV78jjv7yS+Ol5/1xkslHz5k6K/n3Tk1j/hdXXRzvPP11cfDH35za//4Hy+L1B+n8atmQHbVDCo7qj0BCm/ejtl1BT/WPXcn41cEHHpTOGZqincOXfP4SwYbiBccdR1w1fvd3Loq/++QnYorOHx/xIwUqJeXyyy+Pzq5O+WFHHDL/sDjt9FPlL/rxQjCO81i24sHobu+MrnFd2o28RTJ0lEZmo0ZjUOcN12Ph4YvEozsWHLZAR2wouK7d5Me94Ljo69NZ5bNmpWNOdCiyfjTQ7l+iu+oP5xWTt+TrNY6WUDB7/MTxaU5s27Yt9Ye5R2KH8Oq1q2PmzNmpT4o9y4vl2+qnzMJJIbKNypo7HFWhEzLkanoZH/4t+3AMiyRoHmgtEj9B2DQvJtAT0C4Ct2N1FAcP4KwhzE3mP/Pa64HXEXiWr/2Z/8bNeViGZdJGytdW7OEgqmnhxQUdiTJt1OFpfrQB91rrNvib1rjIAY9EGRxsgmzDKFtGriPyzds6kjvR5nEF5rYc5rJz8Kyj8ZGDXOrgcQGz3sBNA5wy+LRTN0/0IUFv3QyDBlzXKYMH7/JlnomZPmhHFrRc1MmtJ3g5D8uwTNpIuW2hrca/sAv2rsa/+FKILXJfx3eo41P2J3wJOD5pX6cNG5rWuLR7HlEGp5r/xdqKPfJ563I1/wu7YAf7nW1D7uQ10HW3YVcnl50Dt48av5r/xT0IO3DZPpSxEXWPAzAS8Gr+V/d/5pV9o1r/q+c/rx3krBX4R3X/L+452IO5QrJtWEfLl9fYhKgPr7XQclEnx7bGzXlYhseANhLzExrq5NXz/+7P/zIRg1MMEAaT6YcvYJS5+RU3wJEy9bzNOM7zNqHuogfuZB6u/8xyBO1rMq5z6FzOc8qu23jUc2NSNp7Lztl4Rxu5afIceI5jvByW4y/80Y9+9AkcnInABMHhcX4Crxxv4TYWJuMY5skhmbsmDGUSvDzhyP0AxESCNzlwPzAVVOqU9DDMOW3Isnxy6wOOb6bAnSgjhzyHGx9+yKcv5u3+oJtl5ziUuR588ME48ugjY9bM2UlGIwWOiz/11wZLdYKdyOLBn93zRU8vFEs7UiWT0bv03uvi5kduUbnw6wlzpia1tbzFQePmxuv6To526aCYmo7GkG2VE3AjeshOXc6vTS8nk5xBBW4bnBkrvKGd22PrzsHoVECtIT1bImoQZGtol/eG7TF2fLfOx2WM5Q7oMsx459aNMVDvie5OXqKmMZGoFJxLET3prgDekM5ibpPcIe0crSuQjd0UW0yKEXBusuNWhDKFAul82VUgUPxbnIWMrZ/4QUw+66ZYceu7YxxGKNmoqZ3NW/WStp4xY5KNOINXLidZenDUObnwZ1f3EGfm6viGbZu2KNjYHt0KmtpGgzuWxkf/8ovR7FgSf/dP/x3/ceeqOGNme7LRwIbN0ejtSceCbNm2ZRQbyQ9Ym9TXmgKUm7WbuEcvh4uGjmfZ2IzecQpIy7YbtmyUD3QpONpTstFAbNSO2K52bPzUNrrhn18dP955Wrzzj96uY0E4t1i7y0t+xDEXbS3J3YMf7c1GaWwViU7+K/9otctP9uBHDZ3FwREm9iMCtnWN9xADsJsfZTYq+VF7vUMvr3wkFi++LebMmZP8HtnMo6VLl8bRxxyjHeb6YQc/0X9e1ocPIKIhR6rJV4lxN9TXdLSHfK+hHf767aLYlSz/1vATu047utnNXscXhM9LAtvkN6seXR2M7SyC3z+j+Z8/GNA/rxnktCGXMsnrEnUu2rxuUbZ9wPV5YeYJzHwog8+cc7vXYMvDzmNkA3JwvMaaBhhlJ+pc4JsXdWSid7X+F1/kbTfsQrka/8KP7Hf2Kdul7F/Usdsvy/3f/bQ/kGMDzxvbhX6Dy/yijYu2av4/v5//qvGv5r/nu++XruMb1fxn5SvWfOzjcrX+V+s/8+T5/v2/Wv+r9d/rfbX+F8++rPGeF2nB1we2ear1/+STT/4joS7VxRdTX4Sf+AJNDow8hxlufOc5DvTA89xlgXfJAkYCl0Tdl+t5npdNC2yPicDrvqbibinbZQQuk++t7PZyrnBJoiN3GZy8nNdzPMro7xy80epT3/jGN57rASfnIciJLz4kJg2JL0Qk6lzg+0sRbW4HTtnt5mNHQwZtTpS58slJm3GgtzzKwMldRgcSdSdw0AFZ0DqBY160Q4teTuBbd/OHFxe4BFcefvhhnRd7asLjmIcWf5qvoBbn8ZJz/EJNZ7ZicURztMEQ2ye1a5O48QHdk2PxumWxY3g3cmevgpVKnfWuuGDKSTGpg2AQgVnRaMtxMSKyp2C8dKwlOHJ0vkM6q5Y4LXihQF67duty5EAdW6hfLR3doBCVdmfqAVd7OgtPVKBIc4XjEqR5tLWLTkdcNOCnqB27QhuKONYJQKsfTXY/KwBI1LgIFivgSHckoqVgIrtJU10qcBYwW07rHHeQgnySIRst+9G1cdxvnB/Hz5o8qo2a0ruRjl8obMQxCTIXccakD8IIqrMDtakOjxmj3awN/cixm40GYtOq1dHqOz4+8LFPxgtmsfW3sFG9i3OhsaSOWhjVRhxHIhsnG9X1A4r0STbSmbuyTVpaFNjv1o7eTsbnSTZqiy7J4giJfbHRozdcErev7dU5xGerH/LnUfwIdffmR09lI15Whx9xNjf+Qe9Zj8t+1NJ4cebxLj8SZpOA75P8KLcRvEb8iOMtensnxI9/fFOwq9pzjJz5tFFHy0ycPEXzSH6nMR3U9n18pqnAeV2/AgxJV85bHtQc4qgROKe5JH+UGySfqinQXZOt6uJZT1/YBBf9kPCZaD294+OBBx6IqVOnpvn6bM9/+Hlt8JritYeHY9YLLmC0U/ZRPJSBsb54/TOv8loFPTjQkJOAgUcC7hyYeQMzHrAyPbysd57Dw5flmT+5cdHXdWDQWFfbhnbg7hvt1vf5vv67j/TPNqF/pGr8f/nv/9X4V/Pf61o1/6v1n3W/Wv+LZxWvjdikuv9Xz39eJ6vnv5H3K3HP4PmaK58jLvv5HJtRLj+/g0fy8zQ5MPL8fmRYmd784WF8cvB9geNkOcZlTEnUTWddq/lfff+zf+BL+zL/L7744qvkTk/o4gstzl18sR29nreVy3ldbHalp4Ib0XiuFxPNtWeQj0QWn5qJhZZzKIH5KtcNz3PP4hzmMm2UyfNrNBj6G2e0dtqmvvnNb9aBukVi4L14eeHwgkTuZJgXGeCU+SJNmx+sgHEB4yIAa1rzt0zanKDJHdILFu05HDwS7ZZF7sXSMqiX6bz4edEEN5eT62k5wHihHjsd5xwwSzs1df6sgnMpoJsWfQIKCnIp+Maf4fOeueKFbBoIBboUIlMArR5dCkISLFu28ZH0E0s7u3zHdMQR4xfEyT1zhSXaFNCEB4Fj9S/FAQkOy9badkzgcVDR27qOveAIBLxCPZB8aAlkKxBMFDIdXaFM7XUFu1MQThIGtdM3vcBO2HVFD6EVN8UaCebJznppWvIFRfraBqU7u2ThrmDfLnx2JBNoFDy9HE4I7JCWZPFS8E+80B0b9R50RCyco2MZePvcPthIjESnG6R4ynsUCFX/1PmGAuIEyEe1UXTH/GN/LV5w1KLoU2D+uWyjWcddGKe/+Oxol11to/31o6dlI9mzKZ96tv0I3+lQUH+n3rbI2eNjx/K6w2Jd6OnpSfNmzepVCv536wcNBejT6lr4iTxcXZEvaQc3P2QQGGaMGfPkryjL/CScrGKD80rwa8nEP2DGMTA7tvbHGh2dMW3atDSXfxbz3zzJWVPYQez1wf1lHSSl+aN+sG5Q9poCvukpA4eX2wm2AgcGndvgCZ3xKJsXbeZjOuqsq66Tk0xHGRwn45V5WkfjWT5wJ8q/Cus/tiORY69q/AsPqMZ/dztQq+b/L9/zXzX/i3sG871a/6v1v1j1iue86v4/Yodq/S9swRrB86KfRf3s6HXUz5zPl+//1rt6/qvW/+r5/5l9/7vkkku+q3Xycd9DlJvhnnJQaSu3G17Oczy+6OZ1cEdLI1+IR1pHg4207qW0P4TGLeewB+arXDecnFhcnrucwylzEYKhnTyH5XAiGW4zTRl/4XXXXfe3LPReHPNducC86OdfiAynzTcB4xkm2elLFMFa/swaGeB6N1qODy51EryhcSCFOg8nDqYkpFE+aLdeNPvmRW5eyHDwmDL4tENLog6uZVl2rvfdd98d55/3shjb3akXiukGSWBTb80jiFoEWrUejXu3AAAgAElEQVTfNwVK2Ump/mo77aB28/Jn+hImPP2JfpuO89DQEE5tsINYXYeEQO+QgraEZVuKjjX1EjHFiFN7U7KIpbHrlxhVM0VXi2AgCGpOf+oPH46ySDt0BeQsXXpHf1M/qAGQLk0F3hSiUlkBEenBi/pESNMwjfCkFKIIIdcV+OaFZin0Jxxtck242toq2eqjXojHblY2hqYdtIITXKxsxAD88tuIM7M3bd4e3/rWN2PBggVp3ubznxff8YLLLVu2yG+KhxDPe+fMOa8pstqT5iSw0RJzlrOQ58+fH906huRnMf+Ra77o6IRsryfuR47HmgIcW5DAp58kt9Ge86QNHHC54EcCj3IuMzXow+smODyUg0PKaeAJPWsqZbfl+iQifeTt1gF8wyl7rMzHMHhAk48/uPTX9LYRuNCRaHM/aKf+XFn/0c8652OVj4X7keN5jKvxr8YfH8Jf8GuSfSOfN6lBH+CAy4U/kcCjnPtcatCH5w041fwvghfYCht7PmKj3Ha2JTbE3uDSzvz22uN1CxzzqeZ/ERjCDrZn2TbAsfcvy/N/Nf7FnGJesMZ4zarGv3r+833JPsFcqeb/8Hfu6vk/3Td9H/X64fsFvoLfkGjzcwztvgfjS/k9NyFnH7SbL2DzJq/u/yPPjNgImzwXvv+deuqp79JQcZwFX6Z5IOainNeB8cUZGA/B5fYcbh7k4LpO2fU8NzzPhZpwDaNOok4q5wV0D5/FdrI9NA6DC8/fO07eWsbfWz1vG60MzHDnyCJy4LbR8ry9zsT0BPZk82T0DQGHw/FItDkHbpp80tIOHFxwkMHC4DJ87cyWBb6TyywMTtYTOZThBU92gvEn4yRgTsjgAoccOuuITK7yLjLkgWt+6GG58Nm8ebNktMeEyb2xXbsekwy58IACyDpyVgFhdiGrr1IjbQAeImCsBy5FYTliYki7a3XaqILMOq9Zwdp2HcVQhFkJLsu2dJfjB7QVmD/vb1PgkReRias+BEtzQu1D4idzIS8FdZvMMYWlFUEewo7SgR3BA7JHu6ibg5LDGQLYBxyOxQBPvAnyNhX846xkguKIYqhrOpOWF/rVJIMdwJKqQLO+ZCkvjmuQwqJnJ61GVoF0VdRXto+2CETrpXh1BcFlTuKnlY1+BWy0U47TN3lSmle8zIn55DnP/Jk8eXLaoey5SD7a/AdOYn7RDh/PXfI9zX/OcO/q6tpFC/2zNf+RSUIXAjSsDS5bv1xHcL12kIODPtDRJ5L7SRk9SbSB436aN23ATGt98jXKMli/rB80XMh2Mh/r5zbLRQYwLnAYQ2hIlk8O3DSWYTzgxoEH/bMvwJc260EdfCeX6Y+TdYXGOsHz57X+I5OETtX4F35Qjf/IexfwSy58mZxknyX33PS8oN14lKv5X81//IB1ER/BN+w39hNy2klej8C1n9nHqvW/eHZgLjKvPCexH2VsyLU/z/+2d7X+/2p+/6vGv3r+Y92t5n81/6vn/2fn+Z/ppIsvplyUWWRcL+e0F1/CChxVd+GaDhgJ2mLB2nO5jDdaHdieEjJIllPUSp9GKoF3q5ZxXB8tB5bDKedGLNdp8+U218l56nbd5Twnoup249POBT/yRddcc81HeaBiceTyzZKHLT9wCS+VXffDmOHkpJwenn4Y5sumH2yh9QU+PEnGJzcMPHCAOVEGRnIbckjojiweHK2jcXI6+NPulMsDDg9yy3X5nnvuidNPPz1mH3BA9A/prCNtC4aW3beEh+vs6MWnFPCFfZuCvRyNzA5ecgGER0CW/opCO4E5kqJdAd6mgrj8I47bGtJObI6KYAyYNgrMNlu8jLBo50/3CRTLUsr1hUNBXjY6K1qtP/VnB7P01wvpZN0E41xjIRbHAKAj+qGnyopVa5xSUTqjgUgYE/EZVDAYHunYCyFyisCAdCEeTV+FSFcFFE9tmebFd5y3q64pSQ+1VTb61bJRm460eEhnhv/whz+MhQsXJl9yoM/rAfOJi7npucdco53cMON4Hiav+gXMf+Q6ee1BR9Yb6uTWH7y8f6Zzn8jdR/BIwCh77bIM+JqOdsq0md68jM+6ZxvD1/wp52ua+fhhCH7w4EImCRzzL9eti+HkpJze9nC/ns/rf9G74tO2xjbV+Bd+YvtU468bpBI+z2VfAYa/OPf8BccwzxPmsOmq+f/ceP5LgzT84bGp5v+IP9s+1fyv5r+fH6r7f7X++1mUZ8/q+W9kvazu/yPPR34u8nph23BP8TMUMCfKvgeTm4521h5/h4IW3sbJ6YD72Qs66wCMK/+uRHueLBua6vl/xHbYCNvsz/p/5plnvkdkS3SlKNdwTpmLQfflncjU3eY8hxmfnIfrct0wcl/GpU4yPK8bnueUScYraqXP4omgBCxVi5VhBOj6aDkww4soaFE3HNhoZWDlNtfJ87Jxy3DXy/nUiy666GxPME8KTxAmlG8EtLkMPol2cMuTkDY7VN4G3ImJmi8A4FHPeVLmQrb5QA9v6g4WgwMtMDux+RhOHTrrZZ7QmB5+1KGhjI4k/vx+2bJlMWvmrDj++GNjh859xTmabB9WEFdslbTbV4U2zilOrdJJvBo657Wu6CtBVwKu9QEFyrTTuEHwV8FidgSn4C1y9Q++HA0Bl5r6TVtD+MB4YR8uwsvvWuLbpra0k1n14oVlohIDgriyrnD1qag08jluQ8yEJxuIjt3COsG6+ClB01ES9I+TmCVBPIYUeK5LBg6VNNPLz7ANZzqnF8FJQ/pPOJpjMXhJH4Yga2gXc9obLeLKRr9aNsIPJk2aEuvWr4/ly5enncG+KcuVdqXn0/xHadYD1gUnyl5rgHlNYi0hMVe8XlIH7ou6eRnfMHjCi0SZdvOBBr4kr2Opog/zJjcPcKgblzLJdXISfHMYMsqyqed6QAe/tCYM60S9LMP6Gg4dqRr/kXtoYZFiHDx2wMpjUI1/YSl8Fb/6ed3/kVrN/2r+e83GHygzP53sk17n8E+vl+B4bXS7ebkOjnl6Xa7m/3Pj+Z+xqeZ/Nf89Z/O5SplUzf+RNc72YP2qnv+KZ+5q/S/skCaLPqrn/+r5X2ciXy1XKJ+JjKPYWVzOc1zI7aOV3bY/NHypNh08n7VURBCfObviW/+T+YwGL8PyOmVfcNtTm3H2KV+yhB8CqrQ3C/RN6YvTTjs15s6bF/yZflO7bTkuoo0jHwb0p9ryP14M1lDgtaWgcE27hGspsMqXDM4+JoCr4VCAjWCtzo0QTDgK1hLH4bgLAr+EcQn64s7amCyYsJGhLywsOdBypESbvqA0OTJCOAJq0zAP2wo6cFwGMB1D0VJhKB1roS/bkqVX94kfASZpqyNAxFbqoJ8CQWoFX0/KOmJDvDjGQtW6znpuakczO6Hr2gVNAj4gfXnBXjrPWTCOt6hR1wv/BrUbeSj1gaBzZaNfNRtxNMrgQH+c9eIXxQMPLI+7770nHnrooeQ71UdlgcoClQUqC1QWqCxQWaCyQGWBygKVBSoLVBaoLPAraQGCSk/3ssGKwNTufBTdSsltOa7b9gajDdoyrmn2OS8rMBphGcf1PKec1+HDFjBg5KS8nsPTxlS1OwePMrkv6oa57DzHN8y4tC3aunXLR4hgKk6oYKZsJulkLrB7NtWJHiqSyUvSaopeckIC72FrsTuWNuKRCWB6WMAscYKhColAshSElEyFUdOuWHoiDYRAMFQl4UlMCnqiGPLrgqEjupJgnRpUSGqbt8CiSAFWwqNph2zSAyaQwB9VhQOLJFz6iDnnECMX5rzYjl27TeGpFkMDrdjZHNDuYAVV1T4EnN3EwlPcWEFdEWrHcGuQHbzqmc640JHACiyLn3b0sg1Z5FFrp030gNAAGnb9SqdUp58EiDmOQsFcDqVg53BdP2kQbMaGBLELG0ouhy9LViEefqKnXdywGWPakmx+CU02xJ76VweOPYTHGRr8Ypz6nPqC4vpfKCneqtT1p/K8JFDnZjQwoKLfTZ3FXCdwLL2IMaOXYtUaW3W6stGvtI340aGtrVN+y453/Gzf5hrzoFqP9r4eVTbSOpPW6j2v2ZWNKhs9G/f+yo8qP6r8SHfv9HxIpjLP0LpNpydJ3a95hqxsVNko/aUk3y9kil/k97Vqza7W7Go9qtajaj16bsfYuru7/0KPEexiVRArXUTLfAGj7NzwMsy0xiPn8QQ85yomPtTdTk4q18EhkftyPc8pk4xf1Eqfz9ZO5BLbfa4STimnHEY5r4Nbhrnd8Cfl27dukxX0TwFCPScqNsiREvpTPR1fwE5bhU2jnboCjQ22zWr3KoFXdrGmIxbYdaoIZ010NZXZDUsAlcCpjgBOwVaiSDx2pkCnYOmsXw7M1Yvl2AWL4PSCOB5QNaacq8vREA29BK4mPMrp5XTigY7sxiUCqvhrCoTiBfBpU2BBJOIrLmIFt0babUsQlHNL0UI81M6DMLsmeflbSwHS9GwsRdsUJB1UYJRduW3teg2eAqlFEKywkbYG6wGJYyfUV/Foa9fLdbCRYNiIF9QhmEB4Oo5CMpo64oKga40Xz0k/bfBVP9j9O2wj9Zk4LYTJRvL/FAhOfZSN2LIsWQPqPOwxbB0byQAEwwEVxhAf2ZcH/aYCuUOyXbKRdCP2rhGMNsY32YigMTCRql2f2hkNHdwKezBOhY0KPPZPK7ot/rIRUoVbaxf68HStycYtzmOubFTZSD7RP7Qtavrh5OnONeZ6tR7tfT2qbPTUa3Zlo8pGz8a9v/Kjyo8qP/r5PGdXc62aa9Vcq+bac+V7f7UeVetRtR49y+sRYbs9X2oqQlsUlIxb1IrPMox6OQEjzPULSSms9xSSc6VHKwPzBSvjGJbXCW3mcMplmOvOjUN9tGtP7YZP/dP3vOdMgr8K3Q5bmuMPFJgkrqjgMUZQeFRBSwUUiToSlUyBYJUVgK0p0EpQNe0cFh+CnApTpkA08Ui16OgEIOpcktNQ4FN1seGYhhpHNaiO8rwqriGeOpFYMALHok9BWQ5kQCFhCb/BT82qDikIW1fAOh2loPgmu6M5+IEjIRoK2JITnCWYmgLHqnN2FYsBEdQ21QuF1fcUaCUIilB1UDspC91lD8mrbFTZqPKjaq5V61G1Zlf3Nd0jq3t/9XyUnu2q56PqGbJ6zq6+i1Tf16rvtNX3/io2UsWPqvjRvsXY/vZvP/4DBfU4E1lfKFIiL180PBWsjEPdKeedw8pw142zp1zBw31P+4Kc44xWBuYLyS47J3ZKIucC7pwyMdw95bSB65wym2apG+ZynoNnukVr16z96yHtLOVYgub/z955AEhV3V38TNldFhaWtvRmQQTsihUTRWPX2Gli94s9qDG2mGiixhQblpgYe+wYK/YaJaKxIoggFqR3lu077Tvnzr7dmdmZ2VlYdGH/V4f33n333fJ7b2Znzvu/c8OUTfn4uaJYFWmrMNOoPBg0Wxs3YwxzDSjKmJGwYf6IDMq+gqJrhH4OPIoCLLsq6wZqsIpsVkRrMEhbB9arUSjSNcJ2FKEslTpMQTiPk9fFaBURzWNUMMtF5AEsAZmVBLkMqy+MwnUdYMSzondZgv8xKpd9UHuqTjkMhGVf2Sc1xxFqcjhFT7NVfs8XAgqhTjhmexKNKS4zrpgiMy0adABfLsqZArT8jZ1tBw+TnURLMWJoL/yM3pWlRfx0sW8U5qOMeNYw1Q1NVOdsMNhH2WYENfkeo5ljFLZ9LBeVZYVjxH6qbxLhPUZ1Ec6snONm3+sYEYljRMtiZvJVx4ingOdejFiXGhcjhUOTo6KpJbi7s8tzr7OiDkr0Z8OON3vESHEVp+jOyl2ENfvo05gk+KsXurbIWNHYrlPqLzmAnOPR0vFzFlW0tq4jsak7j/EQbWMUqONhjOw6sveaPoPs88g+s/m30P6u2d9++35k3yHt+5F9z7bfIvZ7jT8r7Tctfz7b7/5Wo41QxuE8UrX8dGKApGls9Rpbr+69ruTXd9lZSJXSV3m9tJ76SsynAJBUNnGfJC8dm26pPJX1llpX8vKU772U761rqeQts627gon/SAX9IZLUxHQpW37qPm17L68ub9srm7hs2EdBT5qgfHyjLsqY54BfyiVeUlJ1YrB8fp2NAnOisn6gH4OsLvQz3k/h0K86KM76XdSw7BqCfAPLqoKiL2do5V4nKlKehD8Uougs3yzudZVyHz/46QnB49gOfYCjARpEhPMQ0lIyJC0YIhKvnfhIcdP1l5t8Vt5H+wS/1GOOSJ+bEjUDzquYIjSfQYlRII9SEFa0dNzbl8ezuDxb83hZRAOybuBY2J8Ay3LoTiB30dBsW5HSqrUlGOlylR4/c/oMzFuwCOHaatZMFmyjgZFYcmyKtlaf9OWYZXSsuuLsid2ShXgeYlKbJUy78QmkeHqMVAe3xcMp7K4ax0iWIVRynVAuvgq+DpCXIsAl4Gq8Ev3lXa392o6xnoDHWhHg7vpgebbtttiW+CmCW9xiGqz6w5fzS46PhFtMEpwlhLONeHl2QM8MUcD2SWxmboSCuK4tY2SM7DrSZ7G91+zzyD6z498z7O+a/e2370f2/ci+Q9r3bPstYr/XFGCl3672/ci+H7UebSS/IIiB/Qdg62FDqZ1QZ5HmRU3MNDZpQ5R2kl9enrf09mtbydvWMjF5+YlCr7df+5qT7x3XIssNLSKngsjU6WzlPHiJx3p5icd564n7XJ7EQyp5jPjVFG5MFCpiNM0NcOkmlVMkMEtKCowwTx68MpdQWWqu8TcDBT9F+uouC+XHuO8ud4V9tQwUZuQxJ5Nz59+JtRIoKQvKK5hCo5+KaVjRs7EQ19k2BWZfiJGrefxj4P4o8EiWlzCqS0EWF3FbAdbBfEUIOw9l1k1dm29S9k91sb8SY9lB1htGSJYUFFv1sIWPIneslsIc24hQeXYTwTHfRQa7yGvWLe9f/mVWFS3FKD+Qhy+/nIXysgrsvssu6NCxyNlrqJeWjIARMAJGwAgYASNgBIyAETACRsAIGAEjYAQ2PgLSt8rKy/D1nK/xzdffYcvBm1FrUjSeaWyMevROaCNNkjvqd9ate2W8Y7RMl5e6n4pgk0n15FKuyYrSFVhXETkRQLp6M+U1dZwHLVO5dPsT81LX1Q8FC/PRh7gNgXtEmGHB/hCLuihe5ucFOcecpmRjZC8jROUG4WOEqawtdCHI7iK+l8Iz65KILNE1KtFX5VhVLEzRVu1wGVD4L+sKh3j3mPsk62piN0rVuonI+inmUrX2M+pVwrETcZ24TIlX0cr8hz10Am/8zLNuRcIyglVRuvGGOKmc4lud+k0xmTuc/7H6omhbidiKmKWATKmYQjQlcgnSEphZN589cJeoHBfcSgsxilG0Lq8sxZBhQzCg/0Dk5WlWOktGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAhszgRCfvM8L5uGr2bMZibwlaiOyjjWNzWlsTlxzZ5fKHKW39C/v9Cfu9/ISl4n749Jg4t6GdZVbl6TjstWbtk4nIabdk1vmunTWA9FUC7mUSyyTri9uv0RcicLUXBm5G4/slbqrsHtFI8dkJ0DfYTfRncKAFfFLnddH2wlptP5oHgVfWRBQAOZ2jNs8jKIu93MUkTDlXIYIB+R3TAFZ4rMeyw6yTmqzjBpWIQnSFH5VjpHI8cnvGO8slVm+vPTO9UUoVrPhGOuVN7C8i6Pcpwf9fVrSe5mdZtvcZvuySuAa+8YRUuwOU5B2Xr6yv1B5+f5S4Y64yGOZFEsBZ56Ol8UCy7ubJRx/SzLy0QO6uFNnE5CbusJtvxEwAkbACBgBI2AEjIARMAJGwAgYASNgBDYSAgoU7NSpE5/Gz6cmpafjTWPzNDaeQqdBpjmVylfKtD++N/5vLmVyrSuxXm/d64u33azl+orIzWospbAHpqkBJJbz1lOqcidCed7+pKUmbKOsS0sJCagsxIhcia0RTo4mEVd+vfIL1kRotRRZBUXew5zyjtHE3KDwKzsIibLyRfZJEKadhJtIjXX4JQSznPP4lWLMclF6LEdYLiQVmvXEPZJZJ/e7SfZ4fIAKriKk/YwKlrYboTIswwmu8X/Wr77S7kICtnRgGhm7SfhkQaF1v3yQuRqV1zP/Ux2Uy9kR9puCNjvMPEYe666Q6uC6op4jFJnFRJMLhpkvIbzlGLlmKZSrVktGwAgYASNgBIyAETACRsAIGAEjYASMgBEwApsKAek9eiJfT7ybxtagsfH8SgBM99KpV35qylQ2tZy3nVjey/tBlwqUbQ2puSASy2tdycuLbyX8G9HEbFSFZR3BGF+qnPQjZpRwHg8JUbXNY1QuZWWEgjScoB2FhGVN5hFl5C6lYIq+igxm9DEtJXg0j+e/FHddNC8jg6P0LA7yHaTJ7aTqSmNW2HOM1hhBicaKgnbRwhRx9R5TJDCtLiQa0yqZu9gJ5bNffqrWEUbyxtiGj2K05GGaYCDGCGf1Sf7LMQnM9B4OUEhW3dKUVTagN7CEY42HDSkaWsI2e8QaVIjdku0GpWppvIzDZr4imBWZrK47hZ05PFbjqmOkCG1NQJgLI/lA+zR5oSUjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYgVZJQLrTv//9FL744gv0798fJ5wwHkHqUbkkRSHHNWTpUOunsT333HP46quvMHjwYBx+6M83Wo0tA7dErdJb95YZDknK9spqSdg/bsrt6mi6jxpMS6ZESLnUm9h+4rFa57x2Umgpmkr4ZVSx03opCIe4IluICBXUgFNiaflAOwmfjIcVyEs6vhjFWiflsiqKwz4Krord1XFhGYjzXeOnaBuRUMw6XeVBNaYAZm4rtFjRy862gpksFtMtGxZho9rJiGIKtu59x3/yVLEP+axDccNsCSG245NVBkVpRRT7JW4rj9Wo/Zg8aPhfjJ1yFh0cZ4ACsMRgZ2fBfXpzR+WrLCFc0dEsO5tm6G+8/gpmfznbmaN37NgRWw/ZGvv/bD9sMXhIfNyM2r77nrtw+hmnsZ8cjC+ZkSb5k+BM6Z3iOfsuL2Z1y3WOKykpHA7j0UcfTclt2DziiCPcoxENObZmBIyAETACRsAIGAEjYASMgBEwAkbACBgBI9CSBObNm4ePP/4YEyf+Eo899jhmzZqFbbfdtskmnN4jb1TqP3ryPVeNrZF+xCpuuelGJx5feMFFeO75Z3HjzX/FBb/6ZYtqbDQCcBqbs3SlNhahrubkOGprcgjgXoVSUi+MB2LG+NS+5h+LcT8NZxFoQmNTPKYUOCYnh3GpDe+lfCVXIL6a9V/vuFzLZ60sYafq4+jXL7WUiOz1It0gPQBemeYuveNTl7nXIx9h+hRLQK5lZHAeBc4IL/YgJ4HTNHNO1KVwq8hi/st66U3MGfQ0ed7NN/0Jb77xJsaOHoMTJpxAmwoKtYwc9vEq0XFBn4wyKOHWCcgu6pcWF5SQKehy4S7IeDQwdV13RUX4DguwL1FGEmu/LlAnbjPKWEJ3oCCG6dM/x5Kli9G3dz8MGz7U2WjIgoPXurPikLgdkeDNuqJ800pAltitfoVZp0RxiedOD6/TtiX1amLA1WUVuP2WWzDt/fdRVFSEwsJCZz+xdu1avPX2m3h+yvP46U/2xrnnnI8nnvwXnpz8BE47/XRn0ZHIKOqioEWM70i/+s722aCLaM5wdmpqatwYJpBlYqqqqsJ9992HZ555Fj//+cYmJIfxwbP34sPQNjjtmD1QkDiwLOs1C/+Hux/5GHufdCq2LaE4H1qMR++cjE4jj8chO/bMcqTtMgJGwAgYASNgBIyAETACRsAIGAEjYASMwLoTmDt3LgYOHICSkhIMGzYMM2d+kZOI7FqUOMW5vWorwzlpbIn60bvvTXP2r7KAlWityfokINfW1qJPnz546IFHaNEqm9YwTjv1FAY0rp/G5s/jM/58wv6ef96Dl156mRqc6ktVVKkFKvqyTmYNMCJ73Ngx+PmRR7n5xzJpbAo0jVIbjPfRVZvrP6kap7ed6/Gp5XS8Ut0I4hv8V/mpefU7m7vS0iKy2s80cG9Aze1jpvJeO9mW7ljZULjbDO4uCaN+JbZSMA5RUNZcdREKnxGeeEXtCm2AmfI7/vP1f6WYO91dxG+89SbGn3yiwo9ZFSN7VSfFaFlHKNo4yjsWUUUpu6hnCro0MY5KEKag60RWRhurbJR9UDSyooIZWCz7Yue/zKuSQcg0muA++SSvKS1Hr779sWZNKWbOmIlh2w6nOMs3EY/3Oy8KXQMUHgO00uBBev/KrkMT8SkIOCL7Dt1doUCtSGtFCnM3KiprcMWll2L1mjXYbLPN3KMK7dq1Q4cOHVBeUYGa6mr3Rv3k009x3i/PRXl5BXr2pKDJuhIZ+WlZ4YR5CfQcIXvG/oiHBsUxqxNpkj4E9MiEUkheInXJy5O4/MADD+LII3++8UQkx6rw7h1X4aKyi3HC0bujIMPYvbF6y4olH+Kci8/G7XsfSxG5G2KVS3Hbr3+Fwmt2NhHZg2RLI2AEjIARMAJGwAgYASNgBIyAETACRqDFCXz11Vxss81wV+/w4cMxdepUpwc1ZWkhvUeWqM41ldG6TWlsifrRB//7H3bYYQfXjkRj76WAQ7207S21/vd/8Mn4X/zfemlscglgOClefuVVp33lMoeXhO3XXnuNQY5HSulKq7E5C1pqcDIjiMpVoCFJEGvqFRfGGo5ZnzW1lVqfJ8ql5q9PO9QWN1zygKW24A0kNX9DbLs+KFI3j3cuQlRRJaY6v2HuifHCD8uCQTIoRV2Jrn4/vY95sfz1hhvwxayZGDRooLu4R47ci8V44VAslfjrk3DL+ly0r0TREMVlicMSUCn0RpkX0x0Jis5RCslBRkLHXFsUn7lfx4UZHu+X7YT8jBkiHGYZSdw+XtyDBvVDWUU5evcuweKFy+hRMwtDtt7a2VlEJGTzjo/zb2abEUZDS8vW3EzftJcAACAASURBVHu6bHTzRN7MfuepTLGXYrkYBPICuP222ykMs95evdC1a1cccfgR2GHH7bmvAFG+QT/89GM8x2jg9u3buzdvt27d+QaujTNT3zguHz8kNLGfIrD1OIJ8laOMgHbTAtaNO5OIrC5Gvbs+fCOnSyeeOIFRyffj6KOP2miE5HZF9L/2F/D85X55+zibqVIB7wUoySmkIz942nsZ8Wz71wgYASNgBIyAETACRsAIGAEjYASMgBEwAi1GYA0DCxctWojjjjvW1dmzZw+nA8mbeOjQoVnbkd4TkO7FUpo/K5vGlqofqewnn3xSH4kssVbBhhKMvehjL88LQvSvp8amAE8/NbRjjz0W70+b5vqbboBScySnKWmMBx18kJvXzOWl0djcnGA6QhqXglJ5WN1L6z9ESuyy157XB28oXn6LLDekiNxUB72BJZbz8rRMTenyUsuk3fYzGjdMZdUvfwkKwBKCg/I6pjGKa5CRxRFF1PKiCDM0+MYbbmQY/wz079ff1bfXXnvh2GOOR01tJUVCytAUgGWBzAN4sbBK+SyzpghFUUq2TsV15hIUVnXHwomsrFczV1LLjVtWMGKXWjAjd3Wk7mqoHq1J5g6jH6OQFy5ajLVrVqNXrxIsW7YCX345C8MoJGu6P4Xiqz5OxefE44DGRPE5JLMXGdLwf1eGbSi8niHRmDP3K3z62afo27cvOnbqhF/+ciKKaWdRI0G4aq1js9MOO+G7b77F+7S66NKlC6Op2Ru+qWXFEZV3MwVrDoCCKW0rpFbrWIrTDoQLsaa4rR7yDZcpeVHH/OxISvrQuIU2G1568sl/Q5HJTd0F88prGdOHD5cFOZrBJx7bcut67IJPdmTogz4Ita8dhft0yV8nIocYFe5nlLjo/lApzi9Ifl6LYbAbaNeuPsPbYUsjYASMgBEwAkbACBgBI2AEjIARMAJGoJUTkIWDnrKXFuEF9anLW289FN27d6/v/d57j8Szzz6HKVNecHkSc2U5oUn3pM34FVHJJL2Hui6DDCVwSUZOr7Gl049222M3Bi4+hy233NLZWKgNvaQH6eWtq6/z58/HxPPPV0NUvuggsI4aW4yWtBFqV2PHjMOJ409w9TGkk9KZNDw9SU8tieOKcVCMAeV4KKFR3wsxWLSipkIleEyyxhZjQcU3M5ujVxApV9Y9qZrUpDzvlbjPy0tR1BKLbLj19Rtmy/TLA6BlakrN88qmK5datr5MgNGy7trmBaKTzBsQvCoo3BJ5hBe8Yn9lO6GL54a/3IDPZ3yOfhSQFeK+26674djjJSBTSA3kw58X9zNW2LGLIqaA6pcfcIiXlaJw2QvZZ0QYpRzQ5HeuF8ynQBxknjyMfT5eYowSlvYaYPtBP+t14c3yVmY/aK8R0xtVYm/HTnyjxNC9RwkF5VIKyV+pAe6nqMc+SxzP06g0DtarN1aQdUjIVXiy7oxIQJYFx1tvvYXOnTu7Hh16yCHo2L7QvUl9tJUQIx/L3X//ffzAmIL8PIbF6pLUhwMXitp2VbEdhlaTHW0ymC8bD4Z4u3KyqfGRRVOqp/ehpaX3qqqq5h2w45Ne2qfHGLKmWDUev+J4jL3mcbz9zF95fvIozubhwLP/hkWhhvdU7bJP8dsJI9yHnbujdOb1+HJ1w/5Zz/4R2x94Kb6pqsurq/ew3zyO+h7E1uDlv1+MYXlxkVz1XP7oF/XdKy4CZk97ACMLOyCPfTjkV//CsoQ+VHw3Fefs18Xt85WcgElPvFt/bOJKweo5uO/yg5BPr2qdy6sf+TBxd+P1bP3ivucmnVM/7sKdTsDkDxbU1xGrnI0LD/gZJj3zNib/+ZQ6fj48+vFKlM+dgoM7daRndh52OvZ6fF3WwKu+AlsxAkbACBgBI2AEjIARMAJGwAgYASNgBFolgRUrVuK9997DBRdMxOWXX4bf/OaK+tf48eOS+rzrrrvikkt+jV/96iL3uuyyS13Zb7/9FpqELylRz9IT/Zk0tmz6kQIWe/HpeC9tvvnm3qoLetR+aVd6Qj5XjS1KQUrzhDGaMq6pUb6QluaihKnD+anXRUK1qKysYqBcDcorK1HN9YrKalRWVKKyvAaV1VUo56u2itvUqEKRmowam591UhajbCYdj7peapRk/YjciqTBuDzYdH62cun2Jde4gbeo+LX6lAmS8r2XNwhvO3HJOw48rRTj5J6guyUyYgjISzhG7xZ5F3MpcfiWG2/BDArIusvSngKexNNXXn0FDz/8MMrKy5Lu2NQ3yItl/PixvCtzIiN2efGoDYm8EpT5H/VWd+EGaV0Rkkcy71HI1UIRy199NRuL5i+hkC05VsKvRG32lZt+RvoWtCtAh/ZF6FJSzHr9NDvvjuXLluOruX5sscVg+HlXxMcQYU0AKCMMv9plr8MUq3Upx+iz7CbC05XN8S9YuNBNpKfo4m1kXq5wWfZF17qfIvNTTzyJN998Ez169KBdBoVSvuuVX8h+yJ5Dns+y3pA9h96A8m6O0NrCr/YkjjPaOiaTZ00UyPYyJcdGfBLsLAoL21GsbFd/iCb7UzndfcqeQlj05VQ8+u8n8CgLXnz9zSj+Zgp+87ezMap9L8z861Hwl36K8UP2xuTQLvgnxdItaqfj7LETMfTpr/H1t//A5oU+lC+ejunvV6JMoi+3ZQ6y4KOpeNm/L2rYjwJKyY9ftCNG3/QdNp9wFZ47aTesnvkhyorqvCh4xMonzsbOTwCnXH4zDq38Dy6/YQLuPnR/XLYvPxwrZ+LkHQ/C5NgoPPjC+cif9yJGn3VDo6EV0dbkoUtG48kdx+PWv92Cd/5+Ba4aNwKd+i3GBXs3fMjWHyixO1O/Evad/ufHcNpuhXji9yfjuN0ewl3vr8Dpu3bjVVeF+f+bhpuO3AfoPh633X0L/nPrFRi7c/xu5KET/4ibuszCBb+7DDcdczhuGxv3S6pv31aMgBEwAkbACBgBI2AEjIARMAJGwAgYgVZJIMBgQelDMzjX1o477tDsPs6ZM8dFIytQzkvSe5yMJZsJSjbpNDZpVZn0I2k9ChqU9rSQOpW2u3Xr5ta9NpSnJLE2F41NgZiKcfQz4DLMyGOJXdLYnCuBNC8GA959z9146eWX02p7aisxyXJ27JgxOPyIw1mH1MFkjU2BlvIV8FG8ln1tpC5KmwUlKKW+vKoT8728xKX2t+q0MYjI6wuQEfYcpu5K0HaCwbqcyI4CqQRQXkgxiaU6Tdz/8Se0eujXj2JmIQVUTUwXcb7BmnROIfypyYuUfeutt3HChPEUVhnuTrFYt0oC7oKiUK0LnkJrhO+sIC8qH4XdCPf78wNYtmQFevTp5aKFpcNqwryoOkUhWF3W3YxAfh7fBHwnaHK8/Hx05xtr5apV2GIwxWL5InNfVOPiG8zFDLNdvhf5dmEd/LCIcgy6NxRlAxKPgxw7vRQYDetDjQRTHq8oZPVp9PFjMIF+xNKcFZqv8cQoIuvYat6N8XtRtRS6oxwXO87/67ho2BTjxdJFZjuoqcTi2+KmFNVdoSzJK5eliNuVr+hoCqDvfPgPjBzYnh05Fb1qhuP0f96HL397JMLP34bJa8rxwMdPY8KOxTzmJ3izRwi9fnohbnx6YpIwyhHUNyefY1QqsNqH6q8p+lJA7nDgHzHt/ktQovHtd1C8bKys/phJr3+D80ZtBtTuj//c/QI+nDkfoIj8xZS/uz48NusRHL81+4j9MHJYX/RlHxJTeSSMLc66G/+7/RR0YRtnH7czFvYbhd/f+gL+b+Sp6NDQPXdYtn5Vz33K9XnvK1/BXRf/zJXf/dn/YPmAPXHxX5/B2MdYH3PVZs9j/ogPHrwEAyig7xmejsd/cTcue/hTXDd2e45lJl7+6+NYvJIwLBkBI2AEjIARMAJGwAgYASNgBIyAETACGwUBRfWOGTMWTz/9NGbPns2J4o5wmldTnZce8/rrb3Cyvf/isMMO49P6/eoPcSIyVScFLQaoRaXT2PxO2+IhafQjCcSekKxK1ZaXl7odYhs5aWx8+j/Cp+yp6LoAUqdnUWOTBkgFi1VEXJCo9L1cJ9Z7/XVOrHfUEQxMbayx+Zy+x+bYYUl2fkWUxsVjLTfZpPFu8olyKy9uiqsUPnl58yVhlHcM5FwiEZbXpITYgw46CDM+n8GTL2MLRS/zSuC+Aoq3XpJUK/1Q8qeE244dO2Lk3iMpwvJCZX6QPiuRPIq2igLmm4VT0nGpqGdetnzpWBdxTEPkLTbbAqVlq1kT+6CpLSnaRhUqTYHXx3pkThEJMXy+fZDHcAzsT4hR1f379Hf9Uy/URfkSS/RWB/TmcEvmRzWhHi9k2WhoXY8CVJRXYDV9lisra9iMPGBUi46KoioUcfYRMQnPFKBVtauRUdDsOtvXgwoUs2k6HJbIHAmxy+wrhWa94X1++TGzp26crDhD8sRhb5mhmPsgybSvUf5uozBCArKSryN23ucA4OnlbrOWY0bxEdh5605uW//03GVfHNSxXc7CaGXpKnfsieMOjwvI9TU1rAQPvgOn7rtZPCPspjmMBzUzp2IV+8I+bDOwsP6Aws4N/anP5MqeO+7kBGTl+bsOx9E/7Y73+WiFrlydkcSUrV/evpOO3KnhkMIB2H2fTnjw+/nUx2NORNbOAw48yAnIWg/H4rxOPnI7bTIjPpb4hv1rBIyAETACRsAIGAEjYASMgBEwAkbACGwsBIYO3ZpP3J/r/I5vv/0OTjB3DAYNGpSx+6WlpXjiickumPCss36Bnj17JpWViEwXVopOCmVMr7HJ5jWTfqTKPOFY656grKWXvP25amxhPqkfVBCk9AvqVYkaW4waW5CBo8ccw4n1OP9XYjtee6lLjfFgaoRRTWbmAi2TNTY5HgQVkEm9zEctLqxybSC1CRHZT5XYyaSyXqBw6uMdkShPtu6MUOdl4iR3fE044QQ8ROuKGZxUr7BdId8w1Rix6whG6B5P7U4+J6qH/0lQlXBKcZb/01c45HxTeF1SIQ5SWNVdDkYJ864HtWleVDGEeKzKxtQuK1DEcZ9BfTHQP8BF/kqsVfg73ZBd+biMHcW87xfSl6UC7fnogLxaOnftjF59etLgu5aRwZR59USB1Gte1WEdL1WYfZVw7rw1GNIc0zjZl802G8RZMD91b5j/vvdf7LfvvojRwNxNz0cLCo+RopW9vvr4xvC5yGHWyXz5PKufPt7FiZAZJeS6Dw9x4V0evlmD8Tsw7FP65InHLRWJrFaC0RqKnxT8hYKJo3dJBude0pyDqNdw8yDriMxv84ZHNbzjtWzHyPDmJM9i2TsmsQ+cvs7LTlpW1DQWbQOxemfmpLLeRrp++bJ1dVEVb0h4R1PkTtMmL40EXg1lbc0IGAEjYASMgBEwAkbACBgBI2AEjIAR2HgIFBUVYdy4sfj444+dZesll1ySMSL3gQcewMCBA3HwwQe7OZ3SjVJBlYqBdBG5aTS2bPpRgyYUV2RSRV1PQHbt5qixSQSKUgMJSFXjus85BQSQR1FOwZjSr8aOHo0TTjhRO53OFWMwJ+UzBnzSekN5DDJ18Z0cj0SxGk36xwBMBXSmamyshMGkIecoEKZAzerbRGoTw5SASmmTJ5RCKe8S6H6In1e7fIcjNE3hbhf5G6IYPG7cCdh2+Daoon2DJpd7mX4pt066FeVla7GWvsil5eV8MZq3ci3K1q7F6rJyVIeqKeSyXl5oYYqrak0XnjxiJMKyNeRFmUtPGF6b7AUFZorMNbXVqKigiTfbkrl3VSXronBdXVONqppaitmzsHL5Ek4Ul88I4ip06twBfXgHKKTIY45Gk9qFOKEfr9r4xc72ohoMhV69ESQE+/XuceOOYI8993Qewwrfn/zYZNppLOebge8y3jHxGOnwxYuW4pzzzsXEc3/J/lXWM/LzjSHRWLqshHj3JuFC4/G521Dk6+5IsT9cZkreB4Q8kTO9dKxXLlM92fK/mf46BXZOCueUfZas+haLy9nZulQ+7xNnL9GhIK60hmrj+zybn+p57+C5V1Z4xVHACeaUHvj366hoqKZ+f1Mrrn72YXlCH76dPT3tYbFE9bfqO7z631Xos3lvCuRiGnbXCE+1S9n6lZcXF6nf/mh+XWkuYqsxe2olgtsMRDEf97BkBIyAETACRsAIGAEjYASMgBEwAkbACLQNArKlkNaSSbORgFtOzWvo0KGZBWRqE34GaUocyqSxZdOPRNoTkrWu/iQKx54WpGWuGpuewFdgZISBlRK3JU9r3i4lSSlR/lNVSz2FulsVda4qanEV1WWopK4nTa6Kk+mVU4tbu5b5nFSvqqwK4ZpwRo1NgaASxWR1kcdAyzw+ld8WUpuIRI5p5jmeVD8F13Cdn4qsJSTE8WYDTz1F2SijUrmvmvYRujvz0COP4LNPp6Njp0548+23qLNGcMZpZ/DCZlkKprEgj+YxMXoChygQK/pWArGuVJV1wcEUiuVLHGAkcpj/uShhia18Uzo7DUZ6qs0AC0dYX4z11PIKLKAo/OXXc7CGFgo9e5SgvKoMndiPfr37oIYWElGOQ1K4s49gkxG9Q+T7QgsNqsQcD6VeWk7EFAbNthXxG6CAPYAfFjvssAM+//xzDhy49IrLMGb08dhr5N6MdG6H6nAt3nr5LTzyxKPsC++zsK5PWXaPPfbkmzrkGMXySIsDlT2He6NTPBdDtSEfGL1HY4pedoJn+reQ92HhLdOXUp0CmlsKv3g2Tr2yI/5wxigs/+A+5wW877X3Yit6/EaPOhNDz90Px518OV6YdCZKamfj96POATrsg/OOiVs2DBxGg/nSy3D7P5/B0QMW4KxjJ2IWxfpuRU6CR6ctj8ADZw7EiXeejTGDC/CHCXuics4H+MK/C04/tD9q3cnP3Net9/wZQ9Yfw34/vwDP3nAMFr81CWf87slGByg6evKFJ+KW/n/HcTt3wfM3XIqXyqrx4JkHubjlVR/dhW67nI2jb/0AT547Ah2y9usw3HBgH1x07onYq/89OGjrIrz5j4mYtGQVfnPWgY38lRt1xjKMgBEwAkbACBgBI2AEjIARMAJGwAgYgU2GwCeffIJtttnW2bimG5TsXXflE/n//e97GDx4cLoiTu/xAicjTlSj7pJGY8usH8nKVYJvPDzOE5E9DUjb3qslNDZJY76CIO695x68ykDRpp6K16ADwQBGHzcaRxxBT2RuN9bY4rausVgt68ujxhcXrNMC24Qy24iIzDPGC1SeKAH6E9Oh2ImrmhROIe2K2FXYsE/2EBR1ayimnjB2vBNHP/tsOvr27etC/mOnyaJCbw4KqrrjoNkmqZwGqJxyj3PU1oXuoxAYpKgq8VoRwfyXb1BGvPLK8/PCCrsGWU6+zGG+2CfZWMiXOCCrCNa9Zs0qdO3WHbXVIXTu2AW9+vWhbUatO0bmGwq7V4SzX/1mPYro5YZ7o3F6Pnods2EmP/Okm8thWcLw2LFjsWz5MgrPFIKrgvjnP+/BHXfc6fySKysrUVDQjjNkliC/oIACdk9+eOxCmwhOyKfK6hjJfpkB3bQDYR8olPtkoaF22PcYP0CCjJDOJiKLkVLdwq2n+8crl25fo7z8bVE99QwMuZZR4UwjL7wbT172U7fu7/FTvP3REzhx5DjsOfRPLq/djuPx0sO3YETXOKfeI47C5fvfiOvOPwqTWOKye57CKW+eheuqC1xkOXztMGHSe6gqPAW/uO40PH+dqwZn3f+JWyngJHxFgUR7irhdRmFdpHPXnU/Cf+79Ej855a847KdsoefpePjBP2PchF+jgLOEekmT3B125ig8MXofTKzmnQCm65+ciRO2LXbrPkalK3Wvqzdrv3ydccFT7yDyizE48+AR7jj9c9XD/8NvDt+8flvCdUmneES2Mn0FnG4vL/EuWnws7ROHV3+0rRgBI2AEjIARMAJGwAgYASNgBIyAETACrZ2ARNrPPvsMo2nroCTN5Z133sG7706lZ3I/HH300dCT67vuuitF5JuxfPlylJSUNBqW03v01D11p6Y0tnT6kfqhtj3NJ92yPo9y0/pqbNLiNPfXa6+8yvEVUbuSlsV660fmRMGkrTCtLN548w0czokI/dS90mls0uL81Oac3haXuerr2FRXGphlHmFiGW89dRlX4uLnQPu8l/K9dS217eV56+mWUrCUr2XquhQ3b5/WvTKpS6/M8HnfLrgilkehlpG+vNXBaGSZWyjKlUIwI2n9vJhi9A6W0KzkvI55IRRyQr3JT/0bH334Ifbaa0/sd9DP4KvmlcEoWwX95lEwjbG+KK8+NRZhfkzCMu9CBCk0h/WG0vCllqoso5Jj8lKmuBxw0cMSdyX80pFZ7ywKylJ8g+zf4iXLUL6mFJ26FqNfz34IRWrcnR3VFaVYG6W1RJAXrFwlXF08XFYT4SjvfjBf4nSMd07kZyy5OcZj2BH+p1J+PPXvyfjk009RS9uMCPujN7G8bIL0s5CNx44774zjjjnKdb2WHw7pGLFSJy5r3BqfjwJoYacifPnZLIzYY1cK0o1VRxm033vvffjlL88X6qzpllsm4ZRTTkZxcVxATVs4VoY7jhuGK/xXY8njp6Jm9WoyDaJLl7j9RNIxsWpOKljFrCA6cb8umOQUxmoej2AXdOnYIOwml6EzRlkZJXme//yOaNd4iKnFk7ZDnEhxTXUY7buUoEOaJmRn0q5dO0Zzs6+ry5DfsQRF7ZKqyLiRrV/xfZycMa9LzvVlbMh2GAEjYASMgBEwAkbACBgBI2AEjIARMAIbFYE5c+bgxRdfxPnnn0/7hipMnjwZ8+cv4NPne7gn1qULjRkzGr1798YzzzzLIEo/DjvssEZjrKmpwfsfTsM2W2+LSukjOWhsifrR22+9gc6dO6Nr1660aA1B9SloMvG1cuVKrFq1Cqefefp6a2wMBaVOFsQz/34K73/wPrU/DkkKpUtxnUx6mdQyacGUt6iPAQcddDB+8tO93dP4mTQ2+SEzpJLCdBT9Bwy8lofP5EvBy2pFy3QvSUpeGW/d2/bKe8drmeml7nr7tO69lOete0tmubJaKk8pdZmY5wqk/pNGxkotsvFvy3JCOm6EYrEEYFlBSEiMUfxVxHCUFzyVXe7SRcM7DNynye9qeBEfz9kbxzB6t7a2BjX0LY7yTaR9ivCNqFLWEchTbDBrpLdwhOpygEJwlBeor05gligtrVt+LH4KsqwAYXr1yog8KEFa0cgqoz6oTgrMfXv3Q16/AQixz/JHZnNugjz1XIkaN/Vw1smxcY9rX8bhVI5duxqJn0K2xijvFx2nf2PcT20Z48ZPwL6j9sWHH32MBd9/j0p+gBR1LOLdp/7YeaedOftmCWoYBR2hSh3kwekYyVJXIxOPCDsokVxe07EmIpH1YXXttXWhvDw+UwoGc7s8q8ujWEPP6hr2o1OXLpmqI4B2FJezKbISnxvfZUutsLBjGoE6tVCG7TxGlZdkOVwCspIv2A5dS7L1tXED2fqVbV/jmizHCBgBI2AEjIARMAJGwAgYASNgBIyAEdiUCCxYsNBpPosWLcKjjz5G/aMzzj77bLccOXIvvPbaa3xa/Z9uQr0tt9wCb7/9dtrhx588l8KkCN3cNLZE/UiVrlixAkuXLnU2qrJS1UuCsreupZK/BTQ2dtF5F48dPQbjJ5xA3Y0aHPMkFErTchtSjvXIvWxpuaoH7qUDVlfKiUDaV3qNzUftz89jZU/bFlJuKt1GTkK2Dz5F6FJAlWlEgF7GEuAlrkZk0SAPXyqrCkSW2CpRVM7CUV45MRpsh6rKGVlMcVQXk/cm4UUlwTdCK4AQxWOXz/qp4PI6lHUEI455kekycm4PbEMRxE5slVgcYgVUZ0MSoXk0FWJpx/RNZnkdE61EdRXbl9gcZt94V0Oh8po1MkivXqrYzOOSIniIbUkHl6Atn+SYRGkeF5F3M8sEeQvFz/FLvw6wf+GaGGSboA+Mwzjbpl9iLcsovJ9ByfGJ/cprWGFujPIYRR1l/XFG9F8WU/eOZBUpScKwPKflfRPQLH4Zkre/aSE5D9sffSourt2mbuK5DBVathEwAkbACBgBI2AEjIARMAJGwAgYASNgBNooge233w4PPvgg5s79mtHHu2PkyJH12k0+n8Q/5JBDsPXWW+OFF150kcqjRo1KS0p6j4vWpZZFmalZGpv0o5H7/CRBY5MGRoGWmpbT2BTwSXHOBX+2kMamoEifL4Sy8tq4xhaiFpWosUmEcxpbXR9kWyu5ioOTJW1TGltUYptU8jaQ2oSI7ARkjjRGsTfAEyv/4DAFYUXYKqQ3Ig2V+2QlIUdiXSiynfApcpmh6TIWdzckeCExNtdFD0uRDVF4zWMlMb6BonwH6e1DbZb16Q3FKGcez9hjVqu7GXxTcCI9N9kd25C4G3D2FSyvJllGjhayp5DlhkTtGN9FmnRPZuSanE+CsV/iLKuTEbj6FOQ/PtrZyrZC+T5GJ1MKZoW0LnAZLBuS1zLLurGxHr4b2GtIV68KVToxnR1QAR7G/oqRoqXXgZGE7JD6miHJ4qJ79+7u7lKGIvXZEpDTWWLUF9AKo4v3+78/YL+kTNswAkbACBgBI2AEjIARMAJGwAgYASNgBIyAEfAIdOvWDRMnTvQ20y4333xznHvuOWn3JWVSY5JvseYNM40trrEl8dlEN9qEiOw8iykcS9v0hzSZXlzkldjrZ6ZE5iiFVVk/yF84FlAkseKDaVNBIVjCbaSWAi5FXd0ZiSpPtyUoMCsKWbdMgopydg1Q5GWej3VQJnZt+qgMRxliHOQyzPoVQBwXaSXzUmZW/VKPKURroj/aKjtLCp88K5giEarPvvipilFx9lG4lukG1WWKzlKtJfqqHD2K2b+Y7rKoPlYU5TJAMTgkQTpEsZvlpGa7w6gaS1z2sd/uzk8LMAIdGBT6Ly+ddEnCcNPRxemOtDwjYASMgBEwAkbAVtyAxAAAIABJREFUCBgBI2AEjIARMAJGwAgYgR+TgJtTix3Q0/cx09jqNbYf85z8UG1LUtzkkyJwfc6fhOIuBVvNIKnZFX0UgaV4SkyWgMxCFFklflLI1aYieqndOoFVWxKRdZeF6047VoQwLSOY6/yR5ZEsOVbCbMzF9ksSZlwwt/2MOlZscB5L+FlA/2kiO0UgS+/1s5CE6zzVoWO57WdEslKAE/XpRMlOw0eriGiI/aNg7IuG2E/ZYVCkpj2G05yDPJalqQfLIYPjlD+L6grS7FyCOXvLIppaULNoOq2XY2oxRuQWzM/DWk6g582mqTFYMgJGwAgYASNgBIyAETACRsAIGAEjYASMgBHYeAlI5ykrXcsn9PMpOpnGlqixbbxnNfeet4lI5AhDfyUNSwAG/YQ1sZzsJXTxK1I3qNBZrlOldSKyfIFZktvUcsMSYUOIcvI8arjOtzjGCvw0+Y46fxYKyW42RjDaVxYZPFIRzVR0FbEcpUdFHsXgsCwuKAxHqOCqPoYL00KDEcGahI7HyKY5Jj9lFwHNfkkwZpkwrSjygoyepk0FO6qquVS/abPBCOKo1iUJs38Mi3YRzuq4oqYVnczMePRzkBHL9H2J5UmYluzN6GSKyioUYJ8knrcEoyjH1LFTJ3w7f74aRzFn3MzmfewK2T9GwAgYASNgBIyAETACRsAIGAEjYASMgBEwAq2WgOauKi0rxbz536GouCMDIqkvUUAzjS2usbXaE9eCHWsTIrK7MyAbCYrF8s+OUYDNo/iqyOEAI3WjvOgZ2CvzCRcVLAFYxtmKCFZUcZTbTkCWKkvxOEgRmP868TgqYZiT2CmEn3Iz9dm4qBtlqHKQArKsJFgLj6dAzKhkP+/UhBlJ7KegHWEksmwnZIOhSemi7GOMpt1R9inA8nQyVrwyRWB1WmberF9SLwVwhR2rbIQDUkSxxGVp2jHVwY0YRWGJzDrWrwhkashqW5HPLoyaZeXR7KPNRphjDbJOcVpfRlU1YfTs3hMrli3FV3O/cR8oYkQlnYzEpI4RO+smCXRiN2VwiuRRiegcoaLEIxyrIrYjTkwXI2rn7KMipzU2nxiRCc8kM5TnFH9yaGCkGG0/Bx4J5zlGPu6L0eJDdUXJwS9GvAY8RtyMnwOeTzHyUfh3S+IP0zIk3n6cUYSFZS2i60ge0AGefYV+R3TOeZ65y0WpN1xH7LvGojOoc0Dz7CCvFXcd6ZoxRnyvGSO7juy9Zp9H9pltf9fsb799P7LvR3rS0b5D2vds+y1iv9f0u99+09rv/tamjVC9QtfiYpRQ96mqqjCNLUFja0GtttVW1SZEZBdlTKFOIl+Ms9BJvHM2DlSO/fQuDlP4C9J3OMJI3yDFwzCFQUXnxvxByYFOeGUwMCewi4uAEioDFJPlUxxgnsTEiMRQRTbzY17GFRJCnaBJmwnZWFDzpajICfrYjQBtMHwUQGUxQcWRE/SpbyxDUdjnrC4oNFLgZawwFVX2iWsSueOT/bEFlldZtkB/YfbXCazcphDLbvAuUAQhisvON1n6M0XzML2IqeJSTKYsLdNlibZsltXwH74Uie36sX6MonlhVFVH0L1nD/Tq3Zv9ZAdcvRoPI6TdUCWlcoUv2YtwB//n+Lkq0VzlNEaXJK7y/yj755c4Tq4qqP90ErnltikP19UoUGLEfI1LdTnuPN6VUQtMrF+iveuH6mP9MQncFO9d3a6jPELtslSUZVyWDmWrijCXAO1GwX/8qk9l2CfPk9rNAKqbBE7YVlntZ4sOiTd2Hqz9xsidC2Nk15G91+zzyD6z9YeGfy/c3yz9leLfCPu75pjY3359d7DvR+67m75V8X2iL4L2HZLXBP+379n2Pdt+i/AaiL8d7Pea/aZ135/sd/+G+Q6pZ9ujfAq+oqqcupKerjeNzdPYiGaTT21CRHYh9hQSnaUEI4b1TStMIY9asYtK1XaUgjEYkSvNkmqg+zIWj1KloEwriBB3+3SQPo4o+vkZSUtt1omC7mubIlIlP/JYaYLUpilSsgBFaxcNy/IxRp/69JdNkcX8URiliusm86MQTCWbYjOjWGsZGUyRWc8DSNhUfoSRxOp1HkvEnFjN4/lmVcSyjwI2j3bHRll3lNuaNE9BtE7o5B4p1bLO0Jds9V/99rEe9sCJpOIgX2ZW3iKMJF5HyispklNcZ5P6ISxGETYkkVC2HuIQoLWI+i5GPkUMUy731TGS+Kwfi5zzkCIs+0oVXwI45wZ0UdoxRQuzZo8Rw8LrGEm0laCv43ljQEI/O6HanUDNdnWONHtokMq+06gVpu3OifqjVrnJH2k+XhN+RZDXCckeoxjHIe6MEXF33eQUonPuWtD5cddAvC52S92k0M+4ch6nTUVdi4ef7RsjcjRGdh3Ze80+j+wzm3ZT9nfN/vbb9yP7fqTfEfYd0r5n228R+71mv2ntd//Goo3w75ZpbPUaG4WeTT5JzWoq6VeNl7z1bEvtW9+XpFzVoWXqerptr1zi0ju+xwUTf/kTeQcH5PdAGU9RvbI2iOpHK7PcRHYUBCUY+ly0j+RVTZCn+B9F7FJapMAqWwhNgBdlJK8akpgo6dIJjxQag7KOcGIsI1Xlv8zIVj9FUZd0jMRaiiWuPCNqVSYglZSCZZjHuw7LO1leyhLWFJ0sMVPbqsQJ3WqRFbG8jBPUnDpD92QnbitARX7IKu9zocasVfVwXYKuuhWLhzWz3rggLlsNHuL8lY2RMdJNEruOdFPJ3mt++zyyz2z7u2Z/++37kX0/su+Q9j3bfovY7zX7TWu/+00bMf3I9KMmNbZJkya9QyluOV+S6rK9JNl5+xPXvbxcl6ymvh6te0nHp0uZ8tOVTZvXJkTk886/4CfOCkHxqPxBrFBzf13EcIQCq7MgUD7XZT1BKdg9IufiZmVxIP8BZ3XAqOC4ussvEuRJ/VeTxsnv2EUtsxj1ZhcJK3lXzgtSZxUN6x4xU5tqTxYaFHK5xd0UkClMM4aY7UoKVqv6niKlu+6cOQFbsraEcPaBdSj0ldWxCNumOqzHl1w/JRxLMFeeJuRTPYxoUOS0n9G98uX1M08ysyKf5YEcdpeRBHBG0TLXGBkj/oW068jea/Z5ZJ/Z7qkd+7tmf/vt+5F9P7LvkPY928/fT/ZbxH6v2W9a+91v2ojpR6YfZdbYbpl06yYvIis0d5NP99x91yY/RhugETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGYEMQ4G31JlNiGW89dUkp3iXlJ76Un7rt5WmZ6aUIae3TMnVdwre3T+temdSlV2Y4PW2vYDlLRsAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAisB4EFCxagqqoKXbt25RPukt9+nFRaWopIJIKBAwciGPxx42Q56e+1pDCTLxnUyptAy3Qv+d56Zbx1b9sr7x2vZaaXfAW8fVr3Xsrz1r0ls1xZLZWnlLpMzHMFUv/58c50ak9s2wgYASNgBIyAETACRsAIGAEjYASMgBEwAkbACBiBVk2gX79+KCwsxKpVqxCNSrP8cVJxcbGzmZ03bx7CYemxljYkARORNyRdq9sIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAhsYgRMSN7ETmgOwzEROQdIVsQIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAgYgQYCJiQ3sGgLayYit4WzbGM0AkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACLUzAhOQWBtqKqzMRuRWfHOuaETACRsAIGAEjYASMgBEwAkbACBgBI2AEjIARaM0ETEhuzWen5fpmInLLsbSajIARMAJGwAgYASNgBIyAETACRsAIGAEjYASMQJsjYELypn/KTUTe9M+xjdAIGAEjYASMgBEwAkbACBgBI2AEjIARMAJGwAhsUAImJG9QvD965SYi/+inwDpgBIyAETACRsAIGAEjYASMgBEwAkbACBgBI2AENn4CJiRv/Ocw0wiCmXZYvhEwAkbACBgBI2AEjIARMAJGwAgYASNgBIyAETACRqA5BCQkL1iwAKtWrULXrl3h97dMDGvF8jl49unn8fGcxWjfqRd23u9QHLDn1miXoXPFxcUoLS3FvHnzMHDgQASDJoNmQJVTti+HUollvPXUpXc1KD/xpfzUbS9Py0yvQN0+LVPXdcZ1nPK17pVJXXplhsdisStYzpIRMAJGwAgYASNgBIyAETACRsAIGAEjYASMgBEwAj8AAQnJVVVVLSIkf/P2PfjTw+836rWvy+64/LcnY0B7T6psVMQJyZFIZIMKyT6f71q2PJOvCF/RuqXWU1/hhDLeeuox3vFaZnrFEvZp3XupvLfuLZnl6tFSeUqpy8Q8VyD1HwmtloyAEdjICTzy+bMb3QjmrPwWny6dtdH12zpsBIyAETACRsAIGAEjYASMgBEwAkbACDRNoKWsLRb/9956AXnzn47Bb6/9M2668VqcfdyuiK2ehj/8+i6sjHmaaON+KSI5EAi4iORwWLqtpXUhYCLyulCzY4xAKyLwxfK5+G7lPLz57XutqFfZu7K2tgJvzv8vvlu7IHtB22sEjIARMAJGwAgYASNgBIyAETACRsAIbLQE1ldIjq6Zjr8+EI9APuCsP+CScfuib/ditO/QHdvvfxquPnNf+EMf4Y8Pfp6VkQnJWfHktNNE5JwwWSEj0HoJfLv6e9e5D77/EPPXLm69HU3o2VOzX4RuEpZWlybk2qoRMAJGwAgYASNgBIyAETACRsAIGAEjsKkRWB8h+av3XkA5BYT87SbgmB16ODTz5nwDL5641w5H4OAB7dA9WIXqJsCZkNwEoCZ2m4jcBCDbbQRaO4FlFctdF6MUZR+f/nRr7y6mfP0GqsI1rp81kdpW31/roBEwAkbACBgBI2AEjIARMAJGwAgYASOwfgTWVUiO1inDP9t/B9eBJR/ci+tu+BP+9MT0eId87XHkFbfg0nG7uQn2yuZ/hMee/iSjoGxC8rqfRxOR152dHWkEWgWB0qqy+n7U0tvn3k8eq99ubSvyQU6Mlo5m8SxqbX23/hgBI2AEjIARMAJGwAgYASNgBIyAETAC605gnYTkWMg1WFZV6Za9RozG2F264vvXbsc1j3xcH5Hs9Wrqg/fijRfvxHOzy72sRksTkhshySnDROScMFkhI9B6CVTVViV1bknpslbpj+z5ICd1lhs2uV4qEds2AkbACBgBI2AEjIARMAJGwAgYASOwaRJorpA8ZNQxKPL58M6jU7CoUpPnhbG2LC4oz5v6IZbXxifUiyyfjsn/mYeDfnUljj3mdPxsqw5ZAZqQnBVP2p3BtLmWaQSMwEZBQJPqpUvyR96y2yD079Q73e4fJc/zQU5tfGH5YuzQc2hqtm0bASNgBIyAETACRsAIGAEjYASMgBEwApsgAQnJCxYswKpVq9C1a1f4/ZljXP2dh+Hyc/bH5be9iqsu+gaDS1Zj7tIQou12x3V/ORkl+T5IQL7yyjuwkk87R7vegOMPGJETNQnJpaWlmDdvHgYOHIhg0GTSbOAyn6VsR9k+I2AEWgUBb1K91M60Nn/kRB/k1L6Wh+J3EFPzbdsIGAEjYASMgBEwAkbACBgBI2AEjIAR2DQJNCciudu2x+Kvvx6DYHRZVgG5+64TcMQ2RfXAorTAsMn26nGs94pJ7OuN0CowAj8eAW9SvXQ98PyRT9lxdLrdP1heqg9yasMVtRWpWbZtBIyAETACRsAIGAEjYASMgBEwAkbACGziBJoTkdxxi31x+42DMXnyVIwce3yjCOQiCshXnzYSPkYlX3/Dq+g1JA8fTJuJwHan4tZzdstK0iKSs+Kp32mRyPUobMUIbHwEVlWsytrpH9sfOZMPcmKnayPhxE1bNwJGwAgYASNgBIyAETACRsAIGAEjYATaCIHmRCT7OvTDcSeNRu8UCwsJyH+igKxI2WD3nuiwdi7eo4AcCgzGBSfvmhNJ80huGpOJyE0zshJGoNUSULRxU0n+yPPXLm6q2AbZn8kHObUxRStbMgJGwAgYASNgBIyAETACRsAIGAEjYATaHoHmCMmi44utxE2/+5vzQE4UkBFbi6ev+z1mRKIOoj/yFd798OucgZqQnB2VicjZ+dheI9BqCfxv0Wc59e3H8kfO5oOc2vHlVStTs2zbCBgBI2AEjIARMAJGwAgYASNgBIyAEWgjBJojJMd83XDeleMwZNexuLYuAlkC8jPXXYYXvg8jGhyG3914K849sB/effRhzK+NOYpLPnkQ5149GWs4AV+mZEJyJjKAiciZ2dgeI9CqCXy/ZlHO/VPE8l0fPZRz+fUt2JQPcmr9y6tWp2bZthEwAkbACBgBI2AEjIARMAJGwAgYASPQhgg0R0gu6L03LjxtH7RzfEJ44abL6wXkK/9yPvp0yMe2R1+Jm2/8LfrT/mLJJ4/id3e+i9CiV/H8h8uzUjUhOT0eE5HTc7FcI9DqCaysyu6HnDqAFWWrMGXOG6nZLb6diw9yaqOrmjmW1ONt2wgYASNgBIyAETACRsAIGAEjYASMgBHY+Ak0R0j2Rhtd/hGemR1yEcgSkAe093m70L4QdQLymy5v5/GX44QRPer3Z1oxIbkxGXlOWzICRmAjJFBWtbbZvZ6xeCY26zIAw0q2bPaxuR6Qqw9yYn2haNPezonlbd0IGAEjYASMgBEwAkbACBiBtkVgZVUpnmVQzJLyZSirKWtbg99ERtuxoCN6FfXAEVuNQrfC4k1kVDaMDUFAQvKCBQuwatUqdO3aFX5/9hhYX/uu6ObzYXmwEzpRNE5M8QjkuIC8z0mXY+yeAxN3Z12XkFxaWop58+Zh4MCBCAbbtozatkef9VKxnUagdRPIZVK91BHIH/nF2a+ib6eeKOYf8JZOzfFBTmxbdkSKYO6U3yEx29aNgBEwAkbACBgBI2AEjIARMAKQgDzp/fvh8/uQ5w+gY7uW/y1jmDc8gWg0gnml83HrB/fjvF1PMiF5wyPfqFtojpDs67AVzv/FPrSreBMXXxDEX246AZ0pKicKyEAQ/ft3S2ZCH+WXHvsfdh89ypVP3hnfMiG5gUp2Kb+hnK0ZASPQigjkOqleui5LfH58xrPpdq1XXnN9kFMb+2b196lZtm0EjIARMAJGwAgYASNgBIyAEWAE8uugHoSCYD4jEgNGZCMloHNXECxwvdc5tWQEmiLQHGuLXjuOwQ1XX4RLfnN0IwF5twOPxCB/FA9ecxHe/KY83mysEs/edBmeevNxXHnH1KxdMWuLOB4TkbNeJrbTCLROAs2ZVC/dCFraH3ldfJBT+/Xd2gWpWbZtBIyAETACRsAIGAEjYASMgBHAvDULkB/MMxKbCIG8QJC2JNknNttEhmrDaAECzRGSi3pthS27d8DiDx50UclqXh7Ipx59MC7543noxacZHv3TJfjPl9/jxdsuw5TZYUQDgzHxhL2a7KkJyYCJyE1eJlbACLQ+As2dVC/dCOSP/MXyuel2NTtvXXyQUxupCNXdDUzdYdtGwAgYASNgBIyAETACRsAItGkCtZFaRiKbfLGpXASKSDZf603lbP4w42iOkKwedew1CHpmQQLy//0k7oHs7zwMv/vjhRicH8VDN12Lp2dUOwH5sr9chC2KGybiyzaiti4k26dwtqvD9hmBVkqgb8fe690zzx+5dD0npVhXH+TUAfRq3/TsqKnH2LYRMAJGwAgYASNgBIyAETACRsAIGAEjsOkTaI6QXDRgb9x80031ArJHx1/cD8M2y3ebikCWgLx5h9wEZK+Otiwk28R63lVgSyOwERE4lLPZKk1fNHO9ei1/5MlfTEHndZwZ189ogKUVy8AZLtarH4O7DMJ+g5p+fGS9GrGD15vA2u8+w7Q5q5HPv7mxUB6G7rknejXzD+56dyJLBeVLv8D/pi+Dj086qn+D2b9+afrX2seRZYi2ywgYASNgBIyAETACRsAIGAEj0GYJSEhesGABVq1aha5du9IjPbMWkd++fTIn54F8cb2FRaKAXD1/Gp7+qjvGjNoy+ZgMWxKSS0tLMW/ePAwcOBDBYNuQV9vGKDOcdMs2AhszgZYQkgMBP1ZXrkZVpGqdUOgDW0IyYtF1FpJNQF4n9D/KQXPf+gf++UKDd9mRfbbDuOGtZ2bsOS/ejr/l0L/WPo4f5eRao0bACBgBI2AEjIARMAJGwAgYgY2AQHOEZG84vthKPHPTb9MKyDXLp+GKa+9DeSyG/B7X4+htuniHZV2mCslZC28iOzNL9pvIAG0YRmBTJiAh+efDD4aP/zU3OQG47q5dVN4W65AkIMvPihLyOiUTkNcJ2492UF5+cVLbre0uZK79y7Vc0mBtwwgYASNgBIyAETACRsAIGAEjYARaBYHmWFuow9UrvsJLdZPoJUYgS0C+/Mq4gNx/n1/giBwFZA9CorWFl7cpL1ubBrAps7axGYENQmBYyZbA8IPw7MyXEON/uSQ/ZyTVy0uRSITbzfs4UFsSkJWCgQAikRAnu8i9DhOQPfq2NAJGwAgYASNgBIyAETACRsAIGAEjYASaQ6A5EckFJbvjz1d3xZK8wfUeyGXfT8NV1zUIyL8Zu1N989GqSvgLU+ww6vcmr3gRycm5m+aWRSJvmufVRtXGCEhIPoJCci4RyZKOFYXs8yWIyNFws4n5E47XwYFAHqKxSE71mICcEyYrZASMgBEwAkbACBgBI2AEjIARMAJGwAhkINCciOSiXlthy25xHUT2Fn+//n5nYaEI5EQBObL8I1x8wYW4/eVZCa2G8Nl7n6I6ISdxVUJyW0gmIreFs2xjbBMEchGS9XEZzEsWkD04zbW0CKSJXA4GgojJHzljisEE5IxwbIcRMAJGwAgYASNgBIyAETACRsAIGAEj0AwCzRGSvWorv/kYX0WiiBaOxMQxDRHIEpCvvPIuJy5/s2BlvWj88WN/xB33/Q0X3/6uV0WbXJqI3CZPuw16UyUgIXn8TscgP8PMoIGg7CfSv+1laZFrSrSySD3GR5/k9EJyDKMG7IX9Bu2VeohtGwEjYASMgBEwAkbACBgBI2AEjIARMAJGYJ0INFdILuw3EN30dHUsjHCdLWj54mn4NQXklZxgr2SvU3HDaSPRjr356OHf4+9vLAR8nTDuiB3WqX+bykHp1aRNZXQ2DiPQBgn079Qbp484oZGQHAikj0D2EEWaYWmRamXh1aGlvJad00VSRHJcQN6q22aJRW3dCBgBI2AEjIARMAJGwAgYASNgBIyAETAC602gWUJywVY477R94K+ehkvO+jUm3XINLrrqXheBLAH5mhN3c/2RgPyPtxci5u+L86/5M/boX7Te/dyYKzAReWM+e9Z3I5CBQHFBxyQhWQKyfJCbSrlaWqSzskis2024J+8MJySbgJzIxtaNgBEwAkbACBgBI2AEjIARMAJGwAgYgZYn0BwhufeIMbjzputwwS8OxpJZC1xn0gnI2rHFyD0QLFvR8h3eyGoMbmT9te4aASOQIwFPSL7/k8dRG6nN6ShZWvjTeB0nHpzNyiKxnITkcCSM/QeMxIaKQI6F2GKsFr78/MSm3XrZskX4fvkylK+p4OMpQH6HzujZpwS9e/RAXqPSzcuoqViDZQsXYcWaclSGQojxFclrjx59B2LLQT2bVb+GsK790fh963hw6hh8eXno0KEDupSUoHvnHmjfGGmTkGoqlmPRwmUorSST2lpU8YjOrKsvuRR30F2FdUux2gosXbQIi5etdrzV12Kdz0ED0b1DwbpVmuWo8jXLsHDhcud/pceXqnmGSkr6oE+Ptn3XOQsy22UEjIARaFEC5a9eg7V3hVDyr6uRtw5/j1q0M1YZ9DUyYOfBrgQj0CoIHLjdidipyI+PZz2Il1fnbkfYUp0PdN4b5w8bhlj5HNw8/c2WqtbqMQItSkBC8oIFC7Bq1Sp07do1a0Cdr303DBncCzXsQSYBeY8jx6LD/Ldw4/WTUbTrBPyJNhdtVUxtq+Nu0QvUKjMCrZlAVU0V4l7ITfdSlhZ5kG9yZsHP79P+plM0SpP6aARLK1dsEBH584cvxx+enus6kr/tqbj3yoPY91pMf/NR3HX3FCytjWXoZB52PvQ0nD52X3TLzzzOdAd//cGLeOjhhzFjkf7EpE8xXzEOOelsjDl4RxRmqz5WgUd+9X94ar5kZGrh/gG47p9/weCibAc1tDn76Wtx5cOf1Wcc+7u7cfzwjvXbmVZyGYOOLewzFMeNOxmH7bpZpqrq83Ops/8OR+CM04/D1j1yF32jq7/Cv+7/J57/77f1baWutOu7HU4+/QyMGt7T+Vml7s9lW6I0dO289STu/efTWJjh2tG53X/sSRj3873Q0Xm25FK7lTECRsAIGIHabx7EyounNALh69Ef7Y48AkX77o1ggkgZqWCkT6Y/441qsYwNRiBWjqW/Ph3Rb4AudzyAdj0TTpIaTdif2Ad3Xo8fi0777tQwE4dXtvpQ9Lx1QkN+4oFtcd24/KBnfastjsMxPbumaTOMssplmPbtFHxYmm2S8DSH/sBZAfdbzI9gbj8ZNkDvAk48CzBgyJIRaM0EmiUkFw3D1ddeg2C37m5InoWFPJDPuOoa7NJLv2H3Qt7VE/HiB49gzrF7YVjxj/Ym/FGxN/18+4/aPWvcCBiB9SEwZfYbUHRxbU0tJ7vL7dcYtd+sKZiTLUaEUcjx6OfPl36Rtb6W2BleWwlfbA3uufBkXPO357MIyGothI+m3IkzT5yID5dW59Z8zTzcfsFYXPbXe7MKyKrMFyvFi/f9ESee9DvMWJZZbG7ccFxMbpyfPqe2siL9jgy5sfJ5uDnHMaiKqkWzcP/9n6Aqy2XTMbYCz113ck5c5n/6LH577gTc8cLnGXqYnL1yxqMY84srsgrIOqJ64XTcefV5uPT+aUDv/smV5LSVh6Kaubjn17x27ngqo4CsqnSz2hMJAAAgAElEQVRuX394Ek4dezHPbRYwObVrhYyAETACbY+Ar6QX/Fv0QmDr/vDxd1ps2XxU/eN2LDvxRoRze2iq7UH7EUccXvSBE5DVhbJnZ2TpSZDntb87r+hQd15v+zOWnnYrmvhamaVO22UENiQBTqTF4Bn3cs0E0bF9H/xs+Bk4efB2G7Jhq9sIGIEfkEBzrC2KKCC7SfQeutx5IKubo868uE5A5kasCqsq9RswjGVr2+6XFotE1pVhyQhsggTmr12MeSu/qx9ZqDbEiOQgAgHdMct81yxCCwq/P7NHgq+Ju846PsIIZK8NxiPjydkv4ZghB9X3paVXovMexbjRjzarWl90Mf50/nm4/Na/Y8ceme+nxcpn4YozrsbcSPqfQXmMYg3RziI1+apn4fcUTU++6m4cMqzpCOHU41tyu6kxZGrrgJP2zBpNfe/vL0l7aCYmKvzWfX9A+z534uQd0kWBxKsrpYB81u//nbZuX14xOrUHSktLk/Z/M+VG/CEpJ9eNEO79w+9zLezK+aLf4+rzJ+LqO2/GsM6Z30vNqtQKGwEjYATaAIFOV/wZ7fs3RLOGV8zA8guvga/iA1R/U46irc02qDVdBuVvPlvfndArjyB00k7p7UX6HIiSPzdEF4cWvo8V598ErJmKsvdGo3iPHvX12IoRaA0Eli99Df/8el59VzbrtRf26T8cvfJ86F2yB8ZUL8Gj85fV77eVRAI/vIVGYuu2bgSaS6A5Ecmqe6u9j8BOKz/AvFlzMKhfPDJZ+TNeugfvr4kgWjgSu/TL/elaHbspJRORN6WzaWMxAgkEXpjzOqOPEzK4GgmHmcfHnygmZ0oSgPPcQ0qNxTGfL7PYqvpCDCNKF/G8uGwx1taWo1P+D/PjcOBeY2hXcQCG1HvY1mLJnA8x6Q+TMLemQQxWZOm1l9yFe+/5v/T2BNx/269+30hADvbdAxeeNQ7bb9Xgf1y2bB5ef+JvePjtb5LQ3nfVmSi57UGMyCJUJx3Q0hscw63nNB5DzN8bx593BvbdfjOeFxqBVK7B8mXLMWfme3jlhVfxfVkv7qNFRI6p3Wb74eKzjsTWCZ7QYvLGE5Pw0Nvzk2p5/uaHcMS956JrGksIJ3hf81RSeW0M3GsCLjr9APSq90CuxeKZ0/D3W+7AF2sazmmjA5uZ0X2Hw/HL049KuHYYfbXwCzx4y/V467uGyHXdhLjygntx3z2npL92mtmuFTcCRsAItAUCsZAidxpE5GD3bVA0uj/K75nP+Q2aJhCrXoCVd9+F0BuzXeEYHzNtN34MOh81KtkegRYBZa//C+UPvAW4B3cYKTt0C/h5EzK6ZjEKDrkUnffZvOkG23KJqtmoemoJQHGtw6GlqLh7Bio/WpaTIJzXdzd0ueoArL7qFURWryZFE5Fb4lKqmPYgyu59GbEVmu0jiODPjkaXU49OsoKpXfQx1j71AsLTv6wvl7f/gSieMAF53tfw6m+w9LfXo8OpfHTb/z7W3PAYA+zC8G1+PHpcugOW/3YSCo87C76qqah46I36etK11xLj+lHq0IdBQvp2yVTodcyOp2KrwjxIVO634GksqPsxFey6OyZsPgS98hWnGE9VlYvx1pzn8WlllLZ0g3HiTnujX6Aa/2EwxNSK+HfTQOe9cPaQrRndSNu0OQ/XexhH/dvhzJ13QTHW4tkPn0S/YeOwa1EEnyxbhgHdB6Gbs1pTOzVYTHu3+2ZNrWs186KpPnpHBouH45B+w7FFUUe0C3i/CcNYUfoVnpz5H6zyCnK5ef+f4dC+m4MWzPEUKcPnK/WetmQENi4CzRGSOw7YHb84f3e8dN25uP+2+1E4ZgS+fOVfeH1m/No//KyjkKMD5cYFKcfeeh8HORa3YkbACGwMBGYum4uVa1em7WqUEbUhTnqWLWWytMhoZRGLusn70gnIXjtTvnrNW92AyzyMvnwS/vLLo5NEQP1g7bXVnrjugbsxZofkL43+itfx5GfpvwwtnPog3lmVfLd9q8Muxf03XYBdEgRkDahjj4E48pzrccdvJ6SY7Idw401TaKLx4ySN4d2q5DEU7TgB9zxyM47baxt0L+qAfE5MWMQJ8DbbajgOPOp03HDXY7jv7r9gy4LGNxLSjeKwX16PB/70C2ybICCrnJj8/JwbcPNFyVHo/sp38PZX5emqwidP3oNl0eS7H/uecT3P6eEJArIOzUfv4T/BVX+/G2fuMyBtXc3NPOriSbjj8gkp1w7H0XcYzv7zA7j0yOTHGwMVL+HZDNdOc9u28kbACBiBtkDAlzpLHsXe6k/iNxqbmig2Wvo+loz/lROQ5bmbt9+u8LVfi5p//QNLRl+TZIex5qELUf63tzgb3BC0P3s88vftjuis2Qh/RPGZcxAEunpqWlugvm5jrPx0ijuw4NBD6W18iFuvfOj5nO0p/B3iT7X53CzI69YHO6qBQOnjE7H2L1Mo6FI+3nkI7WBoxfDq41h2wu/4vT6h3G1/4XuE1iMMFtB7BB3CCL02BcvPuK3h3MUqEf16LcquOB+rL3vI1ekrDKJgxFbwu31LUHH971B+yyvwdd4CeaO2YQN17Z19Z0M9Dc1uMmtPf/uVm1gZeV2xfZe4VNKz90G4YOvt6wTkMMprK92k3YXte+PgHU7EfsX0BiY3+CjIBjpiy5L+9TyGcb2IQm0w0B6De21fn9+nX1woDrIJ3ecqkCl8oBg79h7sBOQqtlGuewUoQO8u2+DMrZK/g9ZXVLeSUx/rynYv3gLDi7s4ATkUrmE78ZsS3YuHYtzQneqr3nzQERjdv05AjrJcLW36OL5tewxwv3Vc9+pL24oRaP0EmmNtodGMOHwkIoun4fabbq0TkIMYfeH1OGJI2/4O4d16av1n3HpoBIxAzgRemfNG1rK6qS6f5PyC9GE/mSwt0llZaAK9cKRpiXRl1WosLF+KvkW5R7dmHUSanftPvAHH7NArzZ66LF8HHH3Z7Vhz0Rl4aUHDV5+XH5uK8YxATTLxiC3Hk3cl3/XvdeCluObEhi9X6Rrqvs3h+Bt9Fc648sH63ZGvH8S0pYdi754/8H07RiGnjqHDTmfi75eOSh5rfU8bVjp0SH9tNJSIr+1+xg04ca+GL8up+7XdZ7cTcPRmr+Pf3zZcJ3PmLuezQik2H9FFePqluJjg1bP5YVfirJ9t7m02XvKcjjr7OqxZfgoendlQf+OC2XP2PGcSxo7Icu3w8J3G/QZnLj8bd07lL7i69DyvneNTrx1vpy2NgBEwAkYgiUDl8/9Cbd/4X9to+XLUPPmB259//P+hXf9sP8pqserWm13Zdqf+Gp0P3SluzHVWOVbdfiFq3pyB0mdmoNtxFLuqZjCCdi1QvCt63nNhPEJ5v8NR2u9iVD44H0Xn/gYd+iV1yzZSCSiS+986N0F02IN/gwtrkbejD6FPXkHNkhNQ2CvlOwL/FiclRrqu+lNchA72tyjkJDbrsBFe+DIqH4tHhZfcdF595PGaf03ktT4b5a/OQJdDee0zdb3sLwhXdEZBr7r3E98jmhwx8u10hHn/PvWhwMDI8eh+weENkfx8/3ip/UXXoXjPuu9gZy/DkjPPB1a8i5qlZ6Jww32d95r/UZbh0m9QGhlKgTXefMzXFwf0i4umocp5uOfTl1ykriKPx++0LwbmF2DXLfbF6x+/hvmcr6RfcRFKOg3kwbTK8HXFtsWd6sfRsWgguuJjd/zwTp1dfmX5AhftXC8RU4z+35cP47XV8QCQ3YaMwahuxehSPIjHTk+KEvYqbk4fdcyS+e/i/bxhWLx4KmY5f1dg28HH4bCSrigqjL9fY74B2Kdn/HtxVfnXuHn6a665QOfd8X9DtkNnZ4/o9cCWRmDjIdCciORu247BDVdti5fe+BTBXoPxkz1GoGv73IKsNh4ize/pD6xoNL+DdoQRMALNI/DBwk9RVVuV00ESkiUCp6a4p3FyNGg6K4sorS+8CfRS60i3PeWr19Nlt0heNLgdjtwjh2+0/KEz5hc/T2oz8vWjFHkbrAq0s+q7j5IieGX/cN7oHZOOy7RRPORwnLJN8g+qJ57/NFPxDZZfveC95DH4ivHrc/dtUkDOtUPR4FCM2T+XX+L52H/M/knVrl6huIvktOh/z+HLBO/pGKPFTjs6/qMouWTqVj4OGjMmNTPnbY3j+J/kcO2wxp+OGZsUaZ7u2sm5YStoBIyAEWhjBEKvvYKq+6e4lycgC0HeFoyAzMaiag4FzBhiebui2BOQVd5XhK6nUdhiqnn53aQISQUGJqZ2Q4fGN2mvZSk7gfCiqW5CPf/uE1DQRWXz0WlcPBq5/NlPGh0cW/wflE6+B6sn34nl107E4vGXx6NbhxyKDtuZiNwIWDMzKv73ojui8LhDnYAc0fd35nQ88BiXX/3SJ/XXfqBjv3oBOUYLhRjfI+1GcCLL2FqEliVf+7Egn0hLFJAT+hXrsg86egKy8n09UHiwggbCiFYk15Nw2Ea/GvN1o3VDg0gU7DLY+SQr0njq9FfqRVxf9Cs8NneOi0hGQQ9sx4nHp9bZPORRiB1Iy7YAbSP65rOuKKOKdcIY3bxH1wDPSV8M7BC3xViy+pskZqtXflgvIGvHh0uXxNsItkdJGhs4lWlOH1UesVV44+t3nYBc0r4bBvC1tHSFa8dX0BlD2E6wy+boJqGY435/xhvuMP0TWTMN767iTTpLRmAjJtCciOSi3sNx7PjxOJJPdpiAHD/pFom8EV/81nUjkI7AG3PfTZedMS8cCqedcE/aMr8P1adUKwtFH8cF6IYvWvWFM6zURmrw8ZIZ2KlXLsJghkoyZHfZe3/0yPDlKvWQ9luNwm6FT+P9epuHEBavYBRrzwafs+8/eyfpsA47HovBzTA/2vPo/XDvjGfr61jy0acoO3XHH9Q/9/vpH9W3r5WCbY7B0GaMIengNBud9zgYfXJknl9YmKaG5KyVc79Oymi3wyE5M28/eGdsHXgoSYROqizLRtH2++c8jkCPnbB/v2BCJHvjaydLU7bLCBgBI9CmCRT9bhI6btcZ/DrAVIvQvA/ox/oPVPzxV4ied12TPsW+kpLG/NoNgp/BkpHvvkaEj/X729WJlpHFqF1SjnaKyIytRtnTcSGkKduMxg20vZy1Tz3pBh2lB+/yv/wXsVAeEcYjVEOvTkbo5N2SJtjzRZeg+hFGytYl2Y0UTjiJIuQ22W8OeAfYsgkC8ej9qlsvR9WtjYvGqhqexKr57h2sffxZhN9PfrKr8VF0JthlRLpslxcYslnGfZvyDl9sJQXfGDrURSLXq/M0pluUMtmMopZXRrZCz0Ah+nXy4VPOBVK6WT8U05Ziq/Z+FJT0coEHlWXfMIZ4C+xZXIjNum+FWGnXOoG2DLOWrEjCWUYbi7SJv8uSw10SSnFfPDXdx+lrKDoXb4fjBg1Hvw6dkgIjXB1eO1nq/LJsNaOWi71GbWkENkoCzYlI3igHuAE7bSLyBoRrVRuBH5rAkzNfQDQSf/ypOW2nm3Av1dIi0coi0wR6ubQ5bcFHG0REHrH9oFyaj5fxleCAA/rj/We+qz/m23m0VxjeYK/w7axF9fu0cshhOyRtN7VRvOXO6OF/rt7fN7bqMyxh8G1H/pb9odKCuXOTmjrk6L2Sttd3Y9edB61vFUnHL1+RHNly8OGZf9wkHagNf3dsNzCAL7+p/9bbqEimjO12GpRpV+N8RrKP2GUQReQGtqnXTuODLMcIGAEjYAREwF/Unv/mI+AmNeeSN3V7XAMsPfMfqJr8FjpxsruE+9eNoeXir8uIyeLL90HpdW9h9Tmn0xOWP3cqwq6uwMhTmrDNaNxkm8uhnUHNm16kIX1wp8UnMfQ4+KLzG0+w1/sA9LztVMQYIasZEgMpbhfesbZcPwKBEQcwqrgEyc8KhuDrNNzZu1S8dxvW/vVd10je/gegYOfhCBTlofxff0Yk+TTGywznDZgMXcrLsi/DIZtEtqJ6XQRumtE0hJo03qlPGH90JhZU7oZi+oH36Tkcneg7rLR09ft4j1Po7VncHx07bY7t+ufHxduaZZie9ERoGKvXLHDHrOs/TfXR12EEzh62Ezq4GCBOplexEmtqyhAJdMOQuv7+P3v3AdfU1f4B/JdAmDJkI4iKdVv3rFtba6u22m3f1u7dt6/db8fbZce/rd3aPV7b19Zu2zpr3Vp3te4tKgoIKKAgEEj+59yQ5N4QQgIBg/zu5xNzx7nnnPu9l5g8OXmuY9uOdZqKS5RRy+KVlRMFGrQAA8k1O33826+ZG/eigM8J5Is3AHuO761xv5Qb7plEzjtxkzU5yZQWBuUtjk6MSK54iylvoFdmH+1Qk8ZM4iv9hQdW4KLUQTXZvcp9YiK06SOqLFixwVimfQuuSa9gLsSxbGWYVHXVVL09MAU9mvnZR6yKn4MVGWWb7o/crrpyN7aIY0g7pD0Gb7/ge2rustdKf8XwCNXkWX8D0K5LC+CAPbirqsrlbKsWkS63O240GrV/A5prx7EwlylAAQpQwKWAvknFyGF3hgifEd/GOk7m40rqBV2kuGFeRfAyMKWtKLVUjLQcgIDuScpI2qCufRGcUtGWYx1ctgkUrv9dmQ+88WlEjdP+cswocvPmPPAF5A32wvrfag9AVpw7vyrutWGrnDM1Eyi1vO8IuvQahHepYjSCzGP935Wifn9EvP0hQlQ5xo3ifiFFu+0jxW2dqKjXtqyecbVNXe5cmhc5jK9NbWsJ8BqzsVreXNv2FtGAEPnrO9VoZH1IczHqWK4rRXaB5XPFrtOn0Ck0CrFRHRAlU1mI+5NsyihHse4QclskIzogVqS0sHyuyhYjlB0nXVVRfceCTper72Ob1i0tAWRjLr7e8CMOVRyPX+RQPCSCyLb33rZ+iBHVDsfdMjpWKad9N+y0Q1xJAZ8XYCDZ81Nke3nwfFfuQQEK+JLAnN2L1e9ratQ16w33rDtbvhw3izsKG5TUFaXq2z9bC9XgefeJfSjwck5Cyxgj9zsT3/o8l4WDNWkaDEiI1Nx2z+W+1o3qOnTiTeT2Y04+/FoL18Gzun1ZfYQcAObFyVPz6pp27G90xZ3dq9uvttsdYsLVVpfSpWO1ZViAAhSgAAUqC+gMFVHeik3m4uPIeff/lCV9SlLVX7NWpKxA3ioULNUGXvJ/+EDZ379vH1tQ8/QSSzqpkPG3IHLUFWg6diwDyJVPR+U1MhA5Y51YL26oN0QbQJaFDc0GKKlDkPE7io+IUcec6kUguFdPpZ3TL74Ox7fP5pLTtowLunARs9SFiHy29kCz8egKy0356qWnDagRkadYPXVOGYZ7+lwlbpRnGeyx58gaJf+xJWWFCBAL1yEdB6p3wdjz2kEZpWs8gU0VI4r354rULqKUISBS2Xam8Bh2iw9YllHKMuwaiJgg+ZmiBIezD2nqq+mCp31U2hF/69YAsszRfO15qZYAckV0yJiXjXz5wVAXhsHt+ti6Jm+4d0GUZYS1bSVnKNDABTzJkdzAD9Ur3bd92eSV2lgJBShwVgSOFGQgLSfNa23LG+75G/xhTWlRLlJklJvEGx9NYLV2zS08uBJXthtVu0pqsXdUUjO395ZvyGMjlN/eur1P5YIGpMZ6Nlq6ch01XyNvUteumf1DRc1rqp89ZX9bJ9bWvG76GhoZUzcVs1YKUIAC57jAqfeeQmGk5RtNc2E+yndZRkeaRfQr8vbhVQeRxc3BYh67D8fvniZywj6J0jVDEdg7DiWLfhI/0y+DWZ+AiOv72vT84y1f/J566nacsq0VM2EJCLnzAUSobxim3t7I50vTllhuiHf+tTA4ixOJ8xB27UDkv7IShfPWIuSO7o1czIuHf2wBsh/T3svCJPLlBt/6gsgVLs5HnwUwrtuN3Juug2HEUPiJQfVlu/ej7K8jCHvpUzRp3wSGFH8xKr8Aufc/iqCxXVCeuQ/GxU7yWHix2w21qtjYC/FoLGAUWdAM/v72EbgiUcPBjFX4MfO4cmg682HMST+KW8Uo4uDwDniiTzIyS0rQJDhG3IBPFinDziPzbQwyoJtj7IBkgyUYnZGzy7btr5O56BqaaFk25mNHvgcp2ERbSsDaVpt9xpM+5hfJ4HmUyCrUAo/0uh75ZeVoEmIJeFtrlO3IoPfqnI4i93EUwpp2FWVTnZa17sNnCjR0AY5Idv8MciSy+1YsSQGfFZi/Z4nywUu+XfHWo1zccK9UDNGUN88rNZaIgLJJPEQw2UuPdJHzSwa/z9aUuXen203LUcTHHPL1ur2zraARB7LrdySyrWkxozMdFu1r01uot/vavM6Ugcw83+zviaOHfI2L/aEABSjQIARM+4+gbONu5WEJIIvgzUXXIPa/HyNQFbTUGSr/+scvdhBi3r1PjIQVX3KvX4qi979TAsj6jgMQ88XbCKj4ntR4dC0K3rXcVEzfoR38e4pHv3bKfjiViaI3nkQRR9E6vV7O/L1cWR8q7qFQ1YfEkB6XKmWMi5bZRsA6rYwrPRQog2l/puYhc3mbC2XQLwAxj3+O0NssI0KNi5aKGxkuVQLIujhxfTe1jPBvesf/wb+HGI586giKv56jBJD9BogUGE+OVvpizxhj+fuyL6u7WvU2vcHyBZDz/dR1NIB5vXjtEY9gawDZVIKcgjTM2vw5Zh60B37lkWQdnYMfjqXjjIz5+ochIbQigCxGM2898CtmZdnvR6MzH8WRoor3++Lzw+aMbBvGsfQ0y+heseZUUQbSK1JJKAUs2TBsZe0z5Ur+YZjK7DfWc1LW3T7Kcn+ePKFUbwgIQ0xFADkjd5+4SaCoWNXO1r3f489cJ2XzjqHQSR/sfeYcBRqmAEcku3feOBLZPSeWooBPC0QEhiOjrA4CsuVl8POr6mNE7Uj0IulX8/CKb+NrV5Wyt5PPmy5rPZ2jzb/rWPiM+o2d2Jhbg/hvvuodllkXgU7N6ncksuMx5OSL0eTJVY1jcBSo/2Vtf404nGNEv/i676+n107WIQaR6//qYIsUoEBDFghIvRGJP97o9iGEj34d4Za4l2YfQ9IgxL8+COXiJ/xmmbNV3OzUv4k2RUa+CCg7ywsrKyra+KFyw73irQdFzth2mrq5INJejXtdPKqR0KeKcznTVij+dfu8baWzGTGK2e2yzvY/V9e57RKA8EsfEo9SlJ0uhSWQK29Sab/+dUHJiH3qY7Fd/H0IL734ZsWaJzxU/fcX3E5zDjW0LraFjX4eYU7+LjX7+/jCnv3f45X9nndyb9ocvJ0GtGzaFk2EubksD9tz0p1WtHT7DCx1skVv2oL3V29xsgWYu+ULzHWypTxvBd76c4VmS1Vl3e3jsp3fY2VwEjqEh8JcXoKMnENK6g5gkaYdubBs9/dYKtJdnB/fVHyVIT4P5W/HoTOMIFeC4opzRoAjkqs/lQwiV2/EEhTweYFrzh+Dl7L2KTfD82Zn/f38lBHIdRFIHtyqvze7ij37xDf9bcPcrrO0SHz4VE0JKbY7Z4gPpeKuyrEilUK6PeuvfU61k4tZc+FhbMuzj0yQudRCKn7a5mI3tzc53tyt0o7iGGIixdu9WhxDpTrrcoUIBDiae9pcYV6+p7so5T29dixDQuxNaa4d+2rOUYACFKBAHQn4BYphx+K/6UqTyPNZdsQS4DDEV07hZDqRo+xiSFYNe65UCVdQwJcFAip9ceLYW/8mla99xzJcrplA2sk9NduxHvdyp4/lZ45i2xn3OiVHV2/LPOpeYZaiwDkgwECy65NYN0MMXbfJrRSgQB0IXNh+qPdrFaOFZfoKcZsOr9YdZAhEr8QuXq1z60YP3tSZDuHHRZafulo70SxWFUQW37V37tfBukl5nvvTKmjDzprNlRYK0tbguMnupovqKn7+VqmYaoWhYlSJalVVs+LncSsXOx/9YN8lAO26JNkXxZw8Bl+eklJiNd1bsXy7ZtnlgjBZt9bykzuX5Zxs9OjaMWdjiYO99tpx0gBXUYACFKBA/QiIUZ3+It2FzFN68s0PUbhjN0oy0lG4aQWyX5uEUx9uEzceC0dgalz99IetUIACFKAABSjQ4ASY2qLqU8YgctU23EKBBiXQN7kbQgKDvdpnnS14LDMte28a1+ES71VWUVPJ9j+w97Q9aOuqgby/F2OfyPFsnWSqiVYON71L7DhIdZMNcQ/lbT9in5v1A6VY9pP2J2EJvXohzOHGhOr0DTJn8aEM93IAl2dtwMozqlHO1gNxeG7eoZ9mjTyGnW4fg2bXelmIapGiaSdjxTwcc0groimgWig/vsUtE9UutllPrp0zaRuxVmXv7NqxVcwZClCAAhSod4Hof1nywsq8yQX/eRYn7n8EBS9OQ9naTOg79kHU1Ddt+ZPrvXNskAIUoAAFKECBBiHAQLLz08QgsnMXrqVAgxQY1eEir/XbT6SyMFfcJ13eXM9bU2yTWCSHeS8XsrVfMgg7Y9Fu62LVz6Zj+PCt3zXbAztfid5x2pdDv7guuDDZnvFH3lzvtalLNPtVtZC/7Sf8b1upZvNVF7fVLNtSZqjW/rLYvdHUS774n2qvqmdD2vZDD38/WwHrMXgyotq2cz3MJF0wFuepcnDry3biy1/dOKeib6tmflPjHrp97ZgLMeejrzTtOLt2NAW4QAEKUIAC9SpgzQsb+9930fTNl8XjeTR9awpipn+J+MkPISiBP/Wv1xPCxihAAQpQgAINVICB5MonThs1qbydayhAgQYk0DmuDWLCo73SY53e/vJgSWnhlWoxrv0o71TkpJYdM57BBwu1d1TWFBOpCD565BH8VawdxXuZuAt5pUnk6J3wzwma1YV/fYh/vr8Yru4nkbl1Ju544SfNfn6tb0T/JMcbxAWgVYdmmnKZ81/FsrRTmnWaBRHEXPLJE/h4k5t3+dPF4tqbOmuqkMdw7zvzXR6D3KE4Lxs5qhsDaiqpqwV9C1w1qrmm9r/EOf102QHNOje02dkAACAASURBVO1CKdbNeBFTV1nyXGq3ub9U/bVTiN/ffxTfHdCG4J1eO+43y5IUoAAFKFBHAv5hcQhqkSoe7RCUkgyDww346qhZVksBClCAAhSgwDkkwECy9mTao0Ta9VyiAAUaqMD13a+EziFtQk0ORaezp4awZBSofUqLlMgURMib4dThtOSTZzDx8Y+wNS1LlcO4FBnbl2PShPuxSHWjOdkNfYvrMLaj8xvyBbcai4eGavP0Zi39EBNvehYrtqdrArGnj+/F928/jAcmawPIgAEPPTha/Ft5ajNkPJpozpUR0x67Da99vQI5p+2BYnNpIQ5sWognJ94mguT7K1fkYk2rkXeij2o0siyav+pzTJzwCOas24b8wkKUiEde3nEc2bMDKxd8jcmP3omJd96Hp2ZudVFz3WzqfuWtiNNrr7Xfp/0b/3znJxw6ftreqAioH9m+DM/dORFTfnF+p2t7YffmnF87wMn0v/H6g7eLYLY2UO3q2nGvRZaiAAUoQAEKUIACFKAABShAAV8WYCDZfnbsv9W2r+McBSjQgAUiA8NEft+WOHD8YI2PQucnsiGbtYE8QKa0cFznfhN6cZO+azqNdn+HWpQsPrgIkx9bpNRgMBhgNGpHj1qrNvl3wEvPjkewi8Pqd8/LGLHvHk3wWVe8E+89/5BSjU7Ub66iflngumffq5Qqw9q+vmkv3HVhDN5YmG1dpTxvmPUeNsyyrLLcHkizWVkQzYrjqry+0hoxGvmhaU/goXtewjH1jf5E+o/pU17A9Eo72Fc0NbiAsRfz6pyuSQc8//R43OMwmjtr1Uw8Kh6uJrdNVJXInMaJ4QXIzLd8aeLNa0fVDGcpQAEKUIACFKAABShAAQpQoIEKyEByeno6Tpw4gaioKOhVv9xuoIdUo25zJHKN2LgTBXxb4IZuV8BPb8+F62lv/fSVv18qK9OmgPC0zh7Nunq6i9vlzfpEPPHGqxjVsnK/qwogm4O64JWPn0ObJtUESkWQ8a43PsB13ZynCakqgCz79K/XPsMVnaJcHkff21/DxAuc1y13LHOyd5sx/8GMz16qNGLXSVFllb5pF7z16Yvo1dSza+Kk0T4avaq662J9dOfr8P4zN2pubFhdO4rJV6+jmcMo5ur2Cx94N979eCqGJFW2qfW1U13j3E4BClCAAhSgAAUoQAEKUIACDUKAI5LFL7kbxJliJylAAY8F+rXs7fE+1h00GRYqVppUo1it5dx9DjIEYmjLfu4W97iczpSBvQUxuPW1/+L5f92AtpGBVdcRkIhLbn4CX05/uvoAsrUWEUi+4skP8Nlbz2FU/1bWtU6f9REpGCvr/+YdDGjpPE2GZkeRe3nMpA/wwYsPoneSi36LnZI7XYjHXvoIL008HwgIRZTqRMlRuK4mXZM2eOyj6XjhkZvRuZnrdmQKjvOHTsCDY9tpqtQFaxYREaJddrVkCIzUbJYjxF1NMZ3HYsbnr+MfF3V2GUxu2mowHrKaiH4nqL4RrqoJ9XEM7JskBtjH4r63ptfNtePqILmNAhSgAAUoQAEKUIACFKAABRqMQGMPJFczBE85j+oy1nnHZ2swWq5XP+R6x2XrOvlc1UMOCZPb5LPjvBxqaN0m561lHJ+tZTqZzeanRDlOFGh0AlOWvY+ikjMeHbeMS/r5Ow/wBQTIPzn5J+3ZNLrdSHSIae3ZTtWU3vr1k5g8a5+t1FXPfibSZdiDtiWF2Th+NBsFRn+EGIwoKgtFXLNYxEaG2vap8YzIx5t1TNx4Ls+etzggNBJxsbGICA2ocbVyR9nvtLSjIldxKQJDQ5UAamBkDJrFxiOkdlVr+mUqKkT2yWPiGEpFPDoUJXl50BlCEBuXJI7DC0aa1mq7UIqTx7NxLDvPVlFAqDCJi0eoB4Fs287VzNivnYqR2CLQ77Vrp5q2uZkCFKAABShAAQpQoLLAk4unICzI/l6/cgmuaWgCp4pP4eXhjzS0brO/FFAEZGqLM2fOaFJbiDQXL4mN28VD/oxb5gOVz84e8gfH1jLWeeuytbx1f/lc1UN+YLVuk/PWh1xnnbc+i1VKWfks18nJ8Vm9Ting+E/l3347luAyBSjQYAVGdbgIP23+1aP++/nJ72OcT+XlJrja7myvpiGRXg8gO2vHcV1gaCyat411XO2dZRFUjE+SD+9Up65F9rtdpzrqt6ohfYjof0ibOjkGVTNemg1AUxHclo/6mOr02qmPA2AbFKAABShAAQpQgAIUoAAFKFBnAo01R7IcrcuJAhQ4RwU6x7VBTHjV+XadHbZOlQ7AcbsMIns6XdVxrKe7sDwFKEABClCAAhSgAAUoQAGbgMFP3MzabB00Z1vNmQYqUG4qR5i4ITwnCjRkgcaY2oJB5IZ8xbLvFHBD4PruV0Knyp3rcheRqaL692buv3lLiUxBRGATl01yIwUoQAEKUIACFKAABShAAVcCLSObo7S81FURbmtAAmWmMiQ0qftfXzYgEna1gQqoA8kN9BA86jaDyB5xsTAFGp5ApPiGt1VsS7c67u8ilYW1gvJy94LIep1e5Cgebd2NzxSgAAUoQAEKUIACFKAABWokcFnbEcpI5BJjCeQoVk4NU0Ceu5KyEuVcynPKiQLngoA1kHwuHEt1x8CcyNUJcTsFzgGBMSI38rScz6p9w2UW96ys7rZ55eXlIi+yLOW6ZI9mXc8BOR4CBShAAQpQgAIUoAAFKHC2BaKDI/BAn5vx655FyDydDXlTNk4NT0CmsEiKSIAMIMtzyokC54qADCQ3holB5MZwlnmMjV5AjkbumtwZfx3+26WFu1kvqgsgBxkCMbRlP5dtcSMFKEABClCAAhSgAAUoQAF3BWTQ8ZauV7hbnOUoQAEKUMDLAkxn4WVQVkcBXxUY0/5ChAQGV9k9PzdSWVh3ru4GeyNSh1iL8pkCFKAABShAAQpQgAIUoAAFKEABClCggQswiNzATyC7TwFPBAa1vqDK4jq9+y8HMqVFVVPTkEh0iGld1WaupwAFKEABClCAAhSgAAUoQAEKUIACFGhgAu5HjRrYgbG7FKBAZYG+yd0QEx5deYNYo4N7N8yz7+w8J/JVHcfai9TlnLlMU7vBoFnkAgUoQAEKUIACFKAABShAAQpQgAIUoICXBJgT2UuQrIYCDUVgTIeRmL5upnJHXGuf/fz0IoTsPChsLeP4bBJ31tU7jF5OiUxBRGATx6J1snz+P17D/64utdUdEBBgm+cMBShAAQpQgAIUoAAFKEABClCAAhSggPcEOBLZe5asiQINQiAlohlaxbbU9FWn99Msu7PgmNJCr9Pjmk6j3dnVa2Vk4Nj68FqlrIgCFKAABShAAQpQgAIUoAAFKEABClBAI8AgsoaDCxRoHAJjOlwEP1XgWKfzNJUFxEhmrVWPZl21K7hEAQpQgAIUoAAFKEABClCAAhSgAAUocE4IMIh8TpxGHgQFPBOIDAxD1+TOyk46P5EN2exZKgt7a5ZIcpAhEENb9rOv5hwFKEABClCAAhSgAAUoQAEKUIACFKDAOSPAIPI5cyp5IBTwTGBM+wth8DfAT6ShqOlUVlau7DoidUhNq+B+FKAABShAAQpQgAIUoAAFKEABClCAAj4uUPPokY8fGLtHAQpULzC87WDoHG6OV/1e9hImkxnRTaLRIaa1fSXnKEABClCAAhSgAAUoQAEKUIACFKAABc4pAf9z6mh4MBRopALfbP0VE86/zOOj75vcDfJxNqY9uQdRVFaMbvEdzkbzbJMCFKAABShAAQpQgAIUoAAFKEABClDATQEGkd2EYjEK+LJATQLIZ/t42ka3OttdYPsUoAAFKEABClCAAhSgAAUoQAEKUIACbggwnYUbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHAILIbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHAILIbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHAILIbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHAILIbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHAILIbSCxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUKCxCjCI3FjPPI+bAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIAbAgwiu4HEIhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFGqsAg8iN9czzuClAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKuCHg70aZBl9k7dq1Df4YeAAUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABc6GAEcinw11tkkBClCAAhSgAAUoQAEKUIACFKAABShAAQpQoIEINIqRyG3btm0gp4PdpAAFKEABClCAAhSgAAUoQAEKUIACFKAABSjgWwIciexb54O9oQAFKEABClCAAhSgAAUoQAEKUIACFKAABSjgUwIMIvvU6WBnKEABClCAAhSgAAUoQAEKUIACFKAABShAAQr4lgCDyL51PtgbClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAI+JcAgsk+dDnaGAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIBvCTCI7Fvng72hAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKOBTAgwi+9TpYGcoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCviWAIPIvnU+2BsKUIACFKAABShAAQpQgAIUoAAFKEABClCAAj4lwCCyT50OdoYCFKAABShAAQpQgAIUoAAFKEABClCAAhSggG8JMIjsW+eDvaEABShAAQpQgAIUoAAFKEABClCAAhSgAAUo4FMCDCL71OlgZyhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEK+JYAg8i+dT7YGwpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACPiXAILJPnQ52hgIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCAbwkwiOxb54O9oQAFKEABClCAAhSgAAUoQAEKUIACFKAABSjgUwIMIvvU6WBnKEABClCAAhSgAAUoQAEKUIACFKAABShAAQr4lgCDyL51PtgbClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAI+JcAgsk+dDnaGAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIBvCTCI7Fvng72hAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKOBTAgwi+9TpYGcoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCviWAIPIvnU+2BsKUIACFKAABShAAQpQgAIUoAAFKEABClCAAj4lwCCyT50OdoYCFKAABShAAQpQgAIUoAAFKEABClCAAhSggG8JMIjsW+eDvaEABShAAQpQgAIUoAAFKEABClCAAhSgAAUo4FMCDCL71OlgZyhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEK+JYAg8i+dT7YGwpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACPiXAILJPnQ52hgIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCAbwkwiOxb54O9oQAFKEABClCAAhSgAAUoQAEKUIACFKAABSjgUwIMIvvU6WBnKEABClCAAhSgAAUoQAEKUIACFKAABShAAQr4lgCDyL51PtgbClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAI+JcAgsk+dDnaGAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoIBvCTCI7Fvng72hAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKOBTAgwi+9TpYGcoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCviWAIPIvnU+2BsKUIACFKAABShAAQpQgAIUoAAFKEABClCAAj4lwCCyT50OdoYCFKAABShAAQpQgAIUoAAFKEABClCAAhSggG8JMIjsW+eDvaEABShAAQpQgAIUoAAFKEABClCAAhSgAAUo4FMCDCL71OlgZyhAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEK+JYAg8i+dT7YGwpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACPiXAILJPnQ52hgIUoAAFKEABClCAAhSgAAUoQAEKUIACFKCAbwkwiOxb54O9oQAFKEABClCAAhSg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jkZEBIhAfSEQFtVYMPXnJdPx/vYbZmaXuycgQAjhw+ImK5LOORITp41Gi8buyN7xKd5L+1MhQadEgAgQASJABIgAESACRIBiItMaIAJEgAgQgTudgHsUXnx5Gq5qXREaEQEfCtNwp884jY8INDgCN4utD/m+SUnwYhF89mz4yUywkn251q1PEpqymMgB+TGsnpzIZpCogAgQASJABIgAESACRIA2Y9EaIAJEgAgQgTudgCuaRESjyZ0+TBofESACDZIAj2nct7W4E9kSAF6f0j0CuusspM+3J8xEKl3CDP8QaMuKzOqpgAgQASJABIgAESACRIAIcAIUzoLWAREgAkSACBABIkAEiAARqIcE+k19HzMGNhcsr8w7io27zcNV9H3qcUR7aLAv7SNkVUrvTzEOtuP9SQhku5Bx8zyWLdllrKAcESACRIAIEAEiQASIABGQESAnsgwGZYkAESACRIAIEAEiQASIQH0hsHP1Unya3x7l2UfwLXuhnqW0d90izNzjhL37My1VIyTYm72buwzHN3+JbWX8BeGUiAARIAJEgAgQASJABIiAOQFyIpszoRIiQASIABEgAkSACBABIlDnCdzMPIBv2MdaKj19BntPq0tsfC8VG99Tr6caIkAEiAARIAJEgAgQASLACTgRBiJABIgAESACRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJqBMiJrEaGyokAESACRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgHYi0xogAkSACBABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAF1ArQTWZ0N1RABIkAEiAARIAJEgAgQASJABIgAESACRIAIEAEiQAQaPAFyIjf4JUAAiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAuoEyImszoZqiAARIAJEgAgQASJABIgAESACRIAIEAEiQASIABEgAg2eADmRG/wSIABEgAgQASJABIgAESACRIAIEAEiQASIABEgAkSACBABdQLkRFZnQzVEgAgQASJABIgAESACRIAIEAEiQASIABEgAkSACBCBBk+AnMgNfgkQACJABIgAESACRIAIEAEiQASIABEgAkSACBABIkAEiIA6AXIiq7OhGiJABIgAESACRIAIEAEiQASIABEgAkSACBABIkAEiECDJ0BO5Aa/BAgAESAC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AgQIECBAgAABAgRcIvsbIECAAAECBAgQIECAAAECBAgQIECAAIFDAZfIhzQWCBAgQIAAAQIECBAgQIAAAQIECBAgQMAlsr8BAgQIECBAgAABAgQIECBAgAABAgQIEDgUcIl8SGOBAAECBAgQIECAAAECBAgQIECAAAECBFwi+xsgQIAAAQIECBAgQIAAAQIECBAgQIAAgUMBl8iHNBYIECBAgAABAgQIECBAgAABAgQIECBAwCWyvwECBAgQIECAAAECBAgQIECAAAECBAgQOBRwiXxIY4EAAQIECBAgQIAAAQIECBAgQIAAAQIEXCL7GyBAgAABAgQIECBAgAABAgQIECBAgACBQwGXyIc0FggQIECAAAECBAgQIECAAAECBAgQIEDAJbK/AQIECBAgQIAAAQIECBAgQIAAAQIECBA4FHCJfEhjgQABAgQIECBAgAABAgQIECBAgAABAgRcIvsbIECAAAECBAgQIECAAAECBAgQIECAAIFDAZfIhzQWCBAgQIAAAQIECBAgQIAAAQIECBAgQMAlsr8BAgQIECBAgAABAgQIECBAgAABAgQIEDgUcIl8SGOBAAECBAgQIECAAAECBAgQIECAAAECBFwi+xsgQIAAAQIECBAgQIAAAQIECBAgQIAAgUMBl8iHNBYIECBAgAABAgQIECBAgAABAgQIECBAwCWyvwECBAgQIECAAAECBAgQIECAAAECBAgQOBRwiXxIY4EAAQIECBAgQIAAAQIECBAgQIAAAQIEXCL7GyBAgAABAgQIECBAgAABAgQIECBAgACBQwGXyIc0FggQIECAAAECBAgQIECAAAECBAgQIEDAJbK/AQIECBAgQIAAAQIECBAgQIAAAQIECBA4FHCJfEhjgQABAgQIECBAgAABAgQIECBAgAABAgRcIvsbIECAAAECBAgQIECAAAECBAgQIECAAIFDAZfIhzQWCBAgQIAAAQIECBAgQIAAAQIECBAgQMAlsr8BAgQIECBAgAABAgQIECBAgAABAgQIEDgUcIl8SGOBAAECBAgQIECAAAECBAgQIECAAAECBFwi+xsgQIAAAQIECBAgQIAAAQIECBAgQIAAgUMBl8iHNBYIECBAgAABAgQIECBAgAABAgQIECBAwCWyvwECBAgQIECAAAECBAgQIECAAAECBAgQOBRwiXxIY4EAAQIECBAg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z+VH/bMuJ0CAAAECBAgQIECAAAECBAgQIEDgbQTWi9Y+ddaP8vR27SiuPe1rPfNdbbe+601fxrm1rj82vvsxn9n6rta1i2IvTi9qPtO0O+eS2uxJvs77yLnWnrXWevasa+fOmWvdO+Oat79xPre1xnNr7REJECBAgAABAgQIECBAgAABAgQIEHi5wLnL0kvX2rfGvt2sN89a88TmrXc+13a19idmzP7OHxfe/egZt9Tmnmfze11yHp2z1i+Zz5413813tX7xriU2362ldrT+3Np6XuciAQIECBAgQIAAAQIECBAgQIAAAQKfVuCSi9bZM/O8eedr7LdKfbc26z3nqDbPmnnPnbXmic+tt3fta/3iuF6cXrxx03h01lq/dD771rzzGZvn1Zo37mpzbbc+a8nXse7v+lG96yIBAgQIECBAgAABAgQIECBAgAABAq8rcHRxelTP28y15o19287XOPd3rbXOZ2zenqPz1/ql86O+1q+K977w3J13S617GvOl1nydt+eoPmHa09i9s2etzd727WpdEwkQIECAAAECBAgQIECAAAECBAgQ+HwE5sVt32rWZn5ufe3rvDF7k3feuNY7T8xoX+OsPTa8+zHXW7+01v6r4r0vQc+dt1tba3PevLFfbM6Tr/P0tdZ4VEs9Y9e31h8blx9z37L0fnpJz/tmCQECBAgQIECAAAECBAgQIECAAAECVwvsLlHXQ57rmetHec/semPqzdfYtdY7T+zoWmPqM9/Nj2qpZ6z7n6o3/HyNC85zZ+7W1trRfNZ3+ayFovM1lqn12du1XW32t29X65pIgAABAgQIECBAgAABAgQIECBAgMDnI7C7VF1r6zxvP2szn2utN/Zbd94498x8rs/6ek7nu55L12bfRflrXYIenXtpfe3rvLFfbjdfa+ltrXHWetZam72zZ+aX9Mx+OQECBAgQIECAAAECBAgQIECAAAECn0ZgvajdvcXsmXl7Z615Y3sSU1vrR/Ojes9b12+td9/V8TUvQY/Ovqa+9nbe2C98NF/r6Z+1o7znNs6+c7WuiQQIECBAgAABAgQIECBAgAABAgQIfH4CuwvZXa1vPteO8rV39mXtaH5U73m7vV1b9z5X7/pNcXc5etNBm03PnX20vtbXeR7VWmMfv85n75p3z66+nrPO595z+a37zp1pjQABAgQIECBAgAABAgQIECBAgACB7wocXax+t/PjyrrvuXl3z76Z79ZTa09j++Zaa7ueXV/7G4/2df2m+NqXnM+df7S+q5+rnVtbYWbvzNe+zI/Wj+rrGZf2rfvMCRAgQIAAAQIECBAgQIAAAQIECBC4TuDSC9SjvqN632Kuz7zribt6a42X9s++o7Nnz+78uX5z/haXnM8949z6bu1cbbcWnKN64db1dd6+c/GWPefOs0aAAAECBAgQIECAAAECBAgQIECAwMsEbrlYXfes8/WNjtZbb5z7Lq11z66/a4nPrc/eq/O3vPh87llH6y+pH+0N1Lm1Qp7rObfW/SIBAgQIECBAgAABAgQIECBAgAABAp+PwLnL1nNr/QbneubazLs38V71nnl0XtfvEt/6IvSS5x31XFsP0Lpnne8QL+nZ7Wvtpft7jkiAAAECBAgQIECAAAECBAgQIECAwG0CL71cvWT/2rPO55sfrV1bv+TM2XOX/Iu7nHLdIZdcsp7ruXXt6C3PnXfPPUdnqRMgQIAAAQIECBAgQIAAAQIECBAg8HYCRxe3595gt2dXm2ecW791reef29+eu8VbLlDv9fBLnv1cz0vX+13OnXNurftFAgQIECBAgAABAgQIECBAgAABAgS+vwLnLmXPrc1v/FzfS9fzrOfOmO9zt/xTX5Be8/znep9bD9olPTvcW/ftzlIjQIAAAQIECBAgQIAAAQIECBAgQODzEbj1YvaSfc/1PLc+la7pnftenH8ul6PXvMclvZf0rHi37FnPMCdAgAABAgQIECBAgAABAgQIECBA4IcjcMvF7SV7Lump4jW93XPX+DlenF7zTtf0Bu7a/iPse51zdL46AQIECBAgQIAAAQIECBAgQIAAAQKvI3CvS9lrz7mm/5re11Eap37Ol6HXvtu1/YPhMX3p/vU8cwIECBAgQIAAAQIECBAgQIAAAQIEvt8CL73MvXb/tf1vovt9uTi99T1v3Xcp/muff+l76CNAgAABAgQIECBAgAABAgQIECBA4LzAa1/Q3nr+rfvOf9s7rn4fL0Hv9c73OueOvw5HESBAgAABAgQIECBAgAABAgQIECDwGQvc68L3Xue8CdUP4SL1rb7DWz3nTX7xHkKAAAECBAgQIECAAAECBAgQIECAwMNbXea+1XNe5Vf6Q70Y/aF+r1f5I3AoAQIECBAgQIAAAQIECBAgQIAAAQJ3E/heXxjvFH6Ml60/xu+8+92rESBAgAABAgQIECBAgAABAgQIECBwm8AP7qL4HIML1XM6+zVmexdVAgQIECBAgAABAgQIECBAgAABAt8XgR/VJfD35ZfiPQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECry3w/wE3OrlYJLDaPQAAAABJRU5ErkJggg==\";\n  \n  if (typeof process !== 'undefined' && !process.browser) {\n    module.exports = bigimage;\n  } else {\n    window.bigimage = bigimage;\n  }\n\n})();\n"
  },
  {
    "path": "test/pouchdb/integration/pouchdb-for-coverage.js",
    "content": "'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar lie = _interopDefault(require('lie'));\nvar getArguments = _interopDefault(require('argsarray'));\nvar debug = _interopDefault(require('debug'));\nvar events = require('events');\nvar events__default = _interopDefault(events);\nvar inherits = _interopDefault(require('inherits'));\nvar vm = _interopDefault(require('vm'));\nvar levelup = _interopDefault(require('levelup'));\nvar ltgt = _interopDefault(require('ltgt'));\nvar Codec = _interopDefault(require('level-codec'));\nvar ReadableStreamCore = _interopDefault(require('readable-stream'));\nvar through2 = require('through2');\nvar Deque = _interopDefault(require('double-ended-queue'));\nvar crypto = _interopDefault(require('crypto'));\nvar vuvuzela = _interopDefault(require('vuvuzela'));\nvar fs = _interopDefault(require('fs'));\nvar path = _interopDefault(require('path'));\nvar LevelWriteStream = _interopDefault(require('level-write-stream'));\nvar PromisePool = _interopDefault(require('es6-promise-pool'));\nvar scopedEval = _interopDefault(require('scope-eval'));\n\n/* istanbul ignore next */\nvar PouchPromise = typeof Promise === 'function' ? Promise : lie;\n\nfunction isBinaryObject(object) {\n  return object instanceof Buffer;\n}\n\nfunction cloneBinaryObject(object) {\n  var copy = new Buffer(object.length);\n  object.copy(copy);\n  return copy;\n}\n\n// most of this is borrowed from lodash.isPlainObject:\n// https://github.com/fis-components/lodash.isplainobject/\n// blob/29c358140a74f252aeb08c9eb28bef86f2217d4a/index.js\n\nvar funcToString = Function.prototype.toString;\nvar objectCtorString = funcToString.call(Object);\n\nfunction isPlainObject(value) {\n  var proto = Object.getPrototypeOf(value);\n  /* istanbul ignore if */\n  if (proto === null) { // not sure when this happens, but I guess it can\n    return true;\n  }\n  var Ctor = proto.constructor;\n  return (typeof Ctor == 'function' &&\n    Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nfunction clone(object) {\n  var newObject;\n  var i;\n  var len;\n\n  if (!object || typeof object !== 'object') {\n    return object;\n  }\n\n  if (Array.isArray(object)) {\n    newObject = [];\n    for (i = 0, len = object.length; i < len; i++) {\n      newObject[i] = clone(object[i]);\n    }\n    return newObject;\n  }\n\n  // special case: to avoid inconsistencies between IndexedDB\n  // and other backends, we automatically stringify Dates\n  if (object instanceof Date) {\n    return object.toISOString();\n  }\n\n  if (isBinaryObject(object)) {\n    return cloneBinaryObject(object);\n  }\n\n  if (!isPlainObject(object)) {\n    return object; // don't clone objects like Workers\n  }\n\n  newObject = {};\n  for (i in object) {\n    /* istanbul ignore else */\n    if (Object.prototype.hasOwnProperty.call(object, i)) {\n      var value = clone(object[i]);\n      if (typeof value !== 'undefined') {\n        newObject[i] = value;\n      }\n    }\n  }\n  return newObject;\n}\n\nfunction once(fun) {\n  var called = false;\n  return getArguments(function (args) {\n    /* istanbul ignore if */\n    if (called) {\n      // this is a smoke test and should never actually happen\n      throw new Error('once called more than once');\n    } else {\n      called = true;\n      fun.apply(this, args);\n    }\n  });\n}\n\nfunction toPromise(func) {\n  //create the function we will be returning\n  return getArguments(function (args) {\n    // Clone arguments\n    args = clone(args);\n    var self = this;\n    var tempCB =\n      (typeof args[args.length - 1] === 'function') ? args.pop() : false;\n    // if the last argument is a function, assume its a callback\n    var usedCB;\n    if (tempCB) {\n      // if it was a callback, create a new callback which calls it,\n      // but do so async so we don't trap any errors\n      usedCB = function (err, resp) {\n        process.nextTick(function () {\n          tempCB(err, resp);\n        });\n      };\n    }\n    var promise = new PouchPromise(function (fulfill, reject) {\n      var resp;\n      try {\n        var callback = once(function (err, mesg) {\n          if (err) {\n            reject(err);\n          } else {\n            fulfill(mesg);\n          }\n        });\n        // create a callback for this invocation\n        // apply the function in the orig context\n        args.push(callback);\n        resp = func.apply(self, args);\n        if (resp && typeof resp.then === 'function') {\n          fulfill(resp);\n        }\n      } catch (e) {\n        reject(e);\n      }\n    });\n    // if there is a callback, call it back\n    if (usedCB) {\n      promise.then(function (result) {\n        usedCB(null, result);\n      }, usedCB);\n    }\n    return promise;\n  });\n}\n\nvar log = debug('pouchdb:api');\n\nfunction adapterFun(name, callback) {\n  function logApiCall(self, name, args) {\n    /* istanbul ignore if */\n    if (log.enabled) {\n      var logArgs = [self.name, name];\n      for (var i = 0; i < args.length - 1; i++) {\n        logArgs.push(args[i]);\n      }\n      log.apply(null, logArgs);\n\n      // override the callback itself to log the response\n      var origCallback = args[args.length - 1];\n      args[args.length - 1] = function (err, res) {\n        var responseArgs = [self.name, name];\n        responseArgs = responseArgs.concat(\n          err ? ['error', err] : ['success', res]\n        );\n        log.apply(null, responseArgs);\n        origCallback(err, res);\n      };\n    }\n  }\n\n  return toPromise(getArguments(function (args) {\n    if (this._closed) {\n      return PouchPromise.reject(new Error('database is closed'));\n    }\n    if (this._destroyed) {\n      return PouchPromise.reject(new Error('database is destroyed'));\n    }\n    var self = this;\n    logApiCall(self, name, args);\n    if (!this.taskqueue.isReady) {\n      return new PouchPromise(function (fulfill, reject) {\n        self.taskqueue.addTask(function (failed) {\n          if (failed) {\n            reject(failed);\n          } else {\n            fulfill(self[name].apply(self, args));\n          }\n        });\n      });\n    }\n    return callback.apply(this, args);\n  }));\n}\n\n// like underscore/lodash _.pick()\nfunction pick(obj, arr) {\n  var res = {};\n  for (var i = 0, len = arr.length; i < len; i++) {\n    var prop = arr[i];\n    if (prop in obj) {\n      res[prop] = obj[prop];\n    }\n  }\n  return res;\n}\n\n// Most browsers throttle concurrent requests at 6, so it's silly\n// to shim _bulk_get by trying to launch potentially hundreds of requests\n// and then letting the majority time out. We can handle this ourselves.\nvar MAX_NUM_CONCURRENT_REQUESTS = 6;\n\nfunction identityFunction(x) {\n  return x;\n}\n\nfunction formatResultForOpenRevsGet(result) {\n  return [{\n    ok: result\n  }];\n}\n\n// shim for P/CouchDB adapters that don't directly implement _bulk_get\nfunction bulkGet(db, opts, callback) {\n  var requests = opts.docs;\n\n  // consolidate into one request per doc if possible\n  var requestsById = {};\n  requests.forEach(function (request) {\n    if (request.id in requestsById) {\n      requestsById[request.id].push(request);\n    } else {\n      requestsById[request.id] = [request];\n    }\n  });\n\n  var numDocs = Object.keys(requestsById).length;\n  var numDone = 0;\n  var perDocResults = new Array(numDocs);\n\n  function collapseResultsAndFinish() {\n    var results = [];\n    perDocResults.forEach(function (res) {\n      res.docs.forEach(function (info) {\n        results.push({\n          id: res.id,\n          docs: [info]\n        });\n      });\n    });\n    callback(null, {results: results});\n  }\n\n  function checkDone() {\n    if (++numDone === numDocs) {\n      collapseResultsAndFinish();\n    }\n  }\n\n  function gotResult(docIndex, id, docs) {\n    perDocResults[docIndex] = {id: id, docs: docs};\n    checkDone();\n  }\n\n  var allRequests = Object.keys(requestsById);\n\n  var i = 0;\n\n  function nextBatch() {\n\n    if (i >= allRequests.length) {\n      return;\n    }\n\n    var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);\n    var batch = allRequests.slice(i, upTo);\n    processBatch(batch, i);\n    i += batch.length;\n  }\n\n  function processBatch(batch, offset) {\n    batch.forEach(function (docId, j) {\n      var docIdx = offset + j;\n      var docRequests = requestsById[docId];\n\n      // just use the first request as the \"template\"\n      // TODO: The _bulk_get API allows for more subtle use cases than this,\n      // but for now it is unlikely that there will be a mix of different\n      // \"atts_since\" or \"attachments\" in the same request, since it's just\n      // replicate.js that is using this for the moment.\n      // Also, atts_since is aspirational, since we don't support it yet.\n      var docOpts = pick(docRequests[0], ['atts_since', 'attachments']);\n      docOpts.open_revs = docRequests.map(function (request) {\n        // rev is optional, open_revs disallowed\n        return request.rev;\n      });\n\n      // remove falsey / undefined revisions\n      docOpts.open_revs = docOpts.open_revs.filter(identityFunction);\n\n      var formatResult = identityFunction;\n\n      if (docOpts.open_revs.length === 0) {\n        delete docOpts.open_revs;\n\n        // when fetching only the \"winning\" leaf,\n        // transform the result so it looks like an open_revs\n        // request\n        formatResult = formatResultForOpenRevsGet;\n      }\n\n      // globally-supplied options\n      ['revs', 'attachments', 'binary', 'ajax'].forEach(function (param) {\n        if (param in opts) {\n          docOpts[param] = opts[param];\n        }\n      });\n      db.get(docId, docOpts, function (err, res) {\n        var result;\n        /* istanbul ignore if */\n        if (err) {\n          result = [{error: err}];\n        } else {\n          result = formatResult(res);\n        }\n        gotResult(docIdx, docId, result);\n        nextBatch();\n      });\n    });\n  }\n\n  nextBatch();\n\n}\n\n// in Node of course this is false\nfunction isChromeApp() {\n  return false;\n}\n\n// in Node of course this is false\nfunction hasLocalStorage() {\n  return false;\n}\n\ninherits(Changes, events.EventEmitter);\n\n/* istanbul ignore next */\nfunction attachBrowserEvents(self) {\n  if (isChromeApp()) {\n    chrome.storage.onChanged.addListener(function (e) {\n      // make sure it's event addressed to us\n      if (e.db_name != null) {\n        //object only has oldValue, newValue members\n        self.emit(e.dbName.newValue);\n      }\n    });\n  } else if (hasLocalStorage()) {\n    if (typeof addEventListener !== 'undefined') {\n      addEventListener(\"storage\", function (e) {\n        self.emit(e.key);\n      });\n    } else { // old IE\n      window.attachEvent(\"storage\", function (e) {\n        self.emit(e.key);\n      });\n    }\n  }\n}\n\nfunction Changes() {\n  events.EventEmitter.call(this);\n  this._listeners = {};\n\n  attachBrowserEvents(this);\n}\nChanges.prototype.addListener = function (dbName, id, db, opts) {\n  /* istanbul ignore if */\n  if (this._listeners[id]) {\n    return;\n  }\n  var self = this;\n  var inprogress = false;\n  function eventFunction() {\n    /* istanbul ignore if */\n    if (!self._listeners[id]) {\n      return;\n    }\n    if (inprogress) {\n      inprogress = 'waiting';\n      return;\n    }\n    inprogress = true;\n    var changesOpts = pick(opts, [\n      'style', 'include_docs', 'attachments', 'conflicts', 'filter',\n      'doc_ids', 'view', 'since', 'query_params', 'binary'\n    ]);\n\n    /* istanbul ignore next */\n    function onError() {\n      inprogress = false;\n    }\n\n    db.changes(changesOpts).on('change', function (c) {\n      if (c.seq > opts.since && !opts.cancelled) {\n        opts.since = c.seq;\n        opts.onChange(c);\n      }\n    }).on('complete', function () {\n      if (inprogress === 'waiting') {\n        setTimeout(function (){\n          eventFunction();\n        },0);\n      }\n      inprogress = false;\n    }).on('error', onError);\n  }\n  this._listeners[id] = eventFunction;\n  this.on(dbName, eventFunction);\n};\n\nChanges.prototype.removeListener = function (dbName, id) {\n  /* istanbul ignore if */\n  if (!(id in this._listeners)) {\n    return;\n  }\n  events.EventEmitter.prototype.removeListener.call(this, dbName,\n    this._listeners[id]);\n  delete this._listeners[id];\n};\n\n\n/* istanbul ignore next */\nChanges.prototype.notifyLocalWindows = function (dbName) {\n  //do a useless change on a storage thing\n  //in order to get other windows's listeners to activate\n  if (isChromeApp()) {\n    chrome.storage.local.set({dbName: dbName});\n  } else if (hasLocalStorage()) {\n    localStorage[dbName] = (localStorage[dbName] === \"a\") ? \"b\" : \"a\";\n  }\n};\n\nChanges.prototype.notify = function (dbName) {\n  this.emit(dbName);\n  this.notifyLocalWindows(dbName);\n};\n\nfunction guardedConsole(method) {\n  /* istanbul ignore else */\n  if (console !== 'undefined' && method in console) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    console[method].apply(console, args);\n  }\n}\n\nfunction randomNumber(min, max) {\n  var maxTimeout = 600000; // Hard-coded default of 10 minutes\n  min = parseInt(min, 10) || 0;\n  max = parseInt(max, 10);\n  if (max !== max || max <= min) {\n    max = (min || 1) << 1; //doubling\n  } else {\n    max = max + 1;\n  }\n  // In order to not exceed maxTimeout, pick a random value between half of maxTimeout and maxTimeout\n  if(max > maxTimeout) {\n    min = maxTimeout >> 1; // divide by two\n    max = maxTimeout;\n  }\n  var ratio = Math.random();\n  var range = max - min;\n\n  return ~~(range * ratio + min); // ~~ coerces to an int, but fast.\n}\n\nfunction defaultBackOff(min) {\n  var max = 0;\n  if (!min) {\n    max = 2000;\n  }\n  return randomNumber(min, max);\n}\n\n// We assume Node users don't need to see this warning\nvar res = function () {};\n\n// forked from\n// https://github.com/vmattos/js-extend/blob/7023fd69a9e9552688086b8b8006b1fcf916a306/extend.js\n// TODO: I don't know why we have two different extend() functions in PouchDB\n\nvar slice = Array.prototype.slice;\nvar each = Array.prototype.forEach;\n\nfunction extend$1(obj) {\n  if (typeof obj !== 'object') {\n    throw obj + ' is not an object' ;\n  }\n\n  var sources = slice.call(arguments, 1);\n\n  each.call(sources, function (source) {\n    if (source) {\n      for (var prop in source) {\n        if (typeof source[prop] === 'object' && obj[prop]) {\n          extend$1.call(obj, obj[prop], source[prop]);\n        } else {\n          obj[prop] = source[prop];\n        }\n      }\n    }\n  });\n\n  return obj;\n}\n\ninherits(PouchError, Error);\n\nfunction PouchError(opts) {\n  Error.call(this, opts.reason);\n  this.status = opts.status;\n  this.name = opts.error;\n  this.message = opts.reason;\n  this.error = true;\n}\n\nPouchError.prototype.toString = function () {\n  return JSON.stringify({\n    status: this.status,\n    name: this.name,\n    message: this.message,\n    reason: this.reason\n  });\n};\n\nvar UNAUTHORIZED = new PouchError({\n  status: 401,\n  error: 'unauthorized',\n  reason: \"Name or password is incorrect.\"\n});\n\nvar MISSING_BULK_DOCS = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: \"Missing JSON list of 'docs'\"\n});\n\nvar MISSING_DOC = new PouchError({\n  status: 404,\n  error: 'not_found',\n  reason: 'missing'\n});\n\nvar REV_CONFLICT = new PouchError({\n  status: 409,\n  error: 'conflict',\n  reason: 'Document update conflict'\n});\n\nvar INVALID_ID = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: '_id field must contain a string'\n});\n\nvar MISSING_ID = new PouchError({\n  status: 412,\n  error: 'missing_id',\n  reason: '_id is required for puts'\n});\n\nvar RESERVED_ID = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Only reserved document ids may start with underscore.'\n});\n\nvar NOT_OPEN = new PouchError({\n  status: 412,\n  error: 'precondition_failed',\n  reason: 'Database not open'\n});\n\nvar UNKNOWN_ERROR = new PouchError({\n  status: 500,\n  error: 'unknown_error',\n  reason: 'Database encountered an unknown error'\n});\n\nvar BAD_ARG = new PouchError({\n  status: 500,\n  error: 'badarg',\n  reason: 'Some query argument is invalid'\n});\n\nvar INVALID_REQUEST = new PouchError({\n  status: 400,\n  error: 'invalid_request',\n  reason: 'Request was invalid'\n});\n\nvar QUERY_PARSE_ERROR = new PouchError({\n  status: 400,\n  error: 'query_parse_error',\n  reason: 'Some query parameter is invalid'\n});\n\nvar DOC_VALIDATION = new PouchError({\n  status: 500,\n  error: 'doc_validation',\n  reason: 'Bad special document member'\n});\n\nvar BAD_REQUEST = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Something wrong with the request'\n});\n\nvar NOT_AN_OBJECT = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Document must be a JSON object'\n});\n\nvar DB_MISSING = new PouchError({\n  status: 404,\n  error: 'not_found',\n  reason: 'Database not found'\n});\n\nvar IDB_ERROR = new PouchError({\n  status: 500,\n  error: 'indexed_db_went_bad',\n  reason: 'unknown'\n});\n\nvar WSQ_ERROR = new PouchError({\n  status: 500,\n  error: 'web_sql_went_bad',\n  reason: 'unknown'\n});\n\nvar LDB_ERROR = new PouchError({\n  status: 500,\n  error: 'levelDB_went_went_bad',\n  reason: 'unknown'\n});\n\nvar FORBIDDEN = new PouchError({\n  status: 403,\n  error: 'forbidden',\n  reason: 'Forbidden by design doc validate_doc_update function'\n});\n\nvar INVALID_REV = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Invalid rev format'\n});\n\nvar FILE_EXISTS = new PouchError({\n  status: 412,\n  error: 'file_exists',\n  reason: 'The database could not be created, the file already exists.'\n});\n\nvar MISSING_STUB = new PouchError({\n  status: 412,\n  error: 'missing_stub'\n});\n\nvar INVALID_URL = new PouchError({\n  status: 413,\n  error: 'invalid_url',\n  reason: 'Provided URL is invalid'\n});\n\nfunction createError(error, reason) {\n  function CustomPouchError(reason) {\n    // inherit error properties from our parent error manually\n    // so as to allow proper JSON parsing.\n    /* jshint ignore:start */\n    for (var p in error) {\n      if (typeof error[p] !== 'function') {\n        this[p] = error[p];\n      }\n    }\n    /* jshint ignore:end */\n    if (reason !== undefined) {\n      this.reason = reason;\n    }\n  }\n  CustomPouchError.prototype = PouchError.prototype;\n  return new CustomPouchError(reason);\n}\n\nfunction generateErrorFromResponse(err) {\n\n  if (typeof err !== 'object') {\n    var data = err;\n    err = UNKNOWN_ERROR;\n    err.data = data;\n  }\n\n  if ('error' in err && err.error === 'conflict') {\n    err.name = 'conflict';\n    err.status = 409;\n  }\n\n  if (!('name' in err)) {\n    err.name = err.error || 'unknown';\n  }\n\n  if (!('status' in err)) {\n    err.status = 500;\n  }\n\n  if (!('message' in err)) {\n    err.message = err.message || err.reason;\n  }\n\n  return err;\n}\n\nfunction tryFilter(filter, doc, req) {\n  try {\n    return !filter(doc, req);\n  } catch (err) {\n    var msg = 'Filter function threw: ' + err.toString();\n    return createError(BAD_REQUEST, msg);\n  }\n}\n\nfunction filterChange(opts) {\n  var req = {};\n  var hasFilter = opts.filter && typeof opts.filter === 'function';\n  req.query = opts.query_params;\n\n  return function filter(change) {\n    if (!change.doc) {\n      // CSG sends events on the changes feed that don't have documents,\n      // this hack makes a whole lot of existing code robust.\n      change.doc = {};\n    }\n\n    var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);\n\n    if (typeof filterReturn === 'object') {\n      return filterReturn;\n    }\n\n    if (filterReturn) {\n      return false;\n    }\n\n    if (!opts.include_docs) {\n      delete change.doc;\n    } else if (!opts.attachments) {\n      for (var att in change.doc._attachments) {\n        /* istanbul ignore else */\n        if (change.doc._attachments.hasOwnProperty(att)) {\n          change.doc._attachments[att].stub = true;\n        }\n      }\n    }\n    return true;\n  };\n}\n\nfunction flatten(arrs) {\n  var res = [];\n  for (var i = 0, len = arrs.length; i < len; i++) {\n    res = res.concat(arrs[i]);\n  }\n  return res;\n}\n\n// shim for Function.prototype.name,\n// for browsers that don't support it like IE\n\n/* istanbul ignore next */\nfunction f() {}\n\nvar hasName = f.name;\nvar res$1;\n\n// We dont run coverage in IE\n/* istanbul ignore else */\nif (hasName) {\n  res$1 = function (fun) {\n    return fun.name;\n  };\n} else {\n  res$1 = function (fun) {\n    return fun.toString().match(/^\\s*function\\s*(\\S*)\\s*\\(/)[1];\n  };\n}\n\nvar functionName = res$1;\n\n// Determine id an ID is valid\n//   - invalid IDs begin with an underescore that does not begin '_design' or\n//     '_local'\n//   - any other string value is a valid id\n// Returns the specific error object for each case\nfunction invalidIdError(id) {\n  var err;\n  if (!id) {\n    err = createError(MISSING_ID);\n  } else if (typeof id !== 'string') {\n    err = createError(INVALID_ID);\n  } else if (/^_/.test(id) && !(/^_(design|local)/).test(id)) {\n    err = createError(RESERVED_ID);\n  }\n  if (err) {\n    throw err;\n  }\n}\n\nfunction listenerCount(ee, type) {\n  return 'listenerCount' in ee ? ee.listenerCount(type) :\n                                 events.EventEmitter.listenerCount(ee, type);\n}\n\nfunction parseDesignDocFunctionName(s) {\n  if (!s) {\n    return null;\n  }\n  var parts = s.split('/');\n  if (parts.length === 2) {\n    return parts;\n  }\n  if (parts.length === 1) {\n    return [s, s];\n  }\n  return null;\n}\n\nfunction normalizeDesignDocFunctionName(s) {\n  var normalized = parseDesignDocFunctionName(s);\n  return normalized ? normalized.join('/') : null;\n}\n\n// originally parseUri 1.2.2, now patched by us\n// (c) Steven Levithan <stevenlevithan.com>\n// MIT License\nvar keys = [\"source\", \"protocol\", \"authority\", \"userInfo\", \"user\", \"password\",\n    \"host\", \"port\", \"relative\", \"path\", \"directory\", \"file\", \"query\", \"anchor\"];\nvar qName =\"queryKey\";\nvar qParser = /(?:^|&)([^&=]*)=?([^&]*)/g;\n\n// use the \"loose\" parser\n/* jshint maxlen: false */\nvar parser = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nfunction parseUri(str) {\n  var m = parser.exec(str);\n  var uri = {};\n  var i = 14;\n\n  while (i--) {\n    var key = keys[i];\n    var value = m[i] || \"\";\n    var encoded = ['user', 'password'].indexOf(key) !== -1;\n    uri[key] = encoded ? decodeURIComponent(value) : value;\n  }\n\n  uri[qName] = {};\n  uri[keys[12]].replace(qParser, function ($0, $1, $2) {\n    if ($1) {\n      uri[qName][$1] = $2;\n    }\n  });\n\n  return uri;\n}\n\n// this is essentially the \"update sugar\" function from daleharvey/pouchdb#1388\n// the diffFun tells us what delta to apply to the doc.  it either returns\n// the doc, or false if it doesn't need to do an update after all\nfunction upsert(db, docId, diffFun) {\n  return new PouchPromise(function (fulfill, reject) {\n    db.get(docId, function (err, doc) {\n      if (err) {\n        /* istanbul ignore next */\n        if (err.status !== 404) {\n          return reject(err);\n        }\n        doc = {};\n      }\n\n      // the user might change the _rev, so save it for posterity\n      var docRev = doc._rev;\n      var newDoc = diffFun(doc);\n\n      if (!newDoc) {\n        // if the diffFun returns falsy, we short-circuit as\n        // an optimization\n        return fulfill({updated: false, rev: docRev});\n      }\n\n      // users aren't allowed to modify these values,\n      // so reset them here\n      newDoc._id = docId;\n      newDoc._rev = docRev;\n      fulfill(tryAndPut(db, newDoc, diffFun));\n    });\n  });\n}\n\nfunction tryAndPut(db, doc, diffFun) {\n  return db.put(doc).then(function (res) {\n    return {\n      updated: true,\n      rev: res.rev\n    };\n  }, function (err) {\n    /* istanbul ignore next */\n    if (err.status !== 409) {\n      throw err;\n    }\n    return upsert(db, doc._id, diffFun);\n  });\n}\n\n// BEGIN Math.uuid.js\n\n/*!\nMath.uuid.js (v1.4)\nhttp://www.broofa.com\nmailto:robert@broofa.com\n\nCopyright (c) 2010 Robert Kieffer\nDual licensed under the MIT and GPL licenses.\n*/\n\n/*\n * Generate a random uuid.\n *\n * USAGE: Math.uuid(length, radix)\n *   length - the desired number of characters\n *   radix  - the number of allowable values for each character.\n *\n * EXAMPLES:\n *   // No arguments  - returns RFC4122, version 4 ID\n *   >>> Math.uuid()\n *   \"92329D39-6F5C-4520-ABFC-AAB64544E172\"\n *\n *   // One argument - returns ID of the specified length\n *   >>> Math.uuid(15)     // 15 character ID (default base=62)\n *   \"VcydxgltxrVZSTV\"\n *\n *   // Two arguments - returns ID of the specified length, and radix. \n *   // (Radix must be <= 62)\n *   >>> Math.uuid(8, 2)  // 8 character ID (base=2)\n *   \"01001010\"\n *   >>> Math.uuid(8, 10) // 8 character ID (base=10)\n *   \"47473046\"\n *   >>> Math.uuid(8, 16) // 8 character ID (base=16)\n *   \"098F4D35\"\n */\nvar chars = (\n  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' +\n  'abcdefghijklmnopqrstuvwxyz'\n).split('');\nfunction getValue(radix) {\n  return 0 | Math.random() * radix;\n}\nfunction uuid(len, radix) {\n  radix = radix || chars.length;\n  var out = '';\n  var i = -1;\n\n  if (len) {\n    // Compact form\n    while (++i < len) {\n      out += chars[getValue(radix)];\n    }\n    return out;\n  }\n    // rfc4122, version 4 form\n    // Fill in random data.  At i==19 set the high bits of clock sequence as\n    // per rfc4122, sec. 4.1.5\n  while (++i < 36) {\n    switch (i) {\n      case 8:\n      case 13:\n      case 18:\n      case 23:\n        out += '-';\n        break;\n      case 19:\n        out += chars[(getValue(16) & 0x3) | 0x8];\n        break;\n      default:\n        out += chars[getValue(16)];\n    }\n  }\n\n  return out;\n}\n\n// based on https://github.com/montagejs/collections\nfunction mangle(key) {\n  return '$' + key;\n}\nfunction unmangle(key) {\n  return key.substring(1);\n}\nfunction _Map() {\n  this.store = {};\n}\n_Map.prototype.get = function (key) {\n  var mangled = mangle(key);\n  return this.store[mangled];\n};\n_Map.prototype.set = function (key, value) {\n  var mangled = mangle(key);\n  this.store[mangled] = value;\n  return true;\n};\n_Map.prototype.has = function (key) {\n  var mangled = mangle(key);\n  return mangled in this.store;\n};\n_Map.prototype.delete = function (key) {\n  var mangled = mangle(key);\n  var res = mangled in this.store;\n  delete this.store[mangled];\n  return res;\n};\n_Map.prototype.forEach = function (cb) {\n  var keys = Object.keys(this.store);\n  for (var i = 0, len = keys.length; i < len; i++) {\n    var key = keys[i];\n    var value = this.store[key];\n    key = unmangle(key);\n    cb(value, key);\n  }\n};\n\nfunction _Set(array) {\n  this.store = new _Map();\n\n  // init with an array\n  if (array && Array.isArray(array)) {\n    for (var i = 0, len = array.length; i < len; i++) {\n      this.add(array[i]);\n    }\n  }\n}\n_Set.prototype.add = function (key) {\n  return this.store.set(key, true);\n};\n_Set.prototype.has = function (key) {\n  return this.store.has(key);\n};\n\n// We fetch all leafs of the revision tree, and sort them based on tree length\n// and whether they were deleted, undeleted documents with the longest revision\n// tree (most edits) win\n// The final sort algorithm is slightly documented in a sidebar here:\n// http://guide.couchdb.org/draft/conflicts.html\nfunction winningRev(metadata) {\n  var winningId;\n  var winningPos;\n  var winningDeleted;\n  var toVisit = metadata.rev_tree.slice();\n  var node;\n  while ((node = toVisit.pop())) {\n    var tree = node.ids;\n    var branches = tree[2];\n    var pos = node.pos;\n    if (branches.length) { // non-leaf\n      for (var i = 0, len = branches.length; i < len; i++) {\n        toVisit.push({pos: pos + 1, ids: branches[i]});\n      }\n      continue;\n    }\n    var deleted = !!tree[1].deleted;\n    var id = tree[0];\n    // sort by deleted, then pos, then id\n    if (!winningId || (winningDeleted !== deleted ? winningDeleted :\n        winningPos !== pos ? winningPos < pos : winningId < id)) {\n      winningId = id;\n      winningPos = pos;\n      winningDeleted = deleted;\n    }\n  }\n\n  return winningPos + '-' + winningId;\n}\n\n// Pretty much all below can be combined into a higher order function to\n// traverse revisions\n// The return value from the callback will be passed as context to all\n// children of that node\nfunction traverseRevTree(revs, callback) {\n  var toVisit = revs.slice();\n\n  var node;\n  while ((node = toVisit.pop())) {\n    var pos = node.pos;\n    var tree = node.ids;\n    var branches = tree[2];\n    var newCtx =\n      callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);\n    for (var i = 0, len = branches.length; i < len; i++) {\n      toVisit.push({pos: pos + 1, ids: branches[i], ctx: newCtx});\n    }\n  }\n}\n\nfunction sortByPos(a, b) {\n  return a.pos - b.pos;\n}\n\nfunction collectLeaves(revs) {\n  var leaves = [];\n  traverseRevTree(revs, function (isLeaf, pos, id, acc, opts) {\n    if (isLeaf) {\n      leaves.push({rev: pos + \"-\" + id, pos: pos, opts: opts});\n    }\n  });\n  leaves.sort(sortByPos).reverse();\n  for (var i = 0, len = leaves.length; i < len; i++) {\n    delete leaves[i].pos;\n  }\n  return leaves;\n}\n\n// returns revs of all conflicts that is leaves such that\n// 1. are not deleted and\n// 2. are different than winning revision\nfunction collectConflicts(metadata) {\n  var win = winningRev(metadata);\n  var leaves = collectLeaves(metadata.rev_tree);\n  var conflicts = [];\n  for (var i = 0, len = leaves.length; i < len; i++) {\n    var leaf = leaves[i];\n    if (leaf.rev !== win && !leaf.opts.deleted) {\n      conflicts.push(leaf.rev);\n    }\n  }\n  return conflicts;\n}\n\n// compact a tree by marking its non-leafs as missing,\n// and return a list of revs to delete\nfunction compactTree(metadata) {\n  var revs = [];\n  traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n                                               revHash, ctx, opts) {\n    if (opts.status === 'available' && !isLeaf) {\n      revs.push(pos + '-' + revHash);\n      opts.status = 'missing';\n    }\n  });\n  return revs;\n}\n\n// build up a list of all the paths to the leafs in this revision tree\nfunction rootToLeaf(revs) {\n  var paths = [];\n  var toVisit = revs.slice();\n  var node;\n  while ((node = toVisit.pop())) {\n    var pos = node.pos;\n    var tree = node.ids;\n    var id = tree[0];\n    var opts = tree[1];\n    var branches = tree[2];\n    var isLeaf = branches.length === 0;\n\n    var history = node.history ? node.history.slice() : [];\n    history.push({id: id, opts: opts});\n    if (isLeaf) {\n      paths.push({pos: (pos + 1 - history.length), ids: history});\n    }\n    for (var i = 0, len = branches.length; i < len; i++) {\n      toVisit.push({pos: pos + 1, ids: branches[i], history: history});\n    }\n  }\n  return paths.reverse();\n}\n\n// for a better overview of what this is doing, read:\n// https://github.com/apache/couchdb-couch/blob/master/src/couch_key_tree.erl\n//\n// But for a quick intro, CouchDB uses a revision tree to store a documents\n// history, A -> B -> C, when a document has conflicts, that is a branch in the\n// tree, A -> (B1 | B2 -> C), We store these as a nested array in the format\n//\n// KeyTree = [Path ... ]\n// Path = {pos: position_from_root, ids: Tree}\n// Tree = [Key, Opts, [Tree, ...]], in particular single node: [Key, []]\n\nfunction sortByPos$1(a, b) {\n  return a.pos - b.pos;\n}\n\n// classic binary search\nfunction binarySearch(arr, item, comparator) {\n  var low = 0;\n  var high = arr.length;\n  var mid;\n  while (low < high) {\n    mid = (low + high) >>> 1;\n    if (comparator(arr[mid], item) < 0) {\n      low = mid + 1;\n    } else {\n      high = mid;\n    }\n  }\n  return low;\n}\n\n// assuming the arr is sorted, insert the item in the proper place\nfunction insertSorted(arr, item, comparator) {\n  var idx = binarySearch(arr, item, comparator);\n  arr.splice(idx, 0, item);\n}\n\n// Turn a path as a flat array into a tree with a single branch.\n// If any should be stemmed from the beginning of the array, that's passed\n// in as the second argument\nfunction pathToTree(path, numStemmed) {\n  var root;\n  var leaf;\n  for (var i = numStemmed, len = path.length; i < len; i++) {\n    var node = path[i];\n    var currentLeaf = [node.id, node.opts, []];\n    if (leaf) {\n      leaf[2].push(currentLeaf);\n      leaf = currentLeaf;\n    } else {\n      root = leaf = currentLeaf;\n    }\n  }\n  return root;\n}\n\n// compare the IDs of two trees\nfunction compareTree(a, b) {\n  return a[0] < b[0] ? -1 : 1;\n}\n\n// Merge two trees together\n// The roots of tree1 and tree2 must be the same revision\nfunction mergeTree(in_tree1, in_tree2) {\n  var queue = [{tree1: in_tree1, tree2: in_tree2}];\n  var conflicts = false;\n  while (queue.length > 0) {\n    var item = queue.pop();\n    var tree1 = item.tree1;\n    var tree2 = item.tree2;\n\n    if (tree1[1].status || tree2[1].status) {\n      tree1[1].status =\n        (tree1[1].status ===  'available' ||\n        tree2[1].status === 'available') ? 'available' : 'missing';\n    }\n\n    for (var i = 0; i < tree2[2].length; i++) {\n      if (!tree1[2][0]) {\n        conflicts = 'new_leaf';\n        tree1[2][0] = tree2[2][i];\n        continue;\n      }\n\n      var merged = false;\n      for (var j = 0; j < tree1[2].length; j++) {\n        if (tree1[2][j][0] === tree2[2][i][0]) {\n          queue.push({tree1: tree1[2][j], tree2: tree2[2][i]});\n          merged = true;\n        }\n      }\n      if (!merged) {\n        conflicts = 'new_branch';\n        insertSorted(tree1[2], tree2[2][i], compareTree);\n      }\n    }\n  }\n  return {conflicts: conflicts, tree: in_tree1};\n}\n\nfunction doMerge(tree, path, dontExpand) {\n  var restree = [];\n  var conflicts = false;\n  var merged = false;\n  var res;\n\n  if (!tree.length) {\n    return {tree: [path], conflicts: 'new_leaf'};\n  }\n\n  for (var i = 0, len = tree.length; i < len; i++) {\n    var branch = tree[i];\n    if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {\n      // Paths start at the same position and have the same root, so they need\n      // merged\n      res = mergeTree(branch.ids, path.ids);\n      restree.push({pos: branch.pos, ids: res.tree});\n      conflicts = conflicts || res.conflicts;\n      merged = true;\n    } else if (dontExpand !== true) {\n      // The paths start at a different position, take the earliest path and\n      // traverse up until it as at the same point from root as the path we\n      // want to merge.  If the keys match we return the longer path with the\n      // other merged After stemming we dont want to expand the trees\n\n      var t1 = branch.pos < path.pos ? branch : path;\n      var t2 = branch.pos < path.pos ? path : branch;\n      var diff = t2.pos - t1.pos;\n\n      var candidateParents = [];\n\n      var trees = [];\n      trees.push({ids: t1.ids, diff: diff, parent: null, parentIdx: null});\n      while (trees.length > 0) {\n        var item = trees.pop();\n        if (item.diff === 0) {\n          if (item.ids[0] === t2.ids[0]) {\n            candidateParents.push(item);\n          }\n          continue;\n        }\n        var elements = item.ids[2];\n        for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {\n          trees.push({\n            ids: elements[j],\n            diff: item.diff - 1,\n            parent: item.ids,\n            parentIdx: j\n          });\n        }\n      }\n\n      var el = candidateParents[0];\n\n      if (!el) {\n        restree.push(branch);\n      } else {\n        res = mergeTree(el.ids, t2.ids);\n        el.parent[2][el.parentIdx] = res.tree;\n        restree.push({pos: t1.pos, ids: t1.ids});\n        conflicts = conflicts || res.conflicts;\n        merged = true;\n      }\n    } else {\n      restree.push(branch);\n    }\n  }\n\n  // We didnt find\n  if (!merged) {\n    restree.push(path);\n  }\n\n  restree.sort(sortByPos$1);\n\n  return {\n    tree: restree,\n    conflicts: conflicts || 'internal_node'\n  };\n}\n\n// To ensure we dont grow the revision tree infinitely, we stem old revisions\nfunction stem(tree, depth) {\n  // First we break out the tree into a complete list of root to leaf paths\n  var paths = rootToLeaf(tree);\n  var maybeStem = {};\n\n  var result;\n  for (var i = 0, len = paths.length; i < len; i++) {\n    // Then for each path, we cut off the start of the path based on the\n    // `depth` to stem to, and generate a new set of flat trees\n    var path = paths[i];\n    var stemmed = path.ids;\n    var numStemmed = Math.max(0, stemmed.length - depth);\n    var stemmedNode = {\n      pos: path.pos + numStemmed,\n      ids: pathToTree(stemmed, numStemmed)\n    };\n\n    for (var s = 0; s < numStemmed; s++) {\n      var rev = (path.pos + s) + '-' + stemmed[s].id;\n      maybeStem[rev] = true;\n    }\n\n    // Then we remerge all those flat trees together, ensuring that we dont\n    // connect trees that would go beyond the depth limit\n    if (result) {\n      result = doMerge(result, stemmedNode, true).tree;\n    } else {\n      result = [stemmedNode];\n    }\n  }\n\n  traverseRevTree(result, function (isLeaf, pos, revHash) {\n    // some revisions may have been removed in a branch but not in another\n    delete maybeStem[pos + '-' + revHash];\n  });\n\n  return {\n    tree: result,\n    revs: Object.keys(maybeStem)\n  };\n}\n\nfunction merge(tree, path, depth) {\n  var newTree = doMerge(tree, path);\n  var stemmed = stem(newTree.tree, depth);\n  return {\n    tree: stemmed.tree,\n    stemmedRevs: stemmed.revs,\n    conflicts: newTree.conflicts\n  };\n}\n\n// return true if a rev exists in the rev tree, false otherwise\nfunction revExists(revs, rev) {\n  var toVisit = revs.slice();\n  var splitRev = rev.split('-');\n  var targetPos = parseInt(splitRev[0], 10);\n  var targetId = splitRev[1];\n\n  var node;\n  while ((node = toVisit.pop())) {\n    if (node.pos === targetPos && node.ids[0] === targetId) {\n      return true;\n    }\n    var branches = node.ids[2];\n    for (var i = 0, len = branches.length; i < len; i++) {\n      toVisit.push({pos: node.pos + 1, ids: branches[i]});\n    }\n  }\n  return false;\n}\n\nfunction getTrees(node) {\n  return node.ids;\n}\n\n// check if a specific revision of a doc has been deleted\n//  - metadata: the metadata object from the doc store\n//  - rev: (optional) the revision to check. defaults to winning revision\nfunction isDeleted(metadata, rev) {\n  if (!rev) {\n    rev = winningRev(metadata);\n  }\n  var id = rev.substring(rev.indexOf('-') + 1);\n  var toVisit = metadata.rev_tree.map(getTrees);\n\n  var tree;\n  while ((tree = toVisit.pop())) {\n    if (tree[0] === id) {\n      return !!tree[1].deleted;\n    }\n    toVisit = toVisit.concat(tree[2]);\n  }\n}\n\nfunction isLocalId(id) {\n  return (/^_local/).test(id);\n}\n\nfunction evalFilter(input) {\n  var code = '(function() {\\n\"use strict\";\\nreturn ' + input + '\\n})()';\n\n  return vm.runInNewContext(code);\n}\n\nfunction evalView(input) {\n  var code = [\n    '\"use strict\";',\n    'var emitted = false;',\n    'var emit = function (a, b) {',\n    '  emitted = true;',\n    '};',\n    'var view = ' + input + ';',\n    'view(doc);',\n    'if (emitted) {',\n    '  return true;',\n    '}'\n  ].join('\\n');\n\n  return vm.runInNewContext('(function(doc) {\\n' + code + '\\n})');\n}\n\ninherits(Changes$1, events.EventEmitter);\n\nfunction tryCatchInChangeListener(self, change) {\n  // isolate try/catches to avoid V8 deoptimizations\n  try {\n    self.emit('change', change);\n  } catch (e) {\n    guardedConsole('error', 'Error in .on(\"change\", function):', e);\n  }\n}\n\nfunction Changes$1(db, opts, callback) {\n  events.EventEmitter.call(this);\n  var self = this;\n  this.db = db;\n  opts = opts ? clone(opts) : {};\n  var complete = opts.complete = once(function (err, resp) {\n    if (err) {\n      if (listenerCount(self, 'error') > 0) {\n        self.emit('error', err);\n      }\n    } else {\n      self.emit('complete', resp);\n    }\n    self.removeAllListeners();\n    db.removeListener('destroyed', onDestroy);\n  });\n  if (callback) {\n    self.on('complete', function (resp) {\n      callback(null, resp);\n    });\n    self.on('error', callback);\n  }\n  function onDestroy() {\n    self.cancel();\n  }\n  db.once('destroyed', onDestroy);\n\n  opts.onChange = function (change) {\n    /* istanbul ignore if */\n    if (opts.isCancelled) {\n      return;\n    }\n    tryCatchInChangeListener(self, change);\n  };\n\n  var promise = new PouchPromise(function (fulfill, reject) {\n    opts.complete = function (err, res) {\n      if (err) {\n        reject(err);\n      } else {\n        fulfill(res);\n      }\n    };\n  });\n  self.once('cancel', function () {\n    db.removeListener('destroyed', onDestroy);\n    opts.complete(null, {status: 'cancelled'});\n  });\n  this.then = promise.then.bind(promise);\n  this['catch'] = promise['catch'].bind(promise);\n  this.then(function (result) {\n    complete(null, result);\n  }, complete);\n\n\n\n  if (!db.taskqueue.isReady) {\n    db.taskqueue.addTask(function (failed) {\n      if (failed) {\n        opts.complete(failed);\n      } else if (self.isCancelled) {\n        self.emit('cancel');\n      } else {\n        self.doChanges(opts);\n      }\n    });\n  } else {\n    self.doChanges(opts);\n  }\n}\nChanges$1.prototype.cancel = function () {\n  this.isCancelled = true;\n  if (this.db.taskqueue.isReady) {\n    this.emit('cancel');\n  }\n};\nfunction processChange(doc, metadata, opts) {\n  var changeList = [{rev: doc._rev}];\n  if (opts.style === 'all_docs') {\n    changeList = collectLeaves(metadata.rev_tree)\n    .map(function (x) { return {rev: x.rev}; });\n  }\n  var change = {\n    id: metadata.id,\n    changes: changeList,\n    doc: doc\n  };\n\n  if (isDeleted(metadata, doc._rev)) {\n    change.deleted = true;\n  }\n  if (opts.conflicts) {\n    change.doc._conflicts = collectConflicts(metadata);\n    if (!change.doc._conflicts.length) {\n      delete change.doc._conflicts;\n    }\n  }\n  return change;\n}\n\nChanges$1.prototype.doChanges = function (opts) {\n  var self = this;\n  var callback = opts.complete;\n\n  opts = clone(opts);\n  if ('live' in opts && !('continuous' in opts)) {\n    opts.continuous = opts.live;\n  }\n  opts.processChange = processChange;\n\n  if (opts.since === 'latest') {\n    opts.since = 'now';\n  }\n  if (!opts.since) {\n    opts.since = 0;\n  }\n  if (opts.since === 'now') {\n    this.db.info().then(function (info) {\n      /* istanbul ignore if */\n      if (self.isCancelled) {\n        callback(null, {status: 'cancelled'});\n        return;\n      }\n      opts.since = info.update_seq;\n      self.doChanges(opts);\n    }, callback);\n    return;\n  }\n\n\n  if (opts.view && !opts.filter) {\n    opts.filter = '_view';\n  }\n\n  if (opts.filter && typeof opts.filter === 'string') {\n    if (opts.filter === '_view') {\n      opts.view = normalizeDesignDocFunctionName(opts.view);\n    } else {\n      opts.filter = normalizeDesignDocFunctionName(opts.filter);\n    }\n\n    if (this.db.type() !== 'http' && !opts.doc_ids) {\n      return this.filterChanges(opts);\n    }\n  }\n\n  if (!('descending' in opts)) {\n    opts.descending = false;\n  }\n\n  // 0 and 1 should return 1 document\n  opts.limit = opts.limit === 0 ? 1 : opts.limit;\n  opts.complete = callback;\n  var newPromise = this.db._changes(opts);\n  /* istanbul ignore else */\n  if (newPromise && typeof newPromise.cancel === 'function') {\n    var cancel = self.cancel;\n    self.cancel = getArguments(function (args) {\n      newPromise.cancel();\n      cancel.apply(this, args);\n    });\n  }\n};\n\nChanges$1.prototype.filterChanges = function (opts) {\n  var self = this;\n  var callback = opts.complete;\n  if (opts.filter === '_view') {\n    if (!opts.view || typeof opts.view !== 'string') {\n      var err = createError(BAD_REQUEST,\n        '`view` filter parameter not found or invalid.');\n      return callback(err);\n    }\n    // fetch a view from a design doc, make it behave like a filter\n    var viewName = parseDesignDocFunctionName(opts.view);\n    this.db.get('_design/' + viewName[0], function (err, ddoc) {\n      /* istanbul ignore if */\n      if (self.isCancelled) {\n        return callback(null, {status: 'cancelled'});\n      }\n      /* istanbul ignore next */\n      if (err) {\n        return callback(generateErrorFromResponse(err));\n      }\n      var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&\n        ddoc.views[viewName[1]].map;\n      if (!mapFun) {\n        return callback(createError(MISSING_DOC,\n          (ddoc.views ? 'missing json key: ' + viewName[1] :\n            'missing json key: views')));\n      }\n      opts.filter = evalView(mapFun);\n      self.doChanges(opts);\n    });\n  } else {\n    // fetch a filter from a design doc\n    var filterName = parseDesignDocFunctionName(opts.filter);\n    if (!filterName) {\n      return self.doChanges(opts);\n    }\n    this.db.get('_design/' + filterName[0], function (err, ddoc) {\n      /* istanbul ignore if */\n      if (self.isCancelled) {\n        return callback(null, {status: 'cancelled'});\n      }\n      /* istanbul ignore next */\n      if (err) {\n        return callback(generateErrorFromResponse(err));\n      }\n      var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];\n      if (!filterFun) {\n        return callback(createError(MISSING_DOC,\n          ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]\n            : 'missing json key: filters')));\n      }\n      opts.filter = evalFilter(filterFun);\n      self.doChanges(opts);\n    });\n  }\n};\n\n/*\n * A generic pouch adapter\n */\n\nfunction compare(left, right) {\n  return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// returns first element of arr satisfying callback predicate\nfunction arrayFirst(arr, callback) {\n  for (var i = 0; i < arr.length; i++) {\n    if (callback(arr[i], i) === true) {\n      return arr[i];\n    }\n  }\n}\n\n// Wrapper for functions that call the bulkdocs api with a single doc,\n// if the first result is an error, return an error\nfunction yankError(callback) {\n  return function (err, results) {\n    if (err || (results[0] && results[0].error)) {\n      callback(err || results[0]);\n    } else {\n      callback(null, results.length ? results[0]  : results);\n    }\n  };\n}\n\n// clean docs given to us by the user\nfunction cleanDocs(docs) {\n  for (var i = 0; i < docs.length; i++) {\n    var doc = docs[i];\n    if (doc._deleted) {\n      delete doc._attachments; // ignore atts for deleted docs\n    } else if (doc._attachments) {\n      // filter out extraneous keys from _attachments\n      var atts = Object.keys(doc._attachments);\n      for (var j = 0; j < atts.length; j++) {\n        var att = atts[j];\n        doc._attachments[att] = pick(doc._attachments[att],\n          ['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);\n      }\n    }\n  }\n}\n\n// compare two docs, first by _id then by _rev\nfunction compareByIdThenRev(a, b) {\n  var idCompare = compare(a._id, b._id);\n  if (idCompare !== 0) {\n    return idCompare;\n  }\n  var aStart = a._revisions ? a._revisions.start : 0;\n  var bStart = b._revisions ? b._revisions.start : 0;\n  return compare(aStart, bStart);\n}\n\n// for every node in a revision tree computes its distance from the closest\n// leaf\nfunction computeHeight(revs) {\n  var height = {};\n  var edges = [];\n  traverseRevTree(revs, function (isLeaf, pos, id, prnt) {\n    var rev = pos + \"-\" + id;\n    if (isLeaf) {\n      height[rev] = 0;\n    }\n    if (prnt !== undefined) {\n      edges.push({from: prnt, to: rev});\n    }\n    return rev;\n  });\n\n  edges.reverse();\n  edges.forEach(function (edge) {\n    if (height[edge.from] === undefined) {\n      height[edge.from] = 1 + height[edge.to];\n    } else {\n      height[edge.from] = Math.min(height[edge.from], 1 + height[edge.to]);\n    }\n  });\n  return height;\n}\n\nfunction allDocsKeysQuery(api, opts, callback) {\n  var keys =  ('limit' in opts) ?\n      opts.keys.slice(opts.skip, opts.limit + opts.skip) :\n      (opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;\n  if (opts.descending) {\n    keys.reverse();\n  }\n  if (!keys.length) {\n    return api._allDocs({limit: 0}, callback);\n  }\n  var finalResults = {\n    offset: opts.skip\n  };\n  return PouchPromise.all(keys.map(function (key) {\n    var subOpts = extend$1({key: key, deleted: 'ok'}, opts);\n    ['limit', 'skip', 'keys'].forEach(function (optKey) {\n      delete subOpts[optKey];\n    });\n    return new PouchPromise(function (resolve, reject) {\n      api._allDocs(subOpts, function (err, res) {\n        /* istanbul ignore if */\n        if (err) {\n          return reject(err);\n        }\n        finalResults.total_rows = res.total_rows;\n        resolve(res.rows[0] || {key: key, error: 'not_found'});\n      });\n    });\n  })).then(function (results) {\n    finalResults.rows = results;\n    return finalResults;\n  });\n}\n\n// all compaction is done in a queue, to avoid attaching\n// too many listeners at once\nfunction doNextCompaction(self) {\n  var task = self._compactionQueue[0];\n  var opts = task.opts;\n  var callback = task.callback;\n  self.get('_local/compaction').catch(function () {\n    return false;\n  }).then(function (doc) {\n    if (doc && doc.last_seq) {\n      opts.last_seq = doc.last_seq;\n    }\n    self._compact(opts, function (err, res) {\n      /* istanbul ignore if */\n      if (err) {\n        callback(err);\n      } else {\n        callback(null, res);\n      }\n      process.nextTick(function () {\n        self._compactionQueue.shift();\n        if (self._compactionQueue.length) {\n          doNextCompaction(self);\n        }\n      });\n    });\n  });\n}\n\nfunction attachmentNameError(name) {\n  if (name.charAt(0) === '_') {\n    return name + 'is not a valid attachment name, attachment ' +\n      'names cannot start with \\'_\\'';\n  }\n  return false;\n}\n\ninherits(AbstractPouchDB, events.EventEmitter);\n\nfunction AbstractPouchDB() {\n  events.EventEmitter.call(this);\n}\n\nAbstractPouchDB.prototype.post =\n  adapterFun('post', function (doc, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  if (typeof doc !== 'object' || Array.isArray(doc)) {\n    return callback(createError(NOT_AN_OBJECT));\n  }\n  this.bulkDocs({docs: [doc]}, opts, yankError(callback));\n});\n\nAbstractPouchDB.prototype.put = adapterFun('put', function (doc, opts, cb) {\n  if (typeof opts === 'function') {\n    cb = opts;\n    opts = {};\n  }\n  if (typeof doc !== 'object' || Array.isArray(doc)) {\n    return cb(createError(NOT_AN_OBJECT));\n  }\n  invalidIdError(doc._id);\n  if (isLocalId(doc._id) && typeof this._putLocal === 'function') {\n    if (doc._deleted) {\n      return this._removeLocal(doc, cb);\n    } else {\n      return this._putLocal(doc, cb);\n    }\n  }\n  if (typeof this._put === 'function' && opts.new_edits !== false) {\n    this._put(doc, opts, cb);\n  } else {\n    this.bulkDocs({docs: [doc]}, opts, yankError(cb));\n  }\n});\n\nAbstractPouchDB.prototype.putAttachment =\n  adapterFun('putAttachment', function (docId, attachmentId, rev,\n                                              blob, type) {\n  var api = this;\n  if (typeof type === 'function') {\n    type = blob;\n    blob = rev;\n    rev = null;\n  }\n  // Lets fix in https://github.com/pouchdb/pouchdb/issues/3267\n  /* istanbul ignore if */\n  if (typeof type === 'undefined') {\n    type = blob;\n    blob = rev;\n    rev = null;\n  }\n\n  function createAttachment(doc) {\n    var prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;\n    doc._attachments = doc._attachments || {};\n    doc._attachments[attachmentId] = {\n      content_type: type,\n      data: blob,\n      revpos: ++prevrevpos\n    };\n    return api.put(doc);\n  }\n\n  return api.get(docId).then(function (doc) {\n    if (doc._rev !== rev) {\n      throw createError(REV_CONFLICT);\n    }\n\n    return createAttachment(doc);\n  }, function (err) {\n     // create new doc\n    /* istanbul ignore else */\n    if (err.reason === MISSING_DOC.message) {\n      return createAttachment({_id: docId});\n    } else {\n      throw err;\n    }\n  });\n});\n\nAbstractPouchDB.prototype.removeAttachment =\n  adapterFun('removeAttachment', function (docId, attachmentId, rev,\n                                                 callback) {\n  var self = this;\n  self.get(docId, function (err, obj) {\n    /* istanbul ignore if */\n    if (err) {\n      callback(err);\n      return;\n    }\n    if (obj._rev !== rev) {\n      callback(createError(REV_CONFLICT));\n      return;\n    }\n    /* istanbul ignore if */\n    if (!obj._attachments) {\n      return callback();\n    }\n    delete obj._attachments[attachmentId];\n    if (Object.keys(obj._attachments).length === 0) {\n      delete obj._attachments;\n    }\n    self.put(obj, callback);\n  });\n});\n\nAbstractPouchDB.prototype.remove =\n  adapterFun('remove', function (docOrId, optsOrRev, opts, callback) {\n  var doc;\n  if (typeof optsOrRev === 'string') {\n    // id, rev, opts, callback style\n    doc = {\n      _id: docOrId,\n      _rev: optsOrRev\n    };\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n  } else {\n    // doc, opts, callback style\n    doc = docOrId;\n    if (typeof optsOrRev === 'function') {\n      callback = optsOrRev;\n      opts = {};\n    } else {\n      callback = opts;\n      opts = optsOrRev;\n    }\n  }\n  opts = opts || {};\n  opts.was_delete = true;\n  var newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};\n  newDoc._deleted = true;\n  if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {\n    return this._removeLocal(doc, callback);\n  }\n  this.bulkDocs({docs: [newDoc]}, opts, yankError(callback));\n});\n\nAbstractPouchDB.prototype.revsDiff =\n  adapterFun('revsDiff', function (req, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  var ids = Object.keys(req);\n\n  if (!ids.length) {\n    return callback(null, {});\n  }\n\n  var count = 0;\n  var missing = new _Map();\n\n  function addToMissing(id, revId) {\n    if (!missing.has(id)) {\n      missing.set(id, {missing: []});\n    }\n    missing.get(id).missing.push(revId);\n  }\n\n  function processDoc(id, rev_tree) {\n    // Is this fast enough? Maybe we should switch to a set simulated by a map\n    var missingForId = req[id].slice(0);\n    traverseRevTree(rev_tree, function (isLeaf, pos, revHash, ctx,\n      opts) {\n        var rev = pos + '-' + revHash;\n        var idx = missingForId.indexOf(rev);\n        if (idx === -1) {\n          return;\n        }\n\n        missingForId.splice(idx, 1);\n        /* istanbul ignore if */\n        if (opts.status !== 'available') {\n          addToMissing(id, rev);\n        }\n      });\n\n    // Traversing the tree is synchronous, so now `missingForId` contains\n    // revisions that were not found in the tree\n    missingForId.forEach(function (rev) {\n      addToMissing(id, rev);\n    });\n  }\n\n  ids.map(function (id) {\n    this._getRevisionTree(id, function (err, rev_tree) {\n      if (err && err.status === 404 && err.message === 'missing') {\n        missing.set(id, {missing: req[id]});\n      } else if (err) {\n        /* istanbul ignore next */\n        return callback(err);\n      } else {\n        processDoc(id, rev_tree);\n      }\n\n      if (++count === ids.length) {\n        // convert LazyMap to object\n        var missingObj = {};\n        missing.forEach(function (value, key) {\n          missingObj[key] = value;\n        });\n        return callback(null, missingObj);\n      }\n    });\n  }, this);\n});\n\n// _bulk_get API for faster replication, as described in\n// https://github.com/apache/couchdb-chttpd/pull/33\n// At the \"abstract\" level, it will just run multiple get()s in\n// parallel, because this isn't much of a performance cost\n// for local databases (except the cost of multiple transactions, which is\n// small). The http adapter overrides this in order\n// to do a more efficient single HTTP request.\nAbstractPouchDB.prototype.bulkGet =\n  adapterFun('bulkGet', function (opts, callback) {\n  bulkGet(this, opts, callback);\n});\n\n// compact one document and fire callback\n// by compacting we mean removing all revisions which\n// are further from the leaf in revision tree than max_height\nAbstractPouchDB.prototype.compactDocument =\n  adapterFun('compactDocument', function (docId, maxHeight, callback) {\n  var self = this;\n  this._getRevisionTree(docId, function (err, revTree) {\n    /* istanbul ignore if */\n    if (err) {\n      return callback(err);\n    }\n    var height = computeHeight(revTree);\n    var candidates = [];\n    var revs = [];\n    Object.keys(height).forEach(function (rev) {\n      if (height[rev] > maxHeight) {\n        candidates.push(rev);\n      }\n    });\n\n    traverseRevTree(revTree, function (isLeaf, pos, revHash, ctx, opts) {\n      var rev = pos + '-' + revHash;\n      if (opts.status === 'available' && candidates.indexOf(rev) !== -1) {\n        revs.push(rev);\n      }\n    });\n    self._doCompaction(docId, revs, callback);\n  });\n});\n\n// compact the whole database using single document\n// compaction\nAbstractPouchDB.prototype.compact =\n  adapterFun('compact', function (opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n\n  var self = this;\n  opts = opts || {};\n\n  self._compactionQueue = self._compactionQueue || [];\n  self._compactionQueue.push({opts: opts, callback: callback});\n  if (self._compactionQueue.length === 1) {\n    doNextCompaction(self);\n  }\n});\nAbstractPouchDB.prototype._compact = function (opts, callback) {\n  var self = this;\n  var changesOpts = {\n    return_docs: false,\n    last_seq: opts.last_seq || 0\n  };\n  var promises = [];\n\n  function onChange(row) {\n    promises.push(self.compactDocument(row.id, 0));\n  }\n  function onComplete(resp) {\n    var lastSeq = resp.last_seq;\n    PouchPromise.all(promises).then(function () {\n      return upsert(self, '_local/compaction', function deltaFunc(doc) {\n        if (!doc.last_seq || doc.last_seq < lastSeq) {\n          doc.last_seq = lastSeq;\n          return doc;\n        }\n        return false; // somebody else got here first, don't update\n      });\n    }).then(function () {\n      callback(null, {ok: true});\n    }).catch(callback);\n  }\n  self.changes(changesOpts)\n    .on('change', onChange)\n    .on('complete', onComplete)\n    .on('error', callback);\n};\n\n/* Begin api wrappers. Specific functionality to storage belongs in the\n   _[method] */\nAbstractPouchDB.prototype.get = adapterFun('get', function (id, opts, cb) {\n  if (typeof opts === 'function') {\n    cb = opts;\n    opts = {};\n  }\n  if (typeof id !== 'string') {\n    return cb(createError(INVALID_ID));\n  }\n  if (isLocalId(id) && typeof this._getLocal === 'function') {\n    return this._getLocal(id, cb);\n  }\n  var leaves = [], self = this;\n\n  function finishOpenRevs() {\n    var result = [];\n    var count = leaves.length;\n    /* istanbul ignore if */\n    if (!count) {\n      return cb(null, result);\n    }\n    // order with open_revs is unspecified\n    leaves.forEach(function (leaf) {\n      self.get(id, {\n        rev: leaf,\n        revs: opts.revs,\n        attachments: opts.attachments\n      }, function (err, doc) {\n        if (!err) {\n          result.push({ok: doc});\n        } else {\n          result.push({missing: leaf});\n        }\n        count--;\n        if (!count) {\n          cb(null, result);\n        }\n      });\n    });\n  }\n\n  if (opts.open_revs) {\n    if (opts.open_revs === \"all\") {\n      this._getRevisionTree(id, function (err, rev_tree) {\n        if (err) {\n          return cb(err);\n        }\n        leaves = collectLeaves(rev_tree).map(function (leaf) {\n          return leaf.rev;\n        });\n        finishOpenRevs();\n      });\n    } else {\n      if (Array.isArray(opts.open_revs)) {\n        leaves = opts.open_revs;\n        for (var i = 0; i < leaves.length; i++) {\n          var l = leaves[i];\n          // looks like it's the only thing couchdb checks\n          if (!(typeof (l) === \"string\" && /^\\d+-/.test(l))) {\n            return cb(createError(INVALID_REV));\n          }\n        }\n        finishOpenRevs();\n      } else {\n        return cb(createError(UNKNOWN_ERROR, 'function_clause'));\n      }\n    }\n    return; // open_revs does not like other options\n  }\n\n  return this._get(id, opts, function (err, result) {\n    if (err) {\n      return cb(err);\n    }\n\n    var doc = result.doc;\n    var metadata = result.metadata;\n    var ctx = result.ctx;\n\n    if (opts.conflicts) {\n      var conflicts = collectConflicts(metadata);\n      if (conflicts.length) {\n        doc._conflicts = conflicts;\n      }\n    }\n\n    if (isDeleted(metadata, doc._rev)) {\n      doc._deleted = true;\n    }\n\n    if (opts.revs || opts.revs_info) {\n      var paths = rootToLeaf(metadata.rev_tree);\n      var path = arrayFirst(paths, function (arr) {\n        return arr.ids.map(function (x) { return x.id; })\n          .indexOf(doc._rev.split('-')[1]) !== -1;\n      });\n\n      var indexOfRev = path.ids.map(function (x) {return x.id; })\n        .indexOf(doc._rev.split('-')[1]) + 1;\n      var howMany = path.ids.length - indexOfRev;\n      path.ids.splice(indexOfRev, howMany);\n      path.ids.reverse();\n\n      if (opts.revs) {\n        doc._revisions = {\n          start: (path.pos + path.ids.length) - 1,\n          ids: path.ids.map(function (rev) {\n            return rev.id;\n          })\n        };\n      }\n      if (opts.revs_info) {\n        var pos =  path.pos + path.ids.length;\n        doc._revs_info = path.ids.map(function (rev) {\n          pos--;\n          return {\n            rev: pos + '-' + rev.id,\n            status: rev.opts.status\n          };\n        });\n      }\n    }\n\n    if (opts.attachments && doc._attachments) {\n      var attachments = doc._attachments;\n      var count = Object.keys(attachments).length;\n      if (count === 0) {\n        return cb(null, doc);\n      }\n      Object.keys(attachments).forEach(function (key) {\n        this._getAttachment(doc._id, key, attachments[key], {\n          // Previously the revision handling was done in adapter.js\n          // getAttachment, however since idb-next doesnt we need to\n          // pass the rev through\n          rev: doc._rev,\n          binary: opts.binary,\n          ctx: ctx\n        }, function (err, data) {\n          var att = doc._attachments[key];\n          att.data = data;\n          delete att.stub;\n          delete att.length;\n          if (!--count) {\n            cb(null, doc);\n          }\n        });\n      }, self);\n    } else {\n      if (doc._attachments) {\n        for (var key in doc._attachments) {\n          /* istanbul ignore else */\n          if (doc._attachments.hasOwnProperty(key)) {\n            doc._attachments[key].stub = true;\n          }\n        }\n      }\n      cb(null, doc);\n    }\n  });\n});\n\n// TODO: I dont like this, it forces an extra read for every\n// attachment read and enforces a confusing api between\n// adapter.js and the adapter implementation\nAbstractPouchDB.prototype.getAttachment =\n  adapterFun('getAttachment', function (docId, attachmentId, opts, callback) {\n  var self = this;\n  if (opts instanceof Function) {\n    callback = opts;\n    opts = {};\n  }\n  this._get(docId, opts, function (err, res) {\n    if (err) {\n      return callback(err);\n    }\n    if (res.doc._attachments && res.doc._attachments[attachmentId]) {\n      opts.ctx = res.ctx;\n      opts.binary = true;\n      self._getAttachment(docId, attachmentId,\n                          res.doc._attachments[attachmentId], opts, callback);\n    } else {\n      return callback(createError(MISSING_DOC));\n    }\n  });\n});\n\nAbstractPouchDB.prototype.allDocs =\n  adapterFun('allDocs', function (opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  opts.skip = typeof opts.skip !== 'undefined' ? opts.skip : 0;\n  if (opts.start_key) {\n    opts.startkey = opts.start_key;\n  }\n  if (opts.end_key) {\n    opts.endkey = opts.end_key;\n  }\n  if ('keys' in opts) {\n    if (!Array.isArray(opts.keys)) {\n      return callback(new TypeError('options.keys must be an array'));\n    }\n    var incompatibleOpt =\n      ['startkey', 'endkey', 'key'].filter(function (incompatibleOpt) {\n      return incompatibleOpt in opts;\n    })[0];\n    if (incompatibleOpt) {\n      callback(createError(QUERY_PARSE_ERROR,\n        'Query parameter `' + incompatibleOpt +\n        '` is not compatible with multi-get'\n      ));\n      return;\n    }\n    if (this.type() !== 'http') {\n      return allDocsKeysQuery(this, opts, callback);\n    }\n  }\n\n  return this._allDocs(opts, callback);\n});\n\nAbstractPouchDB.prototype.changes = function (opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return new Changes$1(this, opts, callback);\n};\n\nAbstractPouchDB.prototype.close = adapterFun('close', function (callback) {\n  this._closed = true;\n  return this._close(callback);\n});\n\nAbstractPouchDB.prototype.info = adapterFun('info', function (callback) {\n  var self = this;\n  this._info(function (err, info) {\n    if (err) {\n      return callback(err);\n    }\n    // assume we know better than the adapter, unless it informs us\n    info.db_name = info.db_name || self.name;\n    info.auto_compaction = !!(self.auto_compaction && self.type() !== 'http');\n    info.adapter = self.type();\n    callback(null, info);\n  });\n});\n\nAbstractPouchDB.prototype.id = adapterFun('id', function (callback) {\n  return this._id(callback);\n});\n\n/* istanbul ignore next */\nAbstractPouchDB.prototype.type = function () {\n  return (typeof this._type === 'function') ? this._type() : this.adapter;\n};\n\nAbstractPouchDB.prototype.bulkDocs =\n  adapterFun('bulkDocs', function (req, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n\n  opts = opts || {};\n\n  if (Array.isArray(req)) {\n    req = {\n      docs: req\n    };\n  }\n\n  if (!req || !req.docs || !Array.isArray(req.docs)) {\n    return callback(createError(MISSING_BULK_DOCS));\n  }\n\n  for (var i = 0; i < req.docs.length; ++i) {\n    if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {\n      return callback(createError(NOT_AN_OBJECT));\n    }\n  }\n\n  var attachmentError;\n  req.docs.forEach(function (doc) {\n    if (doc._attachments) {\n      Object.keys(doc._attachments).forEach(function (name) {\n        attachmentError = attachmentError || attachmentNameError(name);\n      });\n    }\n  });\n\n  if (attachmentError) {\n    return callback(createError(BAD_REQUEST, attachmentError));\n  }\n\n  if (!('new_edits' in opts)) {\n    if ('new_edits' in req) {\n      opts.new_edits = req.new_edits;\n    } else {\n      opts.new_edits = true;\n    }\n  }\n\n  if (!opts.new_edits && this.type() !== 'http') {\n    // ensure revisions of the same doc are sorted, so that\n    // the local adapter processes them correctly (#2935)\n    req.docs.sort(compareByIdThenRev);\n  }\n\n  cleanDocs(req.docs);\n\n  return this._bulkDocs(req, opts, function (err, res) {\n    if (err) {\n      return callback(err);\n    }\n    if (!opts.new_edits) {\n      // this is what couch does when new_edits is false\n      res = res.filter(function (x) {\n        return x.error;\n      });\n    }\n    callback(null, res);\n  });\n});\n\nAbstractPouchDB.prototype.registerDependentDatabase =\n  adapterFun('registerDependentDatabase', function (dependentDb,\n                                                          callback) {\n  var depDB = new this.constructor(dependentDb, this.__opts);\n\n  function diffFun(doc) {\n    doc.dependentDbs = doc.dependentDbs || {};\n    if (doc.dependentDbs[dependentDb]) {\n      return false; // no update required\n    }\n    doc.dependentDbs[dependentDb] = true;\n    return doc;\n  }\n  upsert(this, '_local/_pouch_dependentDbs', diffFun)\n    .then(function () {\n      callback(null, {db: depDB});\n    }).catch(callback);\n});\n\nAbstractPouchDB.prototype.destroy =\n  adapterFun('destroy', function (opts, callback) {\n\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n\n  var self = this;\n  var usePrefix = 'use_prefix' in self ? self.use_prefix : true;\n\n  function destroyDb() {\n    // call destroy method of the particular adaptor\n    self._destroy(opts, function (err, resp) {\n      if (err) {\n        return callback(err);\n      }\n      self._destroyed = true;\n      self.emit('destroyed');\n      callback(null, resp || { 'ok': true });\n    });\n  }\n\n  if (self.type() === 'http') {\n    // no need to check for dependent DBs if it's a remote DB\n    return destroyDb();\n  }\n\n  self.get('_local/_pouch_dependentDbs', function (err, localDoc) {\n    if (err) {\n      /* istanbul ignore if */\n      if (err.status !== 404) {\n        return callback(err);\n      } else { // no dependencies\n        return destroyDb();\n      }\n    }\n    var dependentDbs = localDoc.dependentDbs;\n    var PouchDB = self.constructor;\n    var deletedMap = Object.keys(dependentDbs).map(function (name) {\n      // use_prefix is only false in the browser\n      /* istanbul ignore next */\n      var trueName = usePrefix ?\n        name.replace(new RegExp('^' + PouchDB.prefix), '') : name;\n      return new PouchDB(trueName, self.__opts).destroy();\n    });\n    PouchPromise.all(deletedMap).then(destroyDb, callback);\n  });\n});\n\nfunction TaskQueue() {\n  this.isReady = false;\n  this.failed = false;\n  this.queue = [];\n}\n\nTaskQueue.prototype.execute = function () {\n  var fun;\n  if (this.failed) {\n    while ((fun = this.queue.shift())) {\n      fun(this.failed);\n    }\n  } else {\n    while ((fun = this.queue.shift())) {\n      fun();\n    }\n  }\n};\n\nTaskQueue.prototype.fail = function (err) {\n  this.failed = err;\n  this.execute();\n};\n\nTaskQueue.prototype.ready = function (db) {\n  this.isReady = true;\n  this.db = db;\n  this.execute();\n};\n\nTaskQueue.prototype.addTask = function (fun) {\n  this.queue.push(fun);\n  if (this.failed) {\n    this.execute();\n  }\n};\n\nfunction parseAdapter(name, opts) {\n  var match = name.match(/([a-z\\-]*):\\/\\/(.*)/);\n  if (match) {\n    // the http adapter expects the fully qualified name\n    name = /http(s?)/.test(match[1]) ? match[1] + '://' + match[2] : match[2];\n    return {name: name, adapter: match[1]};\n  }\n\n  // check for browsers that have been upgraded from websql-only to websql+idb\n  var skipIdb = 'idb' in PouchDB.adapters && 'websql' in PouchDB.adapters &&\n    hasLocalStorage() &&\n    localStorage['_pouch__websqldb_' + PouchDB.prefix + name];\n\n  var adapterName;\n\n  if (opts.adapter) {\n    adapterName = opts.adapter;\n  } else if (typeof opts !== 'undefined' && opts.db) {\n    adapterName = 'leveldb';\n  } else { // automatically determine adapter\n    for (var i = 0; i < PouchDB.preferredAdapters.length; ++i) {\n      adapterName = PouchDB.preferredAdapters[i];\n      /* istanbul ignore if */\n      if (skipIdb && adapterName === 'idb') {\n        // log it, because this can be confusing during development\n        guardedConsole('log', 'PouchDB is downgrading \"' + name + '\" to WebSQL to' +\n          ' avoid data loss, because it was already opened with WebSQL.');\n        continue; // keep using websql to avoid user data loss\n      }\n      break;\n    }\n  }\n\n  var adapter = PouchDB.adapters[adapterName];\n\n  // if adapter is invalid, then an error will be thrown later\n  var usePrefix = (adapter && 'use_prefix' in adapter) ?\n    adapter.use_prefix : true;\n\n  return {\n    name: usePrefix ? (PouchDB.prefix + name) : name,\n    adapter: adapterName\n  };\n}\n\n// OK, so here's the deal. Consider this code:\n//     var db1 = new PouchDB('foo');\n//     var db2 = new PouchDB('foo');\n//     db1.destroy();\n// ^ these two both need to emit 'destroyed' events,\n// as well as the PouchDB constructor itself.\n// So we have one db object (whichever one got destroy() called on it)\n// responsible for emitting the initial event, which then gets emitted\n// by the constructor, which then broadcasts it to any other dbs\n// that may have been created with the same name.\nfunction prepareForDestruction(self) {\n\n  var destructionListeners = self.constructor._destructionListeners;\n\n  function onDestroyed() {\n    self.constructor.emit('destroyed', self.name);\n  }\n\n  function onConstructorDestroyed() {\n    self.removeListener('destroyed', onDestroyed);\n    self.emit('destroyed', self);\n  }\n\n  self.once('destroyed', onDestroyed);\n\n  // in setup.js, the constructor is primed to listen for destroy events\n  if (!destructionListeners.has(self.name)) {\n    destructionListeners.set(self.name, []);\n  }\n  destructionListeners.get(self.name).push(onConstructorDestroyed);\n}\n\ninherits(PouchDB, AbstractPouchDB);\nfunction PouchDB(name, opts) {\n  // In Node our test suite only tests this for PouchAlt unfortunately\n  /* istanbul ignore if */\n  if (!(this instanceof PouchDB)) {\n    return new PouchDB(name, opts);\n  }\n\n  var self = this;\n  opts = opts || {};\n\n  if (name && typeof name === 'object') {\n    opts = name;\n    name = opts.name;\n    delete opts.name;\n  }\n\n  this.__opts = opts = clone(opts);\n\n  self.auto_compaction = opts.auto_compaction;\n  self.prefix = PouchDB.prefix;\n\n  if (typeof name !== 'string') {\n    throw new Error('Missing/invalid DB name');\n  }\n\n  var prefixedName = (opts.prefix || '') + name;\n  var backend = parseAdapter(prefixedName, opts);\n\n  opts.name = backend.name;\n  opts.adapter = opts.adapter || backend.adapter;\n\n  self.name = name;\n  self._adapter = opts.adapter;\n  debug('pouchdb:adapter')('Picked adapter: ' + opts.adapter);\n\n  if (!PouchDB.adapters[opts.adapter] ||\n      !PouchDB.adapters[opts.adapter].valid()) {\n    throw new Error('Invalid Adapter: ' + opts.adapter);\n  }\n\n  AbstractPouchDB.call(self);\n  self.taskqueue = new TaskQueue();\n\n  self.adapter = opts.adapter;\n\n  PouchDB.adapters[opts.adapter].call(self, opts, function (err) {\n    if (err) {\n      return self.taskqueue.fail(err);\n    }\n    prepareForDestruction(self);\n\n    self.emit('created', self);\n    PouchDB.emit('created', self.name);\n    self.taskqueue.ready(self);\n  });\n\n}\n\nPouchDB.debug = debug;\n\nPouchDB.adapters = {};\nPouchDB.preferredAdapters = [];\n\nPouchDB.prefix = '_pouch_';\n\nvar eventEmitter = new events.EventEmitter();\n\nfunction setUpEventEmitter(Pouch) {\n  Object.keys(events.EventEmitter.prototype).forEach(function (key) {\n    if (typeof events.EventEmitter.prototype[key] === 'function') {\n      Pouch[key] = eventEmitter[key].bind(eventEmitter);\n    }\n  });\n\n  // these are created in constructor.js, and allow us to notify each DB with\n  // the same name that it was destroyed, via the constructor object\n  var destructListeners = Pouch._destructionListeners = new _Map();\n  Pouch.on('destroyed', function onConstructorDestroyed(name) {\n    destructListeners.get(name).forEach(function (callback) {\n      callback();\n    });\n    destructListeners.delete(name);\n  });\n}\n\nsetUpEventEmitter(PouchDB);\n\nPouchDB.adapter = function (id, obj, addToPreferredAdapters) {\n  /* istanbul ignore else */\n  if (obj.valid()) {\n    PouchDB.adapters[id] = obj;\n    if (addToPreferredAdapters) {\n      PouchDB.preferredAdapters.push(id);\n    }\n  }\n};\n\nPouchDB.plugin = function (obj) {\n  if (typeof obj === 'function') { // function style for plugins\n    obj(PouchDB);\n  } else if (typeof obj !== 'object' || Object.keys(obj).length === 0){\n    throw new Error('Invalid plugin: object passed in is empty or not an object');\n  } else {\n    Object.keys(obj).forEach(function (id) { // object style for plugins\n      PouchDB.prototype[id] = obj[id];\n    });\n  }\n  return PouchDB;\n};\n\nPouchDB.defaults = function (defaultOpts) {\n  function PouchAlt(name, opts) {\n    if (!(this instanceof PouchAlt)) {\n      return new PouchAlt(name, opts);\n    }\n\n    opts = opts || {};\n\n    if (name && typeof name === 'object') {\n      opts = name;\n      name = opts.name;\n      delete opts.name;\n    }\n\n    opts = extend$1({}, defaultOpts, opts);\n    PouchDB.call(this, name, opts);\n  }\n\n  inherits(PouchAlt, PouchDB);\n\n  PouchAlt.preferredAdapters = PouchDB.preferredAdapters.slice();\n  Object.keys(PouchDB).forEach(function (key) {\n    if (!(key in PouchAlt)) {\n      PouchAlt[key] = PouchDB[key];\n    }\n  });\n\n  return PouchAlt;\n};\n\n// managed automatically by set-version.js\nvar version = \"6.0.7\";\n\nPouchDB.version = version;\n\nfunction isFunction(f) {\n  return 'function' === typeof f;\n}\n\nfunction getPrefix(db) {\n  if (isFunction(db.prefix)) {\n    return db.prefix();\n  }\n  return db;\n}\n\nfunction clone$1(_obj) {\n  var obj = {};\n  for(var k in _obj) {\n    obj[k] = _obj[k];\n  }\n  return obj;\n}\n\nfunction nut(db, precodec, codec) {\n  function encodePrefix(prefix, key, opts1, opts2) {\n    return precodec.encode([ prefix, codec.encodeKey(key, opts1, opts2 ) ]);\n  }\n\n  function addEncodings(op, prefix) {\n    if(prefix && prefix.options) {\n      op.keyEncoding =\n        op.keyEncoding || prefix.options.keyEncoding;\n      op.valueEncoding =\n        op.valueEncoding || prefix.options.valueEncoding;\n    }\n    return op;\n  }\n\n  db.open(function () { /* no-op */});\n\n  return {\n    apply: function (ops, opts, cb) {\n      opts = opts || {};\n\n      var batch = [];\n      var i = -1;\n      var len = ops.length;\n\n      while (++i < len) {\n        var op = ops[i];\n        addEncodings(op, op.prefix);\n        op.prefix = getPrefix(op.prefix);\n        batch.push({\n          key: encodePrefix(op.prefix, op.key, opts, op),\n          value: op.type !== 'del' && codec.encodeValue(op.value, opts, op),\n          type: op.type\n        });\n      }\n      db.db.batch(batch, opts, cb);\n    },\n    get: function (key, prefix, opts, cb) {\n      opts.asBuffer = codec.valueAsBuffer(opts);\n      return db.db.get(\n        encodePrefix(prefix, key, opts),\n        opts,\n        function (err, value) {\n          if (err) {\n            cb(err);\n          } else {\n            cb(null, codec.decodeValue(value, opts));\n          }\n        }\n      );\n    },\n    createDecoder: function (opts) {\n      return function (key, value) {\n        return {\n          key: codec.decodeKey(precodec.decode(key)[1], opts),\n          value: codec.decodeValue(value, opts)\n        };\n      };\n    },\n    isClosed: function isClosed() {\n      return db.isClosed();\n    },\n    close: function close(cb) {\n      return db.close(cb);\n    },\n    iterator: function (_opts) {\n      var opts = clone$1(_opts || {});\n      var prefix = _opts.prefix || [];\n\n      function encodeKey(key) {\n        return encodePrefix(prefix, key, opts, {});\n      }\n\n      ltgt.toLtgt(_opts, opts, encodeKey, precodec.lowerBound, precodec.upperBound);\n\n      // if these legacy values are in the options, remove them\n\n      opts.prefix = null;\n\n      //************************************************\n      //hard coded defaults, for now...\n      //TODO: pull defaults and encoding out of levelup.\n      opts.keyAsBuffer = opts.valueAsBuffer = false;\n      //************************************************\n\n\n      //this is vital, otherwise limit: undefined will\n      //create an empty stream.\n      /* istanbul ignore next */\n      if ('number' !== typeof opts.limit) {\n        opts.limit = -1;\n      }\n\n      opts.keyAsBuffer = precodec.buffer;\n      opts.valueAsBuffer = codec.valueAsBuffer(opts);\n\n      function wrapIterator(iterator) {\n        return {\n          next: function (cb) {\n            return iterator.next(cb);\n          },\n          end: function (cb) {\n            iterator.end(cb);\n          }\n        };\n      }\n\n      return wrapIterator(db.db.iterator(opts));\n    }\n  };\n}\n\nfunction NotFoundError() {\n  Error.call(this);\n}\n\ninherits(NotFoundError, Error);\n\nNotFoundError.prototype.name = 'NotFoundError';\n\nvar EventEmitter$1 = events__default.EventEmitter;\nvar version$1 = \"6.5.4\";\n\nvar NOT_FOUND_ERROR = new NotFoundError();\n\nvar sublevel = function (nut, prefix, createStream, options) {\n  var emitter = new EventEmitter$1();\n  emitter.sublevels = {};\n  emitter.options = options;\n\n  emitter.version = version$1;\n\n  emitter.methods = {};\n  prefix = prefix || [];\n\n  function mergeOpts(opts) {\n    var o = {};\n    var k;\n    if (options) {\n      for (k in options) {\n        if (typeof options[k] !== 'undefined') {\n          o[k] = options[k];\n        }\n      }\n    }\n    if (opts) {\n      for (k in opts) {\n        if (typeof opts[k] !== 'undefined') {\n          o[k] = opts[k];\n        }\n      }\n    }\n    return o;\n  }\n\n  emitter.put = function (key, value, opts, cb) {\n    if ('function' === typeof opts) {\n      cb = opts;\n      opts = {};\n    }\n\n    nut.apply([{\n      key: key, value: value,\n      prefix: prefix.slice(), type: 'put'\n    }], mergeOpts(opts), function (err) {\n      /* istanbul ignore next */\n      if (err) {\n        return cb(err);\n      }\n      emitter.emit('put', key, value);\n      cb(null);\n    });\n  };\n\n  emitter.prefix = function () {\n    return prefix.slice();\n  };\n\n  emitter.batch = function (ops, opts, cb) {\n    if ('function' === typeof opts) {\n      cb = opts;\n      opts = {};\n    }\n\n    ops = ops.map(function (op) {\n      return {\n        key: op.key,\n        value: op.value,\n        prefix: op.prefix || prefix,\n        keyEncoding: op.keyEncoding,    // *\n        valueEncoding: op.valueEncoding,  // * (TODO: encodings on sublevel)\n        type: op.type\n      };\n    });\n\n    nut.apply(ops, mergeOpts(opts), function (err) {\n      /* istanbul ignore next */\n      if (err) {\n        return cb(err);\n      }\n      emitter.emit('batch', ops);\n      cb(null);\n    });\n  };\n\n  emitter.get = function (key, opts, cb) {\n    /* istanbul ignore else */\n    if ('function' === typeof opts) {\n      cb = opts;\n      opts = {};\n    }\n    nut.get(key, prefix, mergeOpts(opts), function (err, value) {\n      if (err) {\n        cb(NOT_FOUND_ERROR);\n      } else {\n        cb(null, value);\n      }\n    });\n  };\n\n  emitter.sublevel = function (name, opts) {\n    return emitter.sublevels[name] =\n      emitter.sublevels[name] || sublevel(nut, prefix.concat(name), createStream, mergeOpts(opts));\n  };\n\n  emitter.readStream = emitter.createReadStream = function (opts) {\n    opts = mergeOpts(opts);\n    opts.prefix = prefix;\n    var stream;\n    var it = nut.iterator(opts);\n\n    stream = createStream(opts, nut.createDecoder(opts));\n    stream.setIterator(it);\n\n    return stream;\n  };\n\n  emitter.close = function (cb) {\n    nut.close(cb);\n  };\n\n  emitter.isOpen = nut.isOpen;\n  emitter.isClosed = nut.isClosed;\n\n  return emitter;\n};\n\n/* Copyright (c) 2012-2014 LevelUP contributors\n * See list at <https://github.com/rvagg/node-levelup#contributing>\n * MIT License <https://github.com/rvagg/node-levelup/blob/master/LICENSE.md>\n */\n\n// NOTE: we are fixed to readable-stream@1.0.x for now\n// for pure Streams2 across Node versions\nvar Readable = ReadableStreamCore.Readable;\n\nfunction ReadStream(options, makeData) {\n  if (!(this instanceof ReadStream)) {\n    return new ReadStream(options, makeData);\n  }\n\n  Readable.call(this, { objectMode: true, highWaterMark: options.highWaterMark });\n\n  // purely to keep `db` around until we're done so it's not GCed if the user doesn't keep a ref\n\n  this._waiting = false;\n  this._options = options;\n  this._makeData = makeData;\n}\n\ninherits(ReadStream, Readable);\n\nReadStream.prototype.setIterator = function (it) {\n  this._iterator = it;\n  /* istanbul ignore if */\n  if (this._destroyed) {\n    return it.end(function () {});\n  }\n  /* istanbul ignore if */\n  if (this._waiting) {\n    this._waiting = false;\n    return this._read();\n  }\n  return this;\n};\n\nReadStream.prototype._read = function read() {\n  var self = this;\n  /* istanbul ignore if */\n  if (self._destroyed) {\n    return;\n  }\n  /* istanbul ignore if */\n  if (!self._iterator) {\n    return this._waiting = true;\n  }\n\n  self._iterator.next(function (err, key, value) {\n    if (err || (key === undefined && value === undefined)) {\n      if (!err && !self._destroyed) {\n        self.push(null);\n      }\n      return self._cleanup(err);\n    }\n\n\n    value = self._makeData(key, value);\n    if (!self._destroyed) {\n      self.push(value);\n    }\n  });\n};\n\nReadStream.prototype._cleanup = function (err) {\n  if (this._destroyed) {\n    return;\n  }\n\n  this._destroyed = true;\n\n  var self = this;\n  /* istanbul ignore if */\n  if (err) {\n    self.emit('error', err);\n  }\n\n  /* istanbul ignore else */\n  if (self._iterator) {\n    self._iterator.end(function () {\n      self._iterator = null;\n      self.emit('close');\n    });\n  } else {\n    self.emit('close');\n  }\n};\n\nReadStream.prototype.destroy = function () {\n  this._cleanup();\n};\n\nvar precodec = {\n  encode: function (decodedKey) {\n    return '\\xff' + decodedKey[0] + '\\xff' + decodedKey[1];\n  },\n  decode: function (encodedKeyAsBuffer) {\n    var str = encodedKeyAsBuffer.toString();\n    var idx = str.indexOf('\\xff', 1);\n    return [str.substring(1, idx), str.substring(idx + 1)];\n  },\n  lowerBound: '\\x00',\n  upperBound: '\\xff'\n};\n\nvar codec = new Codec();\n\nfunction sublevelPouch(db) {\n  return sublevel(nut(db, precodec, codec), [], ReadStream, db.options);\n}\n\nfunction toObject(array) {\n  return array.reduce(function (obj, item) {\n    obj[item] = true;\n    return obj;\n  }, {});\n}\n// List of top level reserved words for doc\nvar reservedWords = toObject([\n  '_id',\n  '_rev',\n  '_attachments',\n  '_deleted',\n  '_revisions',\n  '_revs_info',\n  '_conflicts',\n  '_deleted_conflicts',\n  '_local_seq',\n  '_rev_tree',\n  //replication documents\n  '_replication_id',\n  '_replication_state',\n  '_replication_state_time',\n  '_replication_state_reason',\n  '_replication_stats',\n  // Specific to Couchbase Sync Gateway\n  '_removed'\n]);\n\n// List of reserved words that should end up the document\nvar dataWords = toObject([\n  '_attachments',\n  //replication documents\n  '_replication_id',\n  '_replication_state',\n  '_replication_state_time',\n  '_replication_state_reason',\n  '_replication_stats'\n]);\n\nfunction parseRevisionInfo(rev) {\n  if (!/^\\d+\\-./.test(rev)) {\n    return createError(INVALID_REV);\n  }\n  var idx = rev.indexOf('-');\n  var left = rev.substring(0, idx);\n  var right = rev.substring(idx + 1);\n  return {\n    prefix: parseInt(left, 10),\n    id: right\n  };\n}\n\nfunction makeRevTreeFromRevisions(revisions, opts) {\n  var pos = revisions.start - revisions.ids.length + 1;\n\n  var revisionIds = revisions.ids;\n  var ids = [revisionIds[0], opts, []];\n\n  for (var i = 1, len = revisionIds.length; i < len; i++) {\n    ids = [revisionIds[i], {status: 'missing'}, [ids]];\n  }\n\n  return [{\n    pos: pos,\n    ids: ids\n  }];\n}\n\n// Preprocess documents, parse their revisions, assign an id and a\n// revision for new writes that are missing them, etc\nfunction parseDoc(doc, newEdits) {\n\n  var nRevNum;\n  var newRevId;\n  var revInfo;\n  var opts = {status: 'available'};\n  if (doc._deleted) {\n    opts.deleted = true;\n  }\n\n  if (newEdits) {\n    if (!doc._id) {\n      doc._id = uuid();\n    }\n    newRevId = uuid(32, 16).toLowerCase();\n    if (doc._rev) {\n      revInfo = parseRevisionInfo(doc._rev);\n      if (revInfo.error) {\n        return revInfo;\n      }\n      doc._rev_tree = [{\n        pos: revInfo.prefix,\n        ids: [revInfo.id, {status: 'missing'}, [[newRevId, opts, []]]]\n      }];\n      nRevNum = revInfo.prefix + 1;\n    } else {\n      doc._rev_tree = [{\n        pos: 1,\n        ids : [newRevId, opts, []]\n      }];\n      nRevNum = 1;\n    }\n  } else {\n    if (doc._revisions) {\n      doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);\n      nRevNum = doc._revisions.start;\n      newRevId = doc._revisions.ids[0];\n    }\n    if (!doc._rev_tree) {\n      revInfo = parseRevisionInfo(doc._rev);\n      if (revInfo.error) {\n        return revInfo;\n      }\n      nRevNum = revInfo.prefix;\n      newRevId = revInfo.id;\n      doc._rev_tree = [{\n        pos: nRevNum,\n        ids: [newRevId, opts, []]\n      }];\n    }\n  }\n\n  invalidIdError(doc._id);\n\n  doc._rev = nRevNum + '-' + newRevId;\n\n  var result = {metadata : {}, data : {}};\n  for (var key in doc) {\n    /* istanbul ignore else */\n    if (Object.prototype.hasOwnProperty.call(doc, key)) {\n      var specialKey = key[0] === '_';\n      if (specialKey && !reservedWords[key]) {\n        var error = createError(DOC_VALIDATION, key);\n        error.message = DOC_VALIDATION.message + ': ' + key;\n        throw error;\n      } else if (specialKey && !dataWords[key]) {\n        result.metadata[key.slice(1)] = doc[key];\n      } else {\n        result.data[key] = doc[key];\n      }\n    }\n  }\n  return result;\n}\n\nfunction atob(str) {\n  var base64 = new Buffer(str, 'base64');\n  // Node.js will just skip the characters it can't decode instead of\n  // throwing an exception\n  if (base64.toString('base64') !== str) {\n    throw new Error(\"attachment is not a valid base64 string\");\n  }\n  return base64.toString('binary');\n}\n\nfunction btoa(str) {\n  return new Buffer(str, 'binary').toString('base64');\n}\n\nfunction typedBuffer(binString, buffType, type) {\n  // buffType is either 'binary' or 'base64'\n  var buff = new Buffer(binString, buffType);\n  buff.type = type; // non-standard, but used for consistency with the browser\n  return buff;\n}\n\nfunction b64ToBluffer(b64, type) {\n  return typedBuffer(b64, 'base64', type);\n}\n\nfunction binStringToBluffer(binString, type) {\n  return typedBuffer(binString, 'binary', type);\n}\n\n// This function is unused in Node\n/* istanbul ignore next */\nfunction createBlob() {\n}\n\nfunction blobToBase64(blobOrBuffer, callback) {\n  callback(blobOrBuffer.toString('base64'));\n}\n\nfunction binaryMd5(data, callback) {\n  var base64 = crypto.createHash('md5').update(data, 'binary').digest('base64');\n  callback(base64);\n}\n\nfunction stringMd5(string) {\n  return crypto.createHash('md5').update(string, 'binary').digest('hex');\n}\n\nfunction updateDoc(revLimit, prev, docInfo, results,\n                   i, cb, writeDoc, newEdits) {\n\n  if (revExists(prev.rev_tree, docInfo.metadata.rev)) {\n    results[i] = docInfo;\n    return cb();\n  }\n\n  // sometimes this is pre-calculated. historically not always\n  var previousWinningRev = prev.winningRev || winningRev(prev);\n  var previouslyDeleted = 'deleted' in prev ? prev.deleted :\n    isDeleted(prev, previousWinningRev);\n  var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :\n    isDeleted(docInfo.metadata);\n  var isRoot = /^1-/.test(docInfo.metadata.rev);\n\n  if (previouslyDeleted && !deleted && newEdits && isRoot) {\n    var newDoc = docInfo.data;\n    newDoc._rev = previousWinningRev;\n    newDoc._id = docInfo.metadata.id;\n    docInfo = parseDoc(newDoc, newEdits);\n  }\n\n  var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);\n\n  var inConflict = newEdits && (((previouslyDeleted && deleted) ||\n    (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||\n    (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));\n\n  if (inConflict) {\n    var err = createError(REV_CONFLICT);\n    results[i] = err;\n    return cb();\n  }\n\n  var newRev = docInfo.metadata.rev;\n  docInfo.metadata.rev_tree = merged.tree;\n  docInfo.stemmedRevs = merged.stemmedRevs || [];\n  /* istanbul ignore else */\n  if (prev.rev_map) {\n    docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb\n  }\n\n  // recalculate\n  var winningRev$$ = winningRev(docInfo.metadata);\n  var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$);\n\n  // calculate the total number of documents that were added/removed,\n  // from the perspective of total_rows/doc_count\n  var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :\n    previouslyDeleted < winningRevIsDeleted ? -1 : 1;\n\n  var newRevIsDeleted;\n  if (newRev === winningRev$$) {\n    // if the new rev is the same as the winning rev, we can reuse that value\n    newRevIsDeleted = winningRevIsDeleted;\n  } else {\n    // if they're not the same, then we need to recalculate\n    newRevIsDeleted = isDeleted(docInfo.metadata, newRev);\n  }\n\n  writeDoc(docInfo, winningRev$$, winningRevIsDeleted, newRevIsDeleted,\n    true, delta, i, cb);\n}\n\nfunction rootIsMissing(docInfo) {\n  return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';\n}\n\nfunction processDocs(revLimit, docInfos, api, fetchedDocs, tx, results,\n                     writeDoc, opts, overallCallback) {\n\n  // Default to 1000 locally\n  revLimit = revLimit || 1000;\n\n  function insertDoc(docInfo, resultsIdx, callback) {\n    // Cant insert new deleted documents\n    var winningRev$$ = winningRev(docInfo.metadata);\n    var deleted = isDeleted(docInfo.metadata, winningRev$$);\n    if ('was_delete' in opts && deleted) {\n      results[resultsIdx] = createError(MISSING_DOC, 'deleted');\n      return callback();\n    }\n\n    // 4712 - detect whether a new document was inserted with a _rev\n    var inConflict = newEdits && rootIsMissing(docInfo);\n\n    if (inConflict) {\n      var err = createError(REV_CONFLICT);\n      results[resultsIdx] = err;\n      return callback();\n    }\n\n    var delta = deleted ? 0 : 1;\n\n    writeDoc(docInfo, winningRev$$, deleted, deleted, false,\n      delta, resultsIdx, callback);\n  }\n\n  var newEdits = opts.new_edits;\n  var idsToDocs = new _Map();\n\n  var docsDone = 0;\n  var docsToDo = docInfos.length;\n\n  function checkAllDocsDone() {\n    if (++docsDone === docsToDo && overallCallback) {\n      overallCallback();\n    }\n  }\n\n  docInfos.forEach(function (currentDoc, resultsIdx) {\n\n    if (currentDoc._id && isLocalId(currentDoc._id)) {\n      var fun = currentDoc._deleted ? '_removeLocal' : '_putLocal';\n      api[fun](currentDoc, {ctx: tx}, function (err, res) {\n        results[resultsIdx] = err || res;\n        checkAllDocsDone();\n      });\n      return;\n    }\n\n    var id = currentDoc.metadata.id;\n    if (idsToDocs.has(id)) {\n      docsToDo--; // duplicate\n      idsToDocs.get(id).push([currentDoc, resultsIdx]);\n    } else {\n      idsToDocs.set(id, [[currentDoc, resultsIdx]]);\n    }\n  });\n\n  // in the case of new_edits, the user can provide multiple docs\n  // with the same id. these need to be processed sequentially\n  idsToDocs.forEach(function (docs, id) {\n    var numDone = 0;\n\n    function docWritten() {\n      if (++numDone < docs.length) {\n        nextDoc();\n      } else {\n        checkAllDocsDone();\n      }\n    }\n    function nextDoc() {\n      var value = docs[numDone];\n      var currentDoc = value[0];\n      var resultsIdx = value[1];\n\n      if (fetchedDocs.has(id)) {\n        updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,\n          resultsIdx, docWritten, writeDoc, newEdits);\n      } else {\n        // Ensure stemming applies to new writes as well\n        var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);\n        currentDoc.metadata.rev_tree = merged.tree;\n        currentDoc.stemmedRevs = merged.stemmedRevs || [];\n        insertDoc(currentDoc, resultsIdx, docWritten);\n      }\n    }\n    nextDoc();\n  });\n}\n\nfunction slowJsonParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch (e) {\n    /* istanbul ignore next */\n    return vuvuzela.parse(str);\n  }\n}\n\nfunction safeJsonParse(str) {\n  // try/catch is deoptimized in V8, leading to slower\n  // times than we'd like to have. Most documents are _not_\n  // huge, and do not require a slower code path just to parse them.\n  // We can be pretty sure that a document under 50000 characters\n  // will not be so deeply nested as to throw a stack overflow error\n  // (depends on the engine and available memory, though, so this is\n  // just a hunch). 50000 was chosen based on the average length\n  // of this string in our test suite, to try to find a number that covers\n  // most of our test cases (26 over this size, 26378 under it).\n  if (str.length < 50000) {\n    return JSON.parse(str);\n  }\n  return slowJsonParse(str);\n}\n\nfunction safeJsonStringify(json) {\n  try {\n    return JSON.stringify(json);\n  } catch (e) {\n    /* istanbul ignore next */\n    return vuvuzela.stringify(json);\n  }\n}\n\nfunction readAsBlobOrBuffer(storedObject, type) {\n  // In Node, we've stored a buffer\n  storedObject.type = type; // non-standard, but used for consistency\n  return storedObject;\n}\n\n// in Node, we store the buffer directly\nfunction prepareAttachmentForStorage(attData, cb) {\n  cb(attData);\n}\n\nfunction createEmptyBlobOrBuffer(type) {\n  return typedBuffer('', 'binary', type);\n}\n\n// similar to an idb or websql transaction object\n// designed to be passed around. basically just caches\n// things in-memory and then does a big batch() operation\n// when you're done\n\nfunction getCacheFor(transaction, store) {\n  var prefix = store.prefix()[0];\n  var cache = transaction._cache;\n  var subCache = cache.get(prefix);\n  if (!subCache) {\n    subCache = new _Map();\n    cache.set(prefix, subCache);\n  }\n  return subCache;\n}\n\nfunction LevelTransaction() {\n  this._batch = [];\n  this._cache = new _Map();\n}\n\nLevelTransaction.prototype.get = function (store, key, callback) {\n  var cache = getCacheFor(this, store);\n  var exists = cache.get(key);\n  if (exists) {\n    return process.nextTick(function () {\n      callback(null, exists);\n    });\n  } else if (exists === null) { // deleted marker\n    /* istanbul ignore next */\n    return process.nextTick(function () {\n      callback({name: 'NotFoundError'});\n    });\n  }\n  store.get(key, function (err, res) {\n    if (err) {\n      /* istanbul ignore else */\n      if (err.name === 'NotFoundError') {\n        cache.set(key, null);\n      }\n      return callback(err);\n    }\n    cache.set(key, res);\n    callback(null, res);\n  });\n};\n\nLevelTransaction.prototype.batch = function (batch) {\n  for (var i = 0, len = batch.length; i < len; i++) {\n    var operation = batch[i];\n\n    var cache = getCacheFor(this, operation.prefix);\n\n    if (operation.type === 'put') {\n      cache.set(operation.key, operation.value);\n    } else {\n      cache.set(operation.key, null);\n    }\n  }\n  this._batch = this._batch.concat(batch);\n};\n\nLevelTransaction.prototype.execute = function (db, callback) {\n\n  var keys = new _Set();\n  var uniqBatches = [];\n\n  // remove duplicates; last one wins\n  for (var i = this._batch.length - 1; i >= 0; i--) {\n    var operation = this._batch[i];\n    var lookupKey = operation.prefix.prefix()[0] + '\\xff' + operation.key;\n    if (keys.has(lookupKey)) {\n      continue;\n    }\n    keys.add(lookupKey);\n    uniqBatches.push(operation);\n  }\n\n  db.batch(uniqBatches, callback);\n};\n\nvar DOC_STORE = 'document-store';\nvar BY_SEQ_STORE = 'by-sequence';\nvar ATTACHMENT_STORE = 'attach-store';\nvar BINARY_STORE = 'attach-binary-store';\nvar LOCAL_STORE = 'local-store';\nvar META_STORE = 'meta-store';\n\n// leveldb barks if we try to open a db multiple times\n// so we cache opened connections here for initstore()\nvar dbStores = new _Map();\n\n// store the value of update_seq in the by-sequence store the key name will\n// never conflict, since the keys in the by-sequence store are integers\nvar UPDATE_SEQ_KEY = '_local_last_update_seq';\nvar DOC_COUNT_KEY = '_local_doc_count';\nvar UUID_KEY = '_local_uuid';\n\nvar MD5_PREFIX = 'md5-';\n\nvar safeJsonEncoding = {\n  encode: safeJsonStringify,\n  decode: safeJsonParse,\n  buffer: false,\n  type: 'cheap-json'\n};\n\nvar levelChanges = new Changes();\n\n// winningRev and deleted are performance-killers, but\n// in newer versions of PouchDB, they are cached on the metadata\nfunction getWinningRev(metadata) {\n  return 'winningRev' in metadata ?\n    metadata.winningRev : winningRev(metadata);\n}\n\nfunction getIsDeleted(metadata, winningRev) {\n  return 'deleted' in metadata ?\n    metadata.deleted : isDeleted(metadata, winningRev);\n}\n\nfunction fetchAttachment(att, stores, opts) {\n  var type = att.content_type;\n  return new PouchPromise(function (resolve, reject) {\n    stores.binaryStore.get(att.digest, function (err, buffer) {\n      var data;\n      if (err) {\n        /* istanbul ignore if */\n        if (err.name !== 'NotFoundError') {\n          return reject(err);\n        } else {\n          // empty\n          if (!opts.binary) {\n            data = '';\n          } else {\n            data = binStringToBluffer('', type);\n          }\n        }\n      } else { // non-empty\n        if (opts.binary) {\n          data = readAsBlobOrBuffer(buffer, type);\n        } else {\n          data = buffer.toString('base64');\n        }\n      }\n      delete att.stub;\n      delete att.length;\n      att.data = data;\n      resolve();\n    });\n  });\n}\n\nfunction fetchAttachments(results, stores, opts) {\n  var atts = [];\n  results.forEach(function (row) {\n    if (!(row.doc && row.doc._attachments)) {\n      return;\n    }\n    var attNames = Object.keys(row.doc._attachments);\n    attNames.forEach(function (attName) {\n      var att = row.doc._attachments[attName];\n      if (!('data' in att)) {\n        atts.push(att);\n      }\n    });\n  });\n\n  return PouchPromise.all(atts.map(function (att) {\n    return fetchAttachment(att, stores, opts);\n  }));\n}\n\nfunction LevelPouch$1(opts, callback) {\n  opts = clone(opts);\n  var api = this;\n  var instanceId;\n  var stores = {};\n  var revLimit = opts.revs_limit;\n  var db;\n  var name = opts.name;\n  // TODO: this is undocumented and unused probably\n  /* istanbul ignore else */\n  if (typeof opts.createIfMissing === 'undefined') {\n    opts.createIfMissing = true;\n  }\n\n  var leveldown = opts.db;\n\n  var dbStore;\n  var leveldownName = functionName(leveldown);\n  if (dbStores.has(leveldownName)) {\n    dbStore = dbStores.get(leveldownName);\n  } else {\n    dbStore = new _Map();\n    dbStores.set(leveldownName, dbStore);\n  }\n  if (dbStore.has(name)) {\n    db = dbStore.get(name);\n    afterDBCreated();\n  } else {\n    dbStore.set(name, sublevelPouch(levelup(name, opts, function (err) {\n      /* istanbul ignore if */\n      if (err) {\n        dbStore.delete(name);\n        return callback(err);\n      }\n      db = dbStore.get(name);\n      db._docCount  = -1;\n      db._queue = new Deque();\n      /* istanbul ignore else */\n      if (typeof opts.migrate === 'object') { // migration for leveldown\n        opts.migrate.doMigrationOne(name, db, afterDBCreated);\n      } else {\n        afterDBCreated();\n      }\n    })));\n  }\n\n  function afterDBCreated() {\n    stores.docStore = db.sublevel(DOC_STORE, {valueEncoding: safeJsonEncoding});\n    stores.bySeqStore = db.sublevel(BY_SEQ_STORE, {valueEncoding: 'json'});\n    stores.attachmentStore =\n      db.sublevel(ATTACHMENT_STORE, {valueEncoding: 'json'});\n    stores.binaryStore = db.sublevel(BINARY_STORE, {valueEncoding: 'binary'});\n    stores.localStore = db.sublevel(LOCAL_STORE, {valueEncoding: 'json'});\n    stores.metaStore = db.sublevel(META_STORE, {valueEncoding: 'json'});\n    /* istanbul ignore else */\n    if (typeof opts.migrate === 'object') { // migration for leveldown\n      opts.migrate.doMigrationTwo(db, stores, afterLastMigration);\n    } else {\n      afterLastMigration();\n    }\n  }\n\n  function afterLastMigration() {\n    stores.metaStore.get(UPDATE_SEQ_KEY, function (err, value) {\n      if (typeof db._updateSeq === 'undefined') {\n        db._updateSeq = value || 0;\n      }\n      stores.metaStore.get(DOC_COUNT_KEY, function (err, value) {\n        db._docCount = !err ? value : 0;\n        stores.metaStore.get(UUID_KEY, function (err, value) {\n          instanceId = !err ? value : uuid();\n          stores.metaStore.put(UUID_KEY, instanceId, function () {\n            process.nextTick(function () {\n              callback(null, api);\n            });\n          });\n        });\n      });\n    });\n  }\n\n  function countDocs(callback) {\n    /* istanbul ignore if */\n    if (db.isClosed()) {\n      return callback(new Error('database is closed'));\n    }\n    return callback(null, db._docCount); // use cached value\n  }\n\n  api.type = function () {\n    return 'leveldb';\n  };\n\n  api._id = function (callback) {\n    callback(null, instanceId);\n  };\n\n  api._info = function (callback) {\n    var res = {\n      doc_count: db._docCount,\n      update_seq: db._updateSeq,\n      backend_adapter: functionName(leveldown)\n    };\n    return process.nextTick(function () {\n      callback(null, res);\n    });\n  };\n\n  function tryCode(fun, args) {\n    try {\n      fun.apply(null, args);\n    } catch (err) {\n      args[args.length - 1](err);\n    }\n  }\n\n  function executeNext() {\n    var firstTask = db._queue.peekFront();\n\n    if (firstTask.type === 'read') {\n      runReadOperation(firstTask);\n    } else { // write, only do one at a time\n      runWriteOperation(firstTask);\n    }\n  }\n\n  function runReadOperation(firstTask) {\n    // do multiple reads at once simultaneously, because it's safe\n\n    var readTasks = [firstTask];\n    var i = 1;\n    var nextTask = db._queue.get(i);\n    while (typeof nextTask !== 'undefined' && nextTask.type === 'read') {\n      readTasks.push(nextTask);\n      i++;\n      nextTask = db._queue.get(i);\n    }\n\n    var numDone = 0;\n\n    readTasks.forEach(function (readTask) {\n      var args = readTask.args;\n      var callback = args[args.length - 1];\n      args[args.length - 1] = getArguments(function (cbArgs) {\n        callback.apply(null, cbArgs);\n        if (++numDone === readTasks.length) {\n          process.nextTick(function () {\n            // all read tasks have finished\n            readTasks.forEach(function () {\n              db._queue.shift();\n            });\n            if (db._queue.length) {\n              executeNext();\n            }\n          });\n        }\n      });\n      tryCode(readTask.fun, args);\n    });\n  }\n\n  function runWriteOperation(firstTask) {\n    var args = firstTask.args;\n    var callback = args[args.length - 1];\n    args[args.length - 1] = getArguments(function (cbArgs) {\n      callback.apply(null, cbArgs);\n      process.nextTick(function () {\n        db._queue.shift();\n        if (db._queue.length) {\n          executeNext();\n        }\n      });\n    });\n    tryCode(firstTask.fun, args);\n  }\n\n  // all read/write operations to the database are done in a queue,\n  // similar to how websql/idb works. this avoids problems such\n  // as e.g. compaction needing to have a lock on the database while\n  // it updates stuff. in the future we can revisit this.\n  function writeLock(fun) {\n    return getArguments(function (args) {\n      db._queue.push({\n        fun: fun,\n        args: args,\n        type: 'write'\n      });\n\n      if (db._queue.length === 1) {\n        process.nextTick(executeNext);\n      }\n    });\n  }\n\n  // same as the writelock, but multiple can run at once\n  function readLock(fun) {\n    return getArguments(function (args) {\n      db._queue.push({\n        fun: fun,\n        args: args,\n        type: 'read'\n      });\n\n      if (db._queue.length === 1) {\n        process.nextTick(executeNext);\n      }\n    });\n  }\n\n  function formatSeq(n) {\n    return ('0000000000000000' + n).slice(-16);\n  }\n\n  function parseSeq(s) {\n    return parseInt(s, 10);\n  }\n\n  api._get = readLock(function (id, opts, callback) {\n    opts = clone(opts);\n\n    stores.docStore.get(id, function (err, metadata) {\n\n      if (err || !metadata) {\n        return callback(createError(MISSING_DOC, 'missing'));\n      }\n\n      var rev = getWinningRev(metadata);\n      var deleted = getIsDeleted(metadata, rev);\n      if (deleted && !opts.rev) {\n        return callback(createError(MISSING_DOC, \"deleted\"));\n      }\n\n      rev = opts.rev ? opts.rev : rev;\n\n      var seq = metadata.rev_map[rev];\n\n      stores.bySeqStore.get(formatSeq(seq), function (err, doc) {\n        if (!doc) {\n          return callback(createError(MISSING_DOC));\n        }\n        /* istanbul ignore if */\n        if ('_id' in doc && doc._id !== metadata.id) {\n          // this failing implies something very wrong\n          return callback(new Error('wrong doc returned'));\n        }\n        doc._id = metadata.id;\n        if ('_rev' in doc) {\n          /* istanbul ignore if */\n          if (doc._rev !== rev) {\n            // this failing implies something very wrong\n            return callback(new Error('wrong doc returned'));\n          }\n        } else {\n          // we didn't always store this\n          doc._rev = rev;\n        }\n        return callback(null, {doc: doc, metadata: metadata});\n      });\n    });\n  });\n\n  // not technically part of the spec, but if putAttachment has its own\n  // method...\n  api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n    var digest = attachment.digest;\n    var type = attachment.content_type;\n\n    stores.binaryStore.get(digest, function (err, attach) {\n      if (err) {\n        /* istanbul ignore if */\n        if (err.name !== 'NotFoundError') {\n          return callback(err);\n        }\n        // Empty attachment\n        return callback(null, opts.binary ? createEmptyBlobOrBuffer(type) : '');\n      }\n\n      if (opts.binary) {\n        callback(null, readAsBlobOrBuffer(attach, type));\n      } else {\n        callback(null, attach.toString('base64'));\n      }\n    });\n  };\n\n  api._bulkDocs = writeLock(function (req, opts, callback) {\n    var newEdits = opts.new_edits;\n    var results = new Array(req.docs.length);\n    var fetchedDocs = new _Map();\n    var stemmedRevs = new _Map();\n\n    var txn = new LevelTransaction();\n    var docCountDelta = 0;\n    var newUpdateSeq = db._updateSeq;\n\n    // parse the docs and give each a sequence number\n    var userDocs = req.docs;\n    var docInfos = userDocs.map(function (doc) {\n      if (doc._id && isLocalId(doc._id)) {\n        return doc;\n      }\n      var newDoc = parseDoc(doc, newEdits);\n\n      if (newDoc.metadata && !newDoc.metadata.rev_map) {\n        newDoc.metadata.rev_map = {};\n      }\n\n      return newDoc;\n    });\n    var infoErrors = docInfos.filter(function (doc) {\n      return doc.error;\n    });\n\n    if (infoErrors.length) {\n      return callback(infoErrors[0]);\n    }\n\n    // verify any stub attachments as a precondition test\n\n    function verifyAttachment(digest, callback) {\n      txn.get(stores.attachmentStore, digest, function (levelErr) {\n        if (levelErr) {\n          var err = createError(MISSING_STUB,\n                                'unknown stub attachment with digest ' +\n                                digest);\n          callback(err);\n        } else {\n          callback();\n        }\n      });\n    }\n\n    function verifyAttachments(finish) {\n      var digests = [];\n      userDocs.forEach(function (doc) {\n        if (doc && doc._attachments) {\n          Object.keys(doc._attachments).forEach(function (filename) {\n            var att = doc._attachments[filename];\n            if (att.stub) {\n              digests.push(att.digest);\n            }\n          });\n        }\n      });\n      if (!digests.length) {\n        return finish();\n      }\n      var numDone = 0;\n      var err;\n\n      digests.forEach(function (digest) {\n        verifyAttachment(digest, function (attErr) {\n          if (attErr && !err) {\n            err = attErr;\n          }\n\n          if (++numDone === digests.length) {\n            finish(err);\n          }\n        });\n      });\n    }\n\n    function fetchExistingDocs(finish) {\n      var numDone = 0;\n      var overallErr;\n      function checkDone() {\n        if (++numDone === userDocs.length) {\n          return finish(overallErr);\n        }\n      }\n\n      userDocs.forEach(function (doc) {\n        if (doc._id && isLocalId(doc._id)) {\n          // skip local docs\n          return checkDone();\n        }\n        txn.get(stores.docStore, doc._id, function (err, info) {\n          if (err) {\n            /* istanbul ignore if */\n            if (err.name !== 'NotFoundError') {\n              overallErr = err;\n            }\n          } else {\n            fetchedDocs.set(doc._id, info);\n          }\n          checkDone();\n        });\n      });\n    }\n\n    function compact(revsMap, callback) {\n      var promise = PouchPromise.resolve();\n      revsMap.forEach(function (revs, docId) {\n        // TODO: parallelize, for now need to be sequential to\n        // pass orphaned attachment tests\n        promise = promise.then(function () {\n          return new PouchPromise(function (resolve, reject) {\n            api._doCompactionNoLock(docId, revs, {ctx: txn}, function (err) {\n              /* istanbul ignore if */\n              if (err) {\n                return reject(err);\n              }\n              resolve();\n            });\n          });\n        });\n      });\n\n      promise.then(function () {\n        callback();\n      }, callback);\n    }\n\n    function autoCompact(callback) {\n      var revsMap = new _Map();\n      fetchedDocs.forEach(function (metadata, docId) {\n        revsMap.set(docId, compactTree(metadata));\n      });\n      compact(revsMap, callback);\n    }\n\n    function finish() {\n      compact(stemmedRevs, function (error) {\n        /* istanbul ignore if */\n        if (error) {\n          complete(error);\n        }\n        if (api.auto_compaction) {\n          return autoCompact(complete);\n        }\n        complete();\n      });\n    }\n\n    function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,\n                      isUpdate, delta, resultsIdx, callback2) {\n      docCountDelta += delta;\n\n      var err = null;\n      var recv = 0;\n\n      docInfo.metadata.winningRev = winningRev;\n      docInfo.metadata.deleted = winningRevIsDeleted;\n\n      docInfo.data._id = docInfo.metadata.id;\n      docInfo.data._rev = docInfo.metadata.rev;\n\n      if (newRevIsDeleted) {\n        docInfo.data._deleted = true;\n      }\n\n      if (docInfo.stemmedRevs.length) {\n        stemmedRevs.set(docInfo.metadata.id, docInfo.stemmedRevs);\n      }\n\n      var attachments = docInfo.data._attachments ?\n        Object.keys(docInfo.data._attachments) :\n        [];\n\n      function attachmentSaved(attachmentErr) {\n        recv++;\n        if (!err) {\n          /* istanbul ignore if */\n          if (attachmentErr) {\n            err = attachmentErr;\n            callback2(err);\n          } else if (recv === attachments.length) {\n            finish();\n          }\n        }\n      }\n\n      function onMD5Load(doc, key, data, attachmentSaved) {\n        return function (result) {\n          saveAttachment(doc, MD5_PREFIX + result, key, data, attachmentSaved);\n        };\n      }\n\n      function doMD5(doc, key, attachmentSaved) {\n        return function (data) {\n          binaryMd5(data, onMD5Load(doc, key, data, attachmentSaved));\n        };\n      }\n\n      for (var i = 0; i < attachments.length; i++) {\n        var key = attachments[i];\n        var att = docInfo.data._attachments[key];\n\n        if (att.stub) {\n          // still need to update the refs mapping\n          var id = docInfo.data._id;\n          var rev = docInfo.data._rev;\n          saveAttachmentRefs(id, rev, att.digest, attachmentSaved);\n          continue;\n        }\n        var data;\n        if (typeof att.data === 'string') {\n          // input is assumed to be a base64 string\n          try {\n            data = atob(att.data);\n          } catch (e) {\n            callback(createError(BAD_ARG,\n                     'Attachment is not a valid base64 string'));\n            return;\n          }\n          doMD5(docInfo, key, attachmentSaved)(data);\n        } else {\n          prepareAttachmentForStorage(att.data,\n            doMD5(docInfo, key, attachmentSaved));\n        }\n      }\n\n      function finish() {\n        var seq = docInfo.metadata.rev_map[docInfo.metadata.rev];\n        /* istanbul ignore if */\n        if (seq) {\n          // check that there aren't any existing revisions with the same\n          // revision id, else we shouldn't do anything\n          return callback2();\n        }\n        seq = ++newUpdateSeq;\n        docInfo.metadata.rev_map[docInfo.metadata.rev] =\n          docInfo.metadata.seq = seq;\n        var seqKey = formatSeq(seq);\n        var batch = [{\n          key: seqKey,\n          value: docInfo.data,\n          prefix: stores.bySeqStore,\n          type: 'put'\n        }, {\n          key: docInfo.metadata.id,\n          value: docInfo.metadata,\n          prefix: stores.docStore,\n          type: 'put'\n        }];\n        txn.batch(batch);\n        results[resultsIdx] = {\n          ok: true,\n          id: docInfo.metadata.id,\n          rev: winningRev\n        };\n        fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);\n        callback2();\n      }\n\n      if (!attachments.length) {\n        finish();\n      }\n    }\n\n    // attachments are queued per-digest, otherwise the refs could be\n    // overwritten by concurrent writes in the same bulkDocs session\n    var attachmentQueues = {};\n\n    function saveAttachmentRefs(id, rev, digest, callback) {\n\n      function fetchAtt() {\n        return new PouchPromise(function (resolve, reject) {\n          txn.get(stores.attachmentStore, digest, function (err, oldAtt) {\n            /* istanbul ignore if */\n            if (err && err.name !== 'NotFoundError') {\n              return reject(err);\n            }\n            resolve(oldAtt);\n          });\n        });\n      }\n\n      function saveAtt(oldAtt) {\n        var ref = [id, rev].join('@');\n        var newAtt = {};\n\n        if (oldAtt) {\n          if (oldAtt.refs) {\n            // only update references if this attachment already has them\n            // since we cannot migrate old style attachments here without\n            // doing a full db scan for references\n            newAtt.refs = oldAtt.refs;\n            newAtt.refs[ref] = true;\n          }\n        } else {\n          newAtt.refs = {};\n          newAtt.refs[ref] = true;\n        }\n\n        return new PouchPromise(function (resolve) {\n          txn.batch([{\n            type: 'put',\n            prefix: stores.attachmentStore,\n            key: digest,\n            value: newAtt\n          }]);\n          resolve(!oldAtt);\n        });\n      }\n\n      // put attachments in a per-digest queue, to avoid two docs with the same\n      // attachment overwriting each other\n      var queue = attachmentQueues[digest] || PouchPromise.resolve();\n      attachmentQueues[digest] = queue.then(function () {\n        return fetchAtt().then(saveAtt).then(function (isNewAttachment) {\n          callback(null, isNewAttachment);\n        }, callback);\n      });\n    }\n\n    function saveAttachment(docInfo, digest, key, data, callback) {\n      var att = docInfo.data._attachments[key];\n      delete att.data;\n      att.digest = digest;\n      att.length = data.length;\n      var id = docInfo.metadata.id;\n      var rev = docInfo.metadata.rev;\n      att.revpos = parseInt(rev, 10);\n\n      saveAttachmentRefs(id, rev, digest, function (err, isNewAttachment) {\n        /* istanbul ignore if */\n        if (err) {\n          return callback(err);\n        }\n        // do not try to store empty attachments\n        if (data.length === 0) {\n          return callback(err);\n        }\n        if (!isNewAttachment) {\n          // small optimization - don't bother writing it again\n          return callback(err);\n        }\n        txn.batch([{\n          type: 'put',\n          prefix: stores.binaryStore,\n          key: digest,\n          value: new Buffer(data, 'binary')\n        }]);\n        callback();\n      });\n    }\n\n    function complete(err) {\n      /* istanbul ignore if */\n      if (err) {\n        return process.nextTick(function () {\n          callback(err);\n        });\n      }\n      txn.batch([\n        {\n          prefix: stores.metaStore,\n          type: 'put',\n          key: UPDATE_SEQ_KEY,\n          value: newUpdateSeq\n        },\n        {\n          prefix: stores.metaStore,\n          type: 'put',\n          key: DOC_COUNT_KEY,\n          value: db._docCount + docCountDelta\n        }\n      ]);\n      txn.execute(db, function (err) {\n        /* istanbul ignore if */\n        if (err) {\n          return callback(err);\n        }\n        db._docCount += docCountDelta;\n        db._updateSeq = newUpdateSeq;\n        levelChanges.notify(name);\n        process.nextTick(function () {\n          callback(null, results);\n        });\n      });\n    }\n\n    if (!docInfos.length) {\n      return callback(null, []);\n    }\n\n    verifyAttachments(function (err) {\n      if (err) {\n        return callback(err);\n      }\n      fetchExistingDocs(function (err) {\n        /* istanbul ignore if */\n        if (err) {\n          return callback(err);\n        }\n        processDocs(revLimit, docInfos, api, fetchedDocs, txn, results,\n                    writeDoc, opts, finish);\n      });\n    });\n  });\n  api._allDocs = readLock(function (opts, callback) {\n    opts = clone(opts);\n    countDocs(function (err, docCount) {\n      /* istanbul ignore if */\n      if (err) {\n        return callback(err);\n      }\n      var readstreamOpts = {};\n      var skip = opts.skip || 0;\n      if (opts.startkey) {\n        readstreamOpts.gte = opts.startkey;\n      }\n      if (opts.endkey) {\n        readstreamOpts.lte = opts.endkey;\n      }\n      if (opts.key) {\n        readstreamOpts.gte = readstreamOpts.lte = opts.key;\n      }\n      if (opts.descending) {\n        readstreamOpts.reverse = true;\n        // switch start and ends\n        var tmp = readstreamOpts.lte;\n        readstreamOpts.lte = readstreamOpts.gte;\n        readstreamOpts.gte = tmp;\n      }\n      var limit;\n      if (typeof opts.limit === 'number') {\n        limit = opts.limit;\n      }\n      if (limit === 0 ||\n          ('start' in readstreamOpts && 'end' in readstreamOpts &&\n          readstreamOpts.start > readstreamOpts.end)) {\n        // should return 0 results when start is greater than end.\n        // normally level would \"fix\" this for us by reversing the order,\n        // so short-circuit instead\n        return callback(null, {\n          total_rows: docCount,\n          offset: opts.skip,\n          rows: []\n        });\n      }\n      var results = [];\n      var docstream = stores.docStore.readStream(readstreamOpts);\n\n      var throughStream = through2.obj(function (entry, _, next) {\n        var metadata = entry.value;\n        // winningRev and deleted are performance-killers, but\n        // in newer versions of PouchDB, they are cached on the metadata\n        var winningRev = getWinningRev(metadata);\n        var deleted = getIsDeleted(metadata, winningRev);\n        if (!deleted) {\n          if (skip-- > 0) {\n            next();\n            return;\n          } else if (typeof limit === 'number' && limit-- <= 0) {\n            docstream.unpipe();\n            docstream.destroy();\n            next();\n            return;\n          }\n        } else if (opts.deleted !== 'ok') {\n          next();\n          return;\n        }\n        function allDocsInner(data) {\n          var doc = {\n            id: metadata.id,\n            key: metadata.id,\n            value: {\n              rev: winningRev\n            }\n          };\n          if (opts.include_docs) {\n            doc.doc = data;\n            doc.doc._rev = doc.value.rev;\n            if (opts.conflicts) {\n              doc.doc._conflicts = collectConflicts(metadata);\n            }\n            for (var att in doc.doc._attachments) {\n              if (doc.doc._attachments.hasOwnProperty(att)) {\n                doc.doc._attachments[att].stub = true;\n              }\n            }\n          }\n          if (opts.inclusive_end === false && metadata.id === opts.endkey) {\n            return next();\n          } else if (deleted) {\n            if (opts.deleted === 'ok') {\n              doc.value.deleted = true;\n              doc.doc = null;\n            } else {\n              /* istanbul ignore next */\n              return next();\n            }\n          }\n          results.push(doc);\n          next();\n        }\n        if (opts.include_docs) {\n          var seq = metadata.rev_map[winningRev];\n          stores.bySeqStore.get(formatSeq(seq), function (err, data) {\n            allDocsInner(data);\n          });\n        }\n        else {\n          allDocsInner();\n        }\n      }, function (next) {\n        PouchPromise.resolve().then(function () {\n          if (opts.include_docs && opts.attachments) {\n            return fetchAttachments(results, stores, opts);\n          }\n        }).then(function () {\n          callback(null, {\n            total_rows: docCount,\n            offset: opts.skip,\n            rows: results\n          });\n        }, callback);\n        next();\n      }).on('unpipe', function () {\n        throughStream.end();\n      });\n\n      docstream.on('error', callback);\n\n      docstream.pipe(throughStream);\n    });\n  });\n\n  api._changes = function (opts) {\n    opts = clone(opts);\n\n    if (opts.continuous) {\n      var id = name + ':' + uuid();\n      levelChanges.addListener(name, id, api, opts);\n      levelChanges.notify(name);\n      return {\n        cancel: function () {\n          levelChanges.removeListener(name, id);\n        }\n      };\n    }\n\n    var descending = opts.descending;\n    var results = [];\n    var lastSeq = opts.since || 0;\n    var called = 0;\n    var streamOpts = {\n      reverse: descending\n    };\n    var limit;\n    if ('limit' in opts && opts.limit > 0) {\n      limit = opts.limit;\n    }\n    if (!streamOpts.reverse) {\n      streamOpts.start = formatSeq(opts.since || 0);\n    }\n\n    var docIds = opts.doc_ids && new _Set(opts.doc_ids);\n    var filter = filterChange(opts);\n    var docIdsToMetadata = new _Map();\n\n    var returnDocs;\n    if ('return_docs' in opts) {\n      returnDocs = opts.return_docs;\n    } else if ('returnDocs' in opts) {\n      // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n      returnDocs = opts.returnDocs;\n    } else {\n      returnDocs = true;\n    }\n\n    function complete() {\n      opts.done = true;\n      if (returnDocs && opts.limit) {\n        /* istanbul ignore if */\n        if (opts.limit < results.length) {\n          results.length = opts.limit;\n        }\n      }\n      changeStream.unpipe(throughStream);\n      changeStream.destroy();\n      if (!opts.continuous && !opts.cancelled) {\n        if (opts.include_docs && opts.attachments) {\n          fetchAttachments(results, stores, opts).then(function () {\n            opts.complete(null, {results: results, last_seq: lastSeq});\n          });\n        } else {\n          opts.complete(null, {results: results, last_seq: lastSeq});\n        }\n      }\n    }\n    var changeStream = stores.bySeqStore.readStream(streamOpts);\n    var throughStream = through2.obj(function (data, _, next) {\n      if (limit && called >= limit) {\n        complete();\n        return next();\n      }\n      if (opts.cancelled || opts.done) {\n        return next();\n      }\n\n      var seq = parseSeq(data.key);\n      var doc = data.value;\n\n      if (seq === opts.since && !descending) {\n        // couchdb ignores `since` if descending=true\n        return next();\n      }\n\n      if (docIds && !docIds.has(doc._id)) {\n        return next();\n      }\n\n      var metadata;\n\n      function onGetMetadata(metadata) {\n        var winningRev = getWinningRev(metadata);\n\n        function onGetWinningDoc(winningDoc) {\n\n          var change = opts.processChange(winningDoc, metadata, opts);\n          change.seq = metadata.seq;\n\n          var filtered = filter(change);\n          if (typeof filtered === 'object') {\n            return opts.complete(filtered);\n          }\n\n          if (filtered) {\n            called++;\n\n            if (opts.attachments && opts.include_docs) {\n              // fetch attachment immediately for the benefit\n              // of live listeners\n              fetchAttachments([change], stores, opts).then(function () {\n                opts.onChange(change);\n              });\n            } else {\n              opts.onChange(change);\n            }\n\n            if (returnDocs) {\n              results.push(change);\n            }\n          }\n          next();\n        }\n\n        if (metadata.seq !== seq) {\n          // some other seq is later\n          return next();\n        }\n\n        lastSeq = seq;\n\n        if (winningRev === doc._rev) {\n          return onGetWinningDoc(doc);\n        }\n\n        // fetch the winner\n\n        var winningSeq = metadata.rev_map[winningRev];\n\n        stores.bySeqStore.get(formatSeq(winningSeq), function (err, doc) {\n          onGetWinningDoc(doc);\n        });\n      }\n\n      metadata = docIdsToMetadata.get(doc._id);\n      if (metadata) { // cached\n        return onGetMetadata(metadata);\n      }\n      // metadata not cached, have to go fetch it\n      stores.docStore.get(doc._id, function (err, metadata) {\n        /* istanbul ignore if */\n        if (opts.cancelled || opts.done || db.isClosed() ||\n          isLocalId(metadata.id)) {\n          return next();\n        }\n        docIdsToMetadata.set(doc._id, metadata);\n        onGetMetadata(metadata);\n      });\n    }, function (next) {\n      if (opts.cancelled) {\n        return next();\n      }\n      if (returnDocs && opts.limit) {\n        /* istanbul ignore if */\n        if (opts.limit < results.length) {\n          results.length = opts.limit;\n        }\n      }\n\n      next();\n    }).on('unpipe', function () {\n      throughStream.end();\n      complete();\n    });\n    changeStream.pipe(throughStream);\n    return {\n      cancel: function () {\n        opts.cancelled = true;\n        complete();\n      }\n    };\n  };\n\n  api._close = function (callback) {\n    /* istanbul ignore if */\n    if (db.isClosed()) {\n      return callback(createError(NOT_OPEN));\n    }\n    db.close(function (err) {\n      /* istanbul ignore if */\n      if (err) {\n        callback(err);\n      } else {\n        dbStore.delete(name);\n        callback();\n      }\n    });\n  };\n\n  api._getRevisionTree = function (docId, callback) {\n    stores.docStore.get(docId, function (err, metadata) {\n      if (err) {\n        callback(createError(MISSING_DOC));\n      } else {\n        callback(null, metadata.rev_tree);\n      }\n    });\n  };\n\n  api._doCompaction = writeLock(function (docId, revs, opts, callback) {\n    api._doCompactionNoLock(docId, revs, opts, callback);\n  });\n\n  // the NoLock version is for use by bulkDocs\n  api._doCompactionNoLock = function (docId, revs, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n\n    if (!revs.length) {\n      return callback();\n    }\n    var txn = opts.ctx || new LevelTransaction();\n\n    txn.get(stores.docStore, docId, function (err, metadata) {\n      /* istanbul ignore if */\n      if (err) {\n        return callback(err);\n      }\n      var seqs = revs.map(function (rev) {\n        var seq = metadata.rev_map[rev];\n        delete metadata.rev_map[rev];\n        return seq;\n      });\n      traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n                                                         revHash, ctx, opts) {\n        var rev = pos + '-' + revHash;\n        if (revs.indexOf(rev) !== -1) {\n          opts.status = 'missing';\n        }\n      });\n\n      var batch = [];\n      batch.push({\n        key: metadata.id,\n        value: metadata,\n        type: 'put',\n        prefix: stores.docStore\n      });\n\n      var digestMap = {};\n      var numDone = 0;\n      var overallErr;\n      function checkDone(err) {\n        /* istanbul ignore if */\n        if (err) {\n          overallErr = err;\n        }\n        if (++numDone === revs.length) { // done\n          /* istanbul ignore if */\n          if (overallErr) {\n            return callback(overallErr);\n          }\n          deleteOrphanedAttachments();\n        }\n      }\n\n      function finish(err) {\n        /* istanbul ignore if */\n        if (err) {\n          return callback(err);\n        }\n        txn.batch(batch);\n        if (opts.ctx) {\n          // don't execute immediately\n          return callback();\n        }\n        txn.execute(db, callback);\n      }\n\n      function deleteOrphanedAttachments() {\n        var possiblyOrphanedAttachments = Object.keys(digestMap);\n        if (!possiblyOrphanedAttachments.length) {\n          return finish();\n        }\n        var numDone = 0;\n        var overallErr;\n        function checkDone(err) {\n          /* istanbul ignore if */\n          if (err) {\n            overallErr = err;\n          }\n          if (++numDone === possiblyOrphanedAttachments.length) {\n            finish(overallErr);\n          }\n        }\n        var refsToDelete = new _Map();\n        revs.forEach(function (rev) {\n          refsToDelete.set(docId + '@' + rev, true);\n        });\n        possiblyOrphanedAttachments.forEach(function (digest) {\n          txn.get(stores.attachmentStore, digest, function (err, attData) {\n            /* istanbul ignore if */\n            if (err) {\n              if (err.name === 'NotFoundError') {\n                return checkDone();\n              } else {\n                return checkDone(err);\n              }\n            }\n            var refs = Object.keys(attData.refs || {}).filter(function (ref) {\n              return !refsToDelete.has(ref);\n            });\n            var newRefs = {};\n            refs.forEach(function (ref) {\n              newRefs[ref] = true;\n            });\n            if (refs.length) { // not orphaned\n              batch.push({\n                key: digest,\n                type: 'put',\n                value: {refs: newRefs},\n                prefix: stores.attachmentStore\n              });\n            } else { // orphaned, can safely delete\n              batch = batch.concat([{\n                key: digest,\n                type: 'del',\n                prefix: stores.attachmentStore\n              }, {\n                key: digest,\n                type: 'del',\n                prefix: stores.binaryStore\n              }]);\n            }\n            checkDone();\n          });\n        });\n      }\n\n      seqs.forEach(function (seq) {\n        batch.push({\n          key: formatSeq(seq),\n          type: 'del',\n          prefix: stores.bySeqStore\n        });\n        txn.get(stores.bySeqStore, formatSeq(seq), function (err, doc) {\n          /* istanbul ignore if */\n          if (err) {\n            if (err.name === 'NotFoundError') {\n              return checkDone();\n            } else {\n              return checkDone(err);\n            }\n          }\n          var atts = Object.keys(doc._attachments || {});\n          atts.forEach(function (attName) {\n            var digest = doc._attachments[attName].digest;\n            digestMap[digest] = true;\n          });\n          checkDone();\n        });\n      });\n    });\n  };\n\n  api._getLocal = function (id, callback) {\n    stores.localStore.get(id, function (err, doc) {\n      if (err) {\n        callback(createError(MISSING_DOC));\n      } else {\n        callback(null, doc);\n      }\n    });\n  };\n\n  api._putLocal = function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    if (opts.ctx) {\n      api._putLocalNoLock(doc, opts, callback);\n    } else {\n      api._putLocalWithLock(doc, opts, callback);\n    }\n  };\n\n  api._putLocalWithLock = writeLock(function (doc, opts, callback) {\n    api._putLocalNoLock(doc, opts, callback);\n  });\n\n  // the NoLock version is for use by bulkDocs\n  api._putLocalNoLock = function (doc, opts, callback) {\n    delete doc._revisions; // ignore this, trust the rev\n    var oldRev = doc._rev;\n    var id = doc._id;\n\n    var txn = opts.ctx || new LevelTransaction();\n\n    txn.get(stores.localStore, id, function (err, resp) {\n      if (err && oldRev) {\n        return callback(createError(REV_CONFLICT));\n      }\n      if (resp && resp._rev !== oldRev) {\n        return callback(createError(REV_CONFLICT));\n      }\n      doc._rev =\n          oldRev ? '0-' + (parseInt(oldRev.split('-')[1], 10) + 1) : '0-1';\n      var batch = [\n        {\n          type: 'put',\n          prefix: stores.localStore,\n          key: id,\n          value: doc\n        }\n      ];\n\n      txn.batch(batch);\n      var ret = {ok: true, id: doc._id, rev: doc._rev};\n\n      if (opts.ctx) {\n        // don't execute immediately\n        return callback(null, ret);\n      }\n      txn.execute(db, function (err) {\n        /* istanbul ignore if */\n        if (err) {\n          return callback(err);\n        }\n        callback(null, ret);\n      });\n    });\n  };\n\n  api._removeLocal = function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    if (opts.ctx) {\n      api._removeLocalNoLock(doc, opts, callback);\n    } else {\n      api._removeLocalWithLock(doc, opts, callback);\n    }\n  };\n\n  api._removeLocalWithLock = writeLock(function (doc, opts, callback) {\n    api._removeLocalNoLock(doc, opts, callback);\n  });\n\n  // the NoLock version is for use by bulkDocs\n  api._removeLocalNoLock = function (doc, opts, callback) {\n    var txn = opts.ctx || new LevelTransaction();\n    txn.get(stores.localStore, doc._id, function (err, resp) {\n      if (err) {\n        /* istanbul ignore if */\n        if (err.name !== 'NotFoundError') {\n          return callback(err);\n        } else {\n          return callback(createError(MISSING_DOC));\n        }\n      }\n      if (resp._rev !== doc._rev) {\n        return callback(createError(REV_CONFLICT));\n      }\n      txn.batch([{\n        prefix: stores.localStore,\n        type: 'del',\n        key: doc._id\n      }]);\n      var ret = {ok: true, id: doc._id, rev: '0-0'};\n      if (opts.ctx) {\n        // don't execute immediately\n        return callback(null, ret);\n      }\n      txn.execute(db, function (err) {\n        /* istanbul ignore if */\n        if (err) {\n          return callback(err);\n        }\n        callback(null, ret);\n      });\n    });\n  };\n\n  // close and delete open leveldb stores\n  api._destroy = function (opts, callback) {\n    var dbStore;\n    var leveldownName = functionName(leveldown);\n    /* istanbul ignore else */\n    if (dbStores.has(leveldownName)) {\n      dbStore = dbStores.get(leveldownName);\n    } else {\n      return callDestroy(name, callback);\n    }\n\n    /* istanbul ignore else */\n    if (dbStore.has(name)) {\n      levelChanges.removeAllListeners(name);\n\n      dbStore.get(name).close(function () {\n        dbStore.delete(name);\n        callDestroy(name, callback);\n      });\n    } else {\n      callDestroy(name, callback);\n    }\n  };\n  function callDestroy(name, cb) {\n    leveldown.destroy(name, cb);\n  }\n}\n\n// require leveldown. provide verbose output on error as it is the default\n// nodejs adapter, which we do not provide for the user\n/* istanbul ignore next */\nvar requireLeveldown = function () {\n  try {\n    return require('leveldown');\n  } catch (err) {\n    /* eslint no-ex-assign: 0*/\n    err = err || 'leveldown import error';\n    if (err.code === 'MODULE_NOT_FOUND') {\n      // handle leveldown not installed case\n      return new Error([\n        'the \\'leveldown\\' package is not available. install it, or,',\n        'specify another storage backend using the \\'db\\' option'\n      ].join(' '));\n    } else if (err.message && err.message.match('Module version mismatch')) {\n      // handle common user enviornment error\n      return new Error([\n        err.message,\n        'This generally implies that leveldown was built with a different',\n        'version of node than that which is running now.  You may try',\n        'fully removing and reinstalling PouchDB or leveldown to resolve.'\n      ].join(' '));\n    }\n    // handle general internal nodejs require error\n    return new Error(err.toString() + ': unable to import leveldown');\n  }\n};\n\nvar stores = [\n  'document-store',\n  'by-sequence',\n  'attach-store',\n  'attach-binary-store'\n];\nfunction formatSeq(n) {\n  return ('0000000000000000' + n).slice(-16);\n}\nvar UPDATE_SEQ_KEY$1 = '_local_last_update_seq';\nvar DOC_COUNT_KEY$1 = '_local_doc_count';\nvar UUID_KEY$1 = '_local_uuid';\n\nvar doMigrationOne = function (name, db, callback) {\n  // local require to prevent crashing if leveldown isn't installed.\n  var leveldown = require(\"leveldown\");\n\n  var base = path.resolve(name);\n  function move(store, index, cb) {\n    var storePath = path.join(base, store);\n    var opts;\n    if (index === 3) {\n      opts = {\n        valueEncoding: 'binary'\n      };\n    } else {\n      opts = {\n        valueEncoding: 'json'\n      };\n    }\n    var sub = db.sublevel(store, opts);\n    var orig = levelup(storePath, opts);\n    var from = orig.createReadStream();\n    var writeStream = new LevelWriteStream(sub);\n    var to = writeStream();\n    from.on('end', function () {\n      orig.close(function (err) {\n        cb(err, storePath);\n      });\n    });\n    from.pipe(to);\n  }\n  fs.unlink(base + '.uuid', function (err) {\n    if (err) {\n      return callback();\n    }\n    var todo = 4;\n    var done = [];\n    stores.forEach(function (store, i) {\n      move(store, i, function (err, storePath) {\n        /* istanbul ignore if */\n        if (err) {\n          return callback(err);\n        }\n        done.push(storePath);\n        if (!(--todo)) {\n          done.forEach(function (item) {\n            leveldown.destroy(item, function () {\n              if (++todo === done.length) {\n                fs.rmdir(base, callback);\n              }\n            });\n          });\n        }\n      });\n    });\n  });\n};\nvar doMigrationTwo = function (db, stores, callback) {\n  var batches = [];\n  stores.bySeqStore.get(UUID_KEY$1, function (err, value) {\n    if (err) {\n      // no uuid key, so don't need to migrate;\n      return callback();\n    }\n    batches.push({\n      key: UUID_KEY$1,\n      value: value,\n      prefix: stores.metaStore,\n      type: 'put',\n      valueEncoding: 'json'\n    });\n    batches.push({\n      key: UUID_KEY$1,\n      prefix: stores.bySeqStore,\n      type: 'del'\n    });\n    stores.bySeqStore.get(DOC_COUNT_KEY$1, function (err, value) {\n      if (value) {\n        // if no doc count key,\n        // just skip\n        // we can live with this\n        batches.push({\n          key: DOC_COUNT_KEY$1,\n          value: value,\n          prefix: stores.metaStore,\n          type: 'put',\n          valueEncoding: 'json'\n        });\n        batches.push({\n          key: DOC_COUNT_KEY$1,\n          prefix: stores.bySeqStore,\n          type: 'del'\n        });\n      }\n      stores.bySeqStore.get(UPDATE_SEQ_KEY$1, function (err, value) {\n        if (value) {\n          // if no UPDATE_SEQ_KEY\n          // just skip\n          // we've gone to far to stop.\n          batches.push({\n            key: UPDATE_SEQ_KEY$1,\n            value: value,\n            prefix: stores.metaStore,\n            type: 'put',\n            valueEncoding: 'json'\n          });\n          batches.push({\n            key: UPDATE_SEQ_KEY$1,\n            prefix: stores.bySeqStore,\n            type: 'del'\n          });\n        }\n        var deletedSeqs = {};\n        stores.docStore.createReadStream({\n          startKey: '_',\n          endKey: '_\\xFF'\n        }).pipe(through2.obj(function (ch, _, next) {\n          if (!isLocalId(ch.key)) {\n            return next();\n          }\n          batches.push({\n            key: ch.key,\n            prefix: stores.docStore,\n            type: 'del'\n          });\n          var winner = winningRev(ch.value);\n          Object.keys(ch.value.rev_map).forEach(function (key) {\n            if (key !== 'winner') {\n              this.push(formatSeq(ch.value.rev_map[key]));\n            }\n          }, this);\n          var winningSeq = ch.value.rev_map[winner];\n          stores.bySeqStore.get(formatSeq(winningSeq), function (err, value) {\n            if (!err) {\n              batches.push({\n                key: ch.key,\n                value: value,\n                prefix: stores.localStore,\n                type: 'put',\n                valueEncoding: 'json'\n              });\n            }\n            next();\n          });\n\n        })).pipe(through2.obj(function (seq, _, next) {\n          /* istanbul ignore if */\n          if (deletedSeqs[seq]) {\n            return next();\n          }\n          deletedSeqs[seq] = true;\n          stores.bySeqStore.get(seq, function (err, resp) {\n            /* istanbul ignore if */\n            if (err || !isLocalId(resp._id)) {\n              return next();\n            }\n            batches.push({\n              key: seq,\n              prefix: stores.bySeqStore,\n              type: 'del'\n            });\n            next();\n          });\n        }, function () {\n          db.batch(batches, callback);\n        }));\n      });\n    });\n  });\n\n};\n\nvar migrate = {\n  doMigrationOne: doMigrationOne,\n  doMigrationTwo: doMigrationTwo\n};\n\nfunction LevelDownPouch(opts, callback) {\n\n  // Users can pass in their own leveldown alternative here, in which case\n  // it overrides the default one. (This is in addition to the custom builds.)\n  var leveldown = opts.db;\n\n  /* istanbul ignore else */\n  if (!leveldown) {\n    leveldown = requireLeveldown();\n\n    /* istanbul ignore if */\n    if (leveldown instanceof Error) {\n      return callback(leveldown);\n    }\n  }\n\n  var _opts = extend$1({\n    db: leveldown,\n    migrate: migrate\n  }, opts);\n\n  LevelPouch$1.call(this, _opts, callback);\n}\n\n// overrides for normal LevelDB behavior on Node\nLevelDownPouch.valid = function () {\n  return true;\n};\nLevelDownPouch.use_prefix = false;\n\nfunction LevelPouch (PouchDB) {\n  PouchDB.adapter('leveldb', LevelDownPouch, true);\n}\n\n// May seem redundant, but this is to allow switching with\n// request-browser.js.\nvar request = require('request');\n\n// non-standard, but we do this to mimic blobs in the browser\nfunction applyTypeToBuffer(buffer, resp) {\n  buffer.type = resp.headers['content-type'];\n}\n\nfunction defaultBody() {\n  return new Buffer('', 'binary');\n}\n\nfunction ajaxCore(options, callback) {\n\n  options = clone(options);\n\n  var defaultOptions = {\n    method : \"GET\",\n    headers: {},\n    json: true,\n    processData: true,\n    timeout: 10000,\n    cache: false\n  };\n\n  options = extend$1(defaultOptions, options);\n\n  function onSuccess(obj, resp, cb) {\n    if (!options.binary && options.json && typeof obj === 'string') {\n      /* istanbul ignore next */\n      try {\n        obj = JSON.parse(obj);\n      } catch (e) {\n        // Probably a malformed JSON from server\n        return cb(e);\n      }\n    }\n    if (Array.isArray(obj)) {\n      obj = obj.map(function (v) {\n        if (v.error || v.missing) {\n          return generateErrorFromResponse(v);\n        } else {\n          return v;\n        }\n      });\n    }\n    if (options.binary) {\n      applyTypeToBuffer(obj, resp);\n    }\n    cb(null, obj, resp);\n  }\n\n  if (options.json) {\n    if (!options.binary) {\n      options.headers.Accept = 'application/json';\n    }\n    options.headers['Content-Type'] = options.headers['Content-Type'] ||\n      'application/json';\n  }\n\n  if (options.binary) {\n    options.encoding = null;\n    options.json = false;\n  }\n\n  if (!options.processData) {\n    options.json = false;\n  }\n\n  return request(options, function (err, response, body) {\n\n    if (err) {\n      return callback(generateErrorFromResponse(err));\n    }\n\n    var error;\n    var content_type = response.headers && response.headers['content-type'];\n    var data = body || defaultBody();\n\n    // CouchDB doesn't always return the right content-type for JSON data, so\n    // we check for ^{ and }$ (ignoring leading/trailing whitespace)\n    if (!options.binary && (options.json || !options.processData) &&\n        typeof data !== 'object' &&\n        (/json/.test(content_type) ||\n         (/^[\\s]*\\{/.test(data) && /\\}[\\s]*$/.test(data)))) {\n      try {\n        data = JSON.parse(data.toString());\n      } catch (e) {}\n    }\n\n    if (response.statusCode >= 200 && response.statusCode < 300) {\n      onSuccess(data, response, callback);\n    } else {\n      error = generateErrorFromResponse(data);\n      error.status = response.statusCode;\n      callback(error);\n    }\n  });\n}\n\nfunction ajax(opts, callback) {\n  // do nothing; all the action is in prerequest-browser.js\n  return ajaxCore(opts, callback);\n}\n\nvar CHANGES_BATCH_SIZE = 25;\nvar MAX_SIMULTANEOUS_REVS = 50;\n\nvar supportsBulkGetMap = {};\n\nvar log$1 = debug('pouchdb:http');\n\nfunction readAttachmentsAsBlobOrBuffer(row) {\n  var atts = row.doc && row.doc._attachments;\n  if (!atts) {\n    return;\n  }\n  Object.keys(atts).forEach(function (filename) {\n    var att = atts[filename];\n    att.data = b64ToBluffer(att.data, att.content_type);\n  });\n}\n\nfunction encodeDocId(id) {\n  if (/^_design/.test(id)) {\n    return '_design/' + encodeURIComponent(id.slice(8));\n  }\n  if (/^_local/.test(id)) {\n    return '_local/' + encodeURIComponent(id.slice(7));\n  }\n  return encodeURIComponent(id);\n}\n\nfunction preprocessAttachments$1(doc) {\n  if (!doc._attachments || !Object.keys(doc._attachments)) {\n    return PouchPromise.resolve();\n  }\n\n  return PouchPromise.all(Object.keys(doc._attachments).map(function (key) {\n    var attachment = doc._attachments[key];\n    if (attachment.data && typeof attachment.data !== 'string') {\n      return new PouchPromise(function (resolve) {\n        blobToBase64(attachment.data, resolve);\n      }).then(function (b64) {\n        attachment.data = b64;\n      });\n    }\n  }));\n}\n\nfunction hasUrlPrefix(opts) {\n  if (!opts.prefix) {\n    return false;\n  }\n\n  var protocol = parseUri(opts.prefix).protocol;\n\n  return protocol === 'http' || protocol === 'https';\n}\n\n// Get all the information you possibly can about the URI given by name and\n// return it as a suitable object.\nfunction getHost(name, opts) {\n\n  // encode db name if opts.prefix is a url (#5574)\n  if (hasUrlPrefix(opts)) {\n    var dbName = opts.name.substr(opts.prefix.length);\n    name = opts.prefix + encodeURIComponent(dbName);\n  }\n\n  // Prase the URI into all its little bits\n  var uri = parseUri(name);\n\n  // Store the user and password as a separate auth object\n  if (uri.user || uri.password) {\n    uri.auth = {username: uri.user, password: uri.password};\n  }\n\n  // Split the path part of the URI into parts using '/' as the delimiter\n  // after removing any leading '/' and any trailing '/'\n  var parts = uri.path.replace(/(^\\/|\\/$)/g, '').split('/');\n\n  // Store the first part as the database name and remove it from the parts\n  // array\n  uri.db = parts.pop();\n  // Prevent double encoding of URI component\n  if (uri.db.indexOf('%') === -1) {\n    uri.db = encodeURIComponent(uri.db);\n  }\n\n  // Restore the path by joining all the remaining parts (all the parts\n  // except for the database name) with '/'s\n  uri.path = parts.join('/');\n\n  return uri;\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genDBUrl(opts, path) {\n  return genUrl(opts, opts.db + '/' + path);\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genUrl(opts, path) {\n  // If the host already has a path, then we need to have a path delimiter\n  // Otherwise, the path delimiter is the empty string\n  var pathDel = !opts.path ? '' : '/';\n\n  // If the host already has a path, then we need to have a path delimiter\n  // Otherwise, the path delimiter is the empty string\n  return opts.protocol + '://' + opts.host +\n         (opts.port ? (':' + opts.port) : '') +\n         '/' + opts.path + pathDel + path;\n}\n\nfunction paramsToStr(params) {\n  return '?' + Object.keys(params).map(function (k) {\n    return k + '=' + encodeURIComponent(params[k]);\n  }).join('&');\n}\n\n// Implements the PouchDB API for dealing with CouchDB instances over HTTP\nfunction HttpPouch(opts, callback) {\n\n  // The functions that will be publicly available for HttpPouch\n  var api = this;\n\n  var host = getHost(opts.name, opts);\n  var dbUrl = genDBUrl(host, '');\n\n  opts = clone(opts);\n  var ajaxOpts = opts.ajax || {};\n\n  if (opts.auth || host.auth) {\n    var nAuth = opts.auth || host.auth;\n    var str = nAuth.username + ':' + nAuth.password;\n    var token = btoa(unescape(encodeURIComponent(str)));\n    ajaxOpts.headers = ajaxOpts.headers || {};\n    ajaxOpts.headers.Authorization = 'Basic ' + token;\n  }\n\n  // Not strictly necessary, but we do this because numerous tests\n  // rely on swapping ajax in and out.\n  api._ajax = ajax;\n\n  function ajax$$(userOpts, options, callback) {\n    var reqAjax = userOpts.ajax || {};\n    var reqOpts = extend$1(clone(ajaxOpts), reqAjax, options);\n    log$1(reqOpts.method + ' ' + reqOpts.url);\n    return api._ajax(reqOpts, callback);\n  }\n\n  function ajaxPromise(userOpts, opts) {\n    return new PouchPromise(function (resolve, reject) {\n      ajax$$(userOpts, opts, function (err, res$$) {\n        /* istanbul ignore if */\n        if (err) {\n          return reject(err);\n        }\n        resolve(res$$);\n      });\n    });\n  }\n\n  function adapterFun$$(name, fun) {\n    return adapterFun(name, getArguments(function (args) {\n      setup().then(function () {\n        return fun.apply(this, args);\n      }).catch(function (e) {\n        var callback = args.pop();\n        callback(e);\n      });\n    }));\n  }\n\n  var setupPromise;\n\n  function setup() {\n    // TODO: Remove `skipSetup` in favor of `skip_setup` in a future release\n    if (opts.skipSetup || opts.skip_setup) {\n      return PouchPromise.resolve();\n    }\n\n    // If there is a setup in process or previous successful setup\n    // done then we will use that\n    // If previous setups have been rejected we will try again\n    if (setupPromise) {\n      return setupPromise;\n    }\n\n    var checkExists = {method: 'GET', url: dbUrl};\n    setupPromise = ajaxPromise({}, checkExists).catch(function (err) {\n      if (err && err.status && err.status === 404) {\n        // Doesnt exist, create it\n        res(404, 'PouchDB is just detecting if the remote exists.');\n        return ajaxPromise({}, {method: 'PUT', url: dbUrl});\n      } else {\n        return PouchPromise.reject(err);\n      }\n    }).catch(function (err) {\n      // If we try to create a database that already exists, skipped in\n      // istanbul since its catching a race condition.\n      /* istanbul ignore if */\n      if (err && err.status && err.status === 412) {\n        return true;\n      }\n      return PouchPromise.reject(err);\n    });\n\n    setupPromise.catch(function () {\n      setupPromise = null;\n    });\n\n    return setupPromise;\n  }\n\n  setTimeout(function () {\n    callback(null, api);\n  });\n\n  api.type = function () {\n    return 'http';\n  };\n\n  api.id = adapterFun$$('id', function (callback) {\n    ajax$$({}, {method: 'GET', url: genUrl(host, '')}, function (err, result) {\n      var uuid = (result && result.uuid) ?\n        (result.uuid + host.db) : genDBUrl(host, '');\n      callback(null, uuid);\n    });\n  });\n\n  api.request = adapterFun$$('request', function (options, callback) {\n    options.url = genDBUrl(host, options.url);\n    ajax$$({}, options, callback);\n  });\n\n  // Sends a POST request to the host calling the couchdb _compact function\n  //    version: The version of CouchDB it is running\n  api.compact = adapterFun$$('compact', function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = clone(opts);\n    ajax$$(opts, {\n      url: genDBUrl(host, '_compact'),\n      method: 'POST'\n    }, function () {\n      function ping() {\n        api.info(function (err, res$$) {\n          if (res$$ && !res$$.compact_running) {\n            callback(null, {ok: true});\n          } else {\n            setTimeout(ping, opts.interval || 200);\n          }\n        });\n      }\n      // Ping the http if it's finished compaction\n      ping();\n    });\n  });\n\n  api.bulkGet = adapterFun('bulkGet', function (opts, callback) {\n    var self = this;\n\n    function doBulkGet(cb) {\n      var params = {};\n      if (opts.revs) {\n        params.revs = true;\n      }\n      if (opts.attachments) {\n        /* istanbul ignore next */\n        params.attachments = true;\n      }\n      ajax$$({}, {\n        url: genDBUrl(host, '_bulk_get' + paramsToStr(params)),\n        method: 'POST',\n        body: { docs: opts.docs}\n      }, cb);\n    }\n\n    function doBulkGetShim() {\n      // avoid \"url too long error\" by splitting up into multiple requests\n      var batchSize = MAX_SIMULTANEOUS_REVS;\n      var numBatches = Math.ceil(opts.docs.length / batchSize);\n      var numDone = 0;\n      var results = new Array(numBatches);\n\n      function onResult(batchNum) {\n        return function (err, res$$) {\n          // err is impossible because shim returns a list of errs in that case\n          results[batchNum] = res$$.results;\n          if (++numDone === numBatches) {\n            callback(null, {results: flatten(results)});\n          }\n        };\n      }\n\n      for (var i = 0; i < numBatches; i++) {\n        var subOpts = pick(opts, ['revs', 'attachments']);\n        subOpts.ajax = ajaxOpts;\n        subOpts.docs = opts.docs.slice(i * batchSize,\n          Math.min(opts.docs.length, (i + 1) * batchSize));\n        bulkGet(self, subOpts, onResult(i));\n      }\n    }\n\n    // mark the whole database as either supporting or not supporting _bulk_get\n    var dbUrl = genUrl(host, '');\n    var supportsBulkGet = supportsBulkGetMap[dbUrl];\n\n    if (typeof supportsBulkGet !== 'boolean') {\n      // check if this database supports _bulk_get\n      doBulkGet(function (err, res$$) {\n        /* istanbul ignore else */\n        if (err) {\n          var status = Math.floor(err.status / 100);\n          /* istanbul ignore else */\n          if (status === 4 || status === 5) { // 40x or 50x\n            supportsBulkGetMap[dbUrl] = false;\n            res(\n              err.status,\n              'PouchDB is just detecting if the remote ' +\n              'supports the _bulk_get API.'\n            );\n            doBulkGetShim();\n          } else {\n            callback(err);\n          }\n        } else {\n          supportsBulkGetMap[dbUrl] = true;\n          callback(null, res$$);\n        }\n      });\n    } else if (supportsBulkGet) {\n      /* istanbul ignore next */\n      doBulkGet(callback);\n    } else {\n      doBulkGetShim();\n    }\n  });\n\n  // Calls GET on the host, which gets back a JSON string containing\n  //    couchdb: A welcome string\n  //    version: The version of CouchDB it is running\n  api._info = function (callback) {\n    setup().then(function () {\n      ajax$$({}, {\n        method: 'GET',\n        url: genDBUrl(host, '')\n      }, function (err, res$$) {\n        /* istanbul ignore next */\n        if (err) {\n        return callback(err);\n        }\n        res$$.host = genDBUrl(host, '');\n        callback(null, res$$);\n      });\n    }).catch(callback);\n  };\n\n  // Get the document with the given id from the database given by host.\n  // The id could be solely the _id in the database, or it may be a\n  // _design/ID or _local/ID path\n  api.get = adapterFun$$('get', function (id, opts, callback) {\n    // If no options were given, set the callback to the second parameter\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = clone(opts);\n\n    // List of parameters to add to the GET request\n    var params = {};\n\n    if (opts.revs) {\n      params.revs = true;\n    }\n\n    if (opts.revs_info) {\n      params.revs_info = true;\n    }\n\n    if (opts.open_revs) {\n      if (opts.open_revs !== \"all\") {\n        opts.open_revs = JSON.stringify(opts.open_revs);\n      }\n      params.open_revs = opts.open_revs;\n    }\n\n    if (opts.rev) {\n      params.rev = opts.rev;\n    }\n\n    if (opts.conflicts) {\n      params.conflicts = opts.conflicts;\n    }\n\n    id = encodeDocId(id);\n\n    // Set the options for the ajax call\n    var options = {\n      method: 'GET',\n      url: genDBUrl(host, id + paramsToStr(params))\n    };\n\n    function fetchAttachments(doc) {\n      var atts = doc._attachments;\n      var filenames = atts && Object.keys(atts);\n      if (!atts || !filenames.length) {\n        return;\n      }\n      // we fetch these manually in separate XHRs, because\n      // Sync Gateway would normally send it back as multipart/mixed,\n      // which we cannot parse. Also, this is more efficient than\n      // receiving attachments as base64-encoded strings.\n      function fetch() {\n\n        if (!filenames.length) {\n          return null;\n        }\n\n        var filename = filenames.pop();\n        var att = atts[filename];\n        var path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +\n          '?rev=' + doc._rev;\n        return ajaxPromise(opts, {\n          method: 'GET',\n          url: genDBUrl(host, path),\n          binary: true\n        }).then(function (blob) {\n          if (opts.binary) {\n            return blob;\n          }\n          return new PouchPromise(function (resolve) {\n            blobToBase64(blob, resolve);\n          });\n        }).then(function (data) {\n          delete att.stub;\n          delete att.length;\n          att.data = data;\n        });\n      }\n\n      // This limits the number of parallel xhr requests to 5 any time\n      // to avoid issues with maximum browser request limits\n      return new PromisePool(fetch, 5, {promise: PouchPromise}).start();\n    }\n\n    function fetchAllAttachments(docOrDocs) {\n      if (Array.isArray(docOrDocs)) {\n        return PouchPromise.all(docOrDocs.map(function (doc) {\n          if (doc.ok) {\n            return fetchAttachments(doc.ok);\n          }\n        }));\n      }\n      return fetchAttachments(docOrDocs);\n    }\n\n    ajaxPromise(opts, options).then(function (res$$) {\n      return PouchPromise.resolve().then(function () {\n        if (opts.attachments) {\n          return fetchAllAttachments(res$$);\n        }\n      }).then(function () {\n        callback(null, res$$);\n      });\n    }).catch(callback);\n  });\n\n  // Delete the document given by doc from the database given by host.\n  api.remove = adapterFun$$('remove',\n      function (docOrId, optsOrRev, opts, callback) {\n    var doc;\n    if (typeof optsOrRev === 'string') {\n      // id, rev, opts, callback style\n      doc = {\n        _id: docOrId,\n        _rev: optsOrRev\n      };\n      if (typeof opts === 'function') {\n        callback = opts;\n        opts = {};\n      }\n    } else {\n      // doc, opts, callback style\n      doc = docOrId;\n      if (typeof optsOrRev === 'function') {\n        callback = optsOrRev;\n        opts = {};\n      } else {\n        callback = opts;\n        opts = optsOrRev;\n      }\n    }\n\n    var rev = (doc._rev || opts.rev);\n\n    // Delete the document\n    ajax$$(opts, {\n      method: 'DELETE',\n      url: genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev\n    }, callback);\n  });\n\n  function encodeAttachmentId(attachmentId) {\n    return attachmentId.split(\"/\").map(encodeURIComponent).join(\"/\");\n  }\n\n  // Get the attachment\n  api.getAttachment =\n    adapterFun$$('getAttachment', function (docId, attachmentId, opts,\n                                                callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var params = opts.rev ? ('?rev=' + opts.rev) : '';\n    var url = genDBUrl(host, encodeDocId(docId)) + '/' +\n      encodeAttachmentId(attachmentId) + params;\n    ajax$$(opts, {\n      method: 'GET',\n      url: url,\n      binary: true\n    }, callback);\n  });\n\n  // Remove the attachment given by the id and rev\n  api.removeAttachment =\n    adapterFun$$('removeAttachment', function (docId, attachmentId, rev,\n                                                   callback) {\n\n    var url = genDBUrl(host, encodeDocId(docId) + '/' +\n      encodeAttachmentId(attachmentId)) + '?rev=' + rev;\n\n    ajax$$({}, {\n      method: 'DELETE',\n      url: url\n    }, callback);\n  });\n\n  // Add the attachment given by blob and its contentType property\n  // to the document with the given id, the revision given by rev, and\n  // add it to the database given by host.\n  api.putAttachment =\n    adapterFun$$('putAttachment', function (docId, attachmentId, rev, blob,\n                                                type, callback) {\n    if (typeof type === 'function') {\n      callback = type;\n      type = blob;\n      blob = rev;\n      rev = null;\n    }\n    var id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);\n    var url = genDBUrl(host, id);\n    if (rev) {\n      url += '?rev=' + rev;\n    }\n\n    if (typeof blob === 'string') {\n      // input is assumed to be a base64 string\n      var binary;\n      try {\n        binary = atob(blob);\n      } catch (err) {\n        return callback(createError(BAD_ARG,\n                        'Attachment is not a valid base64 string'));\n      }\n      blob = binary ? binStringToBluffer(binary, type) : '';\n    }\n\n    var opts = {\n      headers: {'Content-Type': type},\n      method: 'PUT',\n      url: url,\n      processData: false,\n      body: blob,\n      timeout: ajaxOpts.timeout || 60000\n    };\n    // Add the attachment\n    ajax$$({}, opts, callback);\n  });\n\n  // Update/create multiple documents given by req in the database\n  // given by host.\n  api._bulkDocs = function (req, opts, callback) {\n    // If new_edits=false then it prevents the database from creating\n    // new revision numbers for the documents. Instead it just uses\n    // the old ones. This is used in database replication.\n    req.new_edits = opts.new_edits;\n\n    setup().then(function () {\n      return PouchPromise.all(req.docs.map(preprocessAttachments$1));\n    }).then(function () {\n      // Update/create the documents\n      ajax$$(opts, {\n        method: 'POST',\n        url: genDBUrl(host, '_bulk_docs'),\n        timeout: opts.timeout,\n        body: req\n      }, function (err, results) {\n        if (err) {\n          return callback(err);\n        }\n        results.forEach(function (result) {\n          result.ok = true; // smooths out cloudant not adding this\n        });\n        callback(null, results);\n      });\n    }).catch(callback);\n  };\n\n\n  // Update/create document\n  api._put = function (doc, opts, callback) {\n    setup().then(function () {\n      return preprocessAttachments$1(doc);\n    }).then(function () {\n      // Update/create the document\n      ajax$$(opts, {\n        method: 'PUT',\n        url: genDBUrl(host, encodeDocId(doc._id)),\n        body: doc\n      }, function (err, result) {\n        if (err) {\n          return callback(err);\n        }\n        callback(null, result);\n      });\n    }).catch(callback);\n  };\n\n\n  // Get a listing of the documents in the database given\n  // by host and ordered by increasing id.\n  api.allDocs = adapterFun$$('allDocs', function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = clone(opts);\n\n    // List of parameters to add to the GET request\n    var params = {};\n    var body;\n    var method = 'GET';\n\n    if (opts.conflicts) {\n      params.conflicts = true;\n    }\n\n    if (opts.descending) {\n      params.descending = true;\n    }\n\n    if (opts.include_docs) {\n      params.include_docs = true;\n    }\n\n    // added in CouchDB 1.6.0\n    if (opts.attachments) {\n      params.attachments = true;\n    }\n\n    if (opts.key) {\n      params.key = JSON.stringify(opts.key);\n    }\n\n    if (opts.start_key) {\n      opts.startkey = opts.start_key;\n    }\n\n    if (opts.startkey) {\n      params.startkey = JSON.stringify(opts.startkey);\n    }\n\n    if (opts.end_key) {\n      opts.endkey = opts.end_key;\n    }\n\n    if (opts.endkey) {\n      params.endkey = JSON.stringify(opts.endkey);\n    }\n\n    if (typeof opts.inclusive_end !== 'undefined') {\n      params.inclusive_end = !!opts.inclusive_end;\n    }\n\n    if (typeof opts.limit !== 'undefined') {\n      params.limit = opts.limit;\n    }\n\n    if (typeof opts.skip !== 'undefined') {\n      params.skip = opts.skip;\n    }\n\n    var paramStr = paramsToStr(params);\n\n    if (typeof opts.keys !== 'undefined') {\n      method = 'POST';\n      body = {keys: opts.keys};\n    }\n\n    // Get the document listing\n    ajaxPromise(opts, {\n      method: method,\n      url: genDBUrl(host, '_all_docs' + paramStr),\n      body: body\n    }).then(function (res$$) {\n      if (opts.include_docs && opts.attachments && opts.binary) {\n        res$$.rows.forEach(readAttachmentsAsBlobOrBuffer);\n      }\n      callback(null, res$$);\n    }).catch(callback);\n  });\n\n  // Get a list of changes made to documents in the database given by host.\n  // TODO According to the README, there should be two other methods here,\n  // api.changes.addListener and api.changes.removeListener.\n  api._changes = function (opts) {\n\n    // We internally page the results of a changes request, this means\n    // if there is a large set of changes to be returned we can start\n    // processing them quicker instead of waiting on the entire\n    // set of changes to return and attempting to process them at once\n    var batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;\n\n    opts = clone(opts);\n    opts.timeout = ('timeout' in opts) ? opts.timeout :\n      ('timeout' in ajaxOpts) ? ajaxOpts.timeout :\n      30 * 1000;\n\n    // We give a 5 second buffer for CouchDB changes to respond with\n    // an ok timeout (if a timeout it set)\n    var params = opts.timeout ? {timeout: opts.timeout - (5 * 1000)} : {};\n    var limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;\n    var returnDocs;\n    if ('return_docs' in opts) {\n      returnDocs = opts.return_docs;\n    } else if ('returnDocs' in opts) {\n      // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n      returnDocs = opts.returnDocs;\n    } else {\n      returnDocs = true;\n    }\n    //\n    var leftToFetch = limit;\n\n    if (opts.style) {\n      params.style = opts.style;\n    }\n\n    if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {\n      params.include_docs = true;\n    }\n\n    if (opts.attachments) {\n      params.attachments = true;\n    }\n\n    if (opts.continuous) {\n      params.feed = 'longpoll';\n    }\n\n    if (opts.conflicts) {\n      params.conflicts = true;\n    }\n\n    if (opts.descending) {\n      params.descending = true;\n    }\n\n    if ('heartbeat' in opts) {\n      // If the heartbeat value is false, it disables the default heartbeat\n      if (opts.heartbeat) {\n        params.heartbeat = opts.heartbeat;\n      }\n    } else {\n      // Default heartbeat to 10 seconds\n      params.heartbeat = 10000;\n    }\n\n    if (opts.filter && typeof opts.filter === 'string') {\n      params.filter = opts.filter;\n    }\n\n    if (opts.view && typeof opts.view === 'string') {\n      params.filter = '_view';\n      params.view = opts.view;\n    }\n\n    // If opts.query_params exists, pass it through to the changes request.\n    // These parameters may be used by the filter on the source database.\n    if (opts.query_params && typeof opts.query_params === 'object') {\n      for (var param_name in opts.query_params) {\n        /* istanbul ignore else */\n        if (opts.query_params.hasOwnProperty(param_name)) {\n          params[param_name] = opts.query_params[param_name];\n        }\n      }\n    }\n\n    var method = 'GET';\n    var body;\n\n    if (opts.doc_ids) {\n      // set this automagically for the user; it's annoying that couchdb\n      // requires both a \"filter\" and a \"doc_ids\" param.\n      params.filter = '_doc_ids';\n      method = 'POST';\n      body = {doc_ids: opts.doc_ids };\n    }\n\n    var xhr;\n    var lastFetchedSeq;\n\n    // Get all the changes starting wtih the one immediately after the\n    // sequence number given by since.\n    var fetch = function (since, callback) {\n      if (opts.aborted) {\n        return;\n      }\n      params.since = since;\n      // \"since\" can be any kind of json object in Coudant/CouchDB 2.x\n      /* istanbul ignore next */\n      if (typeof params.since === \"object\") {\n        params.since = JSON.stringify(params.since);\n      }\n\n      if (opts.descending) {\n        if (limit) {\n          params.limit = leftToFetch;\n        }\n      } else {\n        params.limit = (!limit || leftToFetch > batchSize) ?\n          batchSize : leftToFetch;\n      }\n\n      // Set the options for the ajax call\n      var xhrOpts = {\n        method: method,\n        url: genDBUrl(host, '_changes' + paramsToStr(params)),\n        timeout: opts.timeout,\n        body: body\n      };\n      lastFetchedSeq = since;\n\n      /* istanbul ignore if */\n      if (opts.aborted) {\n        return;\n      }\n\n      // Get the changes\n      setup().then(function () {\n        xhr = ajax$$(opts, xhrOpts, callback);\n      }).catch(callback);\n    };\n\n    // If opts.since exists, get all the changes from the sequence\n    // number given by opts.since. Otherwise, get all the changes\n    // from the sequence number 0.\n    var results = {results: []};\n\n    var fetched = function (err, res$$) {\n      if (opts.aborted) {\n        return;\n      }\n      var raw_results_length = 0;\n      // If the result of the ajax call (res) contains changes (res.results)\n      if (res$$ && res$$.results) {\n        raw_results_length = res$$.results.length;\n        results.last_seq = res$$.last_seq;\n        // For each change\n        var req = {};\n        req.query = opts.query_params;\n        res$$.results = res$$.results.filter(function (c) {\n          leftToFetch--;\n          var ret = filterChange(opts)(c);\n          if (ret) {\n            if (opts.include_docs && opts.attachments && opts.binary) {\n              readAttachmentsAsBlobOrBuffer(c);\n            }\n            if (returnDocs) {\n              results.results.push(c);\n            }\n            opts.onChange(c);\n          }\n          return ret;\n        });\n      } else if (err) {\n        // In case of an error, stop listening for changes and call\n        // opts.complete\n        opts.aborted = true;\n        opts.complete(err);\n        return;\n      }\n\n      // The changes feed may have timed out with no results\n      // if so reuse last update sequence\n      if (res$$ && res$$.last_seq) {\n        lastFetchedSeq = res$$.last_seq;\n      }\n\n      var finished = (limit && leftToFetch <= 0) ||\n        (res$$ && raw_results_length < batchSize) ||\n        (opts.descending);\n\n      if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {\n        // Queue a call to fetch again with the newest sequence number\n        setTimeout(function () { fetch(lastFetchedSeq, fetched); }, 0);\n      } else {\n        // We're done, call the callback\n        opts.complete(null, results);\n      }\n    };\n\n    fetch(opts.since || 0, fetched);\n\n    // Return a method to cancel this method from processing any more\n    return {\n      cancel: function () {\n        opts.aborted = true;\n        if (xhr) {\n          xhr.abort();\n        }\n      }\n    };\n  };\n\n  // Given a set of document/revision IDs (given by req), tets the subset of\n  // those that do NOT correspond to revisions stored in the database.\n  // See http://wiki.apache.org/couchdb/HttpPostRevsDiff\n  api.revsDiff = adapterFun$$('revsDiff', function (req, opts, callback) {\n    // If no options were given, set the callback to be the second parameter\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n\n    // Get the missing document/revision IDs\n    ajax$$(opts, {\n      method: 'POST',\n      url: genDBUrl(host, '_revs_diff'),\n      body: req\n    }, callback);\n  });\n\n  api._close = function (callback) {\n    callback();\n  };\n\n  api._destroy = function (options, callback) {\n    ajax$$(options, {\n      url: genDBUrl(host, ''),\n      method: 'DELETE'\n    }, function (err, resp) {\n      if (err && err.status && err.status !== 404) {\n        return callback(err);\n      }\n      callback(null, resp);\n    });\n  };\n}\n\n// HttpPouch is a valid adapter.\nHttpPouch.valid = function () {\n  return true;\n};\n\nfunction HttpPouch$1 (PouchDB) {\n  PouchDB.adapter('http', HttpPouch, false);\n  PouchDB.adapter('https', HttpPouch, false);\n}\n\nfunction pad(str, padWith, upToLength) {\n  var padding = '';\n  var targetLength = upToLength - str.length;\n  /* istanbul ignore next */\n  while (padding.length < targetLength) {\n    padding += padWith;\n  }\n  return padding;\n}\n\nfunction padLeft(str, padWith, upToLength) {\n  var padding = pad(str, padWith, upToLength);\n  return padding + str;\n}\n\nvar MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE\nvar MAGNITUDE_DIGITS = 3; // ditto\nvar SEP = ''; // set to '_' for easier debugging \n\nfunction collate(a, b) {\n\n  if (a === b) {\n    return 0;\n  }\n\n  a = normalizeKey(a);\n  b = normalizeKey(b);\n\n  var ai = collationIndex(a);\n  var bi = collationIndex(b);\n  if ((ai - bi) !== 0) {\n    return ai - bi;\n  }\n  if (a === null) {\n    return 0;\n  }\n  switch (typeof a) {\n    case 'number':\n      return a - b;\n    case 'boolean':\n      return a === b ? 0 : (a < b ? -1 : 1);\n    case 'string':\n      return stringCollate(a, b);\n  }\n  return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b);\n}\n\n// couch considers null/NaN/Infinity/-Infinity === undefined,\n// for the purposes of mapreduce indexes. also, dates get stringified.\nfunction normalizeKey(key) {\n  switch (typeof key) {\n    case 'undefined':\n      return null;\n    case 'number':\n      if (key === Infinity || key === -Infinity || isNaN(key)) {\n        return null;\n      }\n      return key;\n    case 'object':\n      var origKey = key;\n      if (Array.isArray(key)) {\n        var len = key.length;\n        key = new Array(len);\n        for (var i = 0; i < len; i++) {\n          key[i] = normalizeKey(origKey[i]);\n        }\n      /* istanbul ignore next */\n      } else if (key instanceof Date) {\n        return key.toJSON();\n      } else if (key !== null) { // generic object\n        key = {};\n        for (var k in origKey) {\n          if (origKey.hasOwnProperty(k)) {\n            var val = origKey[k];\n            if (typeof val !== 'undefined') {\n              key[k] = normalizeKey(val);\n            }\n          }\n        }\n      }\n  }\n  return key;\n}\n\nfunction indexify(key) {\n  if (key !== null) {\n    switch (typeof key) {\n      case 'boolean':\n        return key ? 1 : 0;\n      case 'number':\n        return numToIndexableString(key);\n      case 'string':\n        // We've to be sure that key does not contain \\u0000\n        // Do order-preserving replacements:\n        // 0 -> 1, 1\n        // 1 -> 1, 2\n        // 2 -> 2, 2\n        return key\n          .replace(/\\u0002/g, '\\u0002\\u0002')\n          .replace(/\\u0001/g, '\\u0001\\u0002')\n          .replace(/\\u0000/g, '\\u0001\\u0001');\n      case 'object':\n        var isArray = Array.isArray(key);\n        var arr = isArray ? key : Object.keys(key);\n        var i = -1;\n        var len = arr.length;\n        var result = '';\n        if (isArray) {\n          while (++i < len) {\n            result += toIndexableString(arr[i]);\n          }\n        } else {\n          while (++i < len) {\n            var objKey = arr[i];\n            result += toIndexableString(objKey) +\n                toIndexableString(key[objKey]);\n          }\n        }\n        return result;\n    }\n  }\n  return '';\n}\n\n// convert the given key to a string that would be appropriate\n// for lexical sorting, e.g. within a database, where the\n// sorting is the same given by the collate() function.\nfunction toIndexableString(key) {\n  var zero = '\\u0000';\n  key = normalizeKey(key);\n  return collationIndex(key) + SEP + indexify(key) + zero;\n}\n\nfunction parseNumber(str, i) {\n  var originalIdx = i;\n  var num;\n  var zero = str[i] === '1';\n  if (zero) {\n    num = 0;\n    i++;\n  } else {\n    var neg = str[i] === '0';\n    i++;\n    var numAsString = '';\n    var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);\n    var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;\n    /* istanbul ignore next */\n    if (neg) {\n      magnitude = -magnitude;\n    }\n    i += MAGNITUDE_DIGITS;\n    while (true) {\n      var ch = str[i];\n      if (ch === '\\u0000') {\n        break;\n      } else {\n        numAsString += ch;\n      }\n      i++;\n    }\n    numAsString = numAsString.split('.');\n    if (numAsString.length === 1) {\n      num = parseInt(numAsString, 10);\n    } else {\n      /* istanbul ignore next */\n      num = parseFloat(numAsString[0] + '.' + numAsString[1]);\n    }\n    /* istanbul ignore next */\n    if (neg) {\n      num = num - 10;\n    }\n    /* istanbul ignore next */\n    if (magnitude !== 0) {\n      // parseFloat is more reliable than pow due to rounding errors\n      // e.g. Number.MAX_VALUE would return Infinity if we did\n      // num * Math.pow(10, magnitude);\n      num = parseFloat(num + 'e' + magnitude);\n    }\n  }\n  return {num: num, length : i - originalIdx};\n}\n\n// move up the stack while parsing\n// this function moved outside of parseIndexableString for performance\nfunction pop(stack, metaStack) {\n  var obj = stack.pop();\n\n  if (metaStack.length) {\n    var lastMetaElement = metaStack[metaStack.length - 1];\n    if (obj === lastMetaElement.element) {\n      // popping a meta-element, e.g. an object whose value is another object\n      metaStack.pop();\n      lastMetaElement = metaStack[metaStack.length - 1];\n    }\n    var element = lastMetaElement.element;\n    var lastElementIndex = lastMetaElement.index;\n    if (Array.isArray(element)) {\n      element.push(obj);\n    } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n      var key = stack.pop();\n      element[key] = obj;\n    } else {\n      stack.push(obj); // obj with key only\n    }\n  }\n}\n\nfunction parseIndexableString(str) {\n  var stack = [];\n  var metaStack = []; // stack for arrays and objects\n  var i = 0;\n\n  /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n  while (true) {\n    var collationIndex = str[i++];\n    if (collationIndex === '\\u0000') {\n      if (stack.length === 1) {\n        return stack.pop();\n      } else {\n        pop(stack, metaStack);\n        continue;\n      }\n    }\n    switch (collationIndex) {\n      case '1':\n        stack.push(null);\n        break;\n      case '2':\n        stack.push(str[i] === '1');\n        i++;\n        break;\n      case '3':\n        var parsedNum = parseNumber(str, i);\n        stack.push(parsedNum.num);\n        i += parsedNum.length;\n        break;\n      case '4':\n        var parsedStr = '';\n        /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n        while (true) {\n          var ch = str[i];\n          if (ch === '\\u0000') {\n            break;\n          }\n          parsedStr += ch;\n          i++;\n        }\n        // perform the reverse of the order-preserving replacement\n        // algorithm (see above)\n        parsedStr = parsedStr.replace(/\\u0001\\u0001/g, '\\u0000')\n          .replace(/\\u0001\\u0002/g, '\\u0001')\n          .replace(/\\u0002\\u0002/g, '\\u0002');\n        stack.push(parsedStr);\n        break;\n      case '5':\n        var arrayElement = { element: [], index: stack.length };\n        stack.push(arrayElement.element);\n        metaStack.push(arrayElement);\n        break;\n      case '6':\n        var objElement = { element: {}, index: stack.length };\n        stack.push(objElement.element);\n        metaStack.push(objElement);\n        break;\n      /* istanbul ignore next */\n      default:\n        throw new Error(\n          'bad collationIndex or unexpectedly reached end of input: ' +\n            collationIndex);\n    }\n  }\n}\n\nfunction arrayCollate(a, b) {\n  var len = Math.min(a.length, b.length);\n  for (var i = 0; i < len; i++) {\n    var sort = collate(a[i], b[i]);\n    if (sort !== 0) {\n      return sort;\n    }\n  }\n  return (a.length === b.length) ? 0 :\n    (a.length > b.length) ? 1 : -1;\n}\nfunction stringCollate(a, b) {\n  // See: https://github.com/daleharvey/pouchdb/issues/40\n  // This is incompatible with the CouchDB implementation, but its the\n  // best we can do for now\n  return (a === b) ? 0 : ((a > b) ? 1 : -1);\n}\nfunction objectCollate(a, b) {\n  var ak = Object.keys(a), bk = Object.keys(b);\n  var len = Math.min(ak.length, bk.length);\n  for (var i = 0; i < len; i++) {\n    // First sort the keys\n    var sort = collate(ak[i], bk[i]);\n    if (sort !== 0) {\n      return sort;\n    }\n    // if the keys are equal sort the values\n    sort = collate(a[ak[i]], b[bk[i]]);\n    if (sort !== 0) {\n      return sort;\n    }\n\n  }\n  return (ak.length === bk.length) ? 0 :\n    (ak.length > bk.length) ? 1 : -1;\n}\n// The collation is defined by erlangs ordered terms\n// the atoms null, true, false come first, then numbers, strings,\n// arrays, then objects\n// null/undefined/NaN/Infinity/-Infinity are all considered null\nfunction collationIndex(x) {\n  var id = ['boolean', 'number', 'string', 'object'];\n  var idx = id.indexOf(typeof x);\n  //false if -1 otherwise true, but fast!!!!1\n  if (~idx) {\n    if (x === null) {\n      return 1;\n    }\n    if (Array.isArray(x)) {\n      return 5;\n    }\n    return idx < 3 ? (idx + 2) : (idx + 3);\n  }\n  /* istanbul ignore next */\n  if (Array.isArray(x)) {\n    return 5;\n  }\n}\n\n// conversion:\n// x yyy zz...zz\n// x = 0 for negative, 1 for 0, 2 for positive\n// y = exponent (for negative numbers negated) moved so that it's >= 0\n// z = mantisse\nfunction numToIndexableString(num) {\n\n  if (num === 0) {\n    return '1';\n  }\n\n  // convert number to exponential format for easier and\n  // more succinct string sorting\n  var expFormat = num.toExponential().split(/e\\+?/);\n  var magnitude = parseInt(expFormat[1], 10);\n\n  var neg = num < 0;\n\n  var result = neg ? '0' : '2';\n\n  // first sort by magnitude\n  // it's easier if all magnitudes are positive\n  var magForComparison = ((neg ? -magnitude : magnitude) - MIN_MAGNITUDE);\n  var magString = padLeft((magForComparison).toString(), '0', MAGNITUDE_DIGITS);\n\n  result += SEP + magString;\n\n  // then sort by the factor\n  var factor = Math.abs(parseFloat(expFormat[0])); // [1..10)\n  /* istanbul ignore next */\n  if (neg) { // for negative reverse ordering\n    factor = 10 - factor;\n  }\n\n  var factorStr = factor.toFixed(20);\n\n  // strip zeros from the end\n  factorStr = factorStr.replace(/\\.?0+$/, '');\n\n  result += SEP + factorStr;\n\n  return result;\n}\n\n/*\n * Simple task queue to sequentialize actions. Assumes\n * callbacks will eventually fire (once).\n */\n\nfunction TaskQueue$1() {\n  this.promise = new PouchPromise(function (fulfill) {fulfill(); });\n}\nTaskQueue$1.prototype.add = function (promiseFactory) {\n  this.promise = this.promise.catch(function () {\n    // just recover\n  }).then(function () {\n    return promiseFactory();\n  });\n  return this.promise;\n};\nTaskQueue$1.prototype.finish = function () {\n  return this.promise;\n};\n\nfunction createView(opts) {\n  var sourceDB = opts.db;\n  var viewName = opts.viewName;\n  var mapFun = opts.map;\n  var reduceFun = opts.reduce;\n  var temporary = opts.temporary;\n\n  // the \"undefined\" part is for backwards compatibility\n  var viewSignature = mapFun.toString() + (reduceFun && reduceFun.toString()) +\n    'undefined';\n\n  var cachedViews;\n  if (!temporary) {\n    // cache this to ensure we don't try to update the same view twice\n    cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};\n    if (cachedViews[viewSignature]) {\n      return cachedViews[viewSignature];\n    }\n  }\n\n  var promiseForView = sourceDB.info().then(function (info) {\n\n    var depDbName = info.db_name + '-mrview-' +\n      (temporary ? 'temp' : stringMd5(viewSignature));\n\n    // save the view name in the source db so it can be cleaned up if necessary\n    // (e.g. when the _design doc is deleted, remove all associated view data)\n    function diffFunction(doc) {\n      doc.views = doc.views || {};\n      var fullViewName = viewName;\n      if (fullViewName.indexOf('/') === -1) {\n        fullViewName = viewName + '/' + viewName;\n      }\n      var depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};\n      /* istanbul ignore if */\n      if (depDbs[depDbName]) {\n        return; // no update necessary\n      }\n      depDbs[depDbName] = true;\n      return doc;\n    }\n    return upsert(sourceDB, '_local/mrviews', diffFunction).then(function () {\n      return sourceDB.registerDependentDatabase(depDbName).then(function (res) {\n        var db = res.db;\n        db.auto_compaction = true;\n        var view = {\n          name: depDbName,\n          db: db,\n          sourceDB: sourceDB,\n          adapter: sourceDB.adapter,\n          mapFun: mapFun,\n          reduceFun: reduceFun\n        };\n        return view.db.get('_local/lastSeq').catch(function (err) {\n          /* istanbul ignore if */\n          if (err.status !== 404) {\n            throw err;\n          }\n        }).then(function (lastSeqDoc) {\n          view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;\n          if (cachedViews) {\n            view.db.once('destroyed', function () {\n              delete cachedViews[viewSignature];\n            });\n          }\n          return view;\n        });\n      });\n    });\n  });\n\n  if (cachedViews) {\n    cachedViews[viewSignature] = promiseForView;\n  }\n  return promiseForView;\n}\n\nfunction QueryParseError(message) {\n  this.status = 400;\n  this.name = 'query_parse_error';\n  this.message = message;\n  this.error = true;\n  try {\n    Error.captureStackTrace(this, QueryParseError);\n  } catch (e) {}\n}\n\ninherits(QueryParseError, Error);\n\nfunction NotFoundError$1(message) {\n  this.status = 404;\n  this.name = 'not_found';\n  this.message = message;\n  this.error = true;\n  try {\n    Error.captureStackTrace(this, NotFoundError$1);\n  } catch (e) {}\n}\n\ninherits(NotFoundError$1, Error);\n\nfunction BuiltInError(message) {\n  this.status = 500;\n  this.name = 'invalid_value';\n  this.message = message;\n  this.error = true;\n  try {\n    Error.captureStackTrace(this, BuiltInError);\n  } catch (e) {}\n}\n\ninherits(BuiltInError, Error);\n\nfunction createBuiltInError(name) {\n  var message = 'builtin ' + name +\n    ' function requires map values to be numbers' +\n    ' or number arrays';\n  return new BuiltInError(message);\n}\n\nfunction sum(values) {\n  var result = 0;\n  for (var i = 0, len = values.length; i < len; i++) {\n    var num = values[i];\n    if (typeof num !== 'number') {\n      if (Array.isArray(num)) {\n        // lists of numbers are also allowed, sum them separately\n        result = typeof result === 'number' ? [result] : result;\n        for (var j = 0, jLen = num.length; j < jLen; j++) {\n          var jNum = num[j];\n          if (typeof jNum !== 'number') {\n            throw createBuiltInError('_sum');\n          } else if (typeof result[j] === 'undefined') {\n            result.push(jNum);\n          } else {\n            result[j] += jNum;\n          }\n        }\n      } else { // not array/number\n        throw createBuiltInError('_sum');\n      }\n    } else if (typeof result === 'number') {\n      result += num;\n    } else { // add number to array\n      result[0] += num;\n    }\n  }\n  return result;\n}\n\n// Inside of 'vm' for Node, we need a way to translate a pseudo-error\n// back into a real error once it's out of the VM.\nfunction createBuiltInErrorInVm(name) {\n  return {\n    builtInError: true,\n    name: name\n  };\n}\n\nfunction convertToTrueError(err) {\n  return createBuiltInError(err.name);\n}\n\nfunction isBuiltInError(obj) {\n  return obj && obj.builtInError;\n}\n\n// All of this vm hullaballoo is to be able to run arbitrary code in a sandbox\n// for security reasons.\nfunction evalFunctionInVm(func, emit) {\n  return function (arg1, arg2, arg3) {\n    var code = '(function() {\"use strict\";' +\n      'var createBuiltInError = ' + createBuiltInErrorInVm.toString() + ';' +\n      'var sum = ' + sum.toString() + ';' +\n      'var log = function () {};' +\n      'var isArray = Array.isArray;' +\n      'var toJSON = JSON.parse;' +\n      'var __emitteds__ = [];' +\n      'var emit = function (key, value) {__emitteds__.push([key, value]);};' +\n      'var __result__ = (' +\n      func.replace(/;\\s*$/, '') + ')' + '(' +\n      JSON.stringify(arg1) + ',' +\n      JSON.stringify(arg2) + ',' +\n      JSON.stringify(arg3) + ');' +\n      'return {result: __result__, emitteds: __emitteds__};' +\n      '})()';\n\n    var output = vm.runInNewContext(code);\n\n    output.emitteds.forEach(function (emitted) {\n      emit(emitted[0], emitted[1]);\n    });\n    if (isBuiltInError(output.result)) {\n      output.result = convertToTrueError(output.result);\n    }\n    return output.result;\n  };\n}\n\nvar log$2 = guardedConsole.bind(null, 'log');\n\n// The \"stringify, then execute in a VM\" strategy totally breaks Istanbul due\n// to missing __coverage global objects. As a solution, export different\n// code during coverage testing and during regular execution.\n// Note that this doesn't get shipped to consumers because Rollup replaces it\n// with rollup-plugin-replace, so false is replaced with `false`\nvar evalFunc;\n/* istanbul ignore else */\nif (false) {} else {\n  evalFunc = evalFunctionInVm;\n}\n\nvar evalFunction = evalFunc;\n\nvar promisedCallback = function (promise, callback) {\n  if (callback) {\n    promise.then(function (res) {\n      process.nextTick(function () {\n        callback(null, res);\n      });\n    }, function (reason) {\n      process.nextTick(function () {\n        callback(reason);\n      });\n    });\n  }\n  return promise;\n};\n\nvar callbackify = function (fun) {\n  return getArguments(function (args) {\n    var cb = args.pop();\n    var promise = fun.apply(this, args);\n    if (typeof cb === 'function') {\n      promisedCallback(promise, cb);\n    }\n    return promise;\n  });\n};\n\n// Promise finally util similar to Q.finally\nvar fin = function (promise, finalPromiseFactory) {\n  return promise.then(function (res) {\n    return finalPromiseFactory().then(function () {\n      return res;\n    });\n  }, function (reason) {\n    return finalPromiseFactory().then(function () {\n      throw reason;\n    });\n  });\n};\n\nvar sequentialize = function (queue, promiseFactory) {\n  return function () {\n    var args = arguments;\n    var that = this;\n    return queue.add(function () {\n      return promiseFactory.apply(that, args);\n    });\n  };\n};\n\n// uniq an array of strings, order not guaranteed\n// similar to underscore/lodash _.uniq\nvar uniq = function (arr) {\n  var map = {};\n\n  for (var i = 0, len = arr.length; i < len; i++) {\n    map['$' + arr[i]] = true;\n  }\n\n  var keys = Object.keys(map);\n  var output = new Array(keys.length);\n\n  for (i = 0, len = keys.length; i < len; i++) {\n    output[i] = keys[i].substring(1);\n  }\n  return output;\n};\n\nvar persistentQueues = {};\nvar tempViewQueue = new TaskQueue$1();\nvar CHANGES_BATCH_SIZE$1 = 50;\n\nfunction parseViewName(name) {\n  // can be either 'ddocname/viewname' or just 'viewname'\n  // (where the ddoc name is the same)\n  return name.indexOf('/') === -1 ? [name, name] : name.split('/');\n}\n\nfunction isGenOne(changes) {\n  // only return true if the current change is 1-\n  // and there are no other leafs\n  return changes.length === 1 && /^1-/.test(changes[0].rev);\n}\n\nfunction emitError(db, e) {\n  try {\n    db.emit('error', e);\n  } catch (err) {\n    guardedConsole('error',\n      'The user\\'s map/reduce function threw an uncaught error.\\n' +\n      'You can debug this error by doing:\\n' +\n      'myDatabase.on(\\'error\\', function (err) { debugger; });\\n' +\n      'Please double-check your map/reduce function.');\n    guardedConsole('error', e);\n  }\n}\n\nfunction tryCode(db, fun, args) {\n  // emit an event if there was an error thrown by a map/reduce function.\n  // putting try/catches in a single function also avoids deoptimizations.\n  try {\n    return {\n      output : fun.apply(null, args)\n    };\n  } catch (e) {\n    emitError(db, e);\n    return {error: e};\n  }\n}\n\nfunction sortByKeyThenValue(x, y) {\n  var keyCompare = collate(x.key, y.key);\n  return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);\n}\n\nfunction sliceResults(results, limit, skip) {\n  skip = skip || 0;\n  if (typeof limit === 'number') {\n    return results.slice(skip, limit + skip);\n  } else if (skip > 0) {\n    return results.slice(skip);\n  }\n  return results;\n}\n\nfunction rowToDocId(row) {\n  var val = row.value;\n  // Users can explicitly specify a joined doc _id, or it\n  // defaults to the doc _id that emitted the key/value.\n  var docId = (val && typeof val === 'object' && val._id) || row.id;\n  return docId;\n}\n\nfunction readAttachmentsAsBlobOrBuffer$1(res) {\n  res.rows.forEach(function (row) {\n    var atts = row.doc && row.doc._attachments;\n    if (!atts) {\n      return;\n    }\n    Object.keys(atts).forEach(function (filename) {\n      var att = atts[filename];\n      atts[filename].data = b64ToBluffer(att.data, att.content_type);\n    });\n  });\n}\n\nfunction postprocessAttachments(opts) {\n  return function (res) {\n    if (opts.include_docs && opts.attachments && opts.binary) {\n      readAttachmentsAsBlobOrBuffer$1(res);\n    }\n    return res;\n  };\n}\n\nvar builtInReduce = {\n  _sum: function (keys, values) {\n    return sum(values);\n  },\n\n  _count: function (keys, values) {\n    return values.length;\n  },\n\n  _stats: function (keys, values) {\n    // no need to implement rereduce=true, because Pouch\n    // will never call it\n    function sumsqr(values) {\n      var _sumsqr = 0;\n      for (var i = 0, len = values.length; i < len; i++) {\n        var num = values[i];\n        _sumsqr += (num * num);\n      }\n      return _sumsqr;\n    }\n    return {\n      sum     : sum(values),\n      min     : Math.min.apply(null, values),\n      max     : Math.max.apply(null, values),\n      count   : values.length,\n      sumsqr : sumsqr(values)\n    };\n  }\n};\n\nfunction addHttpParam(paramName, opts, params, asJson) {\n  // add an http param from opts to params, optionally json-encoded\n  var val = opts[paramName];\n  if (typeof val !== 'undefined') {\n    if (asJson) {\n      val = encodeURIComponent(JSON.stringify(val));\n    }\n    params.push(paramName + '=' + val);\n  }\n}\n\nfunction coerceInteger(integerCandidate) {\n  if (typeof integerCandidate !== 'undefined') {\n    var asNumber = Number(integerCandidate);\n    // prevents e.g. '1foo' or '1.1' being coerced to 1\n    if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {\n      return asNumber;\n    } else {\n      return integerCandidate;\n    }\n  }\n}\n\nfunction coerceOptions(opts) {\n  opts.group_level = coerceInteger(opts.group_level);\n  opts.limit = coerceInteger(opts.limit);\n  opts.skip = coerceInteger(opts.skip);\n  return opts;\n}\n\nfunction checkPositiveInteger(number) {\n  if (number) {\n    if (typeof number !== 'number') {\n      return  new QueryParseError('Invalid value for integer: \"' +\n      number + '\"');\n    }\n    if (number < 0) {\n      return new QueryParseError('Invalid value for positive integer: ' +\n        '\"' + number + '\"');\n    }\n  }\n}\n\nfunction checkQueryParseError(options, fun) {\n  var startkeyName = options.descending ? 'endkey' : 'startkey';\n  var endkeyName = options.descending ? 'startkey' : 'endkey';\n\n  if (typeof options[startkeyName] !== 'undefined' &&\n    typeof options[endkeyName] !== 'undefined' &&\n    collate(options[startkeyName], options[endkeyName]) > 0) {\n    throw new QueryParseError('No rows can match your key range, ' +\n    'reverse your start_key and end_key or set {descending : true}');\n  } else if (fun.reduce && options.reduce !== false) {\n    if (options.include_docs) {\n      throw new QueryParseError('{include_docs:true} is invalid for reduce');\n    } else if (options.keys && options.keys.length > 1 &&\n        !options.group && !options.group_level) {\n      throw new QueryParseError('Multi-key fetches for reduce views must use ' +\n      '{group: true}');\n    }\n  }\n  ['group_level', 'limit', 'skip'].forEach(function (optionName) {\n    var error = checkPositiveInteger(options[optionName]);\n    if (error) {\n      throw error;\n    }\n  });\n}\n\nfunction httpQuery(db, fun, opts) {\n  // List of parameters to add to the PUT request\n  var params = [];\n  var body;\n  var method = 'GET';\n\n  // If opts.reduce exists and is defined, then add it to the list\n  // of parameters.\n  // If reduce=false then the results are that of only the map function\n  // not the final result of map and reduce.\n  addHttpParam('reduce', opts, params);\n  addHttpParam('include_docs', opts, params);\n  addHttpParam('attachments', opts, params);\n  addHttpParam('limit', opts, params);\n  addHttpParam('descending', opts, params);\n  addHttpParam('group', opts, params);\n  addHttpParam('group_level', opts, params);\n  addHttpParam('skip', opts, params);\n  addHttpParam('stale', opts, params);\n  addHttpParam('conflicts', opts, params);\n  addHttpParam('startkey', opts, params, true);\n  addHttpParam('start_key', opts, params, true);\n  addHttpParam('endkey', opts, params, true);\n  addHttpParam('end_key', opts, params, true);\n  addHttpParam('inclusive_end', opts, params);\n  addHttpParam('key', opts, params, true);\n\n  // Format the list of parameters into a valid URI query string\n  params = params.join('&');\n  params = params === '' ? '' : '?' + params;\n\n  // If keys are supplied, issue a POST to circumvent GET query string limits\n  // see http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options\n  if (typeof opts.keys !== 'undefined') {\n    var MAX_URL_LENGTH = 2000;\n    // according to http://stackoverflow.com/a/417184/680742,\n    // the de facto URL length limit is 2000 characters\n\n    var keysAsString =\n      'keys=' + encodeURIComponent(JSON.stringify(opts.keys));\n    if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {\n      // If the keys are short enough, do a GET. we do this to work around\n      // Safari not understanding 304s on POSTs (see pouchdb/pouchdb#1239)\n      params += (params[0] === '?' ? '&' : '?') + keysAsString;\n    } else {\n      method = 'POST';\n      if (typeof fun === 'string') {\n        body = {keys: opts.keys};\n      } else { // fun is {map : mapfun}, so append to this\n        fun.keys = opts.keys;\n      }\n    }\n  }\n\n  // We are referencing a query defined in the design doc\n  if (typeof fun === 'string') {\n    var parts = parseViewName(fun);\n    return db.request({\n      method: method,\n      url: '_design/' + parts[0] + '/_view/' + parts[1] + params,\n      body: body\n    }).then(postprocessAttachments(opts));\n  }\n\n  // We are using a temporary view, terrible for performance, good for testing\n  body = body || {};\n  Object.keys(fun).forEach(function (key) {\n    if (Array.isArray(fun[key])) {\n      body[key] = fun[key];\n    } else {\n      body[key] = fun[key].toString();\n    }\n  });\n  return db.request({\n    method: 'POST',\n    url: '_temp_view' + params,\n    body: body\n  }).then(postprocessAttachments(opts));\n}\n\n// custom adapters can define their own api._query\n// and override the default behavior\n/* istanbul ignore next */\nfunction customQuery(db, fun, opts) {\n  return new PouchPromise(function (resolve, reject) {\n    db._query(fun, opts, function (err, res) {\n      if (err) {\n        return reject(err);\n      }\n      resolve(res);\n    });\n  });\n}\n\n// custom adapters can define their own api._viewCleanup\n// and override the default behavior\n/* istanbul ignore next */\nfunction customViewCleanup(db) {\n  return new PouchPromise(function (resolve, reject) {\n    db._viewCleanup(function (err, res) {\n      if (err) {\n        return reject(err);\n      }\n      resolve(res);\n    });\n  });\n}\n\nfunction defaultsTo(value) {\n  return function (reason) {\n    /* istanbul ignore else */\n    if (reason.status === 404) {\n      return value;\n    } else {\n      throw reason;\n    }\n  };\n}\n\n// returns a promise for a list of docs to update, based on the input docId.\n// the order doesn't matter, because post-3.2.0, bulkDocs\n// is an atomic operation in all three adapters.\nfunction getDocsToPersist(docId, view, docIdsToChangesAndEmits) {\n  var metaDocId = '_local/doc_' + docId;\n  var defaultMetaDoc = {_id: metaDocId, keys: []};\n  var docData = docIdsToChangesAndEmits[docId];\n  var indexableKeysToKeyValues = docData.indexableKeysToKeyValues;\n  var changes = docData.changes;\n\n  function getMetaDoc() {\n    if (isGenOne(changes)) {\n      // generation 1, so we can safely assume initial state\n      // for performance reasons (avoids unnecessary GETs)\n      return PouchPromise.resolve(defaultMetaDoc);\n    }\n    return view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc));\n  }\n\n  function getKeyValueDocs(metaDoc) {\n    if (!metaDoc.keys.length) {\n      // no keys, no need for a lookup\n      return PouchPromise.resolve({rows: []});\n    }\n    return view.db.allDocs({\n      keys: metaDoc.keys,\n      include_docs: true\n    });\n  }\n\n  function processKvDocs(metaDoc, kvDocsRes) {\n    var kvDocs = [];\n    var oldKeysMap = {};\n\n    for (var i = 0, len = kvDocsRes.rows.length; i < len; i++) {\n      var row = kvDocsRes.rows[i];\n      var doc = row.doc;\n      if (!doc) { // deleted\n        continue;\n      }\n      kvDocs.push(doc);\n      oldKeysMap[doc._id] = true;\n      doc._deleted = !indexableKeysToKeyValues[doc._id];\n      if (!doc._deleted) {\n        var keyValue = indexableKeysToKeyValues[doc._id];\n        if ('value' in keyValue) {\n          doc.value = keyValue.value;\n        }\n      }\n    }\n\n    var newKeys = Object.keys(indexableKeysToKeyValues);\n    newKeys.forEach(function (key) {\n      if (!oldKeysMap[key]) {\n        // new doc\n        var kvDoc = {\n          _id: key\n        };\n        var keyValue = indexableKeysToKeyValues[key];\n        if ('value' in keyValue) {\n          kvDoc.value = keyValue.value;\n        }\n        kvDocs.push(kvDoc);\n      }\n    });\n    metaDoc.keys = uniq(newKeys.concat(metaDoc.keys));\n    kvDocs.push(metaDoc);\n\n    return kvDocs;\n  }\n\n  return getMetaDoc().then(function (metaDoc) {\n    return getKeyValueDocs(metaDoc).then(function (kvDocsRes) {\n      return processKvDocs(metaDoc, kvDocsRes);\n    });\n  });\n}\n\n// updates all emitted key/value docs and metaDocs in the mrview database\n// for the given batch of documents from the source database\nfunction saveKeyValues(view, docIdsToChangesAndEmits, seq) {\n  var seqDocId = '_local/lastSeq';\n  return view.db.get(seqDocId)\n  .catch(defaultsTo({_id: seqDocId, seq: 0}))\n  .then(function (lastSeqDoc) {\n    var docIds = Object.keys(docIdsToChangesAndEmits);\n    return PouchPromise.all(docIds.map(function (docId) {\n      return getDocsToPersist(docId, view, docIdsToChangesAndEmits);\n    })).then(function (listOfDocsToPersist) {\n      var docsToPersist = flatten(listOfDocsToPersist);\n      lastSeqDoc.seq = seq;\n      docsToPersist.push(lastSeqDoc);\n      // write all docs in a single operation, update the seq once\n      return view.db.bulkDocs({docs : docsToPersist});\n    });\n  });\n}\n\nfunction getQueue(view) {\n  var viewName = typeof view === 'string' ? view : view.name;\n  var queue = persistentQueues[viewName];\n  if (!queue) {\n    queue = persistentQueues[viewName] = new TaskQueue$1();\n  }\n  return queue;\n}\n\nfunction updateView(view) {\n  return sequentialize(getQueue(view), function () {\n    return updateViewInQueue(view);\n  })();\n}\n\nfunction updateViewInQueue(view) {\n  // bind the emit function once\n  var mapResults;\n  var doc;\n\n  function emit(key, value) {\n    var output = {id: doc._id, key: normalizeKey(key)};\n    // Don't explicitly store the value unless it's defined and non-null.\n    // This saves on storage space, because often people don't use it.\n    if (typeof value !== 'undefined' && value !== null) {\n      output.value = normalizeKey(value);\n    }\n    mapResults.push(output);\n  }\n\n  var mapFun;\n  // for temp_views one can use emit(doc, emit), see #38\n  if (typeof view.mapFun === \"function\" && view.mapFun.length === 2) {\n    var origMap = view.mapFun;\n    mapFun = function (doc) {\n      return origMap(doc, emit);\n    };\n  } else {\n    mapFun = evalFunction(view.mapFun.toString(), emit);\n  }\n\n  var currentSeq = view.seq || 0;\n\n  function processChange(docIdsToChangesAndEmits, seq) {\n    return function () {\n      return saveKeyValues(view, docIdsToChangesAndEmits, seq);\n    };\n  }\n\n  var queue = new TaskQueue$1();\n  // TODO(neojski): https://github.com/daleharvey/pouchdb/issues/1521\n\n  return new PouchPromise(function (resolve, reject) {\n\n    function complete() {\n      queue.finish().then(function () {\n        view.seq = currentSeq;\n        resolve();\n      });\n    }\n\n    function processNextBatch() {\n      view.sourceDB.changes({\n        conflicts: true,\n        include_docs: true,\n        style: 'all_docs',\n        since: currentSeq,\n        limit: CHANGES_BATCH_SIZE$1\n      }).on('complete', function (response) {\n        var results = response.results;\n        if (!results.length) {\n          return complete();\n        }\n        var docIdsToChangesAndEmits = {};\n        for (var i = 0, l = results.length; i < l; i++) {\n          var change = results[i];\n          if (change.doc._id[0] !== '_') {\n            mapResults = [];\n            doc = change.doc;\n\n            if (!doc._deleted) {\n              tryCode(view.sourceDB, mapFun, [doc]);\n            }\n            mapResults.sort(sortByKeyThenValue);\n\n            var indexableKeysToKeyValues = {};\n            var lastKey;\n            for (var j = 0, jl = mapResults.length; j < jl; j++) {\n              var obj = mapResults[j];\n              var complexKey = [obj.key, obj.id];\n              if (collate(obj.key, lastKey) === 0) {\n                complexKey.push(j); // dup key+id, so make it unique\n              }\n              var indexableKey = toIndexableString(complexKey);\n              indexableKeysToKeyValues[indexableKey] = obj;\n              lastKey = obj.key;\n            }\n            docIdsToChangesAndEmits[change.doc._id] = {\n              indexableKeysToKeyValues: indexableKeysToKeyValues,\n              changes: change.changes\n            };\n          }\n          currentSeq = change.seq;\n        }\n        queue.add(processChange(docIdsToChangesAndEmits, currentSeq));\n        if (results.length < CHANGES_BATCH_SIZE$1) {\n          return complete();\n        }\n        return processNextBatch();\n      }).on('error', onError);\n      /* istanbul ignore next */\n      function onError(err) {\n        reject(err);\n      }\n    }\n\n    processNextBatch();\n  });\n}\n\nfunction reduceView(view, results, options) {\n  if (options.group_level === 0) {\n    delete options.group_level;\n  }\n\n  var shouldGroup = options.group || options.group_level;\n\n  var reduceFun;\n  if (builtInReduce[view.reduceFun]) {\n    reduceFun = builtInReduce[view.reduceFun];\n  } else {\n    reduceFun = evalFunction(view.reduceFun.toString());\n  }\n\n  var groups = [];\n  var lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY :\n    options.group_level;\n  results.forEach(function (e) {\n    var last = groups[groups.length - 1];\n    var groupKey = shouldGroup ? e.key : null;\n\n    // only set group_level for array keys\n    if (shouldGroup && Array.isArray(groupKey)) {\n      groupKey = groupKey.slice(0, lvl);\n    }\n\n    if (last && collate(last.groupKey, groupKey) === 0) {\n      last.keys.push([e.key, e.id]);\n      last.values.push(e.value);\n      return;\n    }\n    groups.push({\n      keys: [[e.key, e.id]],\n      values: [e.value],\n      groupKey: groupKey\n    });\n  });\n  results = [];\n  for (var i = 0, len = groups.length; i < len; i++) {\n    var e = groups[i];\n    var reduceTry = tryCode(view.sourceDB, reduceFun,\n      [e.keys, e.values, false]);\n    if (reduceTry.error && reduceTry.error instanceof BuiltInError) {\n      // CouchDB returns an error if a built-in errors out\n      throw reduceTry.error;\n    }\n    results.push({\n      // CouchDB just sets the value to null if a non-built-in errors out\n      value: reduceTry.error ? null : reduceTry.output,\n      key: e.groupKey\n    });\n  }\n  // no total_rows/offset when reducing\n  return {rows: sliceResults(results, options.limit, options.skip)};\n}\n\nfunction queryView(view, opts) {\n  return sequentialize(getQueue(view), function () {\n    return queryViewInQueue(view, opts);\n  })();\n}\n\nfunction queryViewInQueue(view, opts) {\n  var totalRows;\n  var shouldReduce = view.reduceFun && opts.reduce !== false;\n  var skip = opts.skip || 0;\n  if (typeof opts.keys !== 'undefined' && !opts.keys.length) {\n    // equivalent query\n    opts.limit = 0;\n    delete opts.keys;\n  }\n\n  function fetchFromView(viewOpts) {\n    viewOpts.include_docs = true;\n    return view.db.allDocs(viewOpts).then(function (res) {\n      totalRows = res.total_rows;\n      return res.rows.map(function (result) {\n\n        // implicit migration - in older versions of PouchDB,\n        // we explicitly stored the doc as {id: ..., key: ..., value: ...}\n        // this is tested in a migration test\n        /* istanbul ignore next */\n        if ('value' in result.doc && typeof result.doc.value === 'object' &&\n            result.doc.value !== null) {\n          var keys = Object.keys(result.doc.value).sort();\n          // this detection method is not perfect, but it's unlikely the user\n          // emitted a value which was an object with these 3 exact keys\n          var expectedKeys = ['id', 'key', 'value'];\n          if (!(keys < expectedKeys || keys > expectedKeys)) {\n            return result.doc.value;\n          }\n        }\n\n        var parsedKeyAndDocId = parseIndexableString(result.doc._id);\n        return {\n          key: parsedKeyAndDocId[0],\n          id: parsedKeyAndDocId[1],\n          value: ('value' in result.doc ? result.doc.value : null)\n        };\n      });\n    });\n  }\n\n  function onMapResultsReady(rows) {\n    var finalResults;\n    if (shouldReduce) {\n      finalResults = reduceView(view, rows, opts);\n    } else {\n      finalResults = {\n        total_rows: totalRows,\n        offset: skip,\n        rows: rows\n      };\n    }\n    if (opts.include_docs) {\n      var docIds = uniq(rows.map(rowToDocId));\n\n      return view.sourceDB.allDocs({\n        keys: docIds,\n        include_docs: true,\n        conflicts: opts.conflicts,\n        attachments: opts.attachments,\n        binary: opts.binary\n      }).then(function (allDocsRes) {\n        var docIdsToDocs = {};\n        allDocsRes.rows.forEach(function (row) {\n          if (row.doc) {\n            docIdsToDocs['$' + row.id] = row.doc;\n          }\n        });\n        rows.forEach(function (row) {\n          var docId = rowToDocId(row);\n          var doc = docIdsToDocs['$' + docId];\n          if (doc) {\n            row.doc = doc;\n          }\n        });\n        return finalResults;\n      });\n    } else {\n      return finalResults;\n    }\n  }\n\n  if (typeof opts.keys !== 'undefined') {\n    var keys = opts.keys;\n    var fetchPromises = keys.map(function (key) {\n      var viewOpts = {\n        startkey : toIndexableString([key]),\n        endkey   : toIndexableString([key, {}])\n      };\n      return fetchFromView(viewOpts);\n    });\n    return PouchPromise.all(fetchPromises).then(flatten).then(onMapResultsReady);\n  } else { // normal query, no 'keys'\n    var viewOpts = {\n      descending : opts.descending\n    };\n    if (opts.start_key) {\n        opts.startkey = opts.start_key;\n    }\n    if (opts.end_key) {\n        opts.endkey = opts.end_key;\n    }\n    if (typeof opts.startkey !== 'undefined') {\n      viewOpts.startkey = opts.descending ?\n        toIndexableString([opts.startkey, {}]) :\n        toIndexableString([opts.startkey]);\n    }\n    if (typeof opts.endkey !== 'undefined') {\n      var inclusiveEnd = opts.inclusive_end !== false;\n      if (opts.descending) {\n        inclusiveEnd = !inclusiveEnd;\n      }\n\n      viewOpts.endkey = toIndexableString(\n        inclusiveEnd ? [opts.endkey, {}] : [opts.endkey]);\n    }\n    if (typeof opts.key !== 'undefined') {\n      var keyStart = toIndexableString([opts.key]);\n      var keyEnd = toIndexableString([opts.key, {}]);\n      if (viewOpts.descending) {\n        viewOpts.endkey = keyStart;\n        viewOpts.startkey = keyEnd;\n      } else {\n        viewOpts.startkey = keyStart;\n        viewOpts.endkey = keyEnd;\n      }\n    }\n    if (!shouldReduce) {\n      if (typeof opts.limit === 'number') {\n        viewOpts.limit = opts.limit;\n      }\n      viewOpts.skip = skip;\n    }\n    return fetchFromView(viewOpts).then(onMapResultsReady);\n  }\n}\n\nfunction httpViewCleanup(db) {\n  return db.request({\n    method: 'POST',\n    url: '_view_cleanup'\n  });\n}\n\nfunction localViewCleanup(db) {\n  return db.get('_local/mrviews').then(function (metaDoc) {\n    var docsToViews = {};\n    Object.keys(metaDoc.views).forEach(function (fullViewName) {\n      var parts = parseViewName(fullViewName);\n      var designDocName = '_design/' + parts[0];\n      var viewName = parts[1];\n      docsToViews[designDocName] = docsToViews[designDocName] || {};\n      docsToViews[designDocName][viewName] = true;\n    });\n    var opts = {\n      keys : Object.keys(docsToViews),\n      include_docs : true\n    };\n    return db.allDocs(opts).then(function (res) {\n      var viewsToStatus = {};\n      res.rows.forEach(function (row) {\n        var ddocName = row.key.substring(8);\n        Object.keys(docsToViews[row.key]).forEach(function (viewName) {\n          var fullViewName = ddocName + '/' + viewName;\n          /* istanbul ignore if */\n          if (!metaDoc.views[fullViewName]) {\n            // new format, without slashes, to support PouchDB 2.2.0\n            // migration test in pouchdb's browser.migration.js verifies this\n            fullViewName = viewName;\n          }\n          var viewDBNames = Object.keys(metaDoc.views[fullViewName]);\n          // design doc deleted, or view function nonexistent\n          var statusIsGood = row.doc && row.doc.views &&\n            row.doc.views[viewName];\n          viewDBNames.forEach(function (viewDBName) {\n            viewsToStatus[viewDBName] =\n              viewsToStatus[viewDBName] || statusIsGood;\n          });\n        });\n      });\n      var dbsToDelete = Object.keys(viewsToStatus).filter(\n        function (viewDBName) { return !viewsToStatus[viewDBName]; });\n      var destroyPromises = dbsToDelete.map(function (viewDBName) {\n        return sequentialize(getQueue(viewDBName), function () {\n          return new db.constructor(viewDBName, db.__opts).destroy();\n        })();\n      });\n      return PouchPromise.all(destroyPromises).then(function () {\n        return {ok: true};\n      });\n    });\n  }, defaultsTo({ok: true}));\n}\n\nvar viewCleanup = callbackify(function () {\n  var db = this;\n  if (db.type() === 'http') {\n    return httpViewCleanup(db);\n  }\n  /* istanbul ignore next */\n  if (typeof db._viewCleanup === 'function') {\n    return customViewCleanup(db);\n  }\n  return localViewCleanup(db);\n});\n\nfunction queryPromised(db, fun, opts) {\n  if (db.type() === 'http') {\n    return httpQuery(db, fun, opts);\n  }\n\n  /* istanbul ignore next */\n  if (typeof db._query === 'function') {\n    return customQuery(db, fun, opts);\n  }\n\n  if (typeof fun !== 'string') {\n    // temp_view\n    checkQueryParseError(opts, fun);\n\n    var createViewOpts = {\n      db : db,\n      viewName : 'temp_view/temp_view',\n      map : fun.map,\n      reduce : fun.reduce,\n      temporary : true\n    };\n    tempViewQueue.add(function () {\n      return createView(createViewOpts).then(function (view) {\n        function cleanup() {\n          return view.db.destroy();\n        }\n        return fin(updateView(view).then(function () {\n          return queryView(view, opts);\n        }), cleanup);\n      });\n    });\n    return tempViewQueue.finish();\n  } else {\n    // persistent view\n    var fullViewName = fun;\n    var parts = parseViewName(fullViewName);\n    var designDocName = parts[0];\n    var viewName = parts[1];\n    return db.get('_design/' + designDocName).then(function (doc) {\n      var fun = doc.views && doc.views[viewName];\n\n      if (!fun || typeof fun.map !== 'string') {\n        throw new NotFoundError$1('ddoc ' + designDocName +\n        ' has no view named ' + viewName);\n      }\n      checkQueryParseError(opts, fun);\n\n      var createViewOpts = {\n        db : db,\n        viewName : fullViewName,\n        map : fun.map,\n        reduce : fun.reduce\n      };\n      return createView(createViewOpts).then(function (view) {\n        if (opts.stale === 'ok' || opts.stale === 'update_after') {\n          if (opts.stale === 'update_after') {\n            process.nextTick(function () {\n              updateView(view);\n            });\n          }\n          return queryView(view, opts);\n        } else { // stale not ok\n          return updateView(view).then(function () {\n            return queryView(view, opts);\n          });\n        }\n      });\n    });\n  }\n}\n\nvar query = function (fun, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  opts = opts ? coerceOptions(opts) : {};\n\n  if (typeof fun === 'function') {\n    fun = {map : fun};\n  }\n\n  var db = this;\n  var promise = PouchPromise.resolve().then(function () {\n    return queryPromised(db, fun, opts);\n  });\n  promisedCallback(promise, callback);\n  return promise;\n};\n\n\nvar mapreduce = {\n  query: query,\n  viewCleanup: viewCleanup\n};\n\nfunction isGenOne$1(rev) {\n  return /^1-/.test(rev);\n}\n\nfunction fileHasChanged(localDoc, remoteDoc, filename) {\n  return !localDoc._attachments ||\n         !localDoc._attachments[filename] ||\n         localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;\n}\n\nfunction getDocAttachments(db, doc) {\n  var filenames = Object.keys(doc._attachments);\n  return PouchPromise.all(filenames.map(function (filename) {\n    return db.getAttachment(doc._id, filename, {rev: doc._rev});\n  }));\n}\n\nfunction getDocAttachmentsFromTargetOrSource(target, src, doc) {\n  var doCheckForLocalAttachments = src.type() === 'http' && target.type() !== 'http';\n  var filenames = Object.keys(doc._attachments);\n\n  if (!doCheckForLocalAttachments) {\n    return getDocAttachments(src, doc);\n  }\n\n  return target.get(doc._id).then(function (localDoc) {\n    return PouchPromise.all(filenames.map(function (filename) {\n      if (fileHasChanged(localDoc, doc, filename)) {\n        return src.getAttachment(doc._id, filename);\n      }\n\n      return target.getAttachment(localDoc._id, filename);\n    }));\n  }).catch(function (error) {\n    /* istanbul ignore if */\n    if (error.status !== 404) {\n      throw error;\n    }\n\n    return getDocAttachments(src, doc);\n  });\n}\n\nfunction createBulkGetOpts(diffs) {\n  var requests = [];\n  Object.keys(diffs).forEach(function (id) {\n    var missingRevs = diffs[id].missing;\n    missingRevs.forEach(function (missingRev) {\n      requests.push({\n        id: id,\n        rev: missingRev\n      });\n    });\n  });\n\n  return {\n    docs: requests,\n    revs: true\n  };\n}\n\n//\n// Fetch all the documents from the src as described in the \"diffs\",\n// which is a mapping of docs IDs to revisions. If the state ever\n// changes to \"cancelled\", then the returned promise will be rejected.\n// Else it will be resolved with a list of fetched documents.\n//\nfunction getDocs(src, target, diffs, state) {\n  diffs = clone(diffs); // we do not need to modify this\n\n  var resultDocs = [],\n      ok = true;\n\n  function getAllDocs() {\n\n    var bulkGetOpts = createBulkGetOpts(diffs);\n\n    if (!bulkGetOpts.docs.length) { // optimization: skip empty requests\n      return;\n    }\n\n    return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {\n      /* istanbul ignore if */\n      if (state.cancelled) {\n        throw new Error('cancelled');\n      }\n      return PouchPromise.all(bulkGetResponse.results.map(function (bulkGetInfo) {\n        return PouchPromise.all(bulkGetInfo.docs.map(function (doc) {\n          var remoteDoc = doc.ok;\n\n          if (doc.error) {\n            // when AUTO_COMPACTION is set, docs can be returned which look\n            // like this: {\"missing\":\"1-7c3ac256b693c462af8442f992b83696\"}\n            ok = false;\n          }\n\n          if (!remoteDoc || !remoteDoc._attachments) {\n            return remoteDoc;\n          }\n\n          return getDocAttachmentsFromTargetOrSource(target, src, remoteDoc).then(function (attachments) {\n            var filenames = Object.keys(remoteDoc._attachments);\n            attachments.forEach(function (attachment, i) {\n              var att = remoteDoc._attachments[filenames[i]];\n              delete att.stub;\n              delete att.length;\n              att.data = attachment;\n            });\n\n            return remoteDoc;\n          });\n        }));\n      }))\n\n      .then(function (results) {\n        resultDocs = resultDocs.concat(flatten(results).filter(Boolean));\n      });\n    });\n  }\n\n  function hasAttachments(doc) {\n    return doc._attachments && Object.keys(doc._attachments).length > 0;\n  }\n\n  function hasConflicts(doc) {\n    return doc._conflicts && doc._conflicts.length > 0;\n  }\n\n  function fetchRevisionOneDocs(ids) {\n    // Optimization: fetch gen-1 docs and attachments in\n    // a single request using _all_docs\n    return src.allDocs({\n      keys: ids,\n      include_docs: true,\n      conflicts: true\n    }).then(function (res) {\n      if (state.cancelled) {\n        throw new Error('cancelled');\n      }\n      res.rows.forEach(function (row) {\n        if (row.deleted || !row.doc || !isGenOne$1(row.value.rev) ||\n            hasAttachments(row.doc) || hasConflicts(row.doc)) {\n          // if any of these conditions apply, we need to fetch using get()\n          return;\n        }\n\n        // the doc we got back from allDocs() is sufficient\n        resultDocs.push(row.doc);\n        delete diffs[row.id];\n      });\n    });\n  }\n\n  function getRevisionOneDocs() {\n    // filter out the generation 1 docs and get them\n    // leaving the non-generation one docs to be got otherwise\n    var ids = Object.keys(diffs).filter(function (id) {\n      var missing = diffs[id].missing;\n      return missing.length === 1 && isGenOne$1(missing[0]);\n    });\n    if (ids.length > 0) {\n      return fetchRevisionOneDocs(ids);\n    }\n  }\n\n  function returnResult() {\n    return { ok:ok, docs:resultDocs };\n  }\n\n  return PouchPromise.resolve()\n    .then(getRevisionOneDocs)\n    .then(getAllDocs)\n    .then(returnResult);\n}\n\nvar CHECKPOINT_VERSION = 1;\nvar REPLICATOR = \"pouchdb\";\n// This is an arbitrary number to limit the\n// amount of replication history we save in the checkpoint.\n// If we save too much, the checkpoing docs will become very big,\n// if we save fewer, we'll run a greater risk of having to\n// read all the changes from 0 when checkpoint PUTs fail\n// CouchDB 2.0 has a more involved history pruning,\n// but let's go for the simple version for now.\nvar CHECKPOINT_HISTORY_SIZE = 5;\nvar LOWEST_SEQ = 0;\n\nfunction updateCheckpoint(db, id, checkpoint, session, returnValue) {\n  return db.get(id).catch(function (err) {\n    if (err.status === 404) {\n      if (db.type() === 'http') {\n        res(\n          404, 'PouchDB is just checking if a remote checkpoint exists.'\n        );\n      }\n      return {\n        session_id: session,\n        _id: id,\n        history: [],\n        replicator: REPLICATOR,\n        version: CHECKPOINT_VERSION\n      };\n    }\n    throw err;\n  }).then(function (doc) {\n    if (returnValue.cancelled) {\n      return;\n    }\n\n    // if the checkpoint has not changed, do not update\n    if (doc.last_seq === checkpoint) {\n      return;\n    }\n\n    // Filter out current entry for this replication\n    doc.history = (doc.history || []).filter(function (item) {\n      return item.session_id !== session;\n    });\n\n    // Add the latest checkpoint to history\n    doc.history.unshift({\n      last_seq: checkpoint,\n      session_id: session\n    });\n\n    // Just take the last pieces in history, to\n    // avoid really big checkpoint docs.\n    // see comment on history size above\n    doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);\n\n    doc.version = CHECKPOINT_VERSION;\n    doc.replicator = REPLICATOR;\n\n    doc.session_id = session;\n    doc.last_seq = checkpoint;\n\n    return db.put(doc).catch(function (err) {\n      if (err.status === 409) {\n        // retry; someone is trying to write a checkpoint simultaneously\n        return updateCheckpoint(db, id, checkpoint, session, returnValue);\n      }\n      throw err;\n    });\n  });\n}\n\nfunction Checkpointer(src, target, id, returnValue) {\n  this.src = src;\n  this.target = target;\n  this.id = id;\n  this.returnValue = returnValue;\n}\n\nCheckpointer.prototype.writeCheckpoint = function (checkpoint, session) {\n  var self = this;\n  return this.updateTarget(checkpoint, session).then(function () {\n    return self.updateSource(checkpoint, session);\n  });\n};\n\nCheckpointer.prototype.updateTarget = function (checkpoint, session) {\n  return updateCheckpoint(this.target, this.id, checkpoint,\n    session, this.returnValue);\n};\n\nCheckpointer.prototype.updateSource = function (checkpoint, session) {\n  var self = this;\n  if (this.readOnlySource) {\n    return PouchPromise.resolve(true);\n  }\n  return updateCheckpoint(this.src, this.id, checkpoint,\n    session, this.returnValue)\n    .catch(function (err) {\n      if (isForbiddenError(err)) {\n        self.readOnlySource = true;\n        return true;\n      }\n      throw err;\n    });\n};\n\nvar comparisons = {\n  \"undefined\": function (targetDoc, sourceDoc) {\n    // This is the previous comparison function\n    if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) {\n      return sourceDoc.last_seq;\n    }\n    /* istanbul ignore next */\n    return 0;\n  },\n  \"1\": function (targetDoc, sourceDoc) {\n    // This is the comparison function ported from CouchDB\n    return compareReplicationLogs(sourceDoc, targetDoc).last_seq;\n  }\n};\n\nCheckpointer.prototype.getCheckpoint = function () {\n  var self = this;\n  return self.target.get(self.id).then(function (targetDoc) {\n    if (self.readOnlySource) {\n      return PouchPromise.resolve(targetDoc.last_seq);\n    }\n\n    return self.src.get(self.id).then(function (sourceDoc) {\n      // Since we can't migrate an old version doc to a new one\n      // (no session id), we just go with the lowest seq in this case\n      /* istanbul ignore if */\n      if (targetDoc.version !== sourceDoc.version) {\n        return LOWEST_SEQ;\n      }\n\n      var version;\n      if (targetDoc.version) {\n        version = targetDoc.version.toString();\n      } else {\n        version = \"undefined\";\n      }\n\n      if (version in comparisons) {\n        return comparisons[version](targetDoc, sourceDoc);\n      }\n      /* istanbul ignore next */\n      return LOWEST_SEQ;\n    }, function (err) {\n      if (err.status === 404 && targetDoc.last_seq) {\n        return self.src.put({\n          _id: self.id,\n          last_seq: LOWEST_SEQ\n        }).then(function () {\n          return LOWEST_SEQ;\n        }, function (err) {\n          if (isForbiddenError(err)) {\n            self.readOnlySource = true;\n            return targetDoc.last_seq;\n          }\n          /* istanbul ignore next */\n          return LOWEST_SEQ;\n        });\n      }\n      throw err;\n    });\n  }).catch(function (err) {\n    if (err.status !== 404) {\n      throw err;\n    }\n    return LOWEST_SEQ;\n  });\n};\n// This checkpoint comparison is ported from CouchDBs source\n// they come from here:\n// https://github.com/apache/couchdb-couch-replicator/blob/master/src/couch_replicator.erl#L863-L906\n\nfunction compareReplicationLogs(srcDoc, tgtDoc) {\n  if (srcDoc.session_id === tgtDoc.session_id) {\n    return {\n      last_seq: srcDoc.last_seq,\n      history: srcDoc.history\n    };\n  }\n\n  return compareReplicationHistory(srcDoc.history, tgtDoc.history);\n}\n\nfunction compareReplicationHistory(sourceHistory, targetHistory) {\n  // the erlang loop via function arguments is not so easy to repeat in JS\n  // therefore, doing this as recursion\n  var S = sourceHistory[0];\n  var sourceRest = sourceHistory.slice(1);\n  var T = targetHistory[0];\n  var targetRest = targetHistory.slice(1);\n\n  if (!S || targetHistory.length === 0) {\n    return {\n      last_seq: LOWEST_SEQ,\n      history: []\n    };\n  }\n\n  var sourceId = S.session_id;\n  /* istanbul ignore if */\n  if (hasSessionId(sourceId, targetHistory)) {\n    return {\n      last_seq: S.last_seq,\n      history: sourceHistory\n    };\n  }\n\n  var targetId = T.session_id;\n  if (hasSessionId(targetId, sourceRest)) {\n    return {\n      last_seq: T.last_seq,\n      history: targetRest\n    };\n  }\n\n  return compareReplicationHistory(sourceRest, targetRest);\n}\n\nfunction hasSessionId(sessionId, history) {\n  var props = history[0];\n  var rest = history.slice(1);\n\n  if (!sessionId || history.length === 0) {\n    return false;\n  }\n\n  if (sessionId === props.session_id) {\n    return true;\n  }\n\n  return hasSessionId(sessionId, rest);\n}\n\nfunction isForbiddenError(err) {\n  return typeof err.status === 'number' && Math.floor(err.status / 100) === 4;\n}\n\nvar STARTING_BACK_OFF = 0;\n\nfunction backOff(opts, returnValue, error, callback) {\n  if (opts.retry === false) {\n    returnValue.emit('error', error);\n    returnValue.removeAllListeners();\n    return;\n  }\n  if (typeof opts.back_off_function !== 'function') {\n    opts.back_off_function = defaultBackOff;\n  }\n  returnValue.emit('requestError', error);\n  if (returnValue.state === 'active' || returnValue.state === 'pending') {\n    returnValue.emit('paused', error);\n    returnValue.state = 'stopped';\n    var backOffSet = function backoffTimeSet() {\n      opts.current_back_off = STARTING_BACK_OFF;\n    };\n    var removeBackOffSetter = function removeBackOffTimeSet() {\n      returnValue.removeListener('active', backOffSet);\n    };\n    returnValue.once('paused', removeBackOffSetter);\n    returnValue.once('active', backOffSet);\n  }\n\n  opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;\n  opts.current_back_off = opts.back_off_function(opts.current_back_off);\n  setTimeout(callback, opts.current_back_off);\n}\n\nfunction sortObjectPropertiesByKey(queryParams) {\n  return Object.keys(queryParams).sort(collate).reduce(function (result, key) {\n    result[key] = queryParams[key];\n    return result;\n  }, {});\n}\n\n// Generate a unique id particular to this replication.\n// Not guaranteed to align perfectly with CouchDB's rep ids.\nfunction generateReplicationId(src, target, opts) {\n  var docIds = opts.doc_ids ? opts.doc_ids.sort(collate) : '';\n  var filterFun = opts.filter ? opts.filter.toString() : '';\n  var queryParams = '';\n  var filterViewName =  '';\n\n  if (opts.filter && opts.query_params) {\n    queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));\n  }\n\n  if (opts.filter && opts.filter === '_view') {\n    filterViewName = opts.view.toString();\n  }\n\n  return PouchPromise.all([src.id(), target.id()]).then(function (res) {\n    var queryData = res[0] + res[1] + filterFun + filterViewName +\n      queryParams + docIds;\n    return new PouchPromise(function (resolve) {\n      binaryMd5(queryData, resolve);\n    });\n  }).then(function (md5sum) {\n    // can't use straight-up md5 alphabet, because\n    // the char '/' is interpreted as being for attachments,\n    // and + is also not url-safe\n    md5sum = md5sum.replace(/\\//g, '.').replace(/\\+/g, '_');\n    return '_local/' + md5sum;\n  });\n}\n\nfunction replicate$1(src, target, opts, returnValue, result) {\n  var batches = [];               // list of batches to be processed\n  var currentBatch;               // the batch currently being processed\n  var pendingBatch = {\n    seq: 0,\n    changes: [],\n    docs: []\n  }; // next batch, not yet ready to be processed\n  var writingCheckpoint = false;  // true while checkpoint is being written\n  var changesCompleted = false;   // true when all changes received\n  var replicationCompleted = false; // true when replication has completed\n  var last_seq = 0;\n  var continuous = opts.continuous || opts.live || false;\n  var batch_size = opts.batch_size || 100;\n  var batches_limit = opts.batches_limit || 10;\n  var changesPending = false;     // true while src.changes is running\n  var doc_ids = opts.doc_ids;\n  var repId;\n  var checkpointer;\n  var changedDocs = [];\n  // Like couchdb, every replication gets a unique session id\n  var session = uuid();\n\n  result = result || {\n    ok: true,\n    start_time: new Date(),\n    docs_read: 0,\n    docs_written: 0,\n    doc_write_failures: 0,\n    errors: []\n  };\n\n  var changesOpts = {};\n  returnValue.ready(src, target);\n\n  function initCheckpointer() {\n    if (checkpointer) {\n      return PouchPromise.resolve();\n    }\n    return generateReplicationId(src, target, opts).then(function (res) {\n      repId = res;\n      checkpointer = new Checkpointer(src, target, repId, returnValue);\n    });\n  }\n\n  function writeDocs() {\n    changedDocs = [];\n\n    if (currentBatch.docs.length === 0) {\n      return;\n    }\n    var docs = currentBatch.docs;\n    var bulkOpts = {timeout: opts.timeout};\n    return target.bulkDocs({docs: docs, new_edits: false}, bulkOpts).then(function (res) {\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        throw new Error('cancelled');\n      }\n\n      // `res` doesn't include full documents (which live in `docs`), so we create a map of \n      // (id -> error), and check for errors while iterating over `docs`\n      var errorsById = Object.create(null);\n      res.forEach(function (res) {\n        if (res.error) {\n          errorsById[res.id] = res;\n        }\n      });\n\n      var errorsNo = Object.keys(errorsById).length;\n      result.doc_write_failures += errorsNo;\n      result.docs_written += docs.length - errorsNo;\n\n      docs.forEach(function (doc) {\n        var error = errorsById[doc._id];\n        if (error) {\n          result.errors.push(error);\n          if (error.name === 'unauthorized' || error.name === 'forbidden') {\n            returnValue.emit('denied', clone(error));\n          } else {\n            throw error;\n          }\n        } else {\n          changedDocs.push(doc);\n        }\n      });\n\n    }, function (err) {\n      result.doc_write_failures += docs.length;\n      throw err;\n    });\n  }\n\n  function finishBatch() {\n    if (currentBatch.error) {\n      throw new Error('There was a problem getting docs.');\n    }\n    result.last_seq = last_seq = currentBatch.seq;\n    var outResult = clone(result);\n    if (changedDocs.length) {\n      outResult.docs = changedDocs;\n      returnValue.emit('change', outResult);\n    }\n    writingCheckpoint = true;\n    return checkpointer.writeCheckpoint(currentBatch.seq,\n        session).then(function () {\n      writingCheckpoint = false;\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        throw new Error('cancelled');\n      }\n      currentBatch = undefined;\n      getChanges();\n    }).catch(function (err) {\n      onCheckpointError(err);\n      throw err;\n    });\n  }\n\n  function getDiffs() {\n    var diff = {};\n    currentBatch.changes.forEach(function (change) {\n      // Couchbase Sync Gateway emits these, but we can ignore them\n      /* istanbul ignore if */\n      if (change.id === \"_user/\") {\n        return;\n      }\n      diff[change.id] = change.changes.map(function (x) {\n        return x.rev;\n      });\n    });\n    return target.revsDiff(diff).then(function (diffs) {\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        throw new Error('cancelled');\n      }\n      // currentBatch.diffs elements are deleted as the documents are written\n      currentBatch.diffs = diffs;\n    });\n  }\n\n  function getBatchDocs() {\n    return getDocs(src, target, currentBatch.diffs, returnValue).then(function (got) {\n      currentBatch.error = !got.ok;\n      got.docs.forEach(function (doc) {\n        delete currentBatch.diffs[doc._id];\n        result.docs_read++;\n        currentBatch.docs.push(doc);\n      });\n    });\n  }\n\n  function startNextBatch() {\n    if (returnValue.cancelled || currentBatch) {\n      return;\n    }\n    if (batches.length === 0) {\n      processPendingBatch(true);\n      return;\n    }\n    currentBatch = batches.shift();\n    getDiffs()\n      .then(getBatchDocs)\n      .then(writeDocs)\n      .then(finishBatch)\n      .then(startNextBatch)\n      .catch(function (err) {\n        abortReplication('batch processing terminated with error', err);\n      });\n  }\n\n\n  function processPendingBatch(immediate) {\n    if (pendingBatch.changes.length === 0) {\n      if (batches.length === 0 && !currentBatch) {\n        if ((continuous && changesOpts.live) || changesCompleted) {\n          returnValue.state = 'pending';\n          returnValue.emit('paused');\n        }\n        if (changesCompleted) {\n          completeReplication();\n        }\n      }\n      return;\n    }\n    if (\n      immediate ||\n      changesCompleted ||\n      pendingBatch.changes.length >= batch_size\n    ) {\n      batches.push(pendingBatch);\n      pendingBatch = {\n        seq: 0,\n        changes: [],\n        docs: []\n      };\n      if (returnValue.state === 'pending' || returnValue.state === 'stopped') {\n        returnValue.state = 'active';\n        returnValue.emit('active');\n      }\n      startNextBatch();\n    }\n  }\n\n\n  function abortReplication(reason, err) {\n    if (replicationCompleted) {\n      return;\n    }\n    if (!err.message) {\n      err.message = reason;\n    }\n    result.ok = false;\n    result.status = 'aborting';\n    batches = [];\n    pendingBatch = {\n      seq: 0,\n      changes: [],\n      docs: []\n    };\n    completeReplication(err);\n  }\n\n\n  function completeReplication(fatalError) {\n    if (replicationCompleted) {\n      return;\n    }\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      result.status = 'cancelled';\n      if (writingCheckpoint) {\n        return;\n      }\n    }\n    result.status = result.status || 'complete';\n    result.end_time = new Date();\n    result.last_seq = last_seq;\n    replicationCompleted = true;\n\n    if (fatalError) {\n      fatalError.result = result;\n\n      if (fatalError.name === 'unauthorized' || fatalError.name === 'forbidden') {\n        returnValue.emit('error', fatalError);\n        returnValue.removeAllListeners();\n      } else {\n        backOff(opts, returnValue, fatalError, function () {\n          replicate$1(src, target, opts, returnValue);\n        });\n      }\n    } else {\n      returnValue.emit('complete', result);\n      returnValue.removeAllListeners();\n    }\n  }\n\n\n  function onChange(change) {\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      return completeReplication();\n    }\n    var filter = filterChange(opts)(change);\n    if (!filter) {\n      return;\n    }\n    pendingBatch.seq = change.seq;\n    pendingBatch.changes.push(change);\n    processPendingBatch(batches.length === 0 && changesOpts.live);\n  }\n\n\n  function onChangesComplete(changes) {\n    changesPending = false;\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      return completeReplication();\n    }\n\n    // if no results were returned then we're done,\n    // else fetch more\n    if (changes.results.length > 0) {\n      changesOpts.since = changes.last_seq;\n      getChanges();\n      processPendingBatch(true);\n    } else {\n\n      var complete = function () {\n        if (continuous) {\n          changesOpts.live = true;\n          getChanges();\n        } else {\n          changesCompleted = true;\n        }\n        processPendingBatch(true);\n      };\n\n      // update the checkpoint so we start from the right seq next time\n      if (!currentBatch && changes.results.length === 0) {\n        writingCheckpoint = true;\n        checkpointer.writeCheckpoint(changes.last_seq,\n            session).then(function () {\n          writingCheckpoint = false;\n          result.last_seq = last_seq = changes.last_seq;\n          complete();\n        })\n        .catch(onCheckpointError);\n      } else {\n        complete();\n      }\n    }\n  }\n\n\n  function onChangesError(err) {\n    changesPending = false;\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      return completeReplication();\n    }\n    abortReplication('changes rejected', err);\n  }\n\n\n  function getChanges() {\n    if (!(\n      !changesPending &&\n      !changesCompleted &&\n      batches.length < batches_limit\n      )) {\n      return;\n    }\n    changesPending = true;\n    function abortChanges() {\n      changes.cancel();\n    }\n    function removeListener() {\n      returnValue.removeListener('cancel', abortChanges);\n    }\n\n    if (returnValue._changes) { // remove old changes() and listeners\n      returnValue.removeListener('cancel', returnValue._abortChanges);\n      returnValue._changes.cancel();\n    }\n    returnValue.once('cancel', abortChanges);\n\n    var changes = src.changes(changesOpts)\n      .on('change', onChange);\n    changes.then(removeListener, removeListener);\n    changes.then(onChangesComplete)\n      .catch(onChangesError);\n\n    if (opts.retry) {\n      // save for later so we can cancel if necessary\n      returnValue._changes = changes;\n      returnValue._abortChanges = abortChanges;\n    }\n  }\n\n\n  function startChanges() {\n    initCheckpointer().then(function () {\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        return;\n      }\n      return checkpointer.getCheckpoint().then(function (checkpoint) {\n        last_seq = checkpoint;\n        changesOpts = {\n          since: last_seq,\n          limit: batch_size,\n          batch_size: batch_size,\n          style: 'all_docs',\n          doc_ids: doc_ids,\n          return_docs: true // required so we know when we're done\n        };\n        if (opts.filter) {\n          if (typeof opts.filter !== 'string') {\n            // required for the client-side filter in onChange\n            changesOpts.include_docs = true;\n          } else { // ddoc filter\n            changesOpts.filter = opts.filter;\n          }\n        }\n        if ('heartbeat' in opts) {\n          changesOpts.heartbeat = opts.heartbeat;\n        }\n        if ('timeout' in opts) {\n          changesOpts.timeout = opts.timeout;\n        }\n        if (opts.query_params) {\n          changesOpts.query_params = opts.query_params;\n        }\n        if (opts.view) {\n          changesOpts.view = opts.view;\n        }\n        getChanges();\n      });\n    }).catch(function (err) {\n      abortReplication('getCheckpoint rejected with ', err);\n    });\n  }\n\n  /* istanbul ignore next */\n  function onCheckpointError(err) {\n    writingCheckpoint = false;\n    abortReplication('writeCheckpoint completed with error', err);\n  }\n\n  /* istanbul ignore if */\n  if (returnValue.cancelled) { // cancelled immediately\n    completeReplication();\n    return;\n  }\n\n  if (!returnValue._addedListeners) {\n    returnValue.once('cancel', completeReplication);\n\n    if (typeof opts.complete === 'function') {\n      returnValue.once('error', opts.complete);\n      returnValue.once('complete', function (result) {\n        opts.complete(null, result);\n      });\n    }\n    returnValue._addedListeners = true;\n  }\n\n  if (typeof opts.since === 'undefined') {\n    startChanges();\n  } else {\n    initCheckpointer().then(function () {\n      writingCheckpoint = true;\n      return checkpointer.writeCheckpoint(opts.since, session);\n    }).then(function () {\n      writingCheckpoint = false;\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        return;\n      }\n      last_seq = opts.since;\n      startChanges();\n    }).catch(onCheckpointError);\n  }\n}\n\n// We create a basic promise so the caller can cancel the replication possibly\n// before we have actually started listening to changes etc\ninherits(Replication, events.EventEmitter);\nfunction Replication() {\n  events.EventEmitter.call(this);\n  this.cancelled = false;\n  this.state = 'pending';\n  var self = this;\n  var promise = new PouchPromise(function (fulfill, reject) {\n    self.once('complete', fulfill);\n    self.once('error', reject);\n  });\n  self.then = function (resolve, reject) {\n    return promise.then(resolve, reject);\n  };\n  self.catch = function (reject) {\n    return promise.catch(reject);\n  };\n  // As we allow error handling via \"error\" event as well,\n  // put a stub in here so that rejecting never throws UnhandledError.\n  self.catch(function () {});\n}\n\nReplication.prototype.cancel = function () {\n  this.cancelled = true;\n  this.state = 'cancelled';\n  this.emit('cancel');\n};\n\nReplication.prototype.ready = function (src, target) {\n  var self = this;\n  if (self._readyCalled) {\n    return;\n  }\n  self._readyCalled = true;\n\n  function onDestroy() {\n    self.cancel();\n  }\n  src.once('destroyed', onDestroy);\n  target.once('destroyed', onDestroy);\n  function cleanup() {\n    src.removeListener('destroyed', onDestroy);\n    target.removeListener('destroyed', onDestroy);\n  }\n  self.once('complete', cleanup);\n};\n\nfunction toPouch(db, opts) {\n  var PouchConstructor = opts.PouchConstructor;\n  if (typeof db === 'string') {\n    return new PouchConstructor(db, opts);\n  } else {\n    return db;\n  }\n}\n\nfunction replicate(src, target, opts, callback) {\n\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  if (typeof opts === 'undefined') {\n    opts = {};\n  }\n\n  if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {\n    throw createError(BAD_REQUEST,\n                       \"`doc_ids` filter parameter is not a list.\");\n  }\n\n  opts.complete = callback;\n  opts = clone(opts);\n  opts.continuous = opts.continuous || opts.live;\n  opts.retry = ('retry' in opts) ? opts.retry : false;\n  /*jshint validthis:true */\n  opts.PouchConstructor = opts.PouchConstructor || this;\n  var replicateRet = new Replication(opts);\n  var srcPouch = toPouch(src, opts);\n  var targetPouch = toPouch(target, opts);\n  replicate$1(srcPouch, targetPouch, opts, replicateRet);\n  return replicateRet;\n}\n\ninherits(Sync, events.EventEmitter);\nfunction sync(src, target, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  if (typeof opts === 'undefined') {\n    opts = {};\n  }\n  opts = clone(opts);\n  /*jshint validthis:true */\n  opts.PouchConstructor = opts.PouchConstructor || this;\n  src = toPouch(src, opts);\n  target = toPouch(target, opts);\n  return new Sync(src, target, opts, callback);\n}\n\nfunction Sync(src, target, opts, callback) {\n  var self = this;\n  this.canceled = false;\n\n  var optsPush = opts.push ? extend$1({}, opts, opts.push) : opts;\n  var optsPull = opts.pull ? extend$1({}, opts, opts.pull) : opts;\n\n  this.push = replicate(src, target, optsPush);\n  this.pull = replicate(target, src, optsPull);\n\n  this.pushPaused = true;\n  this.pullPaused = true;\n\n  function pullChange(change) {\n    self.emit('change', {\n      direction: 'pull',\n      change: change\n    });\n  }\n  function pushChange(change) {\n    self.emit('change', {\n      direction: 'push',\n      change: change\n    });\n  }\n  function pushDenied(doc) {\n    self.emit('denied', {\n      direction: 'push',\n      doc: doc\n    });\n  }\n  function pullDenied(doc) {\n    self.emit('denied', {\n      direction: 'pull',\n      doc: doc\n    });\n  }\n  function pushPaused() {\n    self.pushPaused = true;\n    /* istanbul ignore if */\n    if (self.pullPaused) {\n      self.emit('paused');\n    }\n  }\n  function pullPaused() {\n    self.pullPaused = true;\n    /* istanbul ignore if */\n    if (self.pushPaused) {\n      self.emit('paused');\n    }\n  }\n  function pushActive() {\n    self.pushPaused = false;\n    /* istanbul ignore if */\n    if (self.pullPaused) {\n      self.emit('active', {\n        direction: 'push'\n      });\n    }\n  }\n  function pullActive() {\n    self.pullPaused = false;\n    /* istanbul ignore if */\n    if (self.pushPaused) {\n      self.emit('active', {\n        direction: 'pull'\n      });\n    }\n  }\n\n  var removed = {};\n\n  function removeAll(type) { // type is 'push' or 'pull'\n    return function (event, func) {\n      var isChange = event === 'change' &&\n        (func === pullChange || func === pushChange);\n      var isDenied = event === 'denied' &&\n        (func === pullDenied || func === pushDenied);\n      var isPaused = event === 'paused' &&\n        (func === pullPaused || func === pushPaused);\n      var isActive = event === 'active' &&\n        (func === pullActive || func === pushActive);\n\n      if (isChange || isDenied || isPaused || isActive) {\n        if (!(event in removed)) {\n          removed[event] = {};\n        }\n        removed[event][type] = true;\n        if (Object.keys(removed[event]).length === 2) {\n          // both push and pull have asked to be removed\n          self.removeAllListeners(event);\n        }\n      }\n    };\n  }\n\n  if (opts.live) {\n    this.push.on('complete', self.pull.cancel.bind(self.pull));\n    this.pull.on('complete', self.push.cancel.bind(self.push));\n  }\n\n  this.on('newListener', function (event) {\n    if (event === 'change') {\n      self.pull.on('change', pullChange);\n      self.push.on('change', pushChange);\n    } else if (event === 'denied') {\n      self.pull.on('denied', pullDenied);\n      self.push.on('denied', pushDenied);\n    } else if (event === 'active') {\n      self.pull.on('active', pullActive);\n      self.push.on('active', pushActive);\n    } else if (event === 'paused') {\n      self.pull.on('paused', pullPaused);\n      self.push.on('paused', pushPaused);\n    }\n  });\n\n  this.on('removeListener', function (event) {\n    if (event === 'change') {\n      self.pull.removeListener('change', pullChange);\n      self.push.removeListener('change', pushChange);\n    } else if (event === 'denied') {\n      self.pull.removeListener('denied', pullDenied);\n      self.push.removeListener('denied', pushDenied);\n    } else if (event === 'active') {\n      self.pull.removeListener('active', pullActive);\n      self.push.removeListener('active', pushActive);\n    } else if (event === 'paused') {\n      self.pull.removeListener('paused', pullPaused);\n      self.push.removeListener('paused', pushPaused);\n    }\n  });\n\n  this.pull.on('removeListener', removeAll('pull'));\n  this.push.on('removeListener', removeAll('push'));\n\n  var promise = PouchPromise.all([\n    this.push,\n    this.pull\n  ]).then(function (resp) {\n    var out = {\n      push: resp[0],\n      pull: resp[1]\n    };\n    self.emit('complete', out);\n    if (callback) {\n      callback(null, out);\n    }\n    self.removeAllListeners();\n    return out;\n  }, function (err) {\n    self.cancel();\n    if (callback) {\n      // if there's a callback, then the callback can receive\n      // the error event\n      callback(err);\n    } else {\n      // if there's no callback, then we're safe to emit an error\n      // event, which would otherwise throw an unhandled error\n      // due to 'error' being a special event in EventEmitters\n      self.emit('error', err);\n    }\n    self.removeAllListeners();\n    if (callback) {\n      // no sense throwing if we're already emitting an 'error' event\n      throw err;\n    }\n  });\n\n  this.then = function (success, err) {\n    return promise.then(success, err);\n  };\n\n  this.catch = function (err) {\n    return promise.catch(err);\n  };\n}\n\nSync.prototype.cancel = function () {\n  if (!this.canceled) {\n    this.canceled = true;\n    this.push.cancel();\n    this.pull.cancel();\n  }\n};\n\nfunction replication(PouchDB) {\n  PouchDB.replicate = replicate;\n  PouchDB.sync = sync;\n\n  Object.defineProperty(PouchDB.prototype, 'replicate', {\n    get: function () {\n      var self = this;\n      return {\n        from: function (other, opts, callback) {\n          return self.constructor.replicate(other, self, opts, callback);\n        },\n        to: function (other, opts, callback) {\n          return self.constructor.replicate(self, other, opts, callback);\n        }\n      };\n    }\n  });\n\n  PouchDB.prototype.sync = function (dbName, opts, callback) {\n    return this.constructor.sync(this, dbName, opts, callback);\n  };\n}\n\nPouchDB.plugin(LevelPouch)\n  .plugin(HttpPouch$1)\n  .plugin(mapreduce)\n  .plugin(replication);\n\n// import directly from src rather than jsnext:main because in ths case\n// the jsnext:main is actually built (lib/index*.es.js)\n\n//\n// PouchDB.utils is basically a throwback to the pre-Browserify days,\n// when this was the easiest way to access global utilities from anywhere\n// in the project. For code cleanliness, we're trying to remove this file,\n// but for practical reasons (legacy code, test code, etc.) this is still here.\n//\n\nvar utils = {\n  ajax: ajax,\n  blob: createBlob,\n  parseUri: parseUri,\n  uuid: uuid,\n  Promise: PouchPromise,\n  atob: atob,\n  btoa: btoa,\n  binaryStringToBlobOrBuffer: binStringToBluffer,\n  clone: clone,\n  extend: extend$1,\n  createError: createError,\n  generateErrorFromResponse: generateErrorFromResponse,\n  generateReplicationId: generateReplicationId,\n  parseDdocFunctionName: parseDesignDocFunctionName,\n  normalizeDdocFunctionName: normalizeDesignDocFunctionName,\n  once: once,\n  merge: merge,\n  winningRev: winningRev,\n  upsert: upsert,\n  toPromise: toPromise,\n  checkpointer: Checkpointer,\n  defaultBackOff: defaultBackOff,\n  jsExtend: extend$1,\n  mapReduceUtils: {\n    uniq: uniq,\n    sequentialize: sequentialize,\n    fin: fin,\n    callbackify: callbackify,\n    promisedCallback: promisedCallback\n  }\n};\n\nvar errors = {\n  UNAUTHORIZED: UNAUTHORIZED,\n  MISSING_BULK_DOCS: MISSING_BULK_DOCS,\n  MISSING_DOC: MISSING_DOC,\n  REV_CONFLICT: REV_CONFLICT,\n  INVALID_ID: INVALID_ID,\n  MISSING_ID: MISSING_ID,\n  RESERVED_ID: RESERVED_ID,\n  NOT_OPEN: NOT_OPEN,\n  UNKNOWN_ERROR: UNKNOWN_ERROR,\n  BAD_ARG: BAD_ARG,\n  INVALID_REQUEST: INVALID_REQUEST,\n  QUERY_PARSE_ERROR: QUERY_PARSE_ERROR,\n  DOC_VALIDATION: DOC_VALIDATION,\n  BAD_REQUEST: BAD_REQUEST,\n  NOT_AN_OBJECT: NOT_AN_OBJECT,\n  DB_MISSING: DB_MISSING,\n  WSQ_ERROR: WSQ_ERROR,\n  LDB_ERROR: LDB_ERROR,\n  FORBIDDEN: FORBIDDEN,\n  INVALID_REV: INVALID_REV,\n  FILE_EXISTS: FILE_EXISTS,\n  MISSING_STUB: MISSING_STUB,\n  IDB_ERROR: IDB_ERROR,\n  INVALID_URL: INVALID_URL\n};\n\nPouchDB.ajax = ajax;\nPouchDB.utils = utils;\nPouchDB.Errors = errors;\n\nmodule.exports = PouchDB;"
  },
  {
    "path": "test/pouchdb/integration/test.aa.setup.js",
    "content": "'use strict';\ndescribe('DB Setup', function () {\n  it('we can find CouchDB with admin credentials', function (done) {\n    testUtils.ajax({ url: testUtils.couchHost() + '/_session' },\n      function (err, res) {\n        if (err) { return done(err); }\n        should.exist(res.ok, 'Found CouchDB');\n        res.userCtx.roles.should.include('_admin', 'Found admin permissions');\n        done();\n      }\n    );\n  });\n\n  it('PouchDB has a version', function () {\n    PouchDB.version.should.be.a('string');\n    PouchDB.version.should.match(/\\d+\\.\\d+\\.\\d+/);\n  });\n\n  if (typeof process !== 'undefined' && !process.browser) {\n    it.skip('PouchDB version matches package.json', function () {\n      var pkg = require('../../packages/node_modules/pouchdb/package.json');\n      PouchDB.version.should.equal(pkg.version);\n    });\n  }\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.all_docs.js",
    "content": "'use strict';\n\nvar adapters = ['http', 'local'];\n\nadapters.forEach(function (adapter) {\n  describe('test.all_docs.js-' + adapter, function () {\n\n    var dbs = {};\n    beforeEach(function (done) {\n      dbs = {name: testUtils.adapterUrl(adapter, 'testdb')};\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    afterEach(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n\n    var origDocs = [\n      {_id: '0', a: 1, b: 1},\n      {_id: '3', a: 4, b: 16},\n      {_id: '1', a: 2, b: 4},\n      {_id: '2', a: 3, b: 9}\n    ];\n\n    it('Testing all docs', function (done) {\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, JSON.parse(JSON.stringify(origDocs)),\n        function () {\n        db.allDocs(function (err, result) {\n          should.not.exist(err);\n          var rows = result.rows;\n          result.total_rows.should.equal(4, 'correct number of results');\n          for (var i = 0; i < rows.length; i++) {\n            rows[i].id.should.be.at.least('0');\n            rows[i].id.should.be.at.most('4');\n          }\n          db.allDocs({\n            startkey: '2',\n            include_docs: true\n          }, function (err, all) {\n            all.rows.should.have\n              .length(2, 'correct number when opts.startkey set');\n            all.rows[0].id.should\n              .equal('2', 'correct docs when opts.startkey set');\n            var opts = {\n              startkey: 'org.couchdb.user:',\n              endkey: 'org.couchdb.user;'\n            };\n            db.allDocs(opts, function (err, raw) {\n              raw.rows.should.have.length(0, 'raw collation');\n              var ids = ['0', '3', '1', '2'];\n              db.changes().on('complete', function (changes) {\n                // order of changes is not guaranteed in a\n                // clustered changes feed\n                changes.results.forEach(function (row) {\n                  ids.should.include(row.id, 'seq order');\n                });\n                db.changes({\n                  descending: true\n                }).on('complete', function (changes) {\n                  // again, order is not guaranteed so\n                  // unsure if this is a useful test\n                  ids = ['2', '1', '3', '0'];\n                  changes.results.forEach(function (row) {\n                    ids.should.include(row.id, 'descending=true');\n                  });\n                  done();\n                }).on('error', done);\n              }).on('error', done);\n            });\n          });\n        });\n      });\n    });\n\n    it('Testing allDocs opts.keys', function () {\n      var db = new PouchDB(dbs.name);\n      function keyFunc(doc) {\n        return doc.key;\n      }\n      var keys;\n      return db.bulkDocs(origDocs).then(function () {\n        keys = ['3', '1'];\n        return db.allDocs({keys: keys});\n      }).then(function (result) {\n        result.rows.map(keyFunc).should.deep.equal(keys);\n        keys = ['2', '0', '1000'];\n        return db.allDocs({ keys: keys });\n      }).then(function (result) {\n        result.rows.map(keyFunc).should.deep.equal(keys);\n        result.rows[2].error.should.equal('not_found');\n        return db.allDocs({\n          keys: keys,\n          descending: true\n        });\n      }).then(function (result) {\n        result.rows.map(keyFunc).should.deep.equal(['1000', '0', '2']);\n        result.rows[0].error.should.equal('not_found');\n        return db.allDocs({\n          keys: keys,\n          startkey: 'a'\n        });\n      }).then(function () {\n        throw new Error('expected an error');\n      }, function (err) {\n        should.exist(err);\n        return db.allDocs({\n          keys: keys,\n          endkey: 'a'\n        });\n      }).then(function () {\n          throw new Error('expected an error');\n        }, function (err) {\n        should.exist(err);\n        return db.allDocs({keys: []});\n      }).then(function (result) {\n        result.rows.should.have.length(0);\n        return db.get('2');\n      }).then(function (doc) {\n        return db.remove(doc);\n      }).then(function () {\n        return db.allDocs({\n          keys: keys,\n          include_docs: true\n        });\n      }).then(function (result) {\n        result.rows.map(keyFunc).should.deep.equal(keys);\n      });\n    });\n\n    it('Testing allDocs opts.keys with skip', function () {\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs(origDocs).then(function () {\n        return db.allDocs({\n          keys: ['3', '1'],\n          skip: 1\n        });\n      }).then(function (res) {\n        res.total_rows.should.equal(4);\n        res.rows.should.have.length(1);\n        res.rows[0].id.should.equal('1');\n      });\n    });\n\n    it('Testing allDocs invalid opts.keys', function () {\n      var db = new PouchDB(dbs.name);\n      return db.allDocs({keys: 1234}).then(function () {\n        throw 'should not be here';\n      }).catch(function (err) {\n        should.exist(err);\n      });\n    });\n\n    it('Testing deleting in changes', function (done) {\n      var db = new PouchDB(dbs.name);\n\n      db.info(function (err, info) {\n        var update_seq = info.update_seq;\n        \n        testUtils.writeDocs(db, JSON.parse(JSON.stringify(origDocs)),\n          function () {\n          db.get('1', function (err, doc) {\n            db.remove(doc, function (err, deleted) {\n              should.exist(deleted.ok);\n\n              db.changes({\n                since: update_seq\n              }).on('complete', function (changes) {\n                var deleted_ids = changes.results.map(function (c) {\n                  if (c.deleted) { return c.id; }\n                });\n                deleted_ids.should.include('1');\n\n                done();\n              }).on('error', done);\n            });\n          });\n        });\n      });\n    });\n\n    it('Testing updating in changes', function (done) {\n      var db = new PouchDB(dbs.name);\n\n      db.info(function (err, info) {\n        var update_seq = info.update_seq;\n        \n        testUtils.writeDocs(db, JSON.parse(JSON.stringify(origDocs)), \n          function () {\n          db.get('3', function (err, doc) {\n            doc.updated = 'totally';\n            db.put(doc, function () {\n              db.changes({\n                since: update_seq\n              }).on('complete', function (changes) {\n                var ids = changes.results.map(function (c) { return c.id; });\n                ids.should.include('3');\n\n                done();\n              }).on('error', done);\n            });\n          });\n        });\n      });\n    });\n\n    it('Testing include docs', function (done) {\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, JSON.parse(JSON.stringify(origDocs)),\n        function () {\n        db.changes({\n          include_docs: true\n        }).on('complete', function (changes) {\n          changes.results.forEach(function (row) {\n            if (row.id === '0') {\n              row.doc.a.should.equal(1);\n            }\n          });\n          done();\n        }).on('error', done);\n      });\n    });\n\n    it('Testing conflicts', function (done) {\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, JSON.parse(JSON.stringify(origDocs)),\n        function () {\n        // add conflicts\n        var conflictDoc1 = {\n          _id: '3',\n          _rev: '2-aa01552213fafa022e6167113ed01087',\n          value: 'X'\n        };\n        var conflictDoc2 = {\n          _id: '3',\n          _rev: '2-ff01552213fafa022e6167113ed01087',\n          value: 'Z'\n        };\n        db.put(conflictDoc1, { new_edits: false }, function () {\n          db.put(conflictDoc2, { new_edits: false }, function () {\n            db.get('3', function (err, winRev) {\n              winRev._rev.should.equal(conflictDoc2._rev);\n              db.changes({\n                include_docs: true,\n                conflicts: true,\n                style: 'all_docs'\n              }).on('complete', function (changes) {\n                changes.results.map(function (x) { return x.id; }).sort()\n                  .should.deep.equal(['0', '1', '2', '3'],\n                    'all ids are in _changes');\n\n                var result = changes.results.filter(function (row) {\n                  return row.id === '3';\n                })[0];\n\n                result.changes.should.have\n                  .length(3, 'correct number of changes');\n                result.doc._rev.should.equal(conflictDoc2._rev);\n                result.doc._id.should.equal('3', 'correct doc id');\n                winRev._rev.should.equal(result.doc._rev);\n                result.doc._conflicts.should.be.instanceof(Array);\n                result.doc._conflicts.should.have.length(2);\n                conflictDoc1._rev.should.equal(result.doc._conflicts[0]);\n\n                db.allDocs({\n                  include_docs: true,\n                  conflicts: true\n                }, function (err, res) {\n                  var row = res.rows[3];\n                  res.rows.should.have.length(4, 'correct number of changes');\n                  row.key.should.equal('3', 'correct key');\n                  row.id.should.equal('3', 'correct id');\n                  row.value.rev.should.equal(winRev._rev, 'correct rev');\n                  row.doc._rev.should.equal(winRev._rev, 'correct rev');\n                  row.doc._id.should.equal('3', 'correct order');\n                  row.doc._conflicts.should.be.instanceof(Array);\n                  row.doc._conflicts.should.have.length(2);\n                  conflictDoc1._rev.should\n                    .equal(res.rows[3].doc._conflicts[0]);\n                  done();\n                });\n              }).on('error', done);\n            });\n          });\n        });\n      });\n    });\n\n    it('test basic collation', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = {\n        docs: [\n          {_id: 'z', foo: 'z'},\n          {_id: 'a', foo: 'a'}\n        ]\n      };\n      db.bulkDocs(docs, function () {\n        db.allDocs({\n          startkey: 'z',\n          endkey: 'z'\n        }, function (err, result) {\n          result.rows.should.have.length(1, 'Exclude a result');\n          done();\n        });\n      });\n    });\n\n    it('3883 start_key end_key aliases', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [{_id: 'a', foo: 'a'}, {_id: 'z', foo: 'z'}];\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({start_key: 'z', end_key: 'z'});\n      }).then(function (result) {\n        result.rows.should.have.length(1, 'Exclude a result');\n      });\n    });\n\n    it('test total_rows with a variety of criteria', function (done) {\n      this.timeout(20000);\n      var db = new PouchDB(dbs.name);\n\n      var docs = [\n        {_id : '0'},\n        {_id : '1'},\n        {_id : '2'},\n        {_id : '3'},\n        {_id : '4'},\n        {_id : '5'},\n        {_id : '6'},\n        {_id : '7'},\n        {_id : '8'},\n        {_id : '9'}\n      ];\n      db.bulkDocs({docs : docs}).then(function (res) {\n        docs[3]._deleted = true;\n        docs[7]._deleted = true;\n        docs[3]._rev = res[3].rev;\n        docs[7]._rev = res[7].rev;\n        return db.remove(docs[3]);\n      }).then(function () {\n          return db.remove(docs[7]);\n        }).then(function () {\n          return db.allDocs();\n        }).then(function (res) {\n          res.rows.should.have.length(8,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '5'});\n        }).then(function (res) {\n          res.rows.should.have.length(4,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '5', skip : 2, limit : 10});\n        }).then(function (res) {\n          res.rows.should.have.length(2,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '5', limit : 0});\n        }).then(function (res) {\n          res.rows.should.have\n            .length(0,  'correctly return rows, startkey w/ limit=0');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({keys : ['5'], limit : 0});\n        }).then(function (res) {\n          res.rows.should.have\n            .length(0,  'correctly return rows, keys w/ limit=0');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({limit : 0});\n        }).then(function (res) {\n          res.rows.should.have.length(0,  'correctly return rows, limit=0');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '5', descending : true, skip : 1});\n        }).then(function (res) {\n          res.rows.should.have.length(4,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '5', endkey : 'z'});\n        }).then(function (res) {\n          res.rows.should.have.length(4,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '5', endkey : '5'});\n        }).then(function (res) {\n          res.rows.should.have.length(1,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '5', endkey : '4'});\n        }).then(function (res) {\n          res.rows.should.have.length(0,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '5', endkey : '4', descending : true});\n        }).then(function (res) {\n          res.rows.should.have.length(2,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '3', endkey : '7', descending : false});\n        }).then(function (res) {\n          res.rows.should.have.length(3,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '7', endkey : '3', descending : true});\n        }).then(function (res) {\n          res.rows.should.have.length(3,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({startkey : '', endkey : '0'});\n        }).then(function (res) {\n          res.rows.should.have.length(1,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({keys : ['0', '1', '3']});\n        }).then(function (res) {\n          res.rows.should.have.length(3,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({keys : ['0', '1', '0', '2', '1', '1']});\n        }).then(function (res) {\n          res.rows.should.have.length(6,  'correctly return rows');\n          res.rows.map(function (row) { return row.key; }).should.deep.equal(\n            ['0', '1', '0', '2', '1', '1']);\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({keys : []});\n        }).then(function (res) {\n          res.rows.should.have.length(0,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({keys : ['7']});\n        }).then(function (res) {\n          res.rows.should.have.length(1,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({key : '3'});\n        }).then(function (res) {\n          res.rows.should.have.length(0,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({key : '2'});\n        }).then(function (res) {\n          res.rows.should.have.length(1,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          return db.allDocs({key : 'z'});\n        }).then(function (res) {\n          res.rows.should.have.length(0,  'correctly return rows');\n          res.total_rows.should.equal(8,  'correctly return total_rows');\n          done();\n        }, done);\n\n    });\n\n    it('test total_rows with both skip and limit', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = {\n        docs: [\n          {_id: \"w\", foo: \"w\"},\n          {_id: \"x\", foo: \"x\"},\n          {_id: \"y\", foo: \"y\"},\n          {_id: \"z\", foo: \"z\"}\n        ]\n      };\n      db.bulkDocs(docs, function () {\n        db.allDocs({ startkey: 'x', limit: 1, skip : 1}, function (err, res) {\n          res.total_rows.should.equal(4,  'Accurately return total_rows count');\n          res.rows.should.have.length(1,  'Correctly limit the returned rows');\n          res.rows[0].id.should.equal('y', 'Correctly skip 1 doc');\n\n          db.get('x', function (err, xDoc) {\n            db.remove(xDoc, function () {\n              db.allDocs({ startkey: 'w', limit: 2, skip : 1},\n                function (err, res) {\n                res.total_rows.should\n                  .equal(3,  'Accurately return total_rows count after delete');\n                res.rows.should.have\n                  .length(2,  'Correctly limit the returned rows after delete');\n                res.rows[0].id.should\n                  .equal('y', 'Correctly skip 1 doc after delete');\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('test limit option and total_rows', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = {\n        docs: [\n          {_id: 'z', foo: 'z'},\n          {_id: 'a', foo: 'a'}\n        ]\n      };\n      db.bulkDocs(docs, function () {\n        db.allDocs({\n          startkey: 'a',\n          limit: 1\n        }, function (err, res) {\n          res.total_rows.should.equal(2, 'Accurately return total_rows count');\n          res.rows.should.have.length(1, 'Correctly limit the returned rows.');\n          done();\n        });\n      });\n    });\n\n    it('test escaped startkey/endkey', function (done) {\n      var db = new PouchDB(dbs.name);\n      var id1 = '\"weird id!\" a';\n      var id2 = '\"weird id!\" z';\n      var docs = {\n        docs: [\n          {\n            _id: id1,\n            foo: 'a'\n          },\n          {\n            _id: id2,\n            foo: 'z'\n          }\n        ]\n      };\n      db.bulkDocs(docs, function () {\n        db.allDocs({\n          startkey: id1,\n          endkey: id2\n        }, function (err, res) {\n          res.total_rows.should.equal(2, 'Accurately return total_rows count');\n          done();\n        });\n      });\n    });\n\n    it('test \"key\" option', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { _id: '0' },\n          { _id: '1' },\n          { _id: '2' }\n        ]\n      }, function (err) {\n        should.not.exist(err);\n        db.allDocs({ key: '1' }, function (err, res) {\n          res.rows.should.have.length(1, 'key option returned 1 doc');\n          db.allDocs({\n            key: '1',\n            keys: [\n              '1',\n              '2'\n            ]\n          }, function (err) {\n            should.exist(err);\n            db.allDocs({\n              key: '1',\n              startkey: '1'\n            }, function (err) {\n              should.not.exist(err);\n              db.allDocs({\n                key: '1',\n                endkey: '1'\n              }, function (err) {\n                should.not.exist(err);\n                // when mixing key/startkey or key/endkey, the results\n                // are very weird and probably undefined, so don't go beyond\n                // verifying that there's no error\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('test inclusive_end=false', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        { _id: '1' },\n        { _id: '2' },\n        { _id: '3' },\n        { _id: '4' }\n      ];\n      return db.bulkDocs({docs: docs}).then(function () {\n        return db.allDocs({inclusive_end: false, endkey: '2'});\n      }).then(function (res) {\n        res.rows.should.have.length(1);\n        return db.allDocs({inclusive_end: false, endkey: '1'});\n      }).then(function (res) {\n        res.rows.should.have.length(0);\n        return db.allDocs({inclusive_end: false, endkey: '1',\n                           startkey: '0'});\n      }).then(function (res) {\n        res.rows.should.have.length(0);\n        return db.allDocs({inclusive_end: false, endkey: '5'});\n      }).then(function (res) {\n        res.rows.should.have.length(4);\n        return db.allDocs({inclusive_end: false, endkey: '4'});\n      }).then(function (res) {\n        res.rows.should.have.length(3);\n        return db.allDocs({inclusive_end: false, endkey: '4',\n                           startkey: '3'});\n      }).then(function (res) {\n        res.rows.should.have.length(1);\n        return db.allDocs({inclusive_end: false, endkey: '1',\n                           descending: true});\n      }).then(function (res) {\n        res.rows.should.have.length(3);\n        return db.allDocs({inclusive_end: true, endkey: '4'});\n      }).then(function (res) {\n        res.rows.should.have.length(4);\n        return db.allDocs({\n          descending: true,\n          startkey: '3',\n          endkey: '2',\n          inclusive_end: false\n        });\n      }).then(function (res) {\n        res.rows.should.have.length(1);\n      });\n    });\n\n    it('#3082 test wrong num results returned', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      for (var i = 0; i < 1000; i++) {\n        docs.push({});\n      }\n\n      var lastkey;\n      var allkeys = [];\n\n      function paginate() {\n        var opts = {include_doc: true, limit: 100};\n        if (lastkey) {\n          opts.startkey = lastkey;\n          opts.skip = 1;\n        }\n        return db.allDocs(opts).then(function (res) {\n          if (!res.rows.length) {\n            return;\n          }\n          if (lastkey) {\n            res.rows[0].key.should.be.above(lastkey);\n          }\n          res.rows.should.have.length(100);\n          lastkey = res.rows.pop().key;\n          allkeys.push(lastkey);\n          return paginate();\n        });\n      }\n\n      return db.bulkDocs(docs).then(function () {\n        return paginate().then(function () {\n          // try running all queries at once to try to isolate race condition\n          return testUtils.Promise.all(allkeys.map(function (key) {\n            return db.allDocs({\n              limit: 100,\n              include_docs: true,\n              startkey: key,\n              skip: 1\n            }).then(function (res) {\n              if (!res.rows.length) {\n                return;\n              }\n              res.rows[0].key.should.be.above(key);\n              res.rows.should.have.length(100);\n            });\n          }));\n        });\n      });\n    });\n\n    it('test empty db', function (done) {\n      var db = new PouchDB(dbs.name);\n      return db.allDocs().then(function (res) {\n        res.rows.should.have.length(0);\n        res.total_rows.should.equal(0);\n        done();\n      });\n    });\n\n    it('test after db close', function (done) {\n      var db = new PouchDB(dbs.name);\n      return db.close().then(function () {\n        return db.allDocs().catch(function (err) {\n          err.message.should.equal('database is closed');\n          done();\n        });\n      });\n    });\n\n    if (adapter === 'local') { // chrome doesn't like \\u0000 in URLs\n      it('test unicode ids and revs', function (done) {\n        var db = new PouchDB(dbs.name);\n        var id = 'baz\\u0000';\n        var rev;\n        return db.put({_id: id}).then(function (res) {\n          rev = res.rev;\n        }).then(function () {\n            return db.get(id);\n          }).then(function (doc) {\n            doc._id.should.equal(id);\n            doc._rev.should.equal(rev);\n            return db.allDocs({keys: [id]});\n          }).then(function (res) {\n            res.rows.should.have.length(1);\n            res.rows[0].value.rev.should.equal(rev);\n          }).then(done, done);\n      });\n    }\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.attachments.js",
    "content": "'use strict';\n\nvar adapters = ['local', 'http'];\nvar repl_adapters = [\n  ['local', 'http'],\n  ['http', 'http'],\n  ['http', 'local'],\n  ['local', 'local']\n];\n\n/* jshint maxlen:false */\nvar icons = [\n  \"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\"\n];\n\nvar iconDigests = [\n  \"md5-Mf8m9ehZnCXC717bPkqkCA==\",\n  \"md5-fdEZBYtnvr+nozYVDzzxpA==\",\n  \"md5-ImDARszfC+GA3Cv9TVW4HA==\",\n  \"md5-hBsgoz3ujHM4ioa72btwow==\",\n  \"md5-jDUyV6ySnTVANn2qq3332g==\"\n];\n\nvar iconLengths = [1047, 789, 967, 527, 1108];\n\nadapters.forEach(function (adapter) {\n  describe('suite2 test.attachments.js-' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    var binAttDoc = {\n      _id: 'bin_doc',\n      _attachments: {\n        'foo.txt': {\n          content_type: 'text/plain',\n          data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ='\n        }\n      }\n    };\n    // empty attachment\n    var binAttDoc2 = {\n      _id: 'bin_doc2',\n      _attachments: {\n        'foo.txt': {\n          content_type: 'text/plain',\n          data: ''\n        }\n      }\n    };\n    // json string doc\n    var jsonDoc = {\n      _id: 'json_doc',\n      _attachments: {\n        'foo.json': {\n          content_type: 'application/json',\n          data: 'eyJIZWxsbyI6IndvcmxkIn0='\n        }\n      }\n    };\n    var pngAttDoc = {\n      _id: 'png_doc',\n      _attachments: {\n        'foo.png': {\n          content_type: 'image/png',\n          data: 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAMFBMVEX+9+' +\n                'j+9OD+7tL95rr93qT80YD7x2L6vkn6syz5qRT4ogT4nwD4ngD4nQD4nQD4' +\n                'nQDT2nT/AAAAcElEQVQY002OUQLEQARDw1D14f7X3TCdbfPnhQTqI5UqvG' +\n                'OWIz8gAIXFH9zmC63XRyTsOsCWk2A9Ga7wCXlA9m2S6G4JlVwQkpw/Ymxr' +\n                'UgNoMoyxBwSMH/WnAzy5cnfLFu+dK2l5gMvuPGLGJd1/9AOiBQiEgkzOpg' +\n                'AAAABJRU5ErkJggg=='\n        }\n      }\n    };\n\n    it('3357 Attachment names cant start with _', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'baz', _attachments: {\n        '_text1.txt': {\n          content_type: 'text/plain',\n          data: testUtils.btoa('text1')\n        }\n      }};\n      return db.put(doc).then(function () {\n        done('Should not succeed');\n      }).catch(function (err) {\n        err.name.should.equal('bad_request');\n        done();\n      });\n    });\n\n    it('fetch atts with open_revs and missing', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {\n        _id: 'frog',\n        _rev: '1-x',\n        _revisions: {\n          start: 1,\n          ids: ['x']\n        },\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: ''\n          }\n        }\n      };\n      return db.bulkDocs({\n        docs: [doc],\n        new_edits: false\n      }).then(function () {\n        return db.get('frog', {\n          revs: true,\n          open_revs: ['1-x', '2-fake'],\n          attachments: true\n        });\n      }).then(function (res) {\n        // there should be exactly one \"ok\" result\n        // and one result with attachments\n        res.filter(function (x) {\n          return x.ok;\n        }).should.have.length(1);\n        res.filter(function (x) {\n          return x.ok && x.ok._attachments;\n        }).should.have.length(1);\n      });\n    });\n\n    it('issue 2803 should throw 412', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put(binAttDoc).then(function () {\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        doc._attachments['bar.txt'] = {\n          stub: true,\n          digest: 'md5-sorryIDoNotReallyExist=='\n        };\n        return db.put(doc);\n      }).then(function (res) {\n        should.not.exist(res, 'should throw');\n      }).catch(function (err) {\n        should.exist(err.status, 'got improper error: ' + err);\n        err.status.should.equal(412);\n      });\n    });\n\n    it('issue 2803 should throw 412 part 2', function () {\n      var stubDoc = {\n        _id: 'stubby',\n        \"_attachments\": {\n          \"foo.txt\": {\n            \"content_type\": \"text/plain\",\n            \"digest\": \"md5-aEI7pOYCRBLTRQvvqYrrJQ==\",\n            \"stub\": true\n          }\n        }\n      };\n      var db = new PouchDB(dbs.name);\n      return db.put(stubDoc).then(function (res) {\n        should.not.exist(res, 'should throw');\n      }).catch(function (err) {\n        should.exist(err.status, 'got improper error: ' + err);\n        err.status.should.equal(412, 'got improper error: ' + err);\n      });\n    });\n\n    it('issue 2803 should throw 412 part 3', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put(binAttDoc).then(function () {\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        doc._attachments['foo.json'] = jsonDoc._attachments['foo.json'];\n      }).then(function () {\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        doc._attachments['bar.txt'] = {\n          stub: true,\n          digest: 'md5-sorryIDoNotReallyExist=='\n        };\n        return db.put(doc);\n      }).then(function (res) {\n        should.not.exist(res, 'should throw');\n      }).catch(function (err) {\n        should.exist(err.status, 'got improper error: ' + err);\n        err.status.should.equal(412);\n      });\n    });\n\n    it('issue 2803 should throw 412 part 4', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put(binAttDoc).then(function () {\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        doc._attachments['foo.json'] = jsonDoc._attachments['foo.json'];\n      }).then(function () {\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        doc._attachments['bar.txt'] = {\n          stub: true,\n          digest: 'md5-sorryIDoNotReallyExist=='\n        };\n        doc._attachments['baz.txt'] = {\n          stub: true,\n          digest: 'md5-yahNoIDoNotExistEither=='\n        };\n        return db.put(doc);\n      }).then(function (res) {\n        should.not.exist(res, 'should throw');\n      }).catch(function (err) {\n        should.exist(err.status, 'got improper error: ' + err);\n        err.status.should.equal(412);\n      });\n    });\n\n    it('#2858 {binary: true} in get()', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc];\n      return db.bulkDocs(docs).then(function () {\n        return testUtils.Promise.all(docs.map(function (doc) {\n          var attName = Object.keys(doc._attachments)[0];\n          var expected = doc._attachments[attName];\n          return db.get(doc._id, {\n            attachments: true,\n            binary: true\n          }).then(function (savedDoc) {\n            var att = savedDoc._attachments[attName];\n            should.not.exist(att.stub);\n            should.exist(att.digest);\n            att.content_type.should.equal(expected.content_type);\n            att.data.should.not.be.a('string');\n            att.data.type.should.equal(expected.content_type);\n            return testUtils.readBlobPromise(att.data);\n          }).then(function (bin) {\n            testUtils.btoa(bin).should.equal(expected.data);\n          });\n        }));\n      });\n    });\n\n    it('#2858 {binary: true} in allDocs() 1', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc, {_id: 'foo'}];\n      return db.bulkDocs(docs).then(function () {\n        return testUtils.Promise.all(docs.map(function (doc) {\n          var atts = doc._attachments;\n          var attName = atts && Object.keys(atts)[0];\n          var expected = atts && atts[attName];\n          return db.allDocs({\n            key: doc._id,\n            attachments: true,\n            binary: true,\n            include_docs: true\n          }).then(function (res) {\n            res.rows.should.have.length(1);\n            var savedDoc = res.rows[0].doc;\n            if (!atts) {\n              should.not.exist(savedDoc._attachments);\n              return;\n            }\n            var att = savedDoc._attachments[attName];\n            should.not.exist(att.stub);\n            should.exist(att.digest);\n            att.content_type.should.equal(expected.content_type);\n            att.data.should.not.be.a('string');\n            att.data.type.should.equal(expected.content_type);\n            return testUtils.readBlobPromise(att.data).then(function (bin) {\n              testUtils.btoa(bin).should.equal(expected.data);\n            });\n          });\n        }));\n      });\n    });\n\n    it('#2858 {binary: true} in allDocs() 2', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc, {_id: 'foo'}];\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({\n          include_docs: true,\n          attachments: true,\n          binary: true\n        }).then(function (res) {\n          var savedDocs = res.rows.map(function (x) {\n            return x.doc;\n          });\n          return testUtils.Promise.all(docs.map(function (doc) {\n            var atts = doc._attachments;\n            var attName = atts && Object.keys(atts)[0];\n            var expected = atts && atts[attName];\n            var savedDoc = savedDocs.filter(function (x) {\n              return x._id === doc._id;\n            })[0];\n            if (!atts) {\n              should.not.exist(savedDoc._attachments);\n              return;\n            }\n            var att = savedDoc._attachments[attName];\n            should.not.exist(att.stub);\n            should.exist(att.digest);\n            att.content_type.should.equal(expected.content_type);\n            att.data.should.not.be.a('string');\n            att.data.type.should.equal(expected.content_type);\n            return testUtils.readBlobPromise(att.data).then(function (bin) {\n              testUtils.btoa(bin).should.equal(expected.data);\n            });\n          }));\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in allDocs() 3', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc,\n        {_id: 'bar'},\n        {_id: 'foo', _deleted: true}];\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({\n          include_docs: true,\n          attachments: true,\n          binary: true\n        }).then(function (res) {\n          res.rows.should.have.length(4);\n          var savedDocs = res.rows.map(function (x) {\n            return x.doc;\n          });\n          return testUtils.Promise.all(docs.filter(function (doc) {\n            return !doc._deleted;\n          }).map(function (doc) {\n            var atts = doc._attachments;\n            var attName = atts && Object.keys(atts)[0];\n            var expected = atts && atts[attName];\n            var savedDoc = savedDocs.filter(function (x) {\n              return x._id === doc._id;\n            })[0];\n            if (!atts) {\n              should.not.exist(savedDoc._attachments);\n              return;\n            }\n            var att = savedDoc._attachments[attName];\n            should.not.exist(att.stub);\n            should.exist(att.digest);\n            att.content_type.should.equal(expected.content_type);\n            att.data.should.not.be.a('string');\n            att.data.type.should.equal(expected.content_type);\n            return testUtils.readBlobPromise(att.data).then(function (bin) {\n              testUtils.btoa(bin).should.equal(expected.data);\n            });\n          }));\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in allDocs() 4', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc,\n        {_id: 'bar'},\n        {_id: 'foo', _deleted: true}];\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({\n          attachments: true,\n          binary: true\n        }).then(function (res) {\n          res.rows.should.have.length(4);\n          res.rows.forEach(function (row) {\n            should.not.exist(row.doc);\n          });\n          return db.allDocs({\n            binary: true\n          });\n        }).then(function (res) {\n          res.rows.should.have.length(4);\n          res.rows.forEach(function (row) {\n            should.not.exist(row.doc);\n          });\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in allDocs() 5', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc,\n        {_id: 'bar'},\n        {_id: 'foo', deleted: true}];\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({\n          keys: [\n            binAttDoc._id, binAttDoc2._id, pngAttDoc._id, 'foo', 'bar'\n          ],\n          attachments: true,\n          binary: true,\n          include_docs: true\n        }).then(function (res) {\n          res.rows.should.have.length(5);\n\n          return testUtils.Promise.all(res.rows.map(function (row, i) {\n            if (docs[i]._deleted) {\n              should.not.exist(row.doc);\n              return;\n            }\n            var atts = docs[i]._attachments;\n            var attName = atts && Object.keys(atts)[0];\n            var expected = atts && atts[attName];\n            var savedDoc = row.doc;\n            if (!atts) {\n              should.not.exist(savedDoc._attachments);\n              return;\n            }\n            var att = savedDoc._attachments[attName];\n            should.not.exist(att.stub);\n            should.exist(att.digest);\n            att.content_type.should.equal(expected.content_type);\n            att.data.should.not.be.a('string');\n            att.data.type.should.equal(expected.content_type);\n            return testUtils.readBlobPromise(att.data).then(function (bin) {\n              testUtils.btoa(bin).should.equal(expected.data);\n            });\n          }));\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in allDocs(), many atts', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {_id: 'baz', _attachments: {\n          'text1.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text1')\n          },\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          }\n        }},\n        {_id: 'foo', _attachments: {\n          'text5.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text5')\n          }\n        }},\n        {_id: 'quux', _attachments: {\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          },\n          'text4.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text4')\n          }\n        }},\n        {_id: 'zob', _attachments: {\n          'text6.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }},\n        {_id: 'zorb', _attachments: {\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          },\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }}\n      ];\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({\n          attachments: true,\n          binary: true,\n          include_docs: true\n        }).then(function (res) {\n          res.rows.should.have.length(5);\n\n          return testUtils.Promise.all(res.rows.map(function (row) {\n            var doc = docs.filter(function (x) {\n              return x._id === row.id;\n            })[0];\n            var atts = doc._attachments;\n            var attNames = Object.keys(atts);\n            return testUtils.Promise.all(attNames.map(function (attName) {\n              var expected = atts && atts[attName];\n              var savedDoc = row.doc;\n              var att = savedDoc._attachments[attName];\n              should.not.exist(att.stub);\n              should.exist(att.digest);\n              att.content_type.should.equal(expected.content_type);\n              att.data.should.not.be.a('string');\n              att.data.type.should.equal(expected.content_type);\n              return testUtils.readBlobPromise(att.data).then(function (bin) {\n                testUtils.btoa(bin).should.equal(expected.data);\n              });\n            }));\n          }));\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in allDocs(), mixed atts', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {_id: 'baz', _attachments: {\n          'text1.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text1')\n          },\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          }\n        }},\n        {_id: 'foo', _attachments: {\n          'text5.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text5')\n          }\n        }},\n        {_id: 'imdeleted', _deleted: true},\n        {_id: 'quux', _attachments: {\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          },\n          'text4.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text4')\n          }\n        }},\n        {_id: 'imempty'},\n        {_id: 'zob', _attachments: {\n          'text6.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }},\n\n        {_id: 'imempty2'},\n        {_id: 'zorb', _attachments: {\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          },\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }},\n        {_id: 'imkindaempty', _attachments: {\n          'text0.txt': {\n            content_type: 'text/plain',\n            data: ''\n          }\n        }}\n      ];\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({\n          attachments: true,\n          binary: true,\n          include_docs: true\n        }).then(function (res) {\n          res.rows.should.have.length(8);\n\n          return testUtils.Promise.all(res.rows.map(function (row) {\n            var doc = docs.filter(function (x) {\n              return x._id === row.id;\n            })[0];\n            if (doc._deleted) {\n              should.not.exist(row.doc);\n              return;\n            }\n            var atts = doc._attachments;\n            if (!atts) {\n              should.not.exist(row.doc._attachments);\n              return;\n            }\n            var attNames = Object.keys(atts);\n            return testUtils.Promise.all(attNames.map(function (attName) {\n              var expected = atts && atts[attName];\n              var savedDoc = row.doc;\n              var att = savedDoc._attachments[attName];\n              should.not.exist(att.stub);\n              should.exist(att.digest);\n              att.content_type.should.equal(expected.content_type);\n              att.data.should.not.be.a('string');\n              att.data.type.should.equal(expected.content_type);\n              return testUtils.readBlobPromise(att.data).then(function (bin) {\n                testUtils.btoa(bin).should.equal(expected.data);\n              });\n            }));\n          }));\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in changes() non-live', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc,\n        {_id: 'bar'},\n        {_id: 'foo', deleted: true}];\n      return db.bulkDocs(docs).then(function () {\n        return db.changes({\n          attachments: true,\n          binary: true,\n          include_docs: true\n        }).then(function (res) {\n          res.results.should.have.length(5);\n\n          return testUtils.Promise.all(res.results.map(function (row) {\n            var doc = docs.filter(function (x) {\n              return x._id === row.id;\n            })[0];\n            if (doc._deleted) {\n              should.not.exist(row.doc);\n              return;\n            }\n            var atts = doc._attachments;\n            var attName = atts && Object.keys(atts)[0];\n            var expected = atts && atts[attName];\n            var savedDoc = row.doc;\n            if (!atts) {\n              should.not.exist(savedDoc._attachments);\n              return;\n            }\n            var att = savedDoc._attachments[attName];\n            should.not.exist(att.stub);\n            should.exist(att.digest);\n            att.content_type.should.equal(expected.content_type);\n            att.data.should.not.be.a('string');\n            att.data.type.should.equal(expected.content_type);\n            return testUtils.readBlobPromise(att.data).then(function (bin) {\n              testUtils.btoa(bin).should.equal(expected.data);\n            });\n          }));\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in changes() non-live, many atts', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {_id: 'baz', _attachments: {\n          'text1.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text1')\n          },\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          }\n        }},\n        {_id: 'foo', _attachments: {\n          'text5.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text5')\n          }\n        }},\n        {_id: 'quux', _attachments: {\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          },\n          'text4.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text4')\n          }\n        }},\n        {_id: 'zob', _attachments: {\n          'text6.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }},\n        {_id: 'zorb', _attachments: {\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          },\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }}\n      ];\n      return db.bulkDocs(docs).then(function () {\n        return db.changes({\n          attachments: true,\n          binary: true,\n          include_docs: true\n        }).then(function (res) {\n          res.results.should.have.length(5);\n\n          return testUtils.Promise.all(res.results.map(function (row) {\n            var doc = docs.filter(function (x) {\n              return x._id === row.id;\n            })[0];\n            var atts = doc._attachments;\n            var attNames = Object.keys(atts);\n            return testUtils.Promise.all(attNames.map(function (attName) {\n              var expected = atts && atts[attName];\n              var savedDoc = row.doc;\n              var att = savedDoc._attachments[attName];\n              should.not.exist(att.stub);\n              should.exist(att.digest);\n              att.content_type.should.equal(expected.content_type);\n              att.data.should.not.be.a('string');\n              att.data.type.should.equal(expected.content_type);\n              return testUtils.readBlobPromise(att.data).then(function (bin) {\n                testUtils.btoa(bin).should.equal(expected.data);\n              });\n            }));\n          }));\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in changes() non-live, mixed atts', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {_id: 'baz', _attachments: {\n          'text1.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text1')\n          },\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          }\n        }},\n        {_id: 'foo', _attachments: {\n          'text5.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text5')\n          }\n        }},\n        {_id: 'imdeleted', _deleted: true},\n        {_id: 'quux', _attachments: {\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          },\n          'text4.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text4')\n          }\n        }},\n        {_id: 'imempty'},\n        {_id: 'zob', _attachments: {\n          'text6.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }},\n\n        {_id: 'imempty2'},\n        {_id: 'zorb', _attachments: {\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          },\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }},\n        {_id: 'imkindaempty', _attachments: {\n          'text0.txt': {\n            content_type: 'text/plain',\n            data: ''\n          }\n        }}\n      ];\n      return db.bulkDocs(docs).then(function () {\n        return db.changes({\n          attachments: true,\n          binary: true,\n          include_docs: true\n        }).then(function (res) {\n          res.results.should.have.length(9);\n\n          return testUtils.Promise.all(res.results.map(function (row) {\n            var doc = docs.filter(function (x) {\n              return x._id === row.id;\n            })[0];\n            var atts = doc._attachments;\n            if (!atts) {\n              should.not.exist(row.doc._attachments);\n              return;\n            }\n            var attNames = Object.keys(atts);\n            return testUtils.Promise.all(attNames.map(function (attName) {\n              var expected = atts && atts[attName];\n              var savedDoc = row.doc;\n              var att = savedDoc._attachments[attName];\n              should.not.exist(att.stub);\n              should.exist(att.digest);\n              att.content_type.should.equal(expected.content_type);\n              att.data.should.not.be.a('string');\n              att.data.type.should.equal(expected.content_type);\n              return testUtils.readBlobPromise(att.data).then(function (bin) {\n                testUtils.btoa(bin).should.equal(expected.data);\n              });\n            }));\n          }));\n        });\n      });\n    });\n\n    it('#2858 {binary: true} non-live changes, complete event', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {_id: 'baz', _attachments: {\n          'text1.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text1')\n          },\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          }\n        }},\n        {_id: 'foo', _attachments: {\n          'text5.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text5')\n          }\n        }},\n        {_id: 'imdeleted', _deleted: true},\n        {_id: 'quux', _attachments: {\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          },\n          'text4.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text4')\n          }\n        }},\n        {_id: 'imempty'},\n        {_id: 'zob', _attachments: {\n          'text6.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }},\n\n        {_id: 'imempty2'},\n        {_id: 'zorb', _attachments: {\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          },\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }},\n        {_id: 'imkindaempty', _attachments: {\n          'text0.txt': {\n            content_type: 'text/plain',\n            data: ''\n          }\n        }}\n      ];\n      return db.bulkDocs(docs).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          db.changes({\n            attachments: true,\n            binary: true,\n            include_docs: true\n          }).on('error', reject).on('complete', resolve);\n        }).then(function (results) {\n            return testUtils.Promise.all(results.results.map(function (row) {\n              var doc = docs.filter(function (x) {\n                return x._id === row.id;\n              })[0];\n              if (row.deleted) {\n                should.not.exist(row.doc._attachments);\n                return;\n              }\n              var atts = doc._attachments;\n              var savedDoc = row.doc;\n              if (!atts) {\n                should.not.exist(savedDoc._attachments);\n                return;\n              }\n              var attNames = Object.keys(atts);\n              return testUtils.Promise.all(attNames.map(function (attName) {\n                var expected = atts && atts[attName];\n                var att = savedDoc._attachments[attName];\n                should.not.exist(att.stub);\n                should.exist(att.digest);\n                att.content_type.should.equal(expected.content_type);\n                att.data.should.not.be.a('string');\n                att.data.type.should.equal(expected.content_type);\n                return testUtils.readBlobPromise(att.data).then(function (bin) {\n                  testUtils.btoa(bin).should.equal(expected.data);\n                });\n              }));\n            }));\n          });\n      });\n    });\n\n    it('#2858 {binary: true} in live changes', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc,\n        {_id: 'bar'},\n        {_id: 'foo', deleted: true}];\n      return db.bulkDocs(docs).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          var ret = db.changes({\n            attachments: true,\n            binary: true,\n            include_docs: true,\n            live: true\n          }).on('error', reject)\n            .on('change', handleChange)\n            .on('complete', resolve);\n\n          var promise = testUtils.Promise.resolve();\n          var done = 0;\n\n          function doneWithDoc() {\n            if (++done === 5 && changes === 5) {\n              ret.cancel();\n            }\n          }\n\n          var changes = 0;\n          function handleChange(change) {\n            changes++;\n            promise = promise.then(function () {\n              var doc = docs.filter(function (x) {\n                return x._id === change.id;\n              })[0];\n              if (change.deleted) {\n                should.not.exist(change.doc);\n                return doneWithDoc();\n              }\n              var atts = doc._attachments;\n              var attName = atts && Object.keys(atts)[0];\n              var expected = atts && atts[attName];\n              var savedDoc = change.doc;\n              if (!atts) {\n                should.not.exist(savedDoc._attachments);\n                return doneWithDoc();\n              }\n              var att = savedDoc._attachments[attName];\n              should.not.exist(att.stub);\n              should.exist(att.digest);\n              att.content_type.should.equal(expected.content_type);\n              att.data.should.not.be.a('string');\n              att.data.type.should.equal(expected.content_type);\n              return testUtils.readBlobPromise(att.data).then(function (bin) {\n                testUtils.btoa(bin).should.equal(expected.data);\n                doneWithDoc();\n              });\n            }).catch(reject);\n          }\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in live changes, mixed atts', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {_id: 'baz', _attachments: {\n          'text1.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text1')\n          },\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          }\n        }},\n        {_id: 'foo', _attachments: {\n          'text5.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text5')\n          }\n        }},\n        {_id: 'imdeleted', _deleted: true},\n        {_id: 'quux', _attachments: {\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          },\n          'text4.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text4')\n          }\n        }},\n        {_id: 'imempty'},\n        {_id: 'zob', _attachments: {\n          'text6.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }},\n\n        {_id: 'imempty2'},\n        {_id: 'zorb', _attachments: {\n          'text2.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text2')\n          },\n          'text3.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('text3')\n          }\n        }},\n        {_id: 'imkindaempty', _attachments: {\n          'text0.txt': {\n            content_type: 'text/plain',\n            data: ''\n          }\n        }}\n      ];\n      return db.bulkDocs(docs).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          var ret = db.changes({\n            attachments: true,\n            binary: true,\n            include_docs: true,\n            live: true\n          }).on('error', reject)\n            .on('change', handleChange)\n            .on('complete', resolve);\n\n          var promise = testUtils.Promise.resolve();\n          var done = 0;\n\n          function doneWithDoc() {\n            if (++done === 9 && changes === 9) {\n              ret.cancel();\n            }\n          }\n\n          var changes = 0;\n          function handleChange(change) {\n            changes++;\n            promise = promise.then(function () {\n              var doc = docs.filter(function (x) {\n                return x._id === change.id;\n              })[0];\n              if (change.deleted) {\n                should.not.exist(change.doc._attachments);\n                return doneWithDoc();\n              }\n              var atts = doc._attachments;\n              var savedDoc = change.doc;\n              if (!atts) {\n                should.not.exist(savedDoc._attachments);\n                return doneWithDoc();\n              }\n              var attNames = Object.keys(atts);\n              return testUtils.Promise.all(attNames.map(function (attName) {\n                var expected = atts && atts[attName];\n                var att = savedDoc._attachments[attName];\n                should.not.exist(att.stub);\n                should.exist(att.digest);\n                att.content_type.should.equal(expected.content_type);\n                att.data.should.not.be.a('string');\n                att.data.type.should.equal(expected.content_type);\n                return testUtils.readBlobPromise(att.data).then(function (bin) {\n                  testUtils.btoa(bin).should.equal(expected.data);\n                });\n              })).then(doneWithDoc);\n            }).catch(reject);\n          }\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in live+retry changes', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc,\n        {_id: 'bar'},\n        {_id: 'foo', deleted: true}];\n      return db.bulkDocs(docs).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          var ret = db.changes({\n            attachments: true,\n            binary: true,\n            include_docs: true,\n            live: true\n          }).on('error', reject)\n            .on('change', handleChange)\n            .on('complete', resolve);\n\n          var promise = testUtils.Promise.resolve();\n          var done = 0;\n\n          function doneWithDoc() {\n            if (++done === 5 && changes === 5) {\n              ret.cancel();\n            }\n          }\n\n          var changes = 0;\n          function handleChange(change) {\n            changes++;\n            promise = promise.then(function () {\n              var doc = docs.filter(function (x) {\n                return x._id === change.id;\n              })[0];\n              if (change.deleted) {\n                should.not.exist(change.doc);\n                return doneWithDoc();\n              }\n              var atts = doc._attachments;\n              var attName = atts && Object.keys(atts)[0];\n              var expected = atts && atts[attName];\n              var savedDoc = change.doc;\n              if (!atts) {\n                should.not.exist(savedDoc._attachments);\n                return doneWithDoc();\n              }\n              var att = savedDoc._attachments[attName];\n              should.not.exist(att.stub);\n              should.exist(att.digest);\n              att.content_type.should.equal(expected.content_type);\n              att.data.should.not.be.a('string');\n              att.data.type.should.equal(expected.content_type);\n              return testUtils.readBlobPromise(att.data).then(function (bin) {\n                testUtils.btoa(bin).should.equal(expected.data);\n                doneWithDoc();\n              });\n            }).catch(reject);\n          }\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in live changes, attachments:false', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc,\n        {_id: 'bar'},\n        {_id: 'foo', deleted: true}];\n      return db.bulkDocs(docs).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          var ret = db.changes({\n            include_docs: true,\n            binary: true,\n            live: true\n          }).on('error', reject)\n            .on('change', handleChange)\n            .on('complete', resolve);\n\n          var promise = testUtils.Promise.resolve();\n          var done = 0;\n\n          function doneWithDoc() {\n            if (++done === 5 && changes === 5) {\n              ret.cancel();\n            }\n          }\n\n          var changes = 0;\n          function handleChange(change) {\n            changes++;\n            promise = promise.then(function () {\n              var doc = docs.filter(function (x) {\n                return x._id === change.id;\n              })[0];\n              if (change.deleted) {\n                should.not.exist(change.doc);\n                return doneWithDoc();\n              }\n              var atts = doc._attachments;\n              var attName = atts && Object.keys(atts)[0];\n              var expected = atts && atts[attName];\n              var savedDoc = change.doc;\n              if (!atts) {\n                should.not.exist(savedDoc._attachments);\n                return doneWithDoc();\n              }\n              var att = savedDoc._attachments[attName];\n              att.stub.should.equal(true);\n              should.exist(att.digest);\n              att.content_type.should.equal(expected.content_type);\n              should.not.exist(att.data);\n              doneWithDoc();\n            }).catch(reject);\n          }\n        });\n      });\n    });\n\n    it('#2858 {binary: true} in live changes, include_docs:false', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [binAttDoc, binAttDoc2, pngAttDoc,\n        {_id: 'bar'},\n        {_id: 'foo', deleted: true}];\n      return db.bulkDocs(docs).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          var ret = db.changes({\n            attachments: true,\n            binary: true,\n            live: true\n          }).on('error', reject)\n            .on('change', handleChange)\n            .on('complete', resolve);\n\n          var promise = testUtils.Promise.resolve();\n          var done = 0;\n\n          function doneWithDoc() {\n            if (++done === 5 && changes === 5) {\n              ret.cancel();\n            }\n          }\n\n          var changes = 0;\n          function handleChange(change) {\n            changes++;\n            promise = promise.then(function () {\n              should.not.exist(change.doc);\n              return doneWithDoc();\n            }).catch(reject);\n          }\n        });\n      });\n    });\n\n    it('Measures length correctly after put()', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put(binAttDoc).then(function () {\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        delete doc._attachments[\"foo.txt\"].revpos;\n\n        // because of libicu vs. ascii\n        var digest = doc._attachments[\"foo.txt\"].digest;\n        var validDigests = [\n          \"md5-qUUYqS41RhwF0TrCsTAxFg==\",\n          \"md5-aEI7pOYCRBLTRQvvqYrrJQ==\",\n          \"md5-jeLnIuUvK7d+6gya044lVA==\"\n        ];\n        validDigests.indexOf(digest).should.not.equal(-1,\n          'expected ' + digest  + ' to be in: ' +\n            JSON.stringify(validDigests));\n        delete doc._attachments[\"foo.txt\"].digest;\n        doc._attachments.should.deep.equal({\n          \"foo.txt\": {\n            \"content_type\": \"text/plain\",\n            \"stub\": true,\n            length: 29\n          }\n        });\n      });\n    });\n\n    it('#3074 non-live changes()', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString(),\n          _attachments: {\n            'foo.png': {\n              data: icons[i],\n              content_type: 'image/png'\n            }\n          }\n        });\n      }\n      return db.bulkDocs(docs).then(function () {\n        return db.changes({include_docs: true, attachments: true});\n      }).then(function (res) {\n        var attachments = res.results.sort(function (left, right) {\n          return left.id < right.id ? -1 : 1;\n        }).map(function (change) {\n          var doc = change.doc;\n          delete doc._attachments['foo.png'].revpos;\n          return doc._attachments;\n        });\n        attachments.should.deep.equal(icons.map(function (icon, i) {\n          return {\n            \"foo.png\": {\n              \"content_type\": \"image/png\",\n              \"data\": icon,\n              \"digest\": iconDigests[i]\n            }\n          };\n        }), 'when attachments=true');\n        return db.changes({include_docs: true});\n      }).then(function (res) {\n        var attachments = res.results.sort(function (left, right) {\n          return left.id < right.id ? -1 : 1;\n        }).map(function (change) {\n          var doc = change.doc;\n          delete doc._attachments['foo.png'].revpos;\n          return doc._attachments['foo.png'];\n        });\n        attachments.should.deep.equal(icons.map(function (icon, i) {\n          return {\n            \"content_type\": \"image/png\",\n            stub: true,\n            \"digest\": iconDigests[i],\n            length: iconLengths[i]\n          };\n        }), 'when attachments=false');\n        return db.changes({attachments: true});\n      }).then(function (res) {\n        res.results.should.have.length(5);\n        res.results.forEach(function (row) {\n          should.not.exist(row.doc,\n            'no doc when attachments=true but include_docs=false');\n        });\n        return db.changes();\n      }).then(function (res) {\n        res.results.should.have.length(5);\n        res.results.forEach(function (row) {\n          should.not.exist(row.doc,\n            'no doc when attachments=false and include_docs=false');\n        });\n      });\n    });\n\n    it('#3074 live changes()', function () {\n      var db = new PouchDB(dbs.name);\n\n      function liveChangesPromise(opts) {\n        opts.live = true;\n        return new testUtils.Promise(function (resolve, reject) {\n          var retChanges = {results: []};\n          var changes = db.changes(opts)\n            .on('change', function (change) {\n              retChanges.results.push(change);\n              if (retChanges.results.length === 5) {\n                changes.cancel();\n                resolve(retChanges);\n              }\n            }).on('error', reject);\n        });\n      }\n\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString(),\n          _attachments: {\n            'foo.png': {\n              data: icons[i],\n              content_type: 'image/png'\n            }\n          }\n        });\n      }\n      return db.bulkDocs(docs).then(function () {\n        return liveChangesPromise({\n          include_docs: true,\n          attachments: true\n        });\n      }).then(function (res) {\n        var attachments = res.results.sort(function (left, right) {\n          return left.id < right.id ? -1 : 1;\n        }).map(function (change) {\n          var doc = change.doc;\n          delete doc._attachments['foo.png'].revpos;\n          return doc._attachments;\n        });\n        attachments.should.deep.equal(icons.map(function (icon, i) {\n          return {\n            \"foo.png\": {\n              \"content_type\": \"image/png\",\n              \"data\": icon,\n              \"digest\": iconDigests[i]\n            }\n          };\n        }), 'when attachments=true');\n        return liveChangesPromise({include_docs: true});\n      }).then(function (res) {\n        var attachments = res.results.sort(function (left, right) {\n          return left.id < right.id ? -1 : 1;\n        }).map(function (change) {\n          var doc = change.doc;\n          delete doc._attachments['foo.png'].revpos;\n          return doc._attachments['foo.png'];\n        });\n        attachments.should.deep.equal(icons.map(function (icon, i) {\n          return {\n            \"content_type\": \"image/png\",\n            stub: true,\n            \"digest\": iconDigests[i],\n            length: iconLengths[i]\n          };\n        }), 'when attachments=false');\n        return liveChangesPromise({attachments: true});\n      }).then(function (res) {\n        res.results.should.have.length(5);\n        res.results.forEach(function (row) {\n          should.not.exist(row.doc,\n            'no doc when attachments=true but include_docs=false');\n        });\n        return liveChangesPromise({});\n      }).then(function (res) {\n        res.results.should.have.length(5);\n        res.results.forEach(function (row) {\n          should.not.exist(row.doc,\n            'no doc when attachments=false and include_docs=false');\n        });\n      });\n    });\n\n    it('#3074 non-live changes(), no attachments', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString()\n        });\n      }\n      return db.bulkDocs(docs).then(function () {\n        return db.changes({include_docs: true, attachments: true});\n      }).then(function (res) {\n        var attachments = res.results.sort(function (left, right) {\n          return left.id < right.id ? -1 : 1;\n        }).map(function (change) {\n          var doc = change.doc;\n          return !!doc._attachments;\n        });\n        attachments.should.deep.equal(icons.map(function () {\n          return false;\n        }), 'when attachments=true');\n        return db.changes({include_docs: true});\n      }).then(function (res) {\n        var attachments = res.results.sort(function (left, right) {\n          return left.id < right.id ? -1 : 1;\n        }).map(function (change) {\n          var doc = change.doc;\n          return !!doc._attachments;\n        });\n        attachments.should.deep.equal(icons.map(function () {\n          return false;\n        }), 'when attachments=false');\n        return db.changes({attachments: true});\n      }).then(function (res) {\n        res.results.should.have.length(5);\n        res.results.forEach(function (row) {\n          should.not.exist(row.doc,\n            'no doc when attachments=true but include_docs=false');\n        });\n        return db.changes();\n      }).then(function (res) {\n        res.results.should.have.length(5);\n        res.results.forEach(function (row) {\n          should.not.exist(row.doc,\n            'no doc when attachments=false and include_docs=false');\n        });\n      });\n    });\n\n    it('#3074 live changes(), no attachments', function () {\n\n      var db = new PouchDB(dbs.name);\n\n      function liveChangesPromise(opts) {\n        opts.live = true;\n        return new testUtils.Promise(function (resolve, reject) {\n          var retChanges = {results: []};\n          var changes = db.changes(opts)\n            .on('change', function (change) {\n              retChanges.results.push(change);\n              if (retChanges.results.length === 5) {\n                changes.cancel();\n                resolve(retChanges);\n              }\n            }).on('error', reject);\n        });\n      }\n\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString()\n        });\n      }\n      return db.bulkDocs(docs).then(function () {\n        return liveChangesPromise({\n          include_docs: true,\n          attachments: true\n        });\n      }).then(function (res) {\n        var attachments = res.results.sort(function (left, right) {\n          return left.id < right.id ? -1 : 1;\n        }).map(function (change) {\n          var doc = change.doc;\n          return !!doc._attachments;\n        });\n        attachments.should.deep.equal(icons.map(function () {\n          return false;\n        }), 'when attachments=true');\n        return liveChangesPromise({include_docs: true});\n      }).then(function (res) {\n        var attachments = res.results.sort(function (left, right) {\n          return left.id < right.id ? -1 : 1;\n        }).map(function (change) {\n          var doc = change.doc;\n          return !!doc._attachments;\n        });\n        attachments.should.deep.equal(icons.map(function () {\n          return false;\n        }), 'when attachments=false');\n        return liveChangesPromise({attachments: true});\n      }).then(function (res) {\n        res.results.should.have.length(5);\n        res.results.forEach(function (row) {\n          should.not.exist(row.doc,\n            'no doc when attachments=true but include_docs=false');\n        });\n        return liveChangesPromise({});\n      }).then(function (res) {\n        res.results.should.have.length(5);\n        res.results.forEach(function (row) {\n          should.not.exist(row.doc,\n            'no doc when attachments=false and include_docs=false');\n        });\n      });\n    });\n\n    it('#3881 filter extraneous keys from _attachments', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put({\n        _id: 'foo',\n        _attachments: {\n          'foo.txt': {\n            data: '',\n            content_type: 'text/plain',\n            follows: false,\n            foo: 'bar',\n            baz: true,\n            quux: 1\n          }\n        }\n      }).then(function () {\n        return db.get('foo', {attachments: true});\n      }).then(function (doc) {\n        var keys = Object.keys(doc._attachments['foo.txt']).filter(function (x) {\n          return x !== 'revpos'; // not supported by PouchDB right now\n        }).sort();\n        keys.should.deep.equal(['content_type', 'data', 'digest']);\n      });\n    });\n\n    it('#2771 allDocs() 1, single attachment', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put(binAttDoc).then(function () {\n        return db.allDocs({key: binAttDoc._id, include_docs: true});\n      }).then(function (res) {\n        var doc = res.rows[0].doc;\n        delete doc._attachments[\"foo.txt\"].revpos;\n\n        // because of libicu vs. ascii\n        var digest = doc._attachments[\"foo.txt\"].digest;\n        var validDigests = [\n          \"md5-qUUYqS41RhwF0TrCsTAxFg==\",\n          \"md5-aEI7pOYCRBLTRQvvqYrrJQ==\",\n          \"md5-jeLnIuUvK7d+6gya044lVA==\"\n        ];\n        validDigests.indexOf(digest).should.not.equal(-1,\n          'expected ' + digest  + ' to be in: ' +\n          JSON.stringify(validDigests));\n        delete doc._attachments[\"foo.txt\"].digest;\n        doc._attachments.should.deep.equal({\n          \"foo.txt\": {\n            \"content_type\": \"text/plain\",\n            \"stub\": true,\n            length: 29\n          }\n        });\n        return db.allDocs({\n          key: binAttDoc._id,\n          include_docs: true,\n          attachments: true\n        });\n      }).then(function (res) {\n        var doc = res.rows[0].doc;\n        doc._attachments['foo.txt'].content_type.should.equal(\n          binAttDoc._attachments['foo.txt'].content_type);\n        doc._attachments['foo.txt'].data.should.equal(\n          binAttDoc._attachments['foo.txt'].data);\n      });\n    });\n\n    it('#2771 allDocs() 2, many docs same att', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString(),\n          _attachments: {\n            'foo.txt': {\n              data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=',\n              content_type: 'text/plain'\n            }\n          }\n        });\n      }\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({include_docs: true, attachments: true});\n      }).then(function (res) {\n        var attachments = res.rows.map(function (row) {\n          var doc = row.doc;\n          delete doc._attachments['foo.txt'].revpos;\n          should.exist(doc._attachments['foo.txt'].digest);\n          delete doc._attachments['foo.txt'].digest;\n          return doc._attachments;\n        });\n        attachments.should.deep.equal([1, 2, 3, 4, 5].map(function () {\n          return {\n            \"foo.txt\": {\n              \"content_type\": \"text/plain\",\n              \"data\": \"VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=\"\n            }\n          };\n        }));\n      });\n    });\n\n    it('#2771 allDocs() 3, many docs diff atts', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString(),\n          _attachments: {\n            'foo.png': {\n              data: icons[i],\n              content_type: 'image/png'\n            }\n          }\n        });\n      }\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({include_docs: true, attachments: true});\n      }).then(function (res) {\n        var attachments = res.rows.map(function (row) {\n          var doc = row.doc;\n          delete doc._attachments['foo.png'].revpos;\n          return doc._attachments;\n        });\n        attachments.should.deep.equal(icons.map(function (icon, i) {\n          return {\n            \"foo.png\": {\n              \"content_type\": \"image/png\",\n              \"data\": icon,\n              \"digest\": iconDigests[i]\n            }\n          };\n        }));\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        var attachments = res.rows.map(function (row) {\n          var doc = row.doc;\n          delete doc._attachments['foo.png'].revpos;\n          return doc._attachments['foo.png'];\n        });\n        attachments.should.deep.equal(icons.map(function (icon, i) {\n          return {\n            \"content_type\": \"image/png\",\n            stub: true,\n            \"digest\": iconDigests[i],\n            length: iconLengths[i]\n          };\n        }));\n      });\n    });\n\n    it('#2771 allDocs() 4, mix of atts and no atts', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        var doc = {\n          _id: i.toString()\n        };\n        if (i % 2 === 1) {\n          doc._attachments = {\n            'foo.png': {\n              data: icons[i],\n              content_type: 'image/png'\n            }\n          };\n        }\n        docs.push(doc);\n      }\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({include_docs: true, attachments: true});\n      }).then(function (res) {\n        var attachments = res.rows.map(function (row, i) {\n          var doc = row.doc;\n          if (i % 2 === 1) {\n            delete doc._attachments['foo.png'].revpos;\n            return doc._attachments;\n          }\n          return null;\n        });\n        attachments.should.deep.equal(icons.map(function (icon, i) {\n          if (i % 2 === 0) {\n            return null;\n          }\n          return {\n            \"foo.png\": {\n              \"content_type\": \"image/png\",\n              \"data\": icon,\n              \"digest\": iconDigests[i]\n            }\n          };\n        }));\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        var attachments = res.rows.map(function (row, i) {\n          var doc = row.doc;\n          if (i % 2 === 1) {\n            delete doc._attachments['foo.png'].revpos;\n            return doc._attachments['foo.png'];\n          }\n          return null;\n        });\n        attachments.should.deep.equal(icons.map(function (icon, i) {\n          if (i % 2 === 0) {\n            return null;\n          }\n          return {\n            \"content_type\": \"image/png\",\n            stub: true,\n            \"digest\": iconDigests[i],\n            length: iconLengths[i]\n          };\n        }));\n      });\n    });\n\n    it('#2771 allDocs() 5, no atts', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        var doc = {\n          _id: i.toString()\n        };\n        docs.push(doc);\n      }\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({include_docs: true, attachments: true});\n      }).then(function (res) {\n        res.rows.should.have.length(5);\n        res.rows.forEach(function (row) {\n          should.exist(row.doc);\n          should.not.exist(row.doc._attachments);\n        });\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        res.rows.should.have.length(5);\n        res.rows.forEach(function (row) {\n          should.exist(row.doc);\n          should.not.exist(row.doc._attachments);\n        });\n      });\n    });\n\n    it('#2771 allDocs() 6, no docs', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        var doc = {\n          _id: i.toString()\n        };\n        docs.push(doc);\n      }\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({\n          include_docs: true,\n          attachments: true,\n          keys: []\n        });\n      }).then(function (res) {\n        res.rows.should.have.length(0);\n        return db.allDocs({include_docs: true, keys: []});\n      }).then(function (res) {\n        res.rows.should.have.length(0);\n      });\n    });\n\n    it('#2771 allDocs() 7, revisions and deletions', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = {\n        _id: 'doc',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'Zm9vYmFy' // 'foobar'\n          }\n        }\n      };\n      var rev;\n      return db.put(doc).then(function () {\n        return db.allDocs({keys: ['doc'], attachments: true, include_docs: true});\n      }).then(function (res) {\n        var doc = res.rows[0].doc;\n        doc._attachments['foo.txt'].data.should.equal('Zm9vYmFy');\n        rev = doc._rev;\n        doc._attachments['foo.txt'] = {\n          content_type: 'text/plain',\n          data: 'dG90bw=='\n        }; // 'toto'\n        return db.put(doc);\n      }).then(function () {\n        return db.allDocs({keys: ['doc'], attachments: true, include_docs: true});\n      }).then(function (res) {\n        var doc = res.rows[0].doc;\n        doc._attachments['foo.txt'].data.should.equal('dG90bw==');\n        return db.remove(doc);\n      }).then(function (res) {\n        rev = res.rev;\n        return db.allDocs({keys: ['doc'], attachments: true, include_docs: true});\n      }).then(function (res) {\n        // technically CouchDB sets this to null, but we won't adhere strictly to that\n        should.not.exist(res.rows[0].doc);\n        delete res.rows[0].doc;\n        res.rows.should.deep.equal([\n          {\n            id: \"doc\",\n            key: \"doc\",\n            value: {\n              rev: rev,\n              deleted: true\n            }\n          }\n        ]);\n      });\n    });\n\n    it('#2771 allDocs() 8, empty attachment', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put(binAttDoc2).then(function () {\n        return db.allDocs({key: binAttDoc2._id, include_docs: true});\n      }).then(function (res) {\n        var doc = res.rows[0].doc;\n        delete doc._attachments[\"foo.txt\"].revpos;\n\n        // because of libicu vs. ascii\n        var digest = doc._attachments[\"foo.txt\"].digest;\n        var validDigests = [\n          'md5-1B2M2Y8AsgTpgAmY7PhCfg==',\n          'md5-cCkGbCesb17xjWYNV0GXmg==',\n          'md5-3gIs+o2eJiHrXZqziQZqBA=='\n        ];\n        validDigests.indexOf(digest).should.not.equal(-1,\n          'expected ' + digest  + ' to be in: ' +\n          JSON.stringify(validDigests));\n        delete doc._attachments[\"foo.txt\"].digest;\n        delete doc._attachments[\"foo.txt\"].digest;\n        doc._attachments.should.deep.equal({\n          \"foo.txt\": {\n            \"content_type\": \"text/plain\",\n            \"stub\": true,\n            length: 0\n          }\n        });\n        return db.allDocs({\n          key: binAttDoc2._id,\n          include_docs: true,\n          attachments: true\n        });\n      }).then(function (res) {\n        var doc = res.rows[0].doc;\n        doc._attachments['foo.txt'].content_type.should.equal(\n          binAttDoc2._attachments['foo.txt'].content_type);\n        doc._attachments['foo.txt'].data.should.equal(\n          binAttDoc2._attachments['foo.txt'].data);\n      });\n    });\n\n    it('No length for non-stubs', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put(binAttDoc).then(function () {\n        return db.get(binAttDoc._id, {attachments: true});\n      }).then(function (doc) {\n        should.not.exist(doc._attachments['foo.txt'].stub);\n        should.not.exist(doc._attachments['foo.txt'].length);\n      });\n    });\n\n    it('Test some attachments', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put(binAttDoc, function (err) {\n        should.not.exist(err, 'saved doc with attachment');\n        db.get('bin_doc', function (err, doc) {\n          should.exist(doc._attachments, 'doc has attachments field');\n          should.exist(doc._attachments['foo.txt'], 'doc has attachment');\n          doc._attachments['foo.txt'].content_type.should.equal('text/plain');\n          db.getAttachment('bin_doc', 'foo.txt', function (err, res) {\n            should.not.exist(err, 'fetched attachment');\n            res.type.should.equal('text/plain');\n            testUtils.readBlob(res, function (data) {\n              data.should.equal('This is a base64 encoded text');\n              db.put(binAttDoc2, function (err, rev) {\n                db.getAttachment('bin_doc2', 'foo.txt',\n                  function (err, res) {\n                  should.not.exist(err);\n                  res.type.should.equal('text/plain');\n                  testUtils.readBlob(res, function (data) {\n                    data.should.equal('', 'Correct data returned');\n                    moreTests(rev.rev);\n                  });\n                });\n              });\n            });\n          });\n        });\n      });\n\n      function moreTests(rev) {\n        var blob = testUtils.makeBlob('This is no base64 encoded text');\n        db.putAttachment('bin_doc2', 'foo2.txt', rev, blob, 'text/plain',\n                         function (err, info) {\n          info.ok.should.equal(true);\n          db.getAttachment('bin_doc2', 'foo2.txt', function (err, res) {\n            should.not.exist(err);\n            res.type.should.equal('text/plain');\n            testUtils.readBlob(res, function (data) {\n              should.exist(data);\n              db.get('bin_doc2', { attachments: true },\n                function (err, res) {\n                should.not.exist(err);\n                should.exist(res._attachments, 'Result has attachments field');\n                should.not\n                  .exist(res._attachments['foo2.txt'].stub, 'stub is false');\n                res._attachments['foo2.txt'].data.should\n                  .equal('VGhpcyBpcyBubyBiYXNlNjQgZW5jb2RlZCB0ZXh0');\n                res._attachments['foo2.txt'].content_type.should\n                  .equal('text/plain');\n                res._attachments['foo.txt'].data.should.equal('');\n                done();\n              });\n            });\n          });\n        });\n      }\n    });\n\n    it('Test getAttachment', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put(binAttDoc, function (err) {\n        should.not.exist(err);\n        db.getAttachment('bin_doc', 'foo.txt', function (err, res) {\n          if (err) {\n            return done(err);\n          }\n          res.type.should.equal('text/plain');\n          testUtils.readBlob(res, function (data) {\n            data.should.equal('This is a base64 encoded text', 'correct data');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test getAttachment with stubs', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put({\n        _id: 'doc',\n        _attachments: {\n          '1': {\n            content_type: 'application/octet-stream',\n            data: testUtils.btoa('1\\u00002\\u00013\\u0002')\n          }\n        }\n      }).then(function () {\n        return db.get('doc');\n      }).then(function (doc) {\n        doc._attachments['2'] = {\n          content_type: 'application/octet-stream',\n          data: testUtils.btoa('3\\u00002\\u00011\\u0002')\n        };\n        return db.put(doc);\n      }).then(function () {\n        return db.getAttachment('doc', '1');\n      }).then(function (att) {\n        att.type.should.equal('application/octet-stream');\n        return testUtils.readBlobPromise(att);\n      }).then(function (bin) {\n        bin.should.equal('1\\u00002\\u00013\\u0002');\n        return db.getAttachment('doc', '2');\n      }).then(function (att) {\n        att.type.should.equal('application/octet-stream');\n        return testUtils.readBlobPromise(att);\n      }).then(function (bin) {\n        bin.should.equal('3\\u00002\\u00011\\u0002');\n      });\n    });\n\n    it('Test get() with binary:true and stubs', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put({\n        _id: 'doc',\n        _attachments: {\n          '1': {\n            content_type: 'application/octet-stream',\n            data: testUtils.btoa('1\\u00002\\u00013\\u0002')\n          }\n        }\n      }).then(function () {\n        return db.get('doc');\n      }).then(function (doc) {\n        doc._attachments['2'] = {\n          content_type: 'application/octet-stream',\n          data: testUtils.btoa('3\\u00002\\u00011\\u0002')\n        };\n        return db.put(doc);\n      }).then(function () {\n        return db.get('doc', {attachments: true, binary: true});\n      }).then(function (doc) {\n        var att1 = doc._attachments['1'].data;\n        var att2 = doc._attachments['2'].data;\n        att1.type.should.equal('application/octet-stream');\n        att2.type.should.equal('application/octet-stream');\n        return testUtils.readBlobPromise(att1).then(function (bin) {\n          bin.should.equal('1\\u00002\\u00013\\u0002');\n          return testUtils.readBlobPromise(att2);\n        }).then(function (bin) {\n          bin.should.equal('3\\u00002\\u00011\\u0002');\n        });\n      });\n    });\n\n    it('Test attachments in allDocs/changes', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        { _id: 'doc0' },\n        {\n          _id: 'doc1',\n          _attachments: {\n            'att0': {\n              data: 'YXR0YWNobWVudDA=',\n              content_type: 'text/plain'\n            }\n          }\n        },\n        {\n          _id: 'doc2',\n          _attachments: {\n            'att0': {\n              data: 'YXR0YWNobWVudDA=',\n              content_type: 'text/plain'\n            },\n            'att1': {\n              data: 'YXR0YWNobWVudDE=',\n              content_type: 'text/plain'\n            }\n          }\n        },\n        {\n          _id: 'doc3',\n          _attachments: {\n            'att0': {\n              data: 'YXR0YWNobWVudDA=',\n              content_type: 'text/plain'\n            }\n          }\n        }\n      ];\n      function sort(a, b) {\n        return a.id.localeCompare(b.id);\n      }\n      db.bulkDocs({ docs: docs }, function () {\n        db.allDocs({ include_docs: true }, function (err, res) {\n          for (var i = 0; i < docs.length; i++) {\n            var attachmentsNb = typeof docs[i]._attachments !== 'undefined' ?\n              Object.keys(docs[i]._attachments).length : 0;\n            for (var j = 0; j < attachmentsNb; j++) {\n              res.rows[i].doc._attachments['att' + j].stub.should\n                .equal(true, '(allDocs) doc' + i + ' contains att' + j +\n                       ' stub');\n            }\n          }\n          should.not.exist(res.rows[0].doc._attachments,\n                           '(allDocs) doc0 contains no attachments');\n          db.changes({\n            include_docs: true\n          }).on('change', function (change) {\n            var i = +change.id.substr(3);\n            if (i === 0) {\n              should.not.exist(res.rows[0].doc._attachments,\n                               '(onChange) doc0 contains no attachments');\n            } else {\n              var attachmentsNb =\n                typeof docs[i]._attachments !== 'undefined' ?\n                Object.keys(docs[i]._attachments).length : 0;\n              for (var j = 0; j < attachmentsNb; j++) {\n                res.rows[i].doc._attachments['att' + j].stub.should\n                  .equal(true, '(onChange) doc' + i + ' contains att' + j +\n                         ' stub');\n              }\n            }\n          }).on('complete', function (res) {\n            var attachmentsNb = 0;\n            res.results.sort(sort);\n            for (var i = 0; i < 3; i++) {\n              attachmentsNb = typeof docs[i]._attachments !== 'undefined' ?\n                Object.keys(docs[i]._attachments).length : 0;\n              for (var j = 0; j < attachmentsNb; j++) {\n                res.results[i].doc._attachments['att' + j].stub.should\n                  .equal(true, '(complete) doc' + i + ' contains att' + j +\n                         ' stub');\n              }\n            }\n            should.not.exist(res.results[0].doc._attachments,\n                             '(complete) doc0 contains no attachments');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test putAttachment with base64 plaintext', function () {\n      var db = new PouchDB(dbs.name);\n      return db.putAttachment('doc', 'att', null, 'Zm9v', 'text/plain').then(function () {\n        return db.getAttachment('doc', 'att');\n      }).then(function (blob) {\n        return new testUtils.Promise(function (resolve) {\n          testUtils.base64Blob(blob, function (data) {\n            data.should.equal('Zm9v', 'should get the correct base64 back');\n            resolve();\n          });\n        });\n      });\n    });\n\n    it('Test putAttachment with invalid base64', function () {\n      var db = new PouchDB(dbs.name);\n      return db.putAttachment('doc', 'att', null, '\\u65e5\\u672c\\u8a9e', 'text/plain')\n        .should.be.rejected.then(function (err) {\n          err.should.have.property(\"message\", \"Some query argument is invalid\");\n        });\n    });\n\n    it('Test getAttachment with empty text', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put(binAttDoc2, function (err) {\n        if (err) { return done(err); }\n        db.getAttachment('bin_doc2', 'foo.txt', function (err, res) {\n          if (err) { return done(err); }\n          (typeof res).should.equal('object', 'res is object, ' +\n            'not a string');\n          testUtils.base64Blob(res, function (data) {\n            data.should.equal('', 'correct data');\n            db.get(binAttDoc2._id, function (err, doc) {\n              var att = doc._attachments['foo.txt'];\n              att.stub.should.equal(true);\n              // both ascii and libicu\n              var validDigests = [\n                'md5-1B2M2Y8AsgTpgAmY7PhCfg==',\n                'md5-cCkGbCesb17xjWYNV0GXmg==',\n                'md5-3gIs+o2eJiHrXZqziQZqBA=='\n              ];\n              validDigests.indexOf(att.digest).should.be.above(-1);\n              att.content_type.should.equal('text/plain');\n              att.length.should.equal(0);\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Test getAttachment with normal text', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put(binAttDoc, function (err) {\n        if (err) { return done(err); }\n        db.getAttachment('bin_doc', 'foo.txt', function (err, res) {\n          if (err) { return done(err); }\n          (typeof res).should.equal('object', 'res is object, ' +\n            'not a string');\n          testUtils.base64Blob(res, function (data) {\n            data.should.equal(\n              binAttDoc._attachments['foo.txt'].data, 'correct data');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test getAttachment with PNG', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put(pngAttDoc, function (err) {\n        if (err) { return done(err); }\n        db.getAttachment('png_doc', 'foo.png', function (err, res) {\n          if (err) { return done(err); }\n          (typeof res).should.equal('object', 'res is object, ' +\n            'not a string');\n          testUtils.base64Blob(res, function (data) {\n            data.should\n              .equal(pngAttDoc._attachments['foo.png'].data, 'correct data');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test getAttachment with PNG using bulkDocs', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs([pngAttDoc], function (err) {\n        if (err) { return done(err); }\n        db.getAttachment('png_doc', 'foo.png', function (err, res) {\n          if (err) { return done(err); }\n          testUtils.base64Blob(res, function (data) {\n            data.should\n              .equal(pngAttDoc._attachments['foo.png'].data, 'correct data');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test getAttachment with PNG using post', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post(pngAttDoc, function (err) {\n        if (err) { return done(err); }\n        db.getAttachment('png_doc', 'foo.png', function (err, res) {\n          if (err) { return done(err); }\n          testUtils.base64Blob(res, function (data) {\n            data.should\n              .equal(pngAttDoc._attachments['foo.png'].data, 'correct data');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test postAttachment with PNG then bulkDocs', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'foo' }, function () {\n        db.get('foo', function (err, doc) {\n          var data = pngAttDoc._attachments['foo.png'].data;\n          var blob = testUtils.binaryStringToBlob(testUtils.atob(data),\n            'image/png');\n          db.putAttachment('foo', 'foo.png', doc._rev, blob, 'image/png',\n              function (err) {\n            should.not.exist(err, 'attachment inserted');\n            db.bulkDocs([{}], function (err) {\n              should.not.exist(err, 'doc inserted');\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('proper stub behavior', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put(binAttDoc).then(function () {\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        return db.putAttachment(doc._id, 'foo.json', doc._rev,\n          jsonDoc._attachments['foo.json'].data,\n          jsonDoc._attachments['foo.json'].content_type);\n      }).then(function () {\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        Object.keys(doc._attachments).forEach(function (filename) {\n          var att = doc._attachments[filename];\n          should.not.exist(att.data);\n          att.stub.should.equal(true);\n          should.exist(att.digest);\n          should.exist(att.content_type);\n        });\n        return db.get(binAttDoc._id, {attachments: true});\n      }).then(function (doc) {\n        Object.keys(doc._attachments).forEach(function (filename) {\n          var att = doc._attachments[filename];\n          should.exist(att.data);\n          should.not.exist(att.stub);\n          should.exist(att.digest);\n          should.exist(att.content_type);\n        });\n      });\n    });\n\n    it('Testing with invalid docs', function (done) {\n      var db = new PouchDB(dbs.name);\n      var invalidDoc = {\n        '_id': '_invalid',\n        foo: 'bar'\n      };\n      db.bulkDocs({\n        docs: [\n          invalidDoc,\n          binAttDoc\n        ]\n      }, function (err) {\n        should.exist(err, 'bad request');\n        done();\n      });\n    });\n\n    it('Test create attachment and doc in one go', function (done) {\n      var db = new PouchDB(dbs.name);\n      var blob = testUtils.makeBlob('Mytext');\n      db.putAttachment('anotherdoc', 'mytext', blob, 'text/plain',\n        function (err, res) {\n        should.exist(res.ok);\n        done();\n      });\n    });\n\n    it('Test create attachment and doc in one go without callback',\n      function (done) {\n      var db = new PouchDB(dbs.name);\n      var changes = db.changes({\n        live: true\n      }).on('complete', function (result) {\n        result.status.should.equal('cancelled');\n        done();\n      }).on('change', function (change) {\n        if (change.id === 'anotherdoc2') {\n          change.id.should.equal('anotherdoc2', 'Doc has been created');\n          db.get(change.id, { attachments: true }, function (err, doc) {\n            doc._attachments.should.be\n              .an('object', 'doc has attachments object');\n            should.exist(doc._attachments.mytext,\n                         'doc has attachments attachment');\n            doc._attachments.mytext.data.should\n              .equal('TXl0ZXh0', 'doc has attachments attachment');\n            changes.cancel();\n          });\n        }\n      });\n        var blob = testUtils.makeBlob('Mytext');\n      db.putAttachment('anotherdoc2', 'mytext', blob, 'text/plain');\n    });\n\n    it('Test create attachment without callback', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'anotherdoc3' }, function (err, resp) {\n        should.not.exist(err, 'doc was saved');\n        db.info(function (err, info) {\n\n          var changes = db.changes({\n            since: info.update_seq,\n            live: true,\n            include_docs: true\n          }).on('complete', function (result) {\n            result.status.should.equal('cancelled');\n            done();\n          }).on('change', function (change) {\n            if (change.id === 'anotherdoc3') {\n              db.get(change.id, { attachments: true }, function (err, doc) {\n                doc._attachments.should.be.an('object',\n                                            'doc has attachments object');\n                should.exist(doc._attachments.mytext);\n                doc._attachments.mytext.data.should.equal('TXl0ZXh0');\n                changes.cancel();\n              });\n            }\n          });\n          var blob = testUtils.makeBlob('Mytext');\n          db.putAttachment('anotherdoc3', 'mytext', resp.rev, blob,\n            'text/plain');\n        });\n      });\n    });\n\n    it('Test put attachment on a doc without attachments', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'mydoc' }, function (err, resp) {\n        var blob = testUtils.makeBlob('Mytext');\n        db.putAttachment('mydoc', 'mytext', resp.rev, blob, 'text/plain',\n                         function (err, res) {\n          should.exist(res.ok);\n          done();\n        });\n      });\n    });\n\n    it('Test put attachment with unencoded name', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'mydoc' }, function (err, resp) {\n        var blob = testUtils.makeBlob('Mytext');\n        db.putAttachment('mydoc', 'my/text?@', resp.rev, blob, 'text/plain',\n                         function (err, res) {\n          should.exist(res.ok);\n\n          db.get('mydoc', { attachments: true }, function (err, res) {\n            should.exist(res._attachments['my/text?@']);\n\n            db.getAttachment('mydoc', 'my/text?@', function (err, attachment) {\n              should.not.exist(err);\n              attachment.type.should.equal('text/plain');\n              testUtils.readBlob(attachment, function (data) {\n                data.should.eql('Mytext');\n\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('3963 length property on stubs', function () {\n      var db = new PouchDB(dbs.name);\n\n      function checkAttachments() {\n        return db.get('bin_doc').then(function (doc) {\n          doc._attachments['foo.txt'].stub.should.equal(true);\n          doc._attachments['foo.txt'].length.should.equal(29);\n          return db.changes({include_docs: true});\n        }).then(function (res) {\n          var doc = res.results[0].doc;\n          doc._attachments['foo.txt'].stub.should.equal(true);\n          doc._attachments['foo.txt'].length.should.equal(29);\n          return db.allDocs({include_docs: true});\n        }).then(function (res) {\n          var doc = res.rows[0].doc;\n          doc._attachments['foo.txt'].stub.should.equal(true);\n          doc._attachments['foo.txt'].length.should.equal(29);\n          return new testUtils.Promise(function (resolve, reject) {\n            var change;\n            var changes = db.changes({include_docs: true, live: true})\n              .on('change', function (x) {\n                change = x;\n                changes.cancel();\n              })\n              .on('error', reject)\n              .on('complete', function () {\n                resolve(change);\n              });\n          });\n        }).then(function (change) {\n          var doc = change.doc;\n          doc._attachments['foo.txt'].stub.should.equal(true);\n          doc._attachments['foo.txt'].length.should.equal(29);\n        });\n      }\n\n      return db.put(binAttDoc).then(checkAttachments).then(function () {\n        return db.get('bin_doc');\n      }).then(function (doc) {\n        return db.put(doc);\n      }).then(checkAttachments);\n    });\n\n    it('Testing with invalid rev', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = { _id: 'adoc' };\n      db.put(doc, function (err, resp) {\n        should.not.exist(err, 'Doc has been saved');\n        doc._rev = resp.rev;\n        doc.foo = 'bar';\n        db.put(doc, function (err) {\n          should.not.exist(err, 'Doc has been updated');\n          var blob = testUtils.makeBlob('bar');\n          db.putAttachment('adoc', 'foo.txt', doc._rev, blob, 'text/plain',\n                           function (err) {\n            should.exist(err, 'Attachment has not been saved');\n            err.name.should.equal('conflict', 'error is a conflict');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test put another attachment on a doc with attachments',\n      function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'mydoc' }, function (err, res1) {\n        var blob = testUtils.makeBlob('Mytext');\n        db.putAttachment('mydoc', 'mytext', res1.rev, blob, 'text/plain',\n                         function (err, res2) {\n          db.putAttachment('mydoc', 'mytext2', res2.rev, blob, 'text/plain',\n                           function (err, res3) {\n            should.exist(res3.ok);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test get with attachments: true if empty attachments', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({\n        _id: 'foo',\n        _attachments: {}\n      }, function () {\n        db.get('foo', { attachments: true }, function (err, res) {\n          res._id.should.equal('foo');\n          done();\n        });\n      });\n    });\n\n    it('Test delete attachment from a doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({\n        _id: 'mydoc',\n        _attachments: {\n          'mytext1': {\n            content_type: 'text/plain',\n            data: 'TXl0ZXh0MQ=='\n          },\n          'mytext2': {\n            content_type: 'text/plain',\n            data: 'TXl0ZXh0Mg=='\n          }\n        }\n      }, function (err, res) {\n        var rev = res.rev;\n        db.get('mydoc', { attachments: true }, function (err, res) {\n          res._attachments.should.include.keys('mytext1', 'mytext2');\n          db.removeAttachment('mydoc', 'mytext1', 0, function (err) {\n            should.exist(err, 'removal should fail due to broken rev');\n            db.removeAttachment('mydoc', 'mytext1', rev, function () {\n              db.get('mydoc', { attachments: true }, function (err, res) {\n                res._attachments.should.not.include.keys('mytext1');\n                res._attachments.should.include.keys('mytext2');\n                db.removeAttachment('mydoc', 'mytext2', res._rev,\n                  function (err, res) {\n                  should.not.exist(res._attachments);\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Test a document with a json string attachment', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put(jsonDoc, function (err, results) {\n        should.not.exist(err, 'saved doc with attachment');\n        db.get(results.id, function (err, doc) {\n          should.not.exist(err, 'fetched doc');\n          should.exist(doc._attachments, 'doc has attachments field');\n          doc._attachments.should.include.keys('foo.json');\n          doc._attachments['foo.json'].content_type.should\n            .equal('application/json', 'doc has correct content type');\n          db.getAttachment(results.id, 'foo.json', function (err, attachment) {\n            should.not.exist(err);\n            attachment.type.should.equal('application/json');\n            testUtils.readBlob(attachment, function () {\n              jsonDoc._attachments['foo.json'].data.should\n                .equal('eyJIZWxsbyI6IndvcmxkIn0=', 'correct data');\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Test remove doc with attachment', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'mydoc' }, function (err, resp) {\n        var blob = testUtils.makeBlob('Mytext');\n        db.putAttachment('mydoc', 'mytext', resp.rev, blob, 'text/plain',\n                         function (err, res) {\n          db.get('mydoc', { attachments: false }, function (err, doc) {\n            db.remove(doc, function () {\n              should.exist(res.ok);\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Try to insert a doc with unencoded attachment', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = {\n        _id: 'foo',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'this should have been encoded!'\n          }\n        }\n      };\n      db.put(doc, function (err) {\n        should.exist(err);\n        done();\n      });\n    });\n\n    it('Try to get attachment of unexistent doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.getAttachment('unexistent', 'attachment', function (err) {\n        should.exist(err, 'Correctly returned error');\n        done();\n      });\n    });\n\n    it('Test synchronous getAttachment', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.getAttachment('unexistent', 'attachment', function (err) {\n        should.exist(err, 'Correctly returned error');\n        done();\n      });\n    });\n\n    it('Test synchronous putAttachment with text data', function (done) {\n      var db = new PouchDB(dbs.name);\n      var blob = testUtils.makeBlob('foobaz', 'text/plain');\n      db.putAttachment('a', 'foo2.txt', '', blob, 'text/plain', function (err) {\n        should.not.exist(err, 'Correctly wrote attachment');\n        db.get('a', { attachments: true }, function (err, doc) {\n          should.not.exist(err, 'Correctly got attachment');\n          doc._attachments['foo2.txt'].data.should.equal('Zm9vYmF6');\n          doc._attachments['foo2.txt'].content_type.should.equal('text/plain');\n          done();\n        });\n      });\n    });\n\n    it('Test synchronous putAttachment with no text data', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.putAttachment('a', 'foo2.txt', '', '', 'text/plain', function (err) {\n        should.not.exist(err, 'Correctly wrote attachment');\n        db.get('a', { attachments: true }, function (err, doc) {\n          should.not.exist(err, 'Correctly got attachment');\n          doc._attachments['foo2.txt'].data.should.equal('');\n          // firefox 3 appends charset=utf8\n          // see http://forums.mozillazine.org/viewtopic.php?p=6318215#p6318215\n          doc._attachments['foo2.txt'].content_type.indexOf('text/plain')\n            .should.equal(0, 'expected content-type to start with text/plain');\n          done();\n        });\n      });\n    });\n\n    it('Test put with partial stubs', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {\n        _id: 'doc',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'Zm9v'\n          },\n          'bar.txt': {\n            content_type: 'text/plain',\n            data: 'Zm9v'\n          }\n        }\n      };\n      return db.put(doc).then(function () {\n        return db.get(doc._id);\n      }).then(function (doc) {\n        doc._attachments['baz.txt'] = {\n          content_type: 'text/plain',\n          data: 'Zm9v'\n        };\n        // at this point, foo and bar are stubs, but baz is not\n        return db.put(doc);\n      }).then(function () {\n        return db.get(doc._id, {attachments: true});\n      }).then(function (doc) {\n        doc._rev.should.not.equal('2-x');\n        Object.keys(doc._attachments).should.have.length(3);\n        Object.keys(doc._attachments).forEach(function (key) {\n          var att = doc._attachments[key];\n          att.data.should.equal('Zm9v');\n          att.content_type.should.equal('text/plain');\n        });\n      });\n    });\n\n    it('Test put with attachments and new_edits=false', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {\n        _id: 'doc',\n        _rev: '2-x',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'Zm9v'\n          },\n          'bar.txt': {\n            content_type: 'text/plain',\n            data: 'Zm9v'\n          },\n          'baz.txt': {\n            content_type: 'text/plain',\n            data: 'Zm9v'\n          }\n        },\n        _revisions: {\n          'start': 2,\n          'ids': ['x', 'a']\n        }\n      };\n      return db.bulkDocs([doc], {new_edits: false}).then(function () {\n        return db.get(doc._id);\n      }).then(function () {\n          // at this point, foo and bar are stubs, but baz is not\n          return db.bulkDocs([doc], {new_edits: false});\n        }).then(function () {\n          return db.get(doc._id, {attachments: true});\n        }).then(function (doc) {\n          doc._rev.should.equal('2-x');\n          Object.keys(doc._attachments).should.have.length(3);\n          Object.keys(doc._attachments).forEach(function (key) {\n            var att = doc._attachments[key];\n            att.data.should.equal('Zm9v');\n            att.content_type.should.equal('text/plain');\n          });\n        });\n    });\n\n    it('Test getAttachment with specific rev', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n\n      var doc = {\n        _id: 'a'\n      };\n      var rev1;\n      var rev2;\n      var rev3;\n      return db.put(doc).then(function (res) {\n        doc._rev = rev1 = res.rev;\n        doc._attachments = {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'Zm9v'\n          }\n        };\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = rev2 = res.rev;\n\n        delete doc._attachments;\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = rev3 = res.rev;\n\n        return db.getAttachment('a', 'foo.txt', {rev: rev2});\n      }).then(function (blob) {\n        should.exist(blob);\n\n        return testUtils.Promise.all([\n          db.getAttachment('a', 'foo.txt', {rev: rev1}),\n          db.getAttachment('a', 'foo.txt', {rev: '3-fake'}),\n          db.getAttachment('a', 'foo.txt'),\n          db.getAttachment('a', 'foo.txt', {}),\n          db.getAttachment('a', 'foo.txt', {rev: rev3})\n        ].map(function (promise) {\n          return promise.then(function () {\n            throw new Error('expected an error');\n          }, function (err) {\n            should.exist(err);\n            err.status.should.equal(404);\n          });\n        }));\n      });\n    });\n\n    it('Test getAttachment with diff revs and content', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n\n      var doc = {\n        _id: 'a',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'Zm9v'\n          }\n        }\n      };\n      var rev1;\n      var rev2;\n      var rev3;\n      return db.put(doc).then(function (res) {\n        doc._rev = rev1 = res.rev;\n        doc._attachments = {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'YmFy'\n          }\n        };\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = rev2 = res.rev;\n        doc._attachments = {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'YmF6'\n          }\n        };\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = rev3 = res.rev;\n\n        var testCases = [\n          [db.getAttachment('a', 'foo.txt'), 'baz'],\n          [db.getAttachment('a', 'foo.txt', {rev: rev3}), 'baz'],\n          [db.getAttachment('a', 'foo.txt', {rev: rev2}), 'bar'],\n          [db.getAttachment('a', 'foo.txt', {rev: rev1}), 'foo']\n        ];\n\n        return testUtils.Promise.all(testCases.map(function (testCase) {\n          var promise = testCase[0];\n          var expected = testCase[1];\n          return promise.then(function (blob) {\n            blob.type.should.equal('text/plain');\n            return testUtils.readBlobPromise(blob);\n          }).then(function (bin) {\n            bin.should.equal(expected, 'didn\\'t get blob we expected for rev');\n          });\n        }));\n      });\n    });\n\n    it('Test stubs', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.putAttachment('a', 'foo2.txt', '', '', 'text/plain', function () {\n        db.allDocs({ include_docs: true }, function (err, docs) {\n          should.not.exist(docs.rows[0].stub, 'no stub');\n          done();\n        });\n      });\n    });\n\n    it('Try to get unexistent attachment of some doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'foo' }, function (err) {\n        should.not.exist(err, 'doc inserted');\n        db.getAttachment('foo', 'unexistentAttachment', function (err) {\n          should.exist(err, 'Correctly returned error');\n          done();\n        });\n      });\n    });\n\n    it('putAttachment and getAttachment with plaintext', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'foo' }, function () {\n        db.get('foo', function (err, doc) {\n          var data = binAttDoc._attachments['foo.txt'].data;\n          var blob = testUtils.binaryStringToBlob(testUtils.atob(data),\n            'text/plain');\n          db.putAttachment('foo', 'foo.txt', doc._rev, blob, 'text/plain',\n                           function (err) {\n            should.not.exist(err, 'attachment inserted');\n            db.getAttachment('foo', 'foo.txt', function (err, blob) {\n              should.not.exist(err, 'attachment gotten');\n              blob.type.should.equal('text/plain');\n              testUtils.readBlob(blob, function (returnedData) {\n                testUtils.btoa(returnedData).should.equal(data);\n                db.get('foo', function (err, doc) {\n                  should.not.exist(err, 'err on get');\n                  delete doc._attachments[\"foo.txt\"].revpos;\n\n                  // couchdb encodes plaintext strings differently from us\n                  // because of libicu vs. ascii. that's okay\n                  var digest = doc._attachments[\"foo.txt\"].digest;\n                  var validDigests = [\n                    \"md5-qUUYqS41RhwF0TrCsTAxFg==\",\n                    \"md5-aEI7pOYCRBLTRQvvqYrrJQ==\",\n                    \"md5-jeLnIuUvK7d+6gya044lVA==\"\n                  ];\n                  validDigests.indexOf(digest).should.not.equal(-1,\n                    'expected ' + digest  + ' to be in: ' +\n                      JSON.stringify(validDigests));\n                  delete doc._attachments[\"foo.txt\"].digest;\n                  doc._attachments.should.deep.equal({\n                    \"foo.txt\": {\n                      \"content_type\": \"text/plain\",\n                      \"stub\": true,\n                      length: 29\n                    }\n                  });\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('putAttachment and getAttachment with png data', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'foo' }, function () {\n        db.get('foo', function (err, doc) {\n          var data = pngAttDoc._attachments['foo.png'].data;\n          var blob = testUtils.binaryStringToBlob(testUtils.atob(data),\n            'image/png');\n          db.putAttachment('foo', 'foo.png', doc._rev, blob, 'image/png',\n                           function (err) {\n            should.not.exist(err, 'attachment inserted');\n            db.getAttachment('foo', 'foo.png', function (err, blob) {\n              should.not.exist(err, 'attachment gotten');\n              blob.type.should.equal('image/png');\n              testUtils.readBlob(blob, function (returnedData) {\n                testUtils.btoa(returnedData).should.equal(data);\n                db.get('foo', function (err, doc) {\n                  should.not.exist(err, 'err on get');\n                  delete doc._attachments[\"foo.png\"].revpos;\n                  doc._attachments.should.deep.equal({\n                    \"foo.png\": {\n                      \"content_type\": \"image/png\",\n                      \"digest\": \"md5-c6eA+rofKUsstTNQBKUc8A==\",\n                      \"stub\": true,\n                      length: 229\n                    }\n                  });\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('putAttachment in new doc with base64', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n\n      return db.putAttachment('foo', 'att', 'Zm9v', 'text/plain').then(function () {\n        return db.get('foo', {attachments: true});\n      }).then(function (doc) {\n        doc._attachments['att'].content_type.should.match(/^text\\/plain/);\n        doc._attachments['att'].data.should.equal('Zm9v');\n      });\n    });\n\n    it('#2818 - save same attachment in different revs', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n\n      return db.put({_id: 'foo'}).then(function (res) {\n        return db.putAttachment('foo', 'att', res.rev, 'Zm9v', 'text/plain');\n      }).then(function () {\n        return db.get('foo', {attachments: true});\n      }).then(function (doc) {\n        doc._attachments['att'].content_type.should.match(/^text\\/plain/);\n        should.exist(doc._attachments['att'].data);\n        return db.get('foo');\n      }).then(function (doc) {\n        return db.put(doc);\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return db.get('foo', {attachments: true});\n      }).then(function (doc) {\n        doc._attachments['att'].content_type.should.match(/^text\\/plain/);\n        doc._attachments['att'].data.length.should.be.above(0, 'attachment exists');\n      });\n    });\n\n    it('#2818 - save same attachment many times in parallel', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n\n      for (var i  = 0; i < 50; i++) {\n        docs.push({\n          _id: 'doc' + i,\n          _attachments: {\n            'foo.txt': {\n              content_type: 'text/plain',\n              data: 'Zm9vYmFy' // 'foobar'\n            }\n          }\n        });\n      }\n      return db.bulkDocs(docs);\n    });\n\n    it('#2818 - revisions keep attachments (no compaction)', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = {\n        _id: 'doc',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'Zm9vYmFy' // 'foobar'\n          }\n        }\n      };\n      var rev;\n      return db.put(doc).then(function () {\n        return db.get('doc');\n      }).then(function (doc) {\n        rev = doc._rev;\n        //delete doc._attachments['foo.txt'];\n        doc._attachments['foo.txt'] = {\n          content_type: 'text/plain',\n          data: 'dG90bw=='\n        }; // 'toto'\n        return db.put(doc);\n      }).then(function () {\n        return db.get('doc', {attachments: true});\n      }).then(function (doc) {\n        doc._attachments['foo.txt'].data.should.equal('dG90bw==');\n        return db.get('doc', {rev: rev, attachments: true});\n      }).then(function (doc) {\n        doc._attachments['foo.txt'].data.should.equal('Zm9vYmFy');\n      });\n    });\n\n    it('#2818 - doesn\\'t throw 409 if same filename', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = {\n        _id: 'doc',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'Zm9vYmFy' // 'foobar'\n          }\n        }\n      };\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        doc._attachments['foo.txt'].data = 'dG90bw=='; // 'toto'\n        return db.put(doc);\n      });\n    });\n\n    if (typeof process === 'undefined' || process.browser) {\n      it('test stored URL content type of png data', function (done) {\n        var db = new PouchDB(dbs.name);\n        db.put({ _id: 'foo' }, function () {\n          db.get('foo', function (err, doc) {\n            var data = pngAttDoc._attachments['foo.png'].data;\n            var blob = testUtils.binaryStringToBlob(\n              testUtils.atob(data), 'image/png');\n            if (typeof URL === 'undefined') {\n              // phantomjs doesn't have this, give up on this test\n              return done();\n            }\n            var checkedOnce = false;\n            function checkBlobType(blob, cb) {\n              var url = URL.createObjectURL(blob);\n              testUtils.ajax({\n                url: url,\n                cache: true,\n                binary: true\n              }, function (err, res) {\n                if (err && err.status === 500) {\n                  // firefox won't let us use ajax to get the blob.\n                  // too bad, but firefox wasn't the problem anyway\n                  return done();\n                }\n                should.not.exist(err, 'ajax gotten');\n                if (!checkedOnce) {\n                  checkedOnce = true;\n                  if (res.type !== 'image/png') {\n                    // in Safari/iOS 7, blob URLs are missing\n                    // the content type even without storing them.\n                    // so just give up.\n                    return done();\n                  }\n                } else {\n                  res.type.should.equal('image/png');\n                }\n                cb();\n              });\n            }\n            checkBlobType(blob, function () {\n              db.putAttachment('foo', 'foo.png', doc._rev, blob, 'image/png',\n                function (err) {\n                should.not.exist(err, 'attachment inserted');\n                db.getAttachment('foo', 'foo.png', function (err, blob) {\n                  should.not.exist(err, 'attachment gotten');\n                  checkBlobType(blob, done);\n                });\n              });\n            });\n          });\n        });\n      });\n    }\n\n    it('#3008 test correct encoding/decoding of \\\\u0000 etc.', function () {\n\n      var base64 =\n        'iVBORw0KGgoAAAANSUhEUgAAAhgAAAJLCAYAAAClnu9J' +\n        'AAAgAElEQVR4Xuy9B7ylZXUu/p62T5nOMAPM0BVJICQi' +\n        'ogjEJN5ohEgQ';\n\n      var db = new PouchDB(dbs.name);\n      return db.putAttachment('foo', 'foo.bin', base64, 'image/png').then(function () {\n        return db.getAttachment('foo', 'foo.bin');\n      }).then(function (blob) {\n        blob.type.should.equal('image/png');\n        return testUtils.readBlobPromise(blob);\n      }).then(function (bin) {\n        testUtils.btoa(bin).should.equal(base64);\n      });\n    });\n\n\n    var isSafari = (typeof process === 'undefined' || process.browser) &&\n      /Safari/.test(window.navigator.userAgent) &&\n      !/Chrome/.test(window.navigator.userAgent);\n    if (!isSafari) {\n      // skip in safari/ios because of size limit popup\n      it('putAttachment and getAttachment with big png data', function (done) {\n\n        function getData(cb) {\n          if (typeof process !== 'undefined' && !process.browser) {\n            var bigimage = require('./deps/bigimage.js');\n            cb(null, bigimage);\n          } else { // browser\n            var script = document.createElement('script');\n            script.src = 'deps/bigimage.js';\n            document.body.appendChild(script);\n            var timeout = setInterval(function () {\n              if (window.bigimage) {\n                clearInterval(timeout);\n                cb(null, window.bigimage);\n              }\n            }, 500);\n          }\n        }\n\n        var db = new PouchDB(dbs.name);\n        db.put({ _id: 'foo' }, function () {\n          db.get('foo', function (err, doc) {\n\n            getData(function (err, data) {\n              var blob = testUtils.binaryStringToBlob(\n                  testUtils.atob(data), 'image/png');\n              db.putAttachment('foo', 'foo.png', doc._rev, blob, 'image/png',\n                  function (err) {\n                should.not.exist(err, 'attachment inserted');\n                db.getAttachment('foo', 'foo.png', function (err, blob) {\n                  should.not.exist(err, 'attachment gotten');\n                  blob.type.should.equal('image/png');\n                  testUtils.readBlob(blob, function (returnedData) {\n                    testUtils.btoa(returnedData).should.equal(data);\n                    db.get('foo', function (err, doc) {\n                      should.not.exist(err, 'err on get');\n                      delete doc._attachments[\"foo.png\"].revpos;\n                      doc._attachments.should.deep.equal({\n                        \"foo.png\": {\n                          \"content_type\": \"image/png\",\n                          \"digest\": \"md5-kqr2YcdElgDs3RkMn1Ygbw==\",\n                          \"stub\": true,\n                          length: 678010\n                        }\n                      });\n                      done();\n                    });\n                  });\n                });\n              });\n            });\n          });\n        });\n      });\n    }\n    \n    it('#2709 `revpos` with putAttachment', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.putAttachment('a', 'one', '', testUtils.btoa('one'), 'text/plain', function () {\n        db.get('a', function (err, doc) {\n          should.exist(doc._attachments.one.revpos);\n          doc._attachments.one.revpos.should.equal(1);\n          db.putAttachment('a', 'two', doc._rev, testUtils.btoa('two'), 'text/plain', function () {\n            db.get('a', function (err, doc) {\n              should.exist(doc._attachments.two.revpos);\n              doc._attachments.two.revpos.should.equal(2);\n              doc._attachments.one.revpos.should.equal(1);\n              db.putAttachment('a', 'one', doc._rev, testUtils.btoa('one-changed'), 'text/plain', function () {\n                db.get('a', function (err, doc) {\n                  doc._attachments.one.revpos.should.equal(3);\n                  doc._attachments.two.revpos.should.equal(2);\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n    \n    it('#2709 `revpos` with inline attachment', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = {\n        _id: 'a',\n        _attachments: {\n          one: {\n            content_type: 'text/plain',\n            data: testUtils.btoa('one')\n          }\n        }\n      };\n      db.put(doc, function () {\n        db.get('a', function (err, doc) {\n          should.exist(doc._attachments.one.revpos);\n          doc._attachments.one.revpos.should.equal(1);\n          doc._attachments.two = {\n            content_type: 'text/plain',\n            data: testUtils.btoa('two')\n          };\n          db.put(doc, function () {\n            db.get('a', function (err, doc) {\n              should.exist(doc._attachments.two.revpos);\n              doc._attachments.two.revpos.should.equal(2);\n              doc._attachments.one.revpos.should.equal(1);\n              delete doc._attachments.one.stub;\n              doc._attachments.one.data = testUtils.btoa('one-changed');\n              db.put(doc, function () {\n                db.get('a', function (err, doc) {\n                  doc._attachments.one.revpos.should.equal(3);\n                  doc._attachments.two.revpos.should.equal(2);\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('#2709 `revpos` with allDocs', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.putAttachment('a', 'one', '', testUtils.btoa('one'), 'text/plain', function () {\n        db.allDocs({ keys: ['a'], include_docs: true }, function (err, docs) {\n          var doc = docs.rows[0].doc;\n          should.exist(doc._attachments.one.revpos);\n          doc._attachments.one.revpos.should.equal(1);\n          done();\n        });\n      });\n    });\n    \n  });\n});\n\nrepl_adapters.forEach(function (adapters) {\n  describe('suite2 test.attachments.js- ' + adapters[0] + ':' + adapters[1],\n    function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_attach_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    afterEach(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    it('Attachments replicate back and forth', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var doc = {\n        _id: 'doc',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('foo')\n          }\n        }\n      };\n\n      return db.bulkDocs({ docs: [doc] }).then(function () {\n        return db.replicate.to(remote);\n      }).then(function () {\n        doc._id = 'doc2';\n        return remote.put(doc);\n      }).then(function () {\n        doc._id = 'doc3';\n        return db.put(doc);\n      }).then(function () {\n        return db.sync(remote);\n      }).then(function () {\n        return testUtils.Promise.all([db, remote].map(function (pouch) {\n          return pouch.allDocs({\n            include_docs: true,\n            attachments: true\n          }).then(function (res) {\n            res.rows.should.have.length(3);\n            res.rows.forEach(function (row) {\n              Object.keys(row.doc._attachments).should.have.length(1);\n              var att = row.doc._attachments['foo.txt'];\n              att.content_type.should.equal('text/plain');\n              att.data.should.equal(testUtils.btoa('foo'));\n              att.digest.should.be.a('string');\n              should.not.exist(att.length);\n              should.not.exist(att.stub);\n            });\n          });\n        }));\n      });\n    });\n\n    it('Replicate same doc, same atts', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var doc = {\n        _id: 'doc',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('foo')\n          }\n        }\n      };\n\n      return remote.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.replicate.from(remote);\n      }).then(function () {\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        return db.replicate.to(remote);\n      }).then(function () {\n        return remote.put(doc);\n      }).then(function () {\n        return db.sync(remote);\n      }).then(function () {\n        return testUtils.Promise.all([db, remote].map(function (pouch) {\n          return pouch.allDocs({\n            include_docs: true,\n            attachments: true\n          }).then(function (res) {\n            res.rows.should.have.length(1);\n            res.rows.forEach(function (row) {\n              Object.keys(row.doc._attachments).should.have.length(1);\n              var att = row.doc._attachments['foo.txt'];\n              att.content_type.should.equal('text/plain');\n              att.data.should.equal(testUtils.btoa('foo'));\n              att.digest.should.be.a('string');\n              should.not.exist(att.length);\n              should.not.exist(att.stub);\n            });\n          });\n        }));\n      });\n    });\n\n    it('Replicate same doc, same atts 2', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var doc = {\n        _id: 'doc',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: testUtils.btoa('foo')\n          }\n        }\n      };\n\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.replicate.to(remote);\n      }).then(function () {\n        return remote.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        return db.replicate.from(remote);\n      }).then(function () {\n        return db.put(doc);\n      }).then(function () {\n        return db.sync(remote);\n      }).then(function () {\n        return testUtils.Promise.all([db, remote].map(function (pouch) {\n          return pouch.allDocs({\n            include_docs: true,\n            attachments: true\n          }).then(function (res) {\n            res.rows.should.have.length(1);\n            res.rows.forEach(function (row) {\n              Object.keys(row.doc._attachments).should.have.length(1);\n              var att = row.doc._attachments['foo.txt'];\n              att.content_type.should.equal('text/plain');\n              att.data.should.equal(testUtils.btoa('foo'));\n              att.digest.should.be.a('string');\n              should.not.exist(att.length);\n              should.not.exist(att.stub);\n            });\n          });\n        }));\n      });\n    });\n\n    it('Attachments replicate', function (done) {\n      var binAttDoc = {\n        _id: 'bin_doc',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ='\n          }\n        }\n      };\n      var docs1 = [\n        binAttDoc,\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      remote.bulkDocs({ docs: docs1 }, function () {\n        db.replicate.from(remote, function () {\n          db.get('bin_doc', { attachments: true }, function (err, doc) {\n            binAttDoc._attachments['foo.txt'].data.should\n              .equal(doc._attachments['foo.txt'].data);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Attachment types replicate', function () {\n      var binAttDoc = {\n        _id: 'bin_doc',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ='\n          }\n        }\n      };\n      var docs1 = [\n        binAttDoc,\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      return remote.bulkDocs({ docs: docs1 }).then(function () {\n        return db.replicate.from(remote);\n      }).then(function () {\n        return db.get('bin_doc', {attachments: true, binary: true});\n      }).then(function (doc) {\n        var blob = doc._attachments['foo.txt'].data;\n        blob.type.should.equal('text/plain');\n        return testUtils.readBlobPromise(blob);\n      }).then(function (bin) {\n        bin.should.equal(testUtils.atob(\n          'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ='));\n      });\n    });\n\n    it('Many many attachments replicate', function () {\n      var doc = {_id: 'foo'};\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var data = testUtils.btoa('foobar');\n      var blob = testUtils.binaryStringToBlob(\n        testUtils.atob(data), 'text/plain');\n\n      doc._attachments = {};\n      var expectedKeys = [];\n      for (var i = 0; i < 50; i++) {\n        doc._attachments[i + '.txt'] = {\n          content_type: 'text/plain',\n          data: blob\n        };\n        expectedKeys.push(i + '.txt');\n      }\n      return db.put(doc).then(function () {\n        return db.replicate.to(remote);\n      }).then(function () {\n        return remote.get('foo', {attachments: true});\n      }).then(function (doc) {\n        var keys = Object.keys(doc._attachments);\n        keys.sort();\n        keys.should.deep.equal(expectedKeys.sort());\n        doc._attachments[keys[0]].data.should.equal(data);\n      });\n    });\n\n    it('Many many png attachments replicate', function () {\n      var doc = {_id: 'foo'};\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var data = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAMFBMVEX+9+' +\n        'j+9OD+7tL95rr93qT80YD7x2L6vkn6syz5qRT4ogT4nwD4ngD4nQD4nQD4' +\n        'nQDT2nT/AAAAcElEQVQY002OUQLEQARDw1D14f7X3TCdbfPnhQTqI5UqvG' +\n        'OWIz8gAIXFH9zmC63XRyTsOsCWk2A9Ga7wCXlA9m2S6G4JlVwQkpw/Ymxr' +\n        'UgNoMoyxBwSMH/WnAzy5cnfLFu+dK2l5gMvuPGLGJd1/9AOiBQiEgkzOpg' +\n        'AAAABJRU5ErkJggg==';\n      var blob = testUtils.binaryStringToBlob(testUtils.atob(data),\n          'image/png');\n\n      doc._attachments = {};\n      var expectedKeys = [];\n      for (var i = 0; i < 50; i++) {\n        doc._attachments[i + '.txt'] = {\n          content_type: 'image/png',\n          data: blob\n        };\n        expectedKeys.push(i + '.txt');\n      }\n      return db.put(doc).then(function () {\n        return db.replicate.to(remote);\n      }).then(function () {\n        return remote.get('foo', {attachments: true});\n      }).then(function (doc) {\n        var keys = Object.keys(doc._attachments);\n        keys.sort();\n        keys.should.deep.equal(expectedKeys.sort());\n        doc._attachments[keys[0]].data.should.equal(data);\n      });\n    });\n\n    it('Multiple attachments replicate', function () {\n      var doc = {_id: 'foo'};\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var data = 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=';\n      var rev;\n      return db.put(doc).then(function (info) {\n        rev = info.rev;\n        return db.replicate.to(remote);\n      }).then(function () {\n        return db.putAttachment(doc._id, 'foo1.txt', rev, data, 'text/plain');\n      }).then(function (info) {\n        rev = info.rev;\n        return db.putAttachment(doc._id, 'foo2.txt', rev, data, 'text/plain');\n      }).then(function (info) {\n        rev = info.rev;\n        return db.putAttachment(doc._id, 'foo3.txt', rev, data, 'text/plain');\n      }).then(function () {\n        return db.replicate.to(remote);\n      }).then(function () {\n        return remote.get('foo', {attachments: true});\n      }).then(function (doc) {\n        var keys = Object.keys(doc._attachments);\n        keys.sort();\n        keys.should.deep.equal(['foo1.txt', 'foo2.txt', 'foo3.txt']);\n      });\n    });\n\n      it('#3961 Many attachments on same doc', function () {\n        var doc = {_id: 'foo', _attachments: {}};\n\n        var db = new PouchDB(dbs.name);\n        var remote = new PouchDB(dbs.remote);\n\n        for (var i = 0; i < 100; i++) {\n          doc._attachments[i + '.txt'] = {\n            data: testUtils.btoa(i.toString()),\n            content_type: 'text/plain'\n          };\n        }\n\n        return db.put(doc).then(function () {\n          return db.replicate.to(remote);\n        }).then(function () {\n          return testUtils.Promise.all([\n            db, remote\n          ].map(function (pouch) {\n            return pouch.get('foo', {attachments: true}).then(function (doc) {\n              var atts = doc._attachments;\n              Object.keys(atts).length.should.equal(100);\n              for (var i = 0; i < 100; i++) {\n                var att = atts[i + '.txt'];\n                should.not.exist(att.stub);\n                att.data.should.equal(testUtils.btoa(i.toString()));\n                att.content_type.should.equal('text/plain');\n              }\n            }).then(function () {\n              return pouch.get('foo');\n            }).then(function (doc) {\n              var atts = doc._attachments;\n              Object.keys(atts).length.should.equal(100);\n              for (var i = 0; i < 100; i++) {\n                var att = atts[i + '.txt'];\n                att.stub.should.equal(true);\n                att.content_type.should.equal('text/plain');\n                att.length.should.equal(i.toString().length);\n                should.exist(att.digest);\n              }\n            });\n          }));\n        });\n      });\n\n    it('Multiple attachments replicate, different docs (#2698)', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString(),\n          _attachments: {\n            'foo.txt': {\n              data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=',\n              content_type: 'text/plain'\n            }\n          }\n        });\n      }\n      return remote.bulkDocs(docs).then(function () {\n        return remote.replicate.to(db);\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        return testUtils.Promise.all(res.rows.map(function (row) {\n          return db.get(row.id, {attachments: true});\n        }));\n      }).then(function (docs) {\n        var attachments = docs.map(function (doc) {\n          delete doc._attachments['foo.txt'].revpos;\n          delete doc._attachments['foo.txt'].digest;\n          return doc._attachments;\n        });\n        attachments.should.deep.equal([1, 2, 3, 4, 5].map(function () {\n          return {\n            \"foo.txt\": {\n              \"content_type\": \"text/plain\",\n              \"data\": \"VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=\"\n            }\n          };\n        }));\n      });\n    });\n\n    it('Multiple attachments replicate, different docs png (#2698)', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString(),\n          _attachments: {\n            'foo.png': {\n              data: icons[i],\n              content_type: 'image/png'\n            }\n          }\n        });\n      }\n      return remote.bulkDocs(docs).then(function () {\n        return remote.replicate.to(db);\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        return testUtils.Promise.all(res.rows.map(function (row) {\n          return db.get(row.id, {attachments: true});\n        }));\n      }).then(function (docs) {\n        var attachments = docs.map(function (doc) {\n          delete doc._attachments['foo.png'].revpos;\n          return doc._attachments;\n        });\n        attachments.should.deep.equal(icons.map(function (icon, i) {\n          return {\n            \"foo.png\": {\n              \"content_type\": \"image/png\",\n              \"data\": icon,\n              \"digest\": iconDigests[i]\n            }\n          };\n        }));\n\n        return testUtils.Promise.all(docs.map(function (doc) {\n          return db.get(doc._id);\n        }));\n      }).then(function (docs) {\n        var attachments = docs.map(function (doc) {\n          delete doc._attachments['foo.png'].revpos;\n          return doc._attachments['foo.png'];\n        });\n        attachments.should.deep.equal(icons.map(function (icon, i) {\n          return {\n            \"content_type\": \"image/png\",\n            stub: true,\n            \"digest\": iconDigests[i],\n            length: iconLengths[i]\n          };\n        }));\n      });\n    });\n\n    it('#3932 attachments with tricky revpos', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var rev;\n\n      return remote.put({\n        _id:\"test1\",\n        type:\"XX\",\n        name: \"Test1\",\n        _attachments:{\n          \"1.txt\":{ content_type:\"text/plain\", data: \"Wlpa\"} }\n      }).then(function () {\n        return db.replicate.from(remote);\n      }).then(function () {\n        return db.get('test1');\n      }).then(function (doc) {\n        return db.put(doc);\n      }).then(function (res) {\n        rev = res.rev;\n        return db.replicate.to(remote);\n      }).then(function () {\n        return remote.putAttachment('test1', '2.txt', rev,\n          'Wlpa', 'text/plain');\n      }).then(function () {\n        return remote.replicate.to(db);\n      }).then(function () {\n        return db.get('test1', {attachments: true});\n      }).then(function () {\n        return remote.get('test1', {attachments: true});\n      }).then(function (doc) {\n        doc._attachments = {\n          \"1.txt\": {content_type: \"text/plain\", data: \"Wlpa\"},\n          \"2.txt\": {content_type: \"text/plain\", data: \"Wlpa\"}\n        };\n        return db.put(doc);\n      }).then(function () {\n        return db.get(\"test1\", {attachments:true});\n      }).then(function (doc) {\n        return db.put(doc);\n      }).then(function () {\n        return db.replicate.to(remote);\n      }).then(function () {\n        return testUtils.Promise.all([db, remote].map(function (pouch) {\n          return pouch.get('test1', {attachments: true}).then(function (doc) {\n            var filenames = Object.keys(doc._attachments);\n            filenames.should.have.length(2);\n            filenames.forEach(function (filename) {\n              var data = doc._attachments[filename].data;\n              data.should.equal('Wlpa');\n            });\n          });\n        }));\n      });\n    });\n\n    it('replication with changing attachments', function () {\n      var attachment = {\n        content_type: 'text/plain',\n        data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ='\n      };\n      var attachment2 = {\n        content_type: 'text/plain',\n        data: ''\n      };\n      var binAttDoc = {\n        _id: 'bin_doc',\n        _attachments: {\n          'foo.txt': attachment\n        }\n      };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      return db.put(binAttDoc).then(function () {\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        should.exist(doc);\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        doc._attachments['bar.txt'] = attachment2;\n        return db.put(doc);\n      }).then(function () {\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        should.exist(doc);\n        return db.get(binAttDoc._id, {attachments: true});\n      }).then(function (doc) {\n        should.not.exist(doc._attachments['foo.txt'].stub);\n        should.not.exist(doc._attachments['bar.txt'].stub);\n        return db.replicate.to(remote);\n      }).then(function () {\n        return remote.get(binAttDoc._id, {attachments: true});\n      }).then(function (doc) {\n        should.not.exist(doc._attachments['foo.txt'].stub);\n        doc._attachments['baz.txt'] = doc._attachments['foo.txt'];\n        return remote.put(doc);\n      }).then(function () {\n        return remote.replicate.to(db);\n      }).then(function () {\n        return db.get(binAttDoc._id, {attachments: true});\n      }).then(function (doc) {\n        should.not.exist(doc._attachments['foo.txt'].stub);\n        should.not.exist(doc._attachments['bar.txt'].stub);\n        should.not.exist(doc._attachments['baz.txt'].stub);\n        return db.get(binAttDoc._id);\n      }).then(function (doc) {\n        should.exist(doc);\n      });\n    });\n\n    // this is a dumb edge case, so I don't support it in worker-pouch\n    it.skip('3955 race condition in put', function (done) {\n\n      var db = new PouchDB(dbs.name);\n      var btoa = testUtils.btoa;\n      var srcdata = ['', '', ''];\n\n      for (var i = 0; i < 50; i++) {\n        srcdata[0] += 'AAA';\n        srcdata[1] += 'BBB';\n        srcdata[2] += 'CCC';\n      }\n\n      var doc = {\n        _id: 'x',\n        type: 'testdoc',\n        _attachments:{\n          'a.txt': {\n            content_type: 'text/plain',\n            data:btoa(srcdata[0])\n          },\n          'b.txt': {\n            content_type: 'text/plain',\n            data:btoa(srcdata[1])\n          },\n          'c.txt': {\n            content_type: 'text/plain',\n            data:btoa(srcdata[2])\n          },\n          'zzz.txt': {\n            content_type: 'text/plain',\n            data:btoa('ZZZ')\n          }\n        }\n      };\n\n      db.put(doc).then(function () {\n        return db.get('x');\n      }).then(function (doc){\n        var digests = Object.keys(doc._attachments).map(function (a) {\n          return doc._attachments[a].digest;\n        });\n        if (isUnique(digests)) {\n          done();\n        } else {\n          done('digests are not unique');\n        }\n      });\n\n      doc._attachments['c.txt'].data = btoa('ZZZ');\n      doc._attachments['b.txt'].data = btoa('ZZZ');\n\n      function isUnique(arr) {\n        arr.sort();\n        for (var i = 1; i < arr.length; i++ ) {\n          if (arr[i-1] === arr[i]) {\n            return false;\n          }\n        }\n        return true;\n      }\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.basics.js",
    "content": "'use strict';\n\nvar adapters = ['http', 'local'];\n\nadapters.forEach(function (adapter) {\n\n  describe('test.basics.js-' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n\n    it('Create a pouch without new keyword', function () {\n      /* jshint newcap:false */\n      var db = PouchDB(dbs.name);\n      db.should.be.an.instanceof(PouchDB);\n    });\n\n    it('Name is accessible via instance', function () {\n      var db = new PouchDB(dbs.name);\n      db.name.should.equal(dbs.name);\n    });\n\n    it('4314 Create a pouch with + in name', function () {\n      var db = new PouchDB(dbs.name + '+suffix');\n      return db.info().then(function () {\n        return db.destroy();\n      });\n    });\n\n    it('Creating Pouch without name will throw', function (done) {\n      try {\n        new PouchDB();\n        done('Should have thrown');\n      } catch (err) {\n        should.equal(err instanceof Error, true, 'should be an error');\n        done();\n      }\n    });\n\n    it('4314 Create a pouch with urlencoded name', function () {\n      var db = new PouchDB(dbs.name + 'some%2Ftest');\n      return db.info().then(function () {\n        return db.destroy();\n      });\n    });\n\n    it('4219 destroy a pouch', function () {\n      return new PouchDB(dbs.name).destroy({});\n    });\n\n    it('4339 throw useful error if method called on stale instance', function () {\n      var db = new PouchDB(dbs.name);\n\n      return db.put({\n        _id: 'cleanTest'\n      }).then(function () {\n        return db.destroy();\n      }).then(function () {\n        return db.get('cleanTest');\n      }).then(function () {\n        throw new Error('.get should return an error');\n      }, function (err) {\n        should.equal(err instanceof Error, true, 'should be an error');\n      });\n    });\n\n    it('[4595] should reject xhr errors', function (done){\n      var invalidUrl = 'http:///';\n      new PouchDB(dbs.name).replicate.to(invalidUrl, {}).catch(function () {\n        done();\n      });\n\n    });\n\n    it('[4595] should emit error event on xhr error', function (done){\n      var invalidUrl = 'http:///';\n      new PouchDB(dbs.name).replicate.to(invalidUrl,{})\n        .on('error', function () { done(); });\n    });\n\n    it('Add a doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({test: 'somestuff'}, function (err) {\n        should.not.exist(err);\n        done();\n      });\n    });\n\n    it('Get invalid id', function () {\n      var db = new PouchDB(dbs.name);\n      return db.get(1234).then(function () {\n        throw 'show not be here';\n      }).catch(function (err) {\n        should.exist(err);\n      });\n    });\n\n    it('Add a doc with a promise', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({test: 'somestuff'}).then(function () {\n        done();\n      }, done);\n    });\n\n    it('Add a doc with opts object', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({test: 'somestuff'}, {}, function (err) {\n        should.not.exist(err);\n        done();\n      });\n    });\n\n    it('Modify a doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({test: 'somestuff'}, function (err, info) {\n        db.put({\n          _id: info.id,\n          _rev: info.rev,\n          another: 'test'\n        }, function (err, info2) {\n          should.not.exist(err);\n          info.rev.should.not.equal(info2.rev);\n          done();\n        });\n      });\n    });\n\n    it('Modify a doc with a promise', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({test: 'promisestuff'}).then(function (info) {\n        return db.put({\n          _id: info.id,\n          _rev: info.rev,\n          another: 'test'\n        }).then(function (info2) {\n          info.rev.should.not.equal(info2.rev);\n        });\n      }).catch(done).then(function () {\n        done();\n      });\n    });\n\n    it('Read db id', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.id(function (err, id) {\n        id.should.be.a('string');\n        done(err);\n      });\n    });\n\n    it('Read db id with promise', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.id().then(function (id) {\n        id.should.be.a('string');\n        done();\n      });\n    });\n\n    it('Close db', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.info().then(function () {\n        db.close(done);\n      });\n    });\n\n    it('Close db with a promise', function () {\n      var db = new PouchDB(dbs.name);\n      return db.close();\n    });\n\n    it('Read db id after closing Close', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.close(function () {\n        db = new PouchDB(dbs.name);\n        db.id(function (err, id) {\n          id.should.be.a('string');\n          done();\n        });\n      });\n    });\n\n    it('Modify a doc with incorrect rev', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ test: 'somestuff' }, function (err, info) {\n        var nDoc = {\n          _id: info.id,\n          _rev: info.rev + 'broken',\n          another: 'test'\n        };\n        db.put(nDoc, function (err) {\n          should.exist(err);\n          done();\n        });\n      });\n    });\n\n    it('Remove doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ test: 'somestuff' }, function (err, info) {\n        db.remove({\n          test: 'somestuff',\n          _id: info.id,\n          _rev: info.rev\n        }, function () {\n          db.get(info.id, function (err) {\n            should.exist(err.error);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Remove doc with a promise', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({test: 'someotherstuff'}).then(function (info) {\n        return db.remove({\n          test: 'someotherstuff',\n          _id: info.id,\n          _rev: info.rev\n        }).then(function () {\n          return db.get(info.id).then(function () {\n            done(true);\n          }, function (err) {\n            should.exist(err.error);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Remove doc with new syntax', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ test: 'somestuff' }, function (err, info) {\n        db.remove(info.id, info.rev, function (err) {\n          should.not.exist(err);\n          db.get(info.id, function (err) {\n            should.exist(err);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Remove doc with new syntax and a promise', function (done) {\n      var db = new PouchDB(dbs.name);\n      var id;\n      db.post({test: 'someotherstuff'}).then(function (info) {\n        id = info.id;\n        return db.remove(info.id, info.rev);\n      }).then(function () {\n        return db.get(id);\n      }).then(function () {\n        done(true);\n      }, function (err) {\n        should.exist(err.error);\n        done();\n      });\n    });\n\n    it('Doc removal leaves only stub', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({_id: 'foo', value: 'test'}, function () {\n        db.get('foo', function (err, doc) {\n          db.remove(doc, function (err, res) {\n            db.get('foo', { rev: res.rev }, function (err, doc) {\n              doc.should.deep.equal({\n                _id: res.id,\n                _rev: res.rev,\n                _deleted: true\n              });\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Remove doc twice with specified id', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put({_id: 'specifiedId', test: 'somestuff'}).then(function () {\n        return db.get('specifiedId');\n      }).then(function (doc) {\n        return db.remove(doc);\n      }).then(function () {\n        return db.put({\n          _id: 'specifiedId',\n          test: 'somestuff2'\n        });\n      }).then(function () {\n        return db.get('specifiedId');\n      }).then(function (doc) {\n        return db.remove(doc);\n      });\n    });\n\n    it('Remove doc, no callback', function (done) {\n      var db = new PouchDB(dbs.name);\n      var changes = db.changes({\n        live: true,\n        include_docs: true\n      }).on('change', function (change) {\n        if (change.doc._deleted) {\n          changes.cancel();\n        }\n      }).on('complete', function (result) {\n        result.status.should.equal('cancelled');\n        done();\n      }).on('error', done);\n      db.post({ _id: 'somestuff' }, function (err, res) {\n        db.remove({\n          _id: res.id,\n          _rev: res.rev\n        });\n      });\n    });\n\n    it('Delete document without id', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.remove({test: 'ing'}, function (err) {\n        should.exist(err);\n        done();\n      });\n    });\n\n    it('Delete document with many args', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (info) {\n        return db.remove(doc._id, info.rev, {});\n      });\n    });\n\n    it('Delete document with many args, callback style', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'foo'};\n      db.put(doc, function (err, info) {\n        should.not.exist(err);\n        db.remove(doc._id, info.rev, {}, function (err) {\n          should.not.exist(err);\n          done();\n        });\n      });\n    });\n\n    it('Delete doc with id + rev + no opts', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (info) {\n        return db.remove(doc._id, info.rev);\n      });\n    });\n\n    it('Delete doc with id + rev + no opts, callback style', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'foo'};\n      db.put(doc, function (err, info) {\n        should.not.exist(err);\n        db.remove(doc._id, info.rev, function (err) {\n          should.not.exist(err);\n          done();\n        });\n      });\n    });\n\n    it('Delete doc with doc + opts', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (info) {\n        doc._rev = info.rev;\n        return db.remove(doc, {});\n      });\n    });\n\n    it('Delete doc with doc + opts, callback style', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'foo'};\n      db.put(doc, function (err, info) {\n        should.not.exist(err);\n        doc._rev = info.rev;\n        db.remove(doc, {}, function (err) {\n          should.not.exist(err);\n          done();\n        });\n      });\n    });\n\n    it('Delete doc with rev in opts', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (info) {\n        return db.remove(doc, {rev: info.rev});\n      });\n    });\n\n    it('Bulk docs', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { test: 'somestuff' },\n          { test: 'another' }\n        ]\n      }, function (err, infos) {\n        infos.length.should.equal(2);\n        infos[0].ok.should.equal(true);\n        infos[1].ok.should.equal(true);\n        done();\n      });\n    });\n\n    it('Bulk docs with a promise', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { test: 'somestuff' },\n          { test: 'another' }\n        ]\n      }).then(function (infos) {\n        infos.length.should.equal(2);\n        infos[0].ok.should.equal(true);\n        infos[1].ok.should.equal(true);\n        done();\n      }).catch(done);\n    });\n\n    it('Basic checks', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.info(function (err, info) {\n        var updateSeq = info.update_seq;\n        var doc = {_id: '0', a: 1, b: 1};\n        info.doc_count.should.equal(0);\n        db.put(doc, function (err, res) {\n          res.ok.should.equal(true);\n          res.should.have.property('id');\n          res.should.have.property('rev');\n          db.info(function (err, info) {\n            info.doc_count.should.equal(1);\n            info.update_seq.should.not.equal(updateSeq);\n            db.get(doc._id, function (err, doc) {\n              doc._id.should.equal(res.id);\n              doc._rev.should.equal(res.rev);\n              db.get(doc._id, { revs_info: true }, function (err, doc) {\n                doc._revs_info[0].status.should.equal('available');\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('update with invalid rev', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({test: 'somestuff'}, function (err, info) {\n        should.not.exist(err);\n        db.put({\n          _id: info.id,\n          _rev: 'undefined',\n          another: 'test'\n        }, function (err) {\n          should.exist(err);\n          err.name.should.equal('bad_request');\n          done();\n        });\n      });\n    });\n\n    it('Doc validation', function (done) {\n      var bad_docs = [\n        {'_zing': 4},\n        {'_zoom': 'hello'},\n        {'zane': 'goldfish',\n         '_fan': 'something smells delicious'},\n        {'_bing': {'wha?': 'soda can'}}\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: bad_docs }, function (err) {\n        err.name.should.equal('doc_validation');\n        err.status.should.equal(testUtils.errors.DOC_VALIDATION.status);\n        err.message.should.equal(testUtils.errors.DOC_VALIDATION.message +\n                                 ': _zing',\n                                 'correct error message returned');\n        done();\n      });\n    });\n\n    it('Replication fields (#2442)', function (done) {\n      var doc = {\n        '_replication_id': 'test',\n        '_replication_state': 'triggered',\n        '_replication_state_time': 1,\n        '_replication_stats': {}\n      };\n      var db = new PouchDB(dbs.name);\n      db.post(doc, function (err, resp) {\n        should.not.exist(err);\n\n        db.get(resp.id, function (err, doc2) {\n          should.not.exist(err);\n\n          doc2._replication_id.should.equal('test');\n          doc2._replication_state.should.equal('triggered');\n          doc2._replication_state_time.should.equal(1);\n          doc2._replication_stats.should.eql({});\n\n          done();\n        });\n      });\n    });\n\n    it('Testing issue #48', function (done) {\n      var docs = [\n        {'_id': '0'}, {'_id': '1'}, {'_id': '2'},\n        {'_id': '3'}, {'_id': '4'}, {'_id': '5'}\n      ];\n      var TO_SEND = 5;\n      var sent = 0;\n      var complete = 0;\n      var timer;\n\n      var db = new PouchDB(dbs.name);\n\n      var bulkCallback = function (err) {\n        should.not.exist(err);\n        if (++complete === TO_SEND) {\n          done();\n        }\n      };\n\n      var save = function () {\n        if (++sent === TO_SEND) {\n          clearInterval(timer);\n        }\n        db.bulkDocs({docs: docs}, bulkCallback);\n      };\n\n      timer = setInterval(save, 10);\n    });\n\n    it('Testing valid id', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({\n        '_id': 123,\n        test: 'somestuff'\n      }, function (err) {\n        should.exist(err);\n        err.name.should.be.oneOf(['bad_request', 'illegal_docid']) ;\n        done();\n      });\n    });\n\n    it('Put doc without _id should fail', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({test: 'somestuff' }, function (err) {\n        should.exist(err);\n        err.message.should.equal(testUtils.errors.MISSING_ID.message,\n                                 'correct error message returned');\n        done();\n      });\n    });\n\n    it('Put doc with bad reserved id should fail', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({\n        _id: '_i_test',\n        test: 'somestuff'\n      }, function (err) {\n        should.exist(err);\n        err.status.should.equal(testUtils.errors.RESERVED_ID.status);\n        err.message.should.equal(testUtils.errors.RESERVED_ID.message,\n                                 'correct error message returned');\n        done();\n      });\n    });\n\n    it('update_seq persists', function () {\n      var db = new PouchDB(dbs.name);\n      return db.post({ test: 'somestuff' }).then(function () {\n        return db.close();\n      }).then(function () {\n        db = new PouchDB(dbs.name);\n        return db.info();\n      }).then(function (info) {\n        info.update_seq.should.not.equal(0);\n        info.doc_count.should.equal(1);\n      });\n    });\n\n    it('deletions persists', function (done) {\n\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'staticId', contents: 'stuff'};\n\n      function writeAndDelete(cb) {\n        db.put(doc, function (err, info) {\n          db.remove({\n            _id: info.id,\n            _rev: info.rev\n          }, function () {\n            cb();\n          });\n        });\n      }\n\n      writeAndDelete(function () {\n        writeAndDelete(function () {\n          db.put(doc, function () {\n            db.get(doc._id, { conflicts: true }, function (err, details) {\n              details.should.not.have.property('_conflicts');\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('#4126 should not store raw Dates', function () {\n      var date = new Date();\n      var date2 = new Date();\n      var date3 = new Date();\n      var origDocs = [\n        { _id: '1', mydate: date },\n        { _id: '2', array: [date2] },\n        { _id: '3', deep: { deeper: { deeperstill: date3 } }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs(origDocs).then(function () {\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        var docs = res.rows.map(function (row) {\n          delete row.doc._rev;\n          return row.doc;\n        });\n        docs.should.deep.equal([\n          { _id: '1', mydate: date.toJSON() },\n          { _id: '2', array: [date2.toJSON()] },\n          { _id: '3', deep: { deeper: { deeperstill: date3.toJSON() } }\n          }\n        ]);\n        origDocs[0].mydate.should.be.instanceof(Date, 'date not modified');\n        origDocs[1].array[0].should.be.instanceof(Date, 'date not modified');\n        origDocs[2].deep.deeper.deeperstill\n          .should.be.instanceof(Date, 'date not modified');\n      });\n    });\n\n    it('Create a db with a reserved name', function () {\n      var db = new PouchDB('__proto__');\n      return db.info().then(function () {\n        return db.destroy();\n      });\n    });\n\n    it('Error when document is not an object', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc1 = [{ _id: 'foo' }, { _id: 'bar' }];\n      var doc2 = 'this is not an object';\n      var count = 5;\n      var callback = function (err) {\n        should.exist(err);\n        count--;\n        if (count === 0) {\n          done();\n        }\n      };\n      db.post(doc1, callback);\n      db.post(doc2, callback);\n      db.put(doc1, callback);\n      db.put(doc2, callback);\n      db.bulkDocs({docs: [doc1, doc2]}, callback);\n    });\n\n    it('Test instance update_seq updates correctly', function (done) {\n      var db1 = new PouchDB(dbs.name);\n      var db2 = new PouchDB(dbs.name);\n      db1.post({ a: 'doc' }, function () {\n        db1.info(function (err, db1Info) {\n          db2.info(function (err, db2Info) {\n            db1Info.update_seq.should.not.equal(0);\n            db2Info.update_seq.should.not.equal(0);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Fail to fetch a doc after db was deleted', function (done) {\n      var db = new PouchDB(dbs.name);\n      var db2 = new PouchDB(dbs.name);\n      var doc = { _id: 'foodoc' };\n      var doc2 = { _id: 'foodoc2' };\n      db.put(doc, function () {\n        db2.put(doc2, function () {\n          db.allDocs(function (err, docs) {\n            docs.total_rows.should.equal(2);\n            db.destroy(function (err) {\n              should.not.exist(err);\n              db2 = new PouchDB(dbs.name);\n              db2.get(doc._id, function (err) {\n                err.name.should.equal('not_found');\n                err.status.should.equal(404);\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Fail to fetch a doc after db was deleted', function (done) {\n      var db = new PouchDB(dbs.name);\n      var db2 = new PouchDB(dbs.name);\n      var doc = { _id: 'foodoc' };\n      var doc2 = { _id: 'foodoc2' };\n      db.put(doc, function () {\n        db2.put(doc2, function () {\n          db.allDocs(function (err, docs) {\n            docs.total_rows.should.equal(2);\n            db.destroy().then(function () {\n              db2 = new PouchDB(dbs.name);\n              db2.get(doc._id, function (err, doc) {\n                should.not.exist(doc);\n                err.status.should.equal(404);\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Cant add docs with empty ids', function (done) {\n      var docs = [\n        {},\n        { _id: null },\n        { _id: undefined },\n        { _id: '' },\n        { _id: {} },\n        { _id: '_underscored_id' }\n      ];\n      var num = docs.length;\n      var db = new PouchDB(dbs.name);\n      docs.forEach(function (doc) {\n        db.put(doc, function (err) {\n          should.exist(err);\n          if (!--num) {\n            done();\n          }\n        });\n      });\n    });\n\n    it('Test doc with percent in ID', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {\n        foo: 'bar',\n        _id: 'foo%bar'\n      };\n      return db.put(doc).then(function (res) {\n        res.id.should.equal('foo%bar');\n        doc.foo.should.equal('bar');\n        return db.get('foo%bar');\n      }).then(function (doc) {\n        doc._id.should.equal('foo%bar');\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        var x = res.rows[0];\n        x.id.should.equal('foo%bar');\n        x.doc._id.should.equal('foo%bar');\n        x.key.should.equal('foo%bar');\n        should.exist(x.doc._rev);\n      });\n    });\n\n    it('db.info should give correct name', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.info().then(function (info) {\n        info.db_name.should.equal('testdb');\n        done();\n      });\n    });\n\n    it('db.info should give auto_compaction = false (#2744)', function () {\n      var db = new PouchDB(dbs.name, { auto_compaction: false});\n      return db.info().then(function (info) {\n        info.auto_compaction.should.equal(false);\n      });\n    });\n\n    it('db.info should give auto_compaction = true (#2744)', function () {\n      var db = new PouchDB(dbs.name, { auto_compaction: true});\n      return db.info().then(function (info) {\n        // http doesn't support auto compaction\n        info.auto_compaction.should.equal(db.type() !== 'http');\n      });\n    });\n\n    it('db.info should give adapter name (#3567)', function () {\n      var db = new PouchDB(dbs.name);\n      return db.info().then(function (info) {\n        info.adapter.should.equal(db.type());\n      });\n    });\n\n    it('db.info should give correct doc_count', function () {\n      var db = new PouchDB(dbs.name);\n      return db.info().then(function (info) {\n        info.doc_count.should.equal(0);\n        return db.bulkDocs({docs : [{_id : '1'}, {_id : '2'}, {_id : '3'}]});\n      }).then(function () {\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(3);\n        return db.get('1');\n      }).then(function (doc) {\n        return db.remove(doc);\n      }).then(function () {\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(2);\n      });\n    });\n\n    it('putting returns {ok: true}', function () {\n      // in couch, it's {ok: true} and in cloudant it's {},\n      // but the http adapter smooths this out\n      var db = new PouchDB(dbs.name);\n      return db.put({_id: '_local/foo'}).then(function (info) {\n        true.should.equal(info.ok, 'putting local returns ok=true');\n        return db.put({_id: 'quux'});\n      }).then(function (info) {\n        true.should.equal(info.ok, 'putting returns ok=true');\n        return db.bulkDocs([ {_id: '_local/bar'}, {_id: 'baz'} ]);\n      }).then(function (info) {\n        info.should.have.length(2, 'correct num bulk docs');\n        true.should.equal(info[0].ok, 'bulk docs says ok=true #1');\n        true.should.equal(info[1].ok, 'bulk docs says ok=true #2');\n        return db.post({});\n      }).then(function (info) {\n        true.should.equal(info.ok, 'posting returns ok=true');\n      });\n    });\n\n    it('putting is override-able', function (done) {\n      var db = new PouchDB(dbs.name);\n      var called = 0;\n      var plugin = {\n        initPull: function () {\n          this.oldPut = this.put;\n          this.put = function () {\n            if (typeof arguments[arguments.length - 1] === 'function') {\n              called++;\n            }\n            return this.oldPut.apply(this, arguments);\n          };\n        },\n        cleanupPut: function () {\n          this.put = this.oldPut;\n        }\n      };\n      PouchDB.plugin(plugin);\n      db.initPull();\n      return db.put({_id: 'anid', foo: 'bar'}).then(function () {\n        called.should.be.above(0, 'put was called');\n        return db.get('anid');\n      }).then(function (doc) {\n        doc.foo.should.equal('bar', 'correct doc');\n      }).then(function () {\n        done();\n      }, done);\n    });\n\n    it('issue 2779, deleted docs, old revs COUCHDB-292', function (done) {\n      var db =  new PouchDB(dbs.name);\n      var rev;\n\n      db.put({_id: 'foo'}).then(function (resp) {\n        rev = resp.rev;\n        return db.remove('foo', rev);\n      }).then(function () {\n        return db.get('foo');\n      }).catch(function () {\n        return db.put({_id: 'foo', _rev: rev});\n      }).then(function () {\n        done(new Error('should never have got here'));\n      }, function (err) {\n        should.exist(err);\n        done();\n      });\n    });\n\n    it('issue 2779, correct behavior for undeleting', function () {\n\n      if (testUtils.isCouchMaster()) {\n        return true;\n      }\n\n      var db = new PouchDB(dbs.name);\n      var rev;\n\n      function checkNumRevisions(num) {\n        return db.get('foo', {\n          open_revs: 'all',\n          revs: true\n        }).then(function (fullDocs) {\n          fullDocs[0].ok._revisions.ids.should.have.length(num);\n        });\n      }\n\n      return db.put({_id: 'foo'}).then(function (resp) {\n        rev = resp.rev;\n        return checkNumRevisions(1);\n      }).then(function () {\n        return db.remove('foo', rev);\n      }).then(function () {\n        return checkNumRevisions(2);\n      }).then(function () {\n        return db.allDocs({keys: ['foo']});\n      }).then(function (res) {\n        rev = res.rows[0].value.rev;\n        return db.put({_id: 'foo', _rev: rev});\n      }).then(function () {\n        return checkNumRevisions(3);\n      });\n    });\n\n    it('issue 2888, successive deletes and writes', function () {\n      var db = new PouchDB(dbs.name);\n      var rev;\n\n      function checkNumRevisions(num) {\n        return db.get('foo', {\n          open_revs: 'all',\n          revs: true\n        }).then(function (fullDocs) {\n          fullDocs[0].ok._revisions.ids.should.have.length(num);\n        });\n      }\n      return db.put({ _id: 'foo' }).then(function (resp) {\n        rev = resp.rev;\n        return checkNumRevisions(1);\n      }).then(function () {\n        return db.remove('foo', rev);\n      }).then(function () {\n        return checkNumRevisions(2);\n      }).then(function () {\n        return db.put({ _id: 'foo' });\n      }).then(function (res) {\n        rev = res.rev;\n        return checkNumRevisions(3);\n      }).then(function () {\n        return db.remove('foo', rev);\n      }).then(function () {\n        return checkNumRevisions(4);\n      });\n    });\n\n    it('2 invalid puts', function (done) {\n      var db = new PouchDB(dbs.name);\n      var called = 0;\n      var cb = function () {\n        if (++called === 2) {\n          done();\n        }\n      };\n      db.put({_id: 'foo', _zing: 'zing'}, cb);\n      db.put({_id: 'bar', _zing: 'zing'}, cb);\n    });\n\n    it('Docs save \"null\" value', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put({_id: 'doc', foo: null}).then(function () {\n        return db.get('doc');\n      }).then(function (doc) {\n        (typeof doc.foo).should.equal('object');\n        should.not.exist(doc.foo);\n        Object.keys(doc).sort().should.deep.equal(['_id', '_rev', 'foo']);\n      });\n    });\n\n    it('db.type() returns a type', function () {\n      var db = new PouchDB(dbs.name);\n      db.type().should.be.a('string');\n    });\n\n    it('#4788 db.type() is synchronous', function () {\n      new PouchDB(dbs.name).type.should.be.a('function');\n      new PouchDB(dbs.name).type.should.be.a('function');\n    });\n\n    it('replace PouchDB.destroy() (express-pouchdb#203)', function (done) {\n      var old = PouchDB.destroy;\n      PouchDB.destroy = function (name, callback) {\n        var db = new PouchDB(name);\n        return db.destroy(callback);\n      };\n      // delete a non-existing db, should be fine.\n      PouchDB.destroy(dbs.name, function (err, resp) {\n        PouchDB.destroy = old;\n\n        done(err, resp);\n      });\n    });\n\n    it('3968, keeps all object fields', function () {\n      var db =  new PouchDB(dbs.name);\n      /* jshint -W001 */\n      var doc = {\n        _id: \"x\",\n        type: \"testdoc\",\n        watch: 1,\n        unwatch: 1,\n        constructor: 1,\n        toString: 1,\n        toSource: 1,\n        toLocaleString: 1,\n        propertyIsEnumerable: 1,\n        isPrototypeOf: 1,\n        hasOwnProperty: 1\n      };\n      return db.put(doc).then(function () {\n        return db.get(doc._id);\n      }).then(function (savedDoc) {\n        // We shouldnt need to delete from doc here (#4273)\n        should.not.exist(doc._rev);\n        should.not.exist(doc._rev_tree);\n\n        delete savedDoc._rev;\n        savedDoc.should.deep.equal(doc);\n      });\n    });\n\n    it('4712 invalid rev for new doc generates conflict', function () {\n      // CouchDB 1.X has a bug which allows this insertion via bulk_docs\n      // (which PouchDB uses for all document insertions)\n      if (adapter === 'http' && !testUtils.isCouchMaster()) {\n        return;\n      }\n\n      var db = new PouchDB(dbs.name);\n      var newdoc = {\n        '_id': 'foobar',\n        '_rev': '1-123'\n      };\n\n      return db.put(newdoc).then(function () {\n        throw new Error('expected an error');\n      }, function (err) {\n        err.should.have.property('name', 'conflict');\n        err.should.have.property('status', 409);\n      });\n    });\n\n    if (adapter === 'local') {\n      // TODO: this test fails in the http adapter in Chrome\n      it('should allow unicode doc ids', function (done) {\n        var db = new PouchDB(dbs.name);\n        var ids = [\n          // \"PouchDB is awesome\" in Japanese, contains 1-3 byte chars\n          '\\u30d1\\u30a6\\u30c1\\u30e5DB\\u306f\\u6700\\u9ad8\\u3060',\n          '\\u03B2', // 2-byte utf-8 char: 3b2\n          '\\uD843\\uDF2D', // exotic 4-byte utf-8 char: 20f2d\n          '\\u0000foo\\u0000bar\\u0001baz\\u0002quux', // like mapreduce\n          '\\u0000',\n          '\\u30d1'\n        ];\n        var numDone = 0;\n        ids.forEach(function (id) {\n          var doc = {_id : id, foo : 'bar'};\n          db.put(doc).then(function (info) {\n            doc._rev = info.rev;\n            return db.put(doc);\n          }).then(function () {\n            return db.get(id);\n          }).then(function (resp) {\n            resp._id.should.equal(id);\n            if (++numDone === ids.length) {\n              done();\n            }\n          }, done);\n        });\n      });\n\n      // this test only really makes sense for IDB\n      it('should have same blob support for 2 dbs', function () {\n        var db1 = new PouchDB(dbs.name);\n        return db1.info().then(function () {\n          var db2 = new PouchDB(dbs.name);\n          return db2.info().then(function () {\n            if (typeof db1._blobSupport !== 'undefined') {\n              db1._blobSupport.should.equal(db2._blobSupport,\n                'same blob support');\n            } else {\n              true.should.equal(true);\n            }\n          });\n        });\n      });\n    }\n\n    if (typeof process !== 'undefined' && !process.browser) {\n      it('#5471 PouchDB.plugin() should throw error if passed wrong type or empty object', function () {\n        (function () {\n          PouchDB.plugin('pouchdb-adapter-memory');\n        }).should.throw(Error, 'Invalid plugin: object passed in is empty or not an object');\n      });\n    }\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.bulk_docs.js",
    "content": "'use strict';\n\nvar adapters = ['local', 'http'];\n\nfunction makeDocs(start, end, templateDoc) {\n  var templateDocSrc = templateDoc ? JSON.stringify(templateDoc) : '{}';\n  if (end === undefined) {\n    end = start;\n    start = 0;\n  }\n  var docs = [];\n  for (var i = start; i < end; i++) {\n    /*jshint evil:true */\n    var newDoc = eval('(' + templateDocSrc + ')');\n    newDoc._id = i.toString();\n    newDoc.integer = i;\n    newDoc.string = i.toString();\n    docs.push(newDoc);\n  }\n  return docs;\n}\n\nadapters.forEach(function (adapter) {\n  describe('test.bulk_docs.js-' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n\n    var authors = [\n      {name: 'Dale Harvey', commits: 253},\n      {name: 'Mikeal Rogers', commits: 42},\n      {name: 'Johannes J. Schmidt', commits: 13},\n      {name: 'Randall Leeds', commits: 9}\n    ];\n\n    it('Testing bulk docs', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = makeDocs(5);\n      db.bulkDocs({ docs: docs }, function (err, results) {\n        results.should.have.length(5, 'results length matches');\n        for (var i = 0; i < 5; i++) {\n          results[i].id.should.equal(docs[i]._id, 'id matches');\n          should.exist(results[i].rev, 'rev is set');\n          // Update the doc\n          docs[i]._rev = results[i].rev;\n          docs[i].string = docs[i].string + '.00';\n        }\n        db.bulkDocs({ docs: docs }, function (err, results) {\n          results.should.have.length(5, 'results length matches');\n          for (i = 0; i < 5; i++) {\n            results[i].id.should.equal(i.toString(), 'id matches again');\n            // set the delete flag to delete the docs in the next step\n            docs[i]._rev = results[i].rev;\n            docs[i]._deleted = true;\n          }\n          db.put(docs[0], function () {\n            db.bulkDocs({ docs: docs }, function (err, results) {\n              results[0].name.should.equal(\n                'conflict', 'First doc should be in conflict');\n              should.not.exist(results[0].rev, 'no rev in conflict');\n              for (i = 1; i < 5; i++) {\n                results[i].id.should.equal(i.toString());\n                should.exist(results[i].rev);\n              }\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('No id in bulk docs', function (done) {\n      var db = new PouchDB(dbs.name);\n      var newdoc = {\n        '_id': 'foobar',\n        'body': 'baz'\n      };\n      db.put(newdoc, function (err, doc) {\n        should.exist(doc.ok);\n        var docs = [\n          {\n            '_id': newdoc._id,\n            '_rev': newdoc._rev,\n            'body': 'blam'\n          },\n          {\n            '_id': newdoc._id,\n            '_rev': newdoc._rev,\n            '_deleted': true\n          }\n        ];\n        db.bulkDocs({ docs: docs }, function (err, results) {\n          results[0].should.have.property('name', 'conflict');\n          results[1].should.have.property('name', 'conflict');\n          done();\n        });\n      });\n    });\n\n    it('No _rev and new_edits=false', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [{\n        _id: 'foo',\n        integer: 1\n      }];\n      db.bulkDocs({ docs: docs }, { new_edits: false }, function (err) {\n        should.exist(err, 'error reported');\n        done();\n      });\n    });\n\n    it('Test empty bulkDocs', function () {\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs([]);\n    });\n\n    it('Test many bulkDocs', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      for (var i = 0; i < 201; i++) {\n        docs.push({_id: i.toString()});\n      }\n      return db.bulkDocs(docs);\n    });\n\n    it('Test errors on invalid doc id', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [{\n        '_id': '_invalid',\n        foo: 'bar'\n      }];\n      db.bulkDocs({ docs: docs }, function (err, info) {\n        err.status.should.equal(testUtils.errors.RESERVED_ID.status,\n                                'correct error status returned');\n        should.not.exist(info, 'info is empty');\n        done();\n      });\n    });\n\n    it('Test two errors on invalid doc id', function (done) {\n      var docs = [\n        {'_id': '_invalid', foo: 'bar'},\n        {'_id': 123, foo: 'bar'}\n      ];\n\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs }, function (err, info) {\n        err.status.should.equal(testUtils.errors.RESERVED_ID.status,\n                                'correct error returned');\n        should.not.exist(info, 'info is empty');\n        done();\n      });\n    });\n\n    it('No docs', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ 'doc': [{ 'foo': 'bar' }] }, function (err) {\n        err.status.should.equal(testUtils.errors.MISSING_BULK_DOCS.status,\n                                'correct error returned');\n        err.message.should.equal(testUtils.errors.MISSING_BULK_DOCS.message,\n                                 'correct error message returned');\n        done();\n      });\n    });\n\n    it('Jira 911', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {'_id': '0', 'a': 0},\n        {'_id': '1', 'a': 1},\n        {'_id': '1', 'a': 1},\n        {'_id': '3', 'a': 3}\n      ];\n      db.bulkDocs({ docs: docs }, function (err, results) {\n        results[1].id.should.equal('1', 'check ordering');\n        should.not.exist(results[1].name, 'first id succeded');\n        results[2].name.should.equal('conflict', 'second conflicted');\n        results.should.have.length(4, 'got right amount of results');\n        done();\n      });\n    });\n\n    it('Test multiple bulkdocs', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: authors }, function () {\n        db.bulkDocs({ docs: authors }, function () {\n          db.allDocs(function (err, result) {\n            result.total_rows.should.equal(8, 'correct number of results');\n            done();\n          });\n        });\n      });\n    });\n\n    it('#2935 new_edits=false correct number', function () {\n      var docs = [\n        {\n          \"_id\": \"EE35E\",\n          \"_rev\": \"4-70b26\",\n          \"_deleted\": true,\n          \"_revisions\": {\n            \"start\": 4,\n            \"ids\": [\"70b26\", \"9f454\", \"914bf\", \"7fdf8\"]\n          }\n        }, {\n          \"_id\": \"EE35E\",\n          \"_rev\": \"3-f6d28\",\n          \"_revisions\": {\"start\": 3, \"ids\": [\"f6d28\", \"914bf\", \"7fdf8\"]}\n        }\n      ];\n\n      var db = new PouchDB(dbs.name);\n\n      return db.bulkDocs({docs: docs, new_edits: false}).then(function (res) {\n        res.should.deep.equal([]);\n        return db.allDocs();\n      }).then(function (res) {\n        res.total_rows.should.equal(1);\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1);\n      });\n    });\n\n    it('#2935 new_edits=false correct number 2', function () {\n      var docs = [\n        {\n          \"_id\": \"EE35E\",\n          \"_rev\": \"3-f6d28\",\n          \"_revisions\": {\"start\": 3, \"ids\": [\"f6d28\", \"914bf\", \"7fdf8\"]}\n        }, {\n          \"_id\": \"EE35E\",\n          \"_rev\": \"4-70b26\",\n          \"_deleted\": true,\n          \"_revisions\": {\n            \"start\": 4,\n            \"ids\": [\"70b26\", \"9f454\", \"914bf\", \"7fdf8\"]\n          }\n        }\n      ];\n\n      var db = new PouchDB(dbs.name);\n\n      return db.bulkDocs({docs: docs, new_edits: false}).then(function (res) {\n        res.should.deep.equal([]);\n        return db.allDocs();\n      }).then(function (res) {\n        res.total_rows.should.equal(1);\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1);\n      });\n    });\n\n    it('#2935 new_edits=false with single unauthorized', function (done) {\n\n      testUtils.isCouchDB(function (isCouchDB) {\n        if (adapter !== 'http' || !isCouchDB) {\n          return done();\n        }\n\n        var ddoc = {\n          \"_id\": \"_design/validate\",\n          \"validate_doc_update\": function (newDoc) {\n            if (newDoc.foo === undefined) {\n              throw {unauthorized: 'Document must have a foo.'};\n            }\n          }.toString()\n        };\n\n        var db = new PouchDB(dbs.name);\n\n        db.put(ddoc).then(function () {\n          return db.bulkDocs({\n            docs: [\n              {\n                '_id': 'doc0',\n                '_rev': '1-x',\n                'foo': 'bar',\n                '_revisions': {\n                  'start': 1,\n                  'ids': ['x']\n                }\n              }, {\n                '_id': 'doc1',\n                '_rev': '1-x',\n                '_revisions': {\n                  'start': 1,\n                  'ids': ['x']\n                }\n              }, {\n                '_id': 'doc2',\n                '_rev': '1-x',\n                'foo': 'bar',\n                '_revisions': {\n                  'start': 1,\n                  'ids': ['x']\n                }\n              }\n            ]\n          }, {new_edits: false});\n        }).then(function (res) {\n          res.should.have.length(1);\n          should.exist(res[0].error);\n          res[0].id.should.equal('doc1');\n        }).then(done);\n      });\n    });\n\n    it('Deleting _local docs with bulkDocs' , function () {\n      var db = new PouchDB(dbs.name);\n\n      var rev1;\n      var rev2;\n      var rev3;\n      return db.put({_id: '_local/godzilla'}).then(function (info) {\n        rev1 = info.rev;\n        return db.put({_id: 'mothra'});\n      }).then(function (info) {\n        rev2 = info.rev;\n        return db.put({_id: 'rodan'});\n      }).then(function (info) {\n        rev3 = info.rev;\n        return db.bulkDocs([\n          {_id: 'mothra', _rev: rev2, _deleted: true},\n          {_id: '_local/godzilla', _rev: rev1, _deleted: true},\n          {_id: 'rodan', _rev: rev3, _deleted: true}\n        ]);\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (info) {\n        info.rows.should.have.length(0);\n        return db.get('_local/godzilla').then(function () {\n          throw new Error('expected 404');\n        }, function (err) {\n          should.exist(err);\n        });\n      });\n    });\n\n    if (adapter === 'local') {\n      // these tests crash CouchDB with a 500, neat\n      // https://issues.apache.org/jira/browse/COUCHDB-2758\n\n      it('Deleting _local docs with bulkDocs, not found', function () {\n        var db = new PouchDB(dbs.name);\n\n        var rev2;\n        var rev3;\n        return db.put({_id: 'mothra'}).then(function (info) {\n          rev2 = info.rev;\n          return db.put({_id: 'rodan'});\n        }).then(function (info) {\n          rev3 = info.rev;\n          return db.bulkDocs([\n            {_id: 'mothra', _rev: rev2, _deleted: true},\n            {_id: '_local/godzilla', _rev: '1-fake', _deleted: true},\n            {_id: 'rodan', _rev: rev3, _deleted: true}\n          ]);\n        }).then(function (res) {\n          should.not.exist(res[0].error);\n          should.exist(res[1].error);\n          should.not.exist(res[2].error);\n        });\n      });\n\n      it('Deleting _local docs with bulkDocs, wrong rev', function () {\n        var db = new PouchDB(dbs.name);\n\n        var rev2;\n        var rev3;\n        return db.put({_id: '_local/godzilla'}).then(function () {\n          return db.put({_id: 'mothra'});\n        }).then(function (info) {\n          rev2 = info.rev;\n          return db.put({_id: 'rodan'});\n        }).then(function (info) {\n          rev3 = info.rev;\n          return db.bulkDocs([\n            {_id: 'mothra', _rev: rev2, _deleted: true},\n            {_id: '_local/godzilla', _rev: '1-fake', _deleted: true},\n            {_id: 'rodan', _rev: rev3, _deleted: true}\n          ]);\n        }).then(function (res) {\n          should.not.exist(res[0].error);\n          should.exist(res[1].error);\n          should.not.exist(res[2].error);\n        });\n      });\n    }\n\n    it('Bulk with new_edits=false', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [{\n        '_id': 'foo',\n        '_rev': '2-x',\n        '_revisions': {\n          'start': 2,\n          'ids': ['x', 'a']\n        }\n      }, {\n        '_id': 'foo',\n        '_rev': '2-y',\n        '_revisions': {\n          'start': 2,\n          'ids': ['y', 'a']\n        }\n      }];\n      db.bulkDocs({docs: docs}, {new_edits: false}, function () {\n        db.get('foo', {open_revs: 'all'}, function (err, res) {\n          res.sort(function (a, b) {\n            return a.ok._rev < b.ok._rev ? -1 :\n              a.ok._rev > b.ok._rev ? 1 : 0;\n          });\n          res.length.should.equal(2);\n          res[0].ok._rev.should.equal('2-x', 'doc1 ok');\n          res[1].ok._rev.should.equal('2-y', 'doc2 ok');\n          done();\n        });\n      });\n    });\n\n    it('Testing successive new_edits to the same doc', function (done) {\n\n      var db = new PouchDB(dbs.name);\n      var docs = [{\n        '_id': 'foobar123',\n        '_rev': '1-x',\n        'bar': 'huzzah',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      }];\n\n      db.bulkDocs({docs: docs, new_edits: false}, function (err) {\n        should.not.exist(err);\n        db.bulkDocs({docs: docs, new_edits: false}, function (err) {\n          should.not.exist(err);\n          db.get('foobar123', function (err, res) {\n            res._rev.should.equal('1-x');\n            done();\n          });\n        });\n      });\n    });\n\n    it('#3062 bulkDocs with staggered seqs', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      for (var i = 10; i <= 20; i++) {\n        docs.push({ _id: 'doc-' + i});\n      }\n      return db.bulkDocs({docs: docs}).then(function (infos) {\n        docs.forEach(function (doc, i) {\n          doc._rev = infos[i].rev;\n        });\n        var docsToUpdate = docs.filter(function (doc, i) {\n          return i % 2 === 1;\n        });\n        docsToUpdate.reverse();\n        return db.bulkDocs({docs: docsToUpdate});\n      }).then(function (infos) {\n        infos.map(function (x) {\n          return {id: x.id, error: !!x.error, rev: (typeof x.rev)};\n        }).should.deep.equal([\n          { error: false, id: 'doc-19', rev: 'string'},\n          { error: false, id: 'doc-17', rev: 'string'},\n          { error: false, id: 'doc-15', rev: 'string'},\n            { error: false, id: 'doc-13', rev: 'string'},\n          { error: false, id: 'doc-11', rev: 'string'}\n        ]);\n      });\n    });\n\n    it('Testing successive new_edits to the same doc, different content',\n      function (done) {\n\n      var db = new PouchDB(dbs.name);\n      var docsA = [{\n        '_id': 'foo321',\n        '_rev': '1-x',\n        'bar' : 'baz',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      }, {\n        '_id' : 'fee321',\n        'bar': 'quux',\n        '_rev': '1-x',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      }];\n\n      var docsB = [{\n        '_id': 'foo321',\n        '_rev': '1-x',\n        'bar' : 'zam', // this update should be rejected\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      }, {\n        '_id' : 'faa321',\n        '_rev': '1-x',\n        'bar': 'zul',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      }];\n\n      db.bulkDocs({docs: docsA, new_edits: false}, function (err) {\n        should.not.exist(err);\n        db.changes().on('complete', function (result) {\n          var ids = result.results.map(function (row) {\n            return row.id;\n          });\n          ids.should.include(\"foo321\");\n          ids.should.include(\"fee321\");\n          ids.should.not.include(\"faa321\");\n\n          var update_seq = result.last_seq;\n          db.bulkDocs({docs: docsB, new_edits: false}, function (err) {\n            should.not.exist(err);\n            db.changes({\n              since: update_seq\n            }).on('complete', function (result) {\n              var ids = result.results.map(function (row) {\n                return row.id;\n              });\n              ids.should.not.include(\"foo321\");\n              ids.should.not.include(\"fee321\");\n              ids.should.include(\"faa321\");\n\n              db.get('foo321', function (err, res) {\n                res._rev.should.equal('1-x');\n                res.bar.should.equal(\"baz\");\n                db.info(function (err, info) {\n                  info.doc_count.should.equal(3);\n                  done();\n                });\n              });\n            }).on('error', done);\n          });\n        }).on('error', done);\n      });\n    });\n\n    it('Testing successive new_edits to two doc', function () {\n\n      var db = new PouchDB(dbs.name);\n      var doc1 = {\n        '_id': 'foo',\n        '_rev': '1-x',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      };\n      var doc2 = {\n        '_id': 'bar',\n        '_rev': '1-x',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      };\n\n      return db.put(doc1, {new_edits: false}).then(function () {\n        return db.put(doc2, {new_edits: false});\n      }).then(function () {\n        return db.put(doc1, {new_edits: false});\n      }).then(function () {\n        return db.get('foo');\n      }).then(function () {\n        return db.get('bar');\n      });\n    });\n\n    it('Deletion with new_edits=false', function () {\n\n      var db = new PouchDB(dbs.name);\n      var doc1 = {\n        '_id': 'foo',\n        '_rev': '1-x',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      };\n      var doc2 = {\n        '_deleted': true,\n        '_id': 'foo',\n        '_rev': '2-y',\n        '_revisions': {\n          'start': 2,\n          'ids': ['y', 'x']\n        }\n      };\n\n      return db.put(doc1, {new_edits: false}).then(function () {\n        return db.put(doc2, {new_edits: false});\n      }).then(function () {\n        return db.allDocs({keys: ['foo']});\n      }).then(function (res) {\n        res.rows[0].value.rev.should.equal('2-y');\n        res.rows[0].value.deleted.should.equal(true);\n      });\n    });\n\n    it('Deletion with new_edits=false, no history', function () {\n\n      var db = new PouchDB(dbs.name);\n      var doc1 = {\n        '_id': 'foo',\n        '_rev': '1-x',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      };\n      var doc2 = {\n        '_deleted': true,\n        '_id': 'foo',\n        '_rev': '2-y'\n      };\n\n      return db.put(doc1, {new_edits: false}).then(function () {\n        return db.put(doc2, {new_edits: false});\n      }).then(function () {\n        return db.allDocs({keys: ['foo']});\n      }).then(function (res) {\n        res.rows[0].value.rev.should.equal('1-x');\n        should.equal(!!res.rows[0].value.deleted, false);\n      });\n    });\n\n    it('Modification with new_edits=false, no history', function () {\n\n      var db = new PouchDB(dbs.name);\n      var doc1 = {\n        '_id': 'foo',\n        '_rev': '1-x',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      };\n      var doc2 = {\n        '_id': 'foo',\n        '_rev': '2-y'\n      };\n\n      return db.put(doc1, {new_edits: false}).then(function () {\n        return db.put(doc2, {new_edits: false});\n      }).then(function () {\n        return db.allDocs({keys: ['foo']});\n      }).then(function (res) {\n        res.rows[0].value.rev.should.equal('2-y');\n      });\n    });\n\n    it('Deletion with new_edits=false, no history, no revisions', function () {\n\n      var db = new PouchDB(dbs.name);\n      var doc = {\n        '_deleted': true,\n        '_id': 'foo',\n        '_rev': '2-y'\n      };\n\n      return db.put(doc, {new_edits: false}).then(function () {\n        return db.allDocs({keys: ['foo']});\n      }).then(function (res) {\n        res.rows[0].value.rev.should.equal('2-y');\n        res.rows[0].value.deleted.should.equal(true);\n      });\n    });\n\n    it('Testing new_edits=false in req body', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [{\n        '_id': 'foo',\n        '_rev': '2-x',\n        '_revisions': {\n          'start': 2,\n          'ids': ['x', 'a']\n        }\n      }, {\n        '_id': 'foo',\n        '_rev': '2-y',\n        '_revisions': {\n          'start': 2,\n          'ids': ['y', 'a']\n        }\n      }];\n      db.bulkDocs({docs: docs, new_edits: false}, function () {\n        db.get('foo', {open_revs: 'all'}, function (err, res) {\n          res.sort(function (a, b) {\n            return a.ok._rev < b.ok._rev ? -1 :\n              a.ok._rev > b.ok._rev ? 1 : 0;\n          });\n          res.length.should.equal(2);\n          res[0].ok._rev.should.equal('2-x', 'doc1 ok');\n          res[1].ok._rev.should.equal('2-y', 'doc2 ok');\n          done();\n        });\n      });\n    });\n\n    it('656 regression in handling deleted docs', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [{\n          _id: 'foo',\n          _rev: '1-a',\n          _deleted: true\n        }]\n      }, { new_edits: false }, function () {\n        db.get('foo', function (err) {\n          should.exist(err, 'deleted');\n          err.name.should.equal('not_found');\n          err.status.should.equal(testUtils.errors.MISSING_DOC.status,\n                                   'correct error status returned');\n          done();\n        });\n      });\n    });\n\n    it('Test quotes in doc ids', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [{ _id: '\\'your_sql_injection_script_here\\'' }];\n      db.bulkDocs({docs: docs}, function (err) {\n        should.not.exist(err, 'got error: ' + JSON.stringify(err));\n        db.get('foo', function (err) {\n          should.exist(err, 'deleted');\n          done();\n        });\n      });\n    });\n\n    it('Bulk docs empty list', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: [] }, function (err) {\n        done(err);\n      });\n    });\n\n    it('handles simultaneous writes', function (done) {\n      var db1 = new PouchDB(dbs.name);\n      var db2 = new PouchDB(dbs.name);\n      var id = 'fooId';\n      var errorNames = [];\n      var ids = [];\n      var numDone = 0;\n      function callback(err, res) {\n        should.not.exist(err);\n        if (res[0].error) {\n          errorNames.push(res[0].name);\n        } else {\n          ids.push(res[0].id);\n        }\n        if (++numDone === 2) {\n          errorNames.should.deep.equal(['conflict']);\n          ids.should.deep.equal([id]);\n          done();\n        }\n      }\n      db1.bulkDocs({docs : [{_id : id}]}, callback);\n      db2.bulkDocs({docs : [{_id : id}]}, callback);\n    });\n\n    it('bulk docs input by array', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = makeDocs(5);\n      db.bulkDocs(docs, function (err, results) {\n        results.should.have.length(5, 'results length matches');\n        for (var i = 0; i < 5; i++) {\n          results[i].id.should.equal(docs[i]._id, 'id matches');\n          should.exist(results[i].rev, 'rev is set');\n          // Update the doc\n          docs[i]._rev = results[i].rev;\n          docs[i].string = docs[i].string + '.00';\n        }\n        db.bulkDocs(docs, function (err, results) {\n          results.should.have.length(5, 'results length matches');\n          for (i = 0; i < 5; i++) {\n            results[i].id.should.equal(i.toString(), 'id matches again');\n            // set the delete flag to delete the docs in the next step\n            docs[i]._rev = results[i].rev;\n            docs[i]._deleted = true;\n          }\n          db.put(docs[0], function () {\n            db.bulkDocs(docs, function (err, results) {\n              results[0].name.should.equal(\n                'conflict', 'First doc should be in conflict');\n              should.not.exist(results[0].rev, 'no rev in conflict');\n              for (i = 1; i < 5; i++) {\n                results[i].id.should.equal(i.toString());\n                should.exist(results[i].rev);\n              }\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Bulk empty list', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs([], function (err) {\n        done(err);\n      });\n    });\n\n    it('Bulk docs not an array', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: 'foo' }, function (err) {\n        should.exist(err, 'error reported');\n        err.status.should.equal(testUtils.errors.MISSING_BULK_DOCS.status,\n                                'correct error status returned');\n        err.message.should.equal(testUtils.errors.MISSING_BULK_DOCS.message,\n                                 'correct error message returned');\n        done();\n      });\n    });\n\n    it('Bulk docs not an object', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: ['foo'] }, function (err) {\n        should.exist(err, 'error reported');\n        err.status.should.equal(testUtils.errors.NOT_AN_OBJECT.status,\n                                'correct error status returned');\n        err.message.should.equal(testUtils.errors.NOT_AN_OBJECT.message,\n                                 'correct error message returned');\n      });\n      db.bulkDocs({ docs: [[]] }, function (err) {\n        should.exist(err, 'error reported');\n        err.status.should.equal(testUtils.errors.NOT_AN_OBJECT.status,\n                                'correct error status returned');\n        err.message.should.equal(testUtils.errors.NOT_AN_OBJECT.message,\n                                 'correct error message returned');\n        done();\n      });\n    });\n\n    it('Bulk docs two different revisions to same document id', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docid = \"mydoc\";\n\n      function uuid() {\n          return testUtils.uuid(32, 16).toLowerCase();\n      }\n\n      // create a few of rando, good revisions\n      var numRevs = 3;\n      var uuids = [];\n      for (var i = 0; i < numRevs - 1; i++) {\n          uuids.push(uuid());\n      }\n\n      // branch 1\n      var a_conflict = uuid();\n      var a_doc = {\n        _id: docid,\n        _rev: numRevs + '-' + a_conflict,\n        _revisions: {\n          start: numRevs,\n          ids: [ a_conflict ].concat(uuids)\n        }\n      };\n\n      // branch 2\n      var b_conflict = uuid();\n      var b_doc = {\n        _id: docid,\n        _rev: numRevs + '-' + b_conflict,\n        _revisions: {\n          start: numRevs,\n          ids: [ b_conflict ].concat(uuids)\n        }\n      };\n\n      // push the conflicted documents\n      return db.bulkDocs([ a_doc, b_doc ], { new_edits: false })\n\n      .then(function () {\n        return db.get(docid, { open_revs: \"all\" }).then(function (resp) {\n          resp.length.should.equal(2, 'correct number of open revisions');\n          resp[0].ok._id.should.equal(docid, 'rev 1, correct document id');\n          resp[1].ok._id.should.equal(docid, 'rev 2, correct document id');\n\n          // order of revisions is not specified\n          ((resp[0].ok._rev === a_doc._rev &&\n            resp[1].ok._rev === b_doc._rev) ||\n          (resp[0].ok._rev === b_doc._rev &&\n            resp[1].ok._rev === a_doc._rev)).should.equal(true);\n        });\n      })\n\n      .then(function () { done(); }, done);\n    });\n\n    it('4204 respect revs_limit', function () {\n      var db = new PouchDB(dbs.name);\n\n      // simulate 5000 normal commits with two conflicts at the very end\n      function uuid() {\n        return testUtils.uuid(32, 16).toLowerCase();\n      }\n\n      var isSafari = (typeof process === 'undefined' || process.browser) &&\n        /Safari/.test(window.navigator.userAgent) &&\n        !/Chrome/.test(window.navigator.userAgent);\n\n      var numRevs = isSafari ? 10 : 5000;\n      var expected = isSafari ? 10 : 1000;\n      var uuids = [];\n\n      for (var i = 0; i < numRevs - 1; i++) {\n        uuids.push(uuid());\n      }\n      var conflict1 = 'a' + uuid();\n\n      var doc1 = {\n        _id: 'doc',\n        _rev: numRevs + '-' + conflict1,\n        _revisions: {\n          start: numRevs,\n          ids: [conflict1].concat(uuids)\n        }\n      };\n\n      return db.bulkDocs([doc1], {new_edits: false}).then(function () {\n        return db.get('doc', {revs: true});\n      }).then(function (doc) {\n        doc._revisions.ids.length.should.equal(expected);\n      });\n    });\n\n    it('2839 implement revs_limit', function (done) {\n\n      // We only implement revs_limit locally\n      if (adapter === 'http') {\n        return done();\n      }\n\n      var LIMIT = 50;\n      var db = new PouchDB(dbs.name, {revs_limit: LIMIT});\n\n      // simulate 5000 normal commits with two conflicts at the very end\n      function uuid() {\n        return testUtils.uuid(32, 16).toLowerCase();\n      }\n\n      var numRevs = 5000;\n      var uuids = [];\n      for (var i = 0; i < numRevs - 1; i++) {\n        uuids.push(uuid());\n      }\n      var conflict1 = 'a' + uuid();\n      var doc1 = {\n        _id: 'doc',\n        _rev: numRevs + '-' + conflict1,\n        _revisions: {\n          start: numRevs,\n          ids: [conflict1].concat(uuids)\n        }\n      };\n\n      db.bulkDocs([doc1], {new_edits: false}).then(function () {\n        return db.get('doc', {revs: true});\n      }).then(function (doc) {\n        doc._revisions.ids.length.should.equal(LIMIT);\n        done();\n      }).catch(done);\n    });\n\n    it('4372 revs_limit deletes old revisions of the doc', function (done) {\n\n      // We only implement revs_limit locally\n      if (adapter === 'http') {\n        return done();\n      }\n\n      var db = new PouchDB(dbs.name, {revs_limit: 2});\n\n      // old revisions are always deleted with auto compaction\n      if (db.auto_compaction) {\n        return done();\n      }\n\n      var revs = [];\n      db.put({_id: 'doc', v: 1}).then(function (v1) {\n        revs.push(v1.rev);\n        return db.put({_id: 'doc', _rev: revs[0], v: 2});\n      }).then(function (v2) {\n        revs.push(v2.rev);\n        return db.put({_id: 'doc', _rev: revs[1], v: 3});\n      }).then(function () {\n        // the v2 revision is still in the db\n        return db.get('doc', {rev: revs[1]});\n      }).then(function (v2) {\n        v2.v.should.equal(2);\n\n        return db.get('doc', {rev: revs[0]}).then(function () {\n          // the v1 revision is not in the db anymore\n          done(new Error('v1 should be missing'));\n        }).catch(function (error) {\n          error.message.should.equal('missing');\n          done();\n        });\n      }).catch(done);\n    });\n\n    it('4712 invalid rev for new doc generates conflict', function () {\n      // CouchDB 1.X has a bug which allows this insertion via bulk_docs\n      // (which PouchDB uses for all document insertions)\n      if (adapter === 'http' && !testUtils.isCouchMaster()) {\n        return;\n      }\n\n      var db = new PouchDB(dbs.name);\n      var newdoc = {\n        '_id': 'foobar',\n        '_rev': '1-123'\n      };\n\n      return db.bulkDocs({ docs: [newdoc] }).then (function (results) {\n        results[0].should.have.property('status', 409);\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.bulk_get.js",
    "content": "'use strict';\n\nvar adapters = ['http', 'local'];\n\nadapters.forEach(function (adapter) {\n  describe('test.bulk_get.js-' + adapter, function () {\n\n    var dbs = {};\n    beforeEach(function (done) {\n      dbs = {name: testUtils.adapterUrl(adapter, 'testdb')};\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    afterEach(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    it('test bulk get with rev specified', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({_id: 'foo', val: 1}).then(function (response) {\n        var rev = response.rev;\n        db.bulkGet({\n          docs: [\n            {id: 'foo', rev: rev}\n          ]\n        }).then(function (response) {\n          var result = response.results[0];\n          result.id.should.equal(\"foo\");\n          result.docs[0].ok._rev.should.equal(rev);\n          done();\n        });\n      });\n    });\n\n    it('test bulk get with no rev specified', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({_id: 'foo', val: 1}).then(function (response) {\n        var rev = response.rev;\n        db.bulkGet({\n          docs: [\n            {id: 'foo'}\n          ]\n        }).then(function (response) {\n          var result = response.results[0];\n          result.id.should.equal(\"foo\");\n          result.docs[0].ok._rev.should.equal(rev);\n          done();\n        });\n      });\n    });\n\n    it('_revisions is not returned by default', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({_id: 'foo', val: 1}).then(function (response) {\n        var rev = response.rev;\n        db.bulkGet({\n          docs: [\n            {id: 'foo', rev: rev}\n          ]\n        }).then(function (response) {\n          var result = response.results[0];\n          should.not.exist(result.docs[0].ok._revisions);\n          done();\n        });\n      });\n    });\n\n    it('_revisions is returned when specified', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({_id: 'foo', val: 1}).then(function (response) {\n        var rev = response.rev;\n        db.bulkGet({\n          docs: [\n            {id: 'foo', rev: rev}\n          ],\n          revs: true\n        }).then(function (response) {\n          var result = response.results[0];\n          result.docs[0].ok._revisions.ids[0].should.equal(rev.substring(2));\n          done();\n        });\n      });\n    });\n\n    it('_revisions is returned when specified, using implicit rev',\n    function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({_id: 'foo', val: 1}).then(function (response) {\n        var rev = response.rev;\n        db.bulkGet({\n          docs: [\n            {id: 'foo'}\n          ],\n          revs: true\n        }).then(function (response) {\n          var result = response.results[0];\n          result.docs[0].ok._revisions.ids[0].should.equal(rev.substring(2));\n          done();\n        });\n      });\n    });\n\n    it('attachments are not included by default', function (done) {\n      var db = new PouchDB(dbs.name);\n\n      db.put({\n        _id: 'foo',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ='\n          }\n        }\n      }).then(function (response) {\n        var rev = response.rev;\n\n        db.bulkGet({\n          docs: [\n            {id: 'foo', rev: rev}\n          ]\n        }).then(function (response) {\n          var result = response.results[0];\n          result.docs[0].ok._attachments['foo.txt'].stub.should.equal(true);\n          done();\n        });\n      });\n    });\n\n    it('attachments are included when specified', function (done) {\n      var db = new PouchDB(dbs.name);\n\n      db.put({\n        _id: 'foo',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ='\n          }\n        }\n      }).then(function (response) {\n        var rev = response.rev;\n\n        db.bulkGet({\n          docs: [\n            {id: 'foo', rev: rev}\n          ],\n          attachments: true\n        }).then(function (response) {\n          var result = response.results[0];\n          result.docs[0].ok._attachments['foo.txt'].data\n            .should.equal(\"VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=\");\n          done();\n        });\n      });\n    });\n\n    it('attachments are included when specified, using implicit rev',\n    function (done) {\n      var db = new PouchDB(dbs.name);\n\n      db.put({\n        _id: 'foo',\n        _attachments: {\n          'foo.txt': {\n            content_type: 'text/plain',\n            data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ='\n          }\n        }\n      }).then(function () {\n        db.bulkGet({\n          docs: [\n            {id: 'foo'}\n          ],\n          attachments: true\n        }).then(function (response) {\n          var result = response.results[0];\n          result.docs[0].ok._attachments['foo.txt'].data\n            .should.equal(\"VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=\");\n          done();\n        });\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.changes.js",
    "content": "\n'use strict';\n\nvar adapters = ['http', 'local'];\n\nadapters.forEach(function (adapter) {\n\n  describe('test.changes.js-' + adapter, function () {\n\n    var dbs = {};\n\n    // if it exists, return the single element\n    // which has the specific id. Else retun null.\n    // useful for finding elements within a _changes feed\n    function findById(array, id) {\n      var result = array.filter(function (i) {\n        return i.id === id;\n      });\n\n      //\n      if (result.length === 1) {\n        return result[0];\n      }\n    }\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapter, 'test_repl_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    it('All changes', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ test: 'somestuff' }, function () {\n        var promise = db.changes({\n          }).on('change', function (change) {\n            change.should.not.have.property('doc');\n            change.should.have.property('seq');\n            done();\n          });\n        should.exist(promise);\n        promise.cancel.should.be.a('function');\n      });\n    });\n\n    it('Promise resolved when changes cancelled', function (done) {\n      var docs = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3},\n        {_id: '4', integer: 4},\n        {_id: '5', integer: 5},\n        {_id: '6', integer: 6},\n        {_id: '7', integer: 7},\n        {_id: '8', integer: 9},\n        {_id: '9', integer: 9},\n        {_id: '10', integer: 10}\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs }, function () {\n        var changeCount = 0;\n        var promise = db.changes().on('change', function handler() {\n          changeCount++;\n          if (changeCount === 5) {\n            promise.cancel();\n            promise.removeListener('change', handler);\n          }\n        });\n        should.exist(promise);\n        should.exist(promise.then);\n        promise.then.should.be.a('function');\n        promise.then(\n        function (result) {\n          changeCount.should.equal(5, 'changeCount');\n          should.exist(result);\n          result.should.deep.equal({status: 'cancelled'});\n          done();\n        }, function (err) {\n          changeCount.should.equal(5, 'changeCount');\n          should.exist(err);\n          done();\n        });\n      });\n    });\n\n    it('Changes Since', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3},\n        {_id: '4', integer: 4},\n        {_id: '5', integer: 5},\n        {_id: '6', integer: 6},\n        {_id: '7', integer: 7},\n        {_id: '8', integer: 9},\n        {_id: '9', integer: 9},\n        {_id: '10', integer: 10},\n        {_id: '11', integer: 11}\n      ];\n      var db = new PouchDB(dbs.name);\n\n      db.bulkDocs({ docs: docs1 }, function () {\n        db.info(function (err, info) {\n          var update_seq = info.update_seq;\n\n          var docs2 = [\n            {_id: '12', integer: 12},\n            {_id: '13', integer: 13}\n          ];\n\n          db.bulkDocs({ docs: docs2 }, function () {\n            var promise = db.changes({\n              since: update_seq\n            }).on('complete', function (results) {\n              results.results.length.should.be.at.least(2);\n              done();\n            });\n            should.exist(promise);\n            promise.cancel.should.be.a('function');\n          });\n        });\n      });\n    });\n\n    it('Changes Since and limit limit 1', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2}\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs1 }, function () {\n        db.info(function (err, info) {\n          var update_seq = info.update_seq;\n\n          var docs2 = [\n            {_id: '3', integer: 3},\n            {_id: '4', integer: 4}\n          ];\n\n          db.bulkDocs({ docs: docs2 }, function () {\n            db.changes({\n              since: update_seq,\n              limit: 1\n            }).on('complete', function (results) {\n              results.results.length.should.equal(1);\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Changes Since and limit limit 0', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2}\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs1 }, function () {\n        db.info(function (err, info) {\n          var update_seq = info.update_seq;\n\n          var docs2 = [\n            {_id: '3', integer: 3},\n            {_id: '4', integer: 4}\n          ];\n\n          db.bulkDocs({ docs: docs2 }, function () {\n            db.changes({\n              since: update_seq,\n              limit: 0\n            }).on('complete', function (results) {\n              results.results.length.should.equal(1);\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Changes limit', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var docs2 = [\n        {_id: '2', integer: 11},\n        {_id: '3', integer: 12}\n      ];\n      var db = new PouchDB(dbs.name);\n      // we use writeDocs since bulkDocs looks to have undefined\n      // order of doing insertions\n      testUtils.writeDocs(db, docs1, function (err, info) {\n        docs2[0]._rev = info[2].rev;\n        docs2[1]._rev = info[3].rev;\n\n        db.info(function (err, info) {\n          var update_seq = info.update_seq;\n\n          db.put(docs2[0], function (err, info) {\n            docs2[0]._rev = info.rev;\n            db.put(docs2[1], function (err, info) {\n              docs2[1]._rev = info.rev;\n              db.changes({\n                limit: 2,\n                since: update_seq,\n                include_docs: true\n              }).on('complete', function (results) {\n                results = results.results;\n                results.length.should.equal(2);\n\n                // order is not guaranteed\n                var first = results[0];\n                var second = results[1];\n                if (first.id === '3') {\n                  second = first;\n                  first = results[1];\n                }\n                first.id.should.equal('2');\n                first.doc.integer.should.equal(docs2[0].integer);\n                first.doc._rev.should.equal(docs2[0]._rev);\n                second.id.should.equal('3');\n                second.doc.integer.should.equal(docs2[1].integer);\n                second.doc._rev.should.equal(docs2[1]._rev);\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Changes with filter not present in ddoc', function (done) {\n      this.timeout(15000);\n      var docs = [\n        {_id: '1', integer: 1},\n        { _id: '_design/foo',\n          integer: 4,\n          filters: { even: 'function (doc) { return doc.integer % 2 === 1; }' }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, docs, function () {\n        db.changes({\n          filter: 'foo/odd',\n          limit: 2,\n          include_docs: true\n        }).on('error', function (err) {\n          err.name.should.equal('not_found');\n          err.status.should.equal(testUtils.errors.MISSING_DOC.status,\n                                  'correct error status returned');\n          done();\n        });\n      });\n    });\n\n    it('Changes with `filters` key not present in ddoc', function (done) {\n      var docs = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {\n          _id: '_design/foo',\n          integer: 4,\n          views: {\n            even: {\n              map: 'function (doc) { if (doc.integer % 2 === 1)' +\n               ' { emit(doc._id, null) }; }'\n            }\n          }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, docs, function () {\n        db.changes({\n          filter: 'foo/even',\n          limit: 2,\n          include_docs: true\n        }).on('error', function (err) {\n          err.status.should.equal(testUtils.errors.MISSING_DOC.status,\n                                  'correct error status returned');\n          err.name.should.equal('not_found');\n          done();\n        });\n      });\n    });\n\n    it('Changes limit and filter', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2}\n      ];\n      var db = new PouchDB(dbs.name);\n\n      var docs2 = [\n        {_id: '3', integer: 3},\n        {_id: '4', integer: 4},\n        {_id: '5', integer: 5},\n        {\n          _id: '_design/foo',\n          integer: 4,\n          filters: { even: 'function (doc) { return doc.integer % 2 === 1; }' }\n        }\n      ];\n\n      db.bulkDocs({ docs: docs1 }, function () {\n        db.info(function (err, info) {\n          var update_seq = info.update_seq;\n\n          testUtils.writeDocs(db, docs2, function () {\n            var promise = db.changes({\n              filter: 'foo/even',\n              limit: 2,\n              since: update_seq,\n              include_docs: true\n            }).on('complete', function (results) {\n              results.results.length.should.equal(2);\n              var three = findById(results.results, '3');\n              three.doc.integer.should.equal(3);\n              var five = findById(results.results, '5');\n              five.doc.integer.should.equal(5);\n              done();\n            }).on('error', done);\n            should.exist(promise);\n            promise.cancel.should.be.a('function');\n          });\n        });\n      });\n    });\n\n    it('Changes with shorthand function name', function (done) {\n      var docs = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {\n          _id: '_design/even',\n          integer: 3,\n          filters: { even: 'function (doc) { return doc.integer % 2 === 0; }' }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n\n      db.bulkDocs({ docs: docs }, function () {\n        var promise = db.changes({\n          filter: 'even',\n          include_docs: true\n        }).on('complete', function (results) {\n          results.results.length.should.equal(2);\n          var zero = findById(results.results, '0');\n          zero.doc.integer.should.equal(0);\n          var two = findById(results.results, '2');\n          two.doc.integer.should.equal(2);\n          done();\n        }).on('error', done);\n        should.exist(promise);\n        promise.cancel.should.be.a('function');\n      });\n    });\n\n    it('Changes with filter from nonexistent ddoc', function (done) {\n      var docs = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1}\n      ];\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, docs, function () {\n        db.changes({\n          filter: 'foobar/odd'\n        }).on('error', function (err) {\n          should.exist(err);\n          done();\n        });\n      });\n    });\n\n    it('Changes with view not present in ddoc', function (done) {\n      var docs = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {\n          _id: '_design/foo',\n          integer: 4,\n          views:\n            { even:\n              { map: 'function (doc) { if (doc.integer % 2 === 1) { ' +\n                     'emit(doc._id, null) }; }' } }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, docs, function () {\n        db.changes({\n          filter: '_view',\n          view: 'foo/odd'\n        }).on('error', function (err) {\n          err.status.should.equal(testUtils.errors.MISSING_DOC.status,\n                                  'correct error status returned');\n          err.name.should.equal('not_found');\n          done();\n        });\n      });\n    });\n\n    it('Changes with `views` key not present in ddoc', function (done) {\n      var docs = [\n        {_id: '1', integer: 1},\n        {\n          _id: '_design/foo',\n          integer: 4,\n          filters: { even: 'function (doc) { return doc.integer % 2 === 1; }' }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, docs, function () {\n        db.changes({\n          filter: '_view',\n          view: 'foo/even'\n        }).on('error', function (err) {\n          err.status.should.equal(testUtils.errors.MISSING_DOC.status,\n                                  'correct error status returned');\n          err.name.should.equal('not_found');\n          done();\n        });\n      });\n    });\n\n    it('#4451 Changes with invalid view filter', function (done) {\n      var docs = [\n        {_id: '1', integer: 1},\n        {\n          _id: '_design/foo',\n          filters: { even: 'function (doc) { return doc.integer % 2 === 1; }' }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs(docs).then(function () {\n        db.changes({filter: 'a/b/c'}).on('error', function () {\n          done('should not be called');\n        }).on('complete', function () {\n          done();\n        });\n      });\n    });\n\n    it('3356 throw inside a filter', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({\n        _id: \"_design/test\",\n        filters: {\n          test: function () {\n            throw new Error(); // syntaxerrors can't be caught either.\n          }.toString()\n        }\n      }).should.eventually.be.fulfilled.then(function () {\n        return db.changes({filter: 'test/test'}).should.eventually.be.rejected;\n      }).then(function () {\n        done();\n      }).catch(function (err) {\n        done('We had an error - ' + err);\n      });\n    });\n\n    it('Changes with missing param `view` in request', function (done) {\n      var docs = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {\n          _id: '_design/foo',\n          integer: 4,\n          views: { even: { map: 'function (doc) { if (doc.integer % 2 === 1) ' +\n                           '{ emit(doc._id, null) }; }' } }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, docs, function () {\n        db.changes({\n          filter: '_view'\n        }).on('error', function (err) {\n          err.status.should.equal(testUtils.errors.BAD_REQUEST.status,\n                                  'correct error status returned');\n          err.name.should.equal('bad_request');\n          done();\n        });\n      });\n    });\n\n    it('Changes limit and view instead of filter', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2}\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs1 }, function () {\n        db.info(function (err, info) {\n          var update_seq = info.update_seq;\n\n          var docs2 = [\n            {_id: '3', integer: 3},\n            {_id: '4', integer: 4},\n            {_id: '5', integer: 5},\n            {\n              _id: '_design/foo',\n              integer: 4,\n              views: { even: { map: 'function (doc) ' +\n                '{ if (doc.integer % 2 === 1) ' +\n                '{ emit(doc._id, null) }; }'\n                }\n              }\n            }\n          ];\n\n          db.bulkDocs({ docs: docs2 }, function () {\n\n            db.changes({\n              filter: '_view',\n              view: 'foo/even',\n              limit: 2,\n              since: update_seq,\n              include_docs: true\n            }).on('complete', function (results) {\n              var changes = results.results;\n              changes.length.should.equal(2);\n\n              findById(changes, '3')\n                .doc.integer.should.equal(3);\n\n              findById(changes, '5')\n                .doc.integer.should.equal(5);\n\n              done();\n            }).on('error', done);\n          });\n        });\n      });\n    });\n\n    it('#3609 view option implies filter: _view', function () {\n      var docs = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '_design/foo', integer: 3,\n         views: {\n           even: {\n             map: 'function (doc) { if (doc.integer % 2 === 1) ' +\n               '{ emit(doc._id, null) }; }'\n           }\n         }\n        }\n      ];\n\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs(docs).then(function () {\n        return db.changes({view: 'foo/even'});\n      }).then(function (changes) {\n        changes.results.length.should.equal(2);\n      });\n    });\n\n    it('Changes last_seq', function (done) {\n      // this test doesn't really make sense for clustered\n      // CouchDB because changes is unordered and last_seq might\n      // not equal the last seq in the _changes feed (although it\n      // should evaluate to the same thing on the server).\n      if (testUtils.isCouchMaster()) {\n        return done();\n      }\n\n      var docs = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3},\n        {\n          _id: '_design/foo',\n          integer: 4,\n          filters: { even: 'function (doc) { return doc.integer % 2 === 1; }' }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      db.changes().on('complete', function (results) {\n        results.last_seq.should.equal(0);\n        db.bulkDocs({ docs: docs }, function () {\n          db.changes().on('complete', function (results) {\n            results.last_seq.should.equal(5);\n            db.changes({\n              filter: 'foo/even'\n            }).on('complete', function (results) {\n              results.last_seq.should.equal(5);\n              results.results.length.should.equal(2);\n              done();\n            }).on('error', done);\n          }).on('error', done);\n        });\n      }).on('error', done);\n    });\n\n    it('Immediately cancel changes', function () {\n      // fixes code coverage by ensuring the changes() listener\n      // emits 'complete' even if the db's task queue isn't\n      // ready yet\n      return new testUtils.Promise(function (resolve, reject) {\n        var db = new PouchDB(dbs.name);\n        var changes = db.changes({live: true});\n        changes.on('error', reject);\n        changes.on('complete', resolve);\n        changes.cancel();\n      });\n    });\n\n    it('Changes with invalid ddoc view name', function () {\n      return new testUtils.Promise(function (resolve, reject) {\n        var db = new PouchDB(dbs.name);\n        db.post({});\n        var changes = db.changes({live: true, filter: '_view', view: ''});\n        changes.on('error', resolve);\n        changes.on('change', reject);\n      });\n    });\n\n    it('Changes with invalid ddoc view name 2', function () {\n      return new testUtils.Promise(function (resolve, reject) {\n        var db = new PouchDB(dbs.name);\n        db.post({});\n        var changes = db.changes({live: true, filter: '_view', view: 'a/b/c'});\n        changes.on('error', resolve);\n        changes.on('change', reject);\n      });\n    });\n\n    if (adapter === 'local') {\n      // This test crashes due to an invalid JSON response from CouchDB:\n      // https://issues.apache.org/jira/browse/COUCHDB-2765\n      // We could remove the \"if\" check and put a try/catch in our\n      // JSON parsing, but since this is a super-rare bug it may not be\n      // worth our time. This test does increase code coverage for our\n      // own local code, though.\n      it('Changes with invalid ddoc with no map function', function () {\n        // CouchDB 2.X does not allow saving of invalid design docs,\n        // so this test is not valid\n        if (testUtils.isCouchMaster()) {\n          return testUtils.Promise.resolve();\n        }\n\n        var db = new PouchDB(dbs.name);\n        return db.put({\n          _id: '_design/name',\n          views: {\n            name: {\n              empty: 'sad face'\n            }\n          }\n        }).then(function () {\n          return new testUtils.Promise(function (resolve, reject) {\n            var changes = db.changes({\n              live: true,\n              filter: '_view',\n              view: 'name/name'\n            });\n            changes.on('error', resolve);\n            changes.on('change', reject);\n          });\n        });\n      });\n    }\n\n    it('Changes with invalid ddoc with no filter function', function () {\n      // CouchDB 2.X does not allow saving of invalid design docs,\n      // so this test is not valid\n      if (testUtils.isCouchMaster()) {\n        return testUtils.Promise.resolve();\n      }\n\n      var db = new PouchDB(dbs.name);\n      return db.put({\n        _id: '_design/name',\n        views: {\n          name: {\n            empty: 'sad face'\n          }\n        }\n      }).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          var changes = db.changes({\n            live: true,\n            filter: 'name/name'\n          });\n          changes.on('error', resolve);\n          changes.on('change', reject);\n        });\n      });\n    });\n\n    it('Changes last_seq with view instead of filter', function (done) {\n      // this test doesn't really make sense for clustered\n      // CouchDB because changes is unordered and last_seq might\n      // not equal the last seq in the _changes feed (although it\n      // should evaluate to the same thing on the server).\n      if (testUtils.isCouchMaster()) {\n        return done();\n      }\n\n      var docs = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3},\n        {\n          _id: '_design/foo',\n          integer: 4,\n          views:\n            { even:\n              { map: 'function (doc) { if (doc.integer % 2 === 1) { ' +\n                     'emit(doc._id, null) }; }' } }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      db.changes().on('complete', function (results) {\n        results.last_seq.should.equal(0);\n        db.bulkDocs({ docs: docs }, function () {\n          db.changes().on('complete', function (results) {\n            results.last_seq.should.equal(5);\n            db.changes({\n              filter: '_view',\n              view: 'foo/even'\n            }).on('complete', function (results) {\n              results.last_seq.should.equal(5);\n              results.results.length.should.equal(2);\n              done();\n            }).on('error', done);\n          }).on('error', done);\n        });\n      }).on('error', done);\n    });\n\n    it('Changes with style = all_docs', function (done) {\n      var simpleTree = [\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-b', value: 'foo b'},\n         {_id: 'foo', _rev: '3-c', value: 'foo c'}],\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-d', value: 'foo d'},\n         {_id: 'foo', _rev: '3-e', value: 'foo e'},\n         {_id: 'foo', _rev: '4-f', value: 'foo f'}],\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-g', value: 'foo g', _deleted: true}]\n      ];\n      var db = new PouchDB(dbs.name);\n      testUtils.putTree(db, simpleTree, function () {\n        db.changes().on('complete', function (res) {\n          res.results[0].changes.length.should.equal(1);\n          res.results[0].changes[0].rev.should.equal('4-f');\n          db.changes({\n            style: 'all_docs'\n          }).on('complete', function (res) {\n            res.results[0].changes.length.should.equal(3);\n            var changes = res.results[0].changes;\n            changes.sort(function (a, b) {\n              return a.rev < b.rev;\n            });\n            changes[0].rev.should.equal('4-f');\n            changes[1].rev.should.equal('3-c');\n            changes[2].rev.should.equal('2-g');\n            done();\n          }).on('error', done);\n        }).on('error', done);\n      });\n    });\n\n    it('Changes with style = all_docs and a callback for complete',\n      function (done) {\n      var simpleTree = [\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-b', value: 'foo b'},\n         {_id: 'foo', _rev: '3-c', value: 'foo c'}],\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-d', value: 'foo d'},\n         {_id: 'foo', _rev: '3-e', value: 'foo e'},\n         {_id: 'foo', _rev: '4-f', value: 'foo f'}],\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-g', value: 'foo g', _deleted: true}]\n      ];\n      var db = new PouchDB(dbs.name);\n      testUtils.putTree(db, simpleTree, function () {\n        db.changes(function (err, res) {\n          res.results[0].changes.length.should.equal(1);\n          res.results[0].changes[0].rev.should.equal('4-f');\n          db.changes({\n            style: 'all_docs'\n          }, function (err, res) {\n            should.not.exist(err);\n            res.results[0].changes.length.should.equal(3);\n            var changes = res.results[0].changes;\n            changes.sort(function (a, b) {\n              return a.rev < b.rev;\n            });\n            changes[0].rev.should.equal('4-f');\n            changes[1].rev.should.equal('3-c');\n            changes[2].rev.should.equal('2-g');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Changes limit = 0', function (done) {\n      var docs = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs }, function () {\n        db.changes({\n          limit: 0\n        }).on('complete', function (results) {\n          results.results.length.should.equal(1);\n          done();\n        }).on('error', done);\n      });\n    });\n\n    // Note for the following test that CouchDB's implementation of /_changes\n    // with `descending=true` ignores any `since` parameter.\n    it('Descending changes', function (done) {\n      // _changes in CouchDB 2.0 does not guarantee order\n      // so skip this test\n      if (testUtils.isCouchMaster()) {\n        return done();\n      }\n      var db = new PouchDB(dbs.name);\n      db.post({_id: '0', test: 'ing'}, function () {\n        db.post({_id: '1', test: 'ing'}, function () {\n          db.post({_id: '2', test: 'ing'}, function () {\n            db.changes({\n              descending: true,\n              since: 1\n            }).on('complete', function (results) {\n              results.results.length.should.equal(3);\n              var ids = ['2', '1', '0'];\n              results.results.forEach(function (row, i) {\n                row.id.should.equal(ids[i]);\n              });\n              done();\n            }).on('error', done);\n          });\n        });\n      });\n    });\n\n    it('Changes doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ test: 'somestuff' }, function () {\n        db.changes({\n          include_docs: true\n        }).on('change', function (change) {\n          change.doc._id.should.equal(change.id);\n          change.doc._rev.should\n            .equal(change.changes[change.changes.length - 1].rev);\n          done();\n        });\n      });\n    });\n\n    // Note for the following test that CouchDB's implementation of /_changes\n    // with `descending=true` ignores any `since` parameter.\n    it('Descending many changes', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      var num = 100;\n      for (var i = 0; i < num; i++) {\n        docs.push({\n          _id: 'doc_' + i,\n          foo: 'bar_' + i\n        });\n      }\n      var changes = 0;\n      db.bulkDocs({ docs: docs }, function (err) {\n        if (err) {\n          return done(err);\n        }\n        db.changes({\n          descending: true\n        }).on('change', function () {\n          changes++;\n        }).on('complete', function () {\n          changes.should.equal(num, 'correct number of changes');\n          done();\n        }).on('error', function (err) {\n          done(err);\n        });\n      });\n    });\n\n    it('live-changes', function (done) {\n      var db = new PouchDB(dbs.name);\n      var count = 0;\n      var changes = db.changes({\n        live: true\n      }).on('complete', function () {\n        count.should.equal(1);\n        done();\n      }).on('change', function (change) {\n        count += 1;\n        change.should.not.have.property('doc');\n        count.should.equal(1);\n        changes.cancel();\n      });\n      db.post({ test: 'adoc' });\n    });\n\n    it('Multiple watchers', function (done) {\n      var db = new PouchDB(dbs.name);\n      var count = 0;\n      var changes1Complete = false;\n      var changes2Complete = false;\n      function checkCount() {\n        if (changes1Complete && changes2Complete) {\n          count.should.equal(2);\n          done();\n        }\n      }\n      var changes1 = db.changes({\n        live: true\n      }).on('complete', function () {\n        changes1Complete = true;\n        checkCount();\n      }).on('change', function () {\n        count += 1;\n        changes1.cancel();\n        changes1 = null;\n      }).on('error', done);\n      var changes2 = db.changes({\n        live: true\n      }).on('complete', function () {\n        changes2Complete = true;\n        checkCount();\n      }).on('change', function () {\n        count += 1;\n        changes2.cancel();\n        changes2 = null;\n      }).on('error', done);\n      db.post({test: 'adoc'});\n    });\n\n    it('Continuous changes doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      var changes = db.changes({\n        live: true,\n        include_docs: true\n      }).on('complete', function (result) {\n        result.status.should.equal('cancelled');\n        done();\n      }).on('change', function (change) {\n        change.should.have.property('doc');\n        change.doc.should.have.property('_rev');\n        changes.cancel();\n      }).on('error', done);\n      db.post({ test: 'adoc' });\n    });\n\n    it('Cancel changes', function (done) {\n      var db = new PouchDB(dbs.name);\n      var count = 0;\n      var interval;\n      var docPosted = false;\n\n      // We want to wait for a period of time after the final\n      // document was posted to ensure we didnt see another\n      // change\n      function waitForDocPosted() {\n        if (!docPosted) {\n          return;\n        }\n        clearInterval(interval);\n        setTimeout(function () {\n          count.should.equal(1);\n          done();\n        }, 200);\n      }\n\n      var changes = db.changes({\n        live: true\n      }).on('complete', function (result) {\n        result.status.should.equal('cancelled');\n        // This setTimeout ensures that once we cancel a change we dont recieve\n        // subsequent callbacks, so it is needed\n        interval = setInterval(waitForDocPosted, 100);\n      }).on('change', function () {\n        count += 1;\n        if (count === 1) {\n          changes.cancel();\n          db.post({ test: 'another doc' }, function (err) {\n            if (err) {\n              return done(err);\n            }\n            docPosted = true;\n          });\n        }\n      });\n      db.post({ test: 'adoc' });\n    });\n\n\n    it(\"#3579 changes firing 1 too many times\", function () {\n      var db = new PouchDB(dbs.name);\n      var Promise = testUtils.Promise;\n      return db.bulkDocs([{}, {}, {}]).then(function () {\n        var changes = db.changes({\n          since: 'now',\n          live: true,\n          include_docs: true\n        });\n        return Promise.all([\n          new Promise(function (resolve, reject) {\n            changes.on('error', reject);\n            changes.on('change', function (change) {\n              changes.cancel();\n              resolve(change);\n            });\n          }),\n          new Promise(function (resolve) {\n            setTimeout(resolve, 50);\n          }).then(function () {\n              return db.put({_id: 'foobar'});\n            })\n        ]);\n      }).then(function (result) {\n        var change = result[0];\n        change.id.should.equal('foobar');\n        change.doc._id.should.equal('foobar');\n      });\n    });\n\n    it('Kill database while listening to live changes', function (done) {\n      var db = new PouchDB(dbs.name);\n\n      db.changes({live: true})\n        .on('error', function () { done(); })\n        .on('complete', function () { done(); })\n        .on('change', function () { db.destroy().catch(done); });\n\n      db.post({ test: 'adoc' });\n    });\n\n    it('#3136 style=all_docs', function () {\n\n      var db = new PouchDB(dbs.name);\n\n      var chain = testUtils.Promise.resolve();\n\n      var docIds = ['b', 'c', 'a', 'z', 'd', 'e'];\n\n      docIds.forEach(function (docId) {\n        chain = chain.then(function () {\n          return db.put({_id: docId});\n        });\n      });\n\n      return chain.then(function () {\n        return db.changes({style: 'all_docs'});\n      }).then(function (res) {\n        var ids = res.results.map(function (x) {\n          return x.id;\n        });\n        ids.should.include.members(docIds);\n      });\n    });\n\n    it('#4191 revs_diff causes endless loop', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      return db.bulkDocs({\n        \"new_edits\": false,\n        \"docs\": [{\"_id\": \"799\",\"_rev\":\"1-d22\"}\n        ]}).then(function () {\n        return db.bulkDocs({\n          \"new_edits\": false,\n          \"docs\": [{\"_id\": \"3E1\", \"_rev\": \"1-ab5\"}]\n        });\n      }).then(function () {\n        return db.bulkDocs(\n          { new_edits: false,\n            docs:\n              [ { _id: 'FB3', _rev: '1-363' },\n                { _id: '27C', _rev: '1-4c3' },\n                { _id: 'BD6', _rev: '1-de0' },\n                { _id: '1E9', _rev: '1-451' } ] }\n        );\n      }).then(function () {\n        return db.changes({style: 'all_docs', limit: 100});\n      }).then(function (res) {\n        var lastSeq = res.last_seq;\n        return db.changes({since: lastSeq, style: 'all_docs', limit: 100});\n      }).then(function (res) {\n        res.results.should.have.length(0);\n      });\n    });\n\n    it('#3136 style=all_docs & include_docs', function () {\n\n      var db = new PouchDB(dbs.name);\n\n      var chain = testUtils.Promise.resolve();\n\n      var docIds = ['b', 'c', 'a', 'z', 'd', 'e'];\n\n      docIds.forEach(function (docId) {\n        chain = chain.then(function () {\n          return db.put({_id: docId});\n        });\n      });\n\n      return chain.then(function () {\n        return db.changes({\n          style: 'all_docs',\n          include_docs: true\n        });\n      }).then(function (res) {\n        var ids = res.results.map(function (x) {\n          return x.id;\n        });\n        ids.should.include.members(docIds);\n      });\n    });\n\n    it('#3136 tricky changes, limit/descending', function () {\n      if (testUtils.isCouchMaster()) {\n        return true;\n      }\n\n      var db = new PouchDB(dbs.name);\n\n      var docs = [\n        {\n          _id: 'alpha',\n          _rev: '1-a',\n          _revisions: {\n            start: 1,\n            ids: ['a']\n          }\n        }, {\n          _id: 'beta',\n          _rev: '1-b',\n          _revisions: {\n            start: 1,\n            ids: ['b']\n          }\n        }, {\n          _id: 'gamma',\n          _rev: '1-b',\n          _revisions: {\n            start: 1,\n            ids: ['b']\n          }\n        }, {\n          _id: 'alpha',\n          _rev: '2-d',\n          _revisions: {\n            start: 2,\n            ids: ['d', 'a']\n          }\n        }, {\n          _id: 'beta',\n          _rev: '2-e',\n          _revisions: {\n            start: 2,\n            ids: ['e', 'b']\n          }\n        }, {\n          _id: 'beta',\n          _rev: '3-f',\n          _deleted: true,\n          _revisions: {\n            start: 3,\n            ids: ['f', 'e', 'b']\n          }\n        }\n      ];\n\n      var chain = testUtils.Promise.resolve();\n      var seqs = [];\n\n      docs.forEach(function (doc) {\n        chain = chain.then(function () {\n          return db.bulkDocs([doc], {new_edits: false}).then(function () {\n            return db.changes({doc_ids: [doc._id]});\n          }).then(function (res) {\n            seqs.push(res.results[0].seq);\n          });\n        });\n      });\n\n      function normalizeResult(result) {\n        // order of changes doesn't matter\n        result.results.forEach(function (ch) {\n          ch.changes = ch.changes.sort(function (a, b) {\n            return a.rev < b.rev ? -1 : 1;\n          });\n        });\n      }\n\n      return chain.then(function () {\n        return db.changes();\n      }).then(function (result) {\n        normalizeResult(result);\n        result.should.deep.equal({\n          \"results\": [\n            {\n              \"seq\": seqs[2],\n              \"id\": \"gamma\",\n              \"changes\": [{ \"rev\": \"1-b\"}\n              ]\n            },\n            {\n              \"seq\": seqs[3],\n              \"id\": \"alpha\",\n              \"changes\": [{ \"rev\": \"2-d\"}\n              ]\n            },\n            {\n              \"seq\": seqs[5],\n              \"id\": \"beta\",\n              \"deleted\": true,\n              \"changes\": [{ \"rev\": \"3-f\"}\n              ]\n            }\n          ],\n          \"last_seq\": seqs[5]\n        });\n        return db.changes({limit: 0});\n      }).then(function (result) {\n        normalizeResult(result);\n        result.should.deep.equal({\n          \"results\": [{\n            \"seq\": seqs[2],\n            \"id\": \"gamma\",\n            \"changes\": [{\"rev\": \"1-b\"}]\n          }],\n          \"last_seq\": seqs[2]\n        }, '1:' + JSON.stringify(result));\n        return db.changes({limit: 1});\n      }).then(function (result) {\n        normalizeResult(result);\n        result.should.deep.equal({\n          \"results\": [{\n            \"seq\": seqs[2],\n            \"id\": \"gamma\",\n            \"changes\": [{\"rev\": \"1-b\"}]\n          }],\n          \"last_seq\": seqs[2]\n        }, '2:' + JSON.stringify(result));\n        return db.changes({limit: 2});\n      }).then(function (result) {\n        normalizeResult(result);\n        result.should.deep.equal({\n          \"results\": [{\n            \"seq\": seqs[2],\n            \"id\": \"gamma\",\n            \"changes\": [{\"rev\": \"1-b\"}]\n          }, {\"seq\": seqs[3], \"id\": \"alpha\", \"changes\": [{\"rev\": \"2-d\"}]}],\n          \"last_seq\": seqs[3]\n        }, '3:' + JSON.stringify(result));\n        return db.changes({limit: 1, descending: true});\n      }).then(function (result) {\n        normalizeResult(result);\n        result.should.deep.equal({\n          \"results\": [{\n            \"seq\": seqs[5],\n            \"id\": \"beta\",\n            \"changes\": [{\"rev\": \"3-f\"}],\n            \"deleted\": true\n          }],\n          \"last_seq\": seqs[5]\n        }, '4:' + JSON.stringify(result));\n        return db.changes({limit: 2, descending: true});\n      }).then(function (result) {\n        normalizeResult(result);\n        var expected = {\n          \"results\": [{\n            \"seq\": seqs[5],\n            \"id\": \"beta\",\n            \"changes\": [{\"rev\": \"3-f\"}],\n            \"deleted\": true\n          }, {\"seq\": seqs[3], \"id\": \"alpha\", \"changes\": [{\"rev\": \"2-d\"}]}],\n          \"last_seq\": seqs[3]\n        };\n        result.should.deep.equal(expected, '5:' + JSON.stringify(result) +\n        ', shoulda got: ' + JSON.stringify(expected));\n        return db.changes({descending: true});\n      }).then(function (result) {\n        normalizeResult(result);\n        var expected = {\n          \"results\": [{\n            \"seq\": seqs[5],\n            \"id\": \"beta\",\n            \"changes\": [{\"rev\": \"3-f\"}],\n            \"deleted\": true\n          }, {\"seq\": seqs[3], \"id\": \"alpha\", \"changes\": [{\"rev\": \"2-d\"}]}, {\n            \"seq\": seqs[2],\n            \"id\": \"gamma\",\n            \"changes\": [{\"rev\": \"1-b\"}]\n          }],\n          \"last_seq\": seqs[2]\n        };\n        result.should.deep.equal(expected, '6:' + JSON.stringify(result) +\n        ', shoulda got: ' + JSON.stringify(expected));\n      });\n    });\n\n    it('#3176 winningRev has a lower seq, descending', function () {\n      if (testUtils.isCouchMaster()) {\n        return true;\n      }\n\n      var db = new PouchDB(dbs.name);\n      var tree = [\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '2-e',\n            _deleted: true,\n            _revisions: {start: 2, ids: ['e', 'a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '3-g',\n            _revisions: {start: 3, ids: ['g', 'e', 'a']}\n          }\n        ],\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '2-b',\n            _revisions: {start: 2, ids: ['b', 'a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '3-c',\n            _revisions: {start: 3, ids: ['c', 'b', 'a']}\n          }\n        ]\n      ];\n\n      var chain = testUtils.Promise.resolve();\n      var seqs = [0];\n\n      function getExpected(i) {\n        var expecteds = [\n          {\n            \"results\": [\n              {\n                \"seq\": seqs[1],\n                \"id\": \"foo\",\n                \"changes\": [{\"rev\": \"3-g\"}]\n              }\n            ],\n            \"last_seq\" : seqs[1]\n          },\n          {\n            \"results\": [\n              {\n                \"seq\": seqs[2],\n                \"id\": \"foo\",\n                \"changes\": [{\"rev\": \"3-g\"}]\n              }\n            ],\n            \"last_seq\" : seqs[2]\n          }\n        ];\n        return expecteds[i];\n      }\n\n      function normalizeResult(result) {\n        // order of changes doesn't matter\n        result.results.forEach(function (ch) {\n          ch.changes = ch.changes.sort(function (a, b) {\n            return a.rev < b.rev ? -1 : 1;\n          });\n        });\n      }\n\n      tree.forEach(function (docs, i) {\n        chain = chain.then(function () {\n          return db.bulkDocs(docs, {new_edits: false}).then(function () {\n            return db.changes({\n              descending: true\n            });\n          }).then(function (result) {\n            seqs.push(result.last_seq);\n            var expected = getExpected(i);\n            normalizeResult(result);\n            result.should.deep.equal(expected,\n            i + ': should get: ' + JSON.stringify(expected) +\n            ', but got: ' + JSON.stringify(result));\n          });\n        });\n      });\n      return chain;\n    });\n\n    it('#3136 winningRev has a lower seq, style=all_docs', function () {\n      if (testUtils.isCouchMaster()) {\n        return true;\n      }\n\n      var db = new PouchDB(dbs.name);\n      var tree = [\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '2-e',\n            _deleted: true,\n            _revisions: {start: 2, ids: ['e', 'a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '3-g',\n            _revisions: {start: 3, ids: ['g', 'e', 'a']}\n          }\n        ],\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '2-b',\n            _revisions: {start: 2, ids: ['b', 'a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '3-c',\n            _revisions: {start: 3, ids: ['c', 'b', 'a']}\n          }\n        ],\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '2-d',\n            _revisions: {start: 2, ids: ['d', 'a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '3-h',\n            _revisions: {start: 3, ids: ['h', 'd', 'a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '4-f',\n            _revisions: {start: 4, ids: ['f', 'h', 'd', 'a']}\n          }\n        ]\n      ];\n\n      var chain = testUtils.Promise.resolve();\n      var seqs = [0];\n\n      function getExpected(i) {\n        var expecteds = [\n          {\n            \"results\": [\n              {\n                \"seq\": seqs[1],\n                \"id\": \"foo\",\n                \"changes\": [{\"rev\": \"3-g\"}],\n                \"doc\": {\"_id\": \"foo\", \"_rev\": \"3-g\"}\n              }\n            ],\n            \"last_seq\" : seqs[1]\n          },\n          {\n            \"results\": [\n              {\n                \"seq\": seqs[2],\n                \"id\": \"foo\",\n                \"changes\": [{\"rev\": \"3-c\"}, {\"rev\": \"3-g\"}],\n                \"doc\": {\"_id\": \"foo\", \"_rev\": \"3-g\"}\n              }\n            ],\n            \"last_seq\" : seqs[2]\n          },\n          {\n            \"results\": [\n              {\n                \"seq\": seqs[3],\n                \"id\": \"foo\",\n                \"changes\": [{\"rev\": \"3-c\"}, {\"rev\": \"3-g\"}, {\"rev\": \"4-f\"}],\n                \"doc\": {\"_id\": \"foo\", \"_rev\": \"4-f\"}\n              }\n            ],\n            \"last_seq\" : seqs[3]\n          }\n        ];\n        return expecteds[i];\n      }\n\n      function normalizeResult(result) {\n        // order of changes doesn't matter\n        result.results.forEach(function (ch) {\n          ch.changes = ch.changes.sort(function (a, b) {\n            return a.rev < b.rev ? -1 : 1;\n          });\n        });\n      }\n\n      tree.forEach(function (docs, i) {\n        chain = chain.then(function () {\n          return db.bulkDocs(docs, {new_edits: false}).then(function () {\n            return db.changes({\n              style: 'all_docs',\n              since: seqs[seqs.length - 1],\n              include_docs: true\n            });\n          }).then(function (result) {\n            seqs.push(result.last_seq);\n            var expected = getExpected(i);\n            normalizeResult(result);\n            result.should.deep.equal(expected,\n            i + ': should get: ' + JSON.stringify(expected) +\n            ', but got: ' + JSON.stringify(result));\n          });\n        });\n      });\n      return chain;\n    });\n\n    it('#3136 winningRev has a lower seq, style=all_docs 2', function () {\n      if (testUtils.isCouchMaster()) {\n        return true;\n      }\n\n      var db = new PouchDB(dbs.name);\n      var tree = [\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '2-e',\n            _deleted: true,\n            _revisions: {start: 2, ids: ['e', 'a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '3-g',\n            _revisions: {start: 3, ids: ['g', 'e', 'a']}\n          }\n        ], [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '2-b',\n            _revisions: {start: 2, ids: ['b', 'a']}\n          },\n          {\n            _id: 'foo',\n            _rev: '3-c',\n            _revisions: {start: 3, ids: ['c', 'b', 'a']}\n          }\n        ], [\n          {\n            _id: 'bar',\n            _rev: '1-z',\n            _revisions: {start: 1, ids: ['z']}\n          }\n        ]\n      ];\n\n      var chain = testUtils.Promise.resolve();\n      var seqs = [0];\n\n      tree.forEach(function (docs) {\n        chain = chain.then(function () {\n          return db.bulkDocs(docs, {new_edits: false}).then(function () {\n            return db.changes();\n          }).then(function (result) {\n            seqs.push(result.last_seq);\n          });\n        });\n      });\n\n      return chain.then(function () {\n\n        var expecteds = [\n          {\n            \"results\": [{\n              \"seq\": seqs[2],\n              \"id\": \"foo\",\n              \"changes\": [{\"rev\": \"3-c\"}, {\"rev\": \"3-g\"}]\n            }, {\"seq\": seqs[3], \"id\": \"bar\", \"changes\": [{\"rev\": \"1-z\"}]}],\n            \"last_seq\": seqs[3]\n          },\n          {\n            \"results\": [{\n              \"seq\": seqs[2],\n              \"id\": \"foo\",\n              \"changes\": [{\"rev\": \"3-c\"}, {\"rev\": \"3-g\"}]\n            }, {\"seq\": seqs[3], \"id\": \"bar\", \"changes\": [{\"rev\": \"1-z\"}]}],\n            \"last_seq\": seqs[3]\n          },\n          {\n            \"results\": [{\"seq\": seqs[3], \"id\": \"bar\",\n              \"changes\": [{\"rev\": \"1-z\"}]}],\n            \"last_seq\": seqs[3]\n          },\n          {\"results\": [], \"last_seq\": seqs[3]}\n        ];\n\n        var chain2 = testUtils.Promise.resolve();\n\n        function normalizeResult(result) {\n          // order of changes doesn't matter\n          result.results.forEach(function (ch) {\n            ch.changes = ch.changes.sort(function (a, b) {\n              return a.rev < b.rev ? -1 : 1;\n            });\n          });\n        }\n\n        seqs.forEach(function (seq, i) {\n          chain2 = chain2.then(function () {\n            return db.changes({\n              since: seq,\n              style: 'all_docs'\n            }).then(function (res) {\n              normalizeResult(res);\n              res.should.deep.equal(expecteds[i], 'since=' + seq +\n              ': got: ' +\n              JSON.stringify(res) +\n              ', shoulda got: ' +\n              JSON.stringify(expecteds[i]));\n            });\n          });\n        });\n        return chain2;\n      });\n    });\n\n    it('#3136 winningRev has a higher seq, using limit', function () {\n      if (testUtils.isCouchMaster()) {\n        return true;\n      }\n\n      var db = new PouchDB(dbs.name);\n      var tree = [\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}\n          }\n        ], [\n          {\n            _id: 'foo',\n            _rev: '2-b',\n            _revisions: {start: 2, ids: ['b', 'a']}\n          }\n        ], [\n          {\n            _id: 'bar',\n            _rev: '1-x',\n            _revisions: {start: 1, ids: ['x']}\n          }\n        ], [\n          {\n            _id: 'foo',\n            _rev: '2-c',\n            _deleted: true,\n            _revisions: {start: 2, ids: ['c', 'a']}\n          }\n        ]\n      ];\n\n      var chain = testUtils.Promise.resolve();\n      var seqs = [0];\n\n      tree.forEach(function (docs) {\n        chain = chain.then(function () {\n          return db.bulkDocs(docs, {new_edits: false}).then(function () {\n            return db.changes().then(function (result) {\n              seqs.push(result.last_seq);\n            });\n          });\n        });\n      });\n\n      return chain.then(function () {\n\n        var expecteds = [{\n          \"results\": [{\n            \"seq\": seqs[3],\n            \"id\": \"bar\",\n            \"changes\": [{\"rev\": \"1-x\"}],\n            \"doc\": {\"_id\": \"bar\", \"_rev\": \"1-x\"}\n          }],\n          \"last_seq\": seqs[3]\n        },\n          {\n            \"results\": [{\n              \"seq\": seqs[3],\n              \"id\": \"bar\",\n              \"changes\": [{\"rev\": \"1-x\"}],\n              \"doc\": {\"_id\": \"bar\", \"_rev\": \"1-x\"}\n            }],\n            \"last_seq\": seqs[3]\n          },\n          {\n            \"results\": [{\n              \"seq\": seqs[3],\n              \"id\": \"bar\",\n              \"changes\": [{\"rev\": \"1-x\"}],\n              \"doc\": {\"_id\": \"bar\", \"_rev\": \"1-x\"}\n            }],\n            \"last_seq\": seqs[3]\n          },\n          {\n            \"results\": [{\n              \"seq\": seqs[4],\n              \"id\": \"foo\",\n              \"changes\": [{\"rev\": \"2-b\"}, {\"rev\": \"2-c\"}],\n              \"doc\": {\"_id\": \"foo\", \"_rev\": \"2-b\"}\n            }],\n            \"last_seq\": seqs[4]\n          },\n          {\"results\": [], \"last_seq\": seqs[4]}\n        ];\n\n        var chain2 = testUtils.Promise.resolve();\n\n        function normalizeResult(result) {\n          // order of changes doesn't matter\n          result.results.forEach(function (ch) {\n            ch.changes = ch.changes.sort(function (a, b) {\n              return a.rev < b.rev ? -1 : 1;\n            });\n          });\n        }\n\n        seqs.forEach(function (seq, i) {\n          chain2 = chain2.then(function () {\n            return db.changes({\n              style: 'all_docs',\n              since: seq,\n              limit: 1,\n              include_docs: true\n            });\n          }).then(function (result) {\n            normalizeResult(result);\n            result.should.deep.equal(expecteds[i],\n              i + ': got: ' + JSON.stringify(result) +\n              ', shoulda got: ' + JSON.stringify(expecteds[i]));\n          });\n        });\n        return chain2;\n      });\n    });\n\n    it('changes-filter', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var docs2 = [\n        {_id: '4', integer: 4},\n        {_id: '5', integer: 5},\n        {_id: '6', integer: 6},\n        {_id: '7', integer: 7}\n      ];\n      var db = new PouchDB(dbs.name);\n      var count = 0;\n      db.bulkDocs({ docs: docs1 }, function () {\n        var changes = db.changes({\n          filter: function (doc) {\n            return doc.integer % 2 === 0;\n          },\n          live: true\n        }).on('complete', function (result) {\n          result.status.should.equal('cancelled');\n          done();\n        }).on('change', function () {\n          count += 1;\n          if (count === 4) {\n            changes.cancel();\n          }\n        }).on('error', done);\n        db.bulkDocs({ docs: docs2 });\n      });\n    });\n\n    it('changes-filter with query params', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var docs2 = [\n        {_id: '4', integer: 4},\n        {_id: '5', integer: 5},\n        {_id: '6', integer: 6},\n        {_id: '7', integer: 7}\n      ];\n      var params = { 'abc': true };\n      var db = new PouchDB(dbs.name);\n      var count = 0;\n      db.bulkDocs({ docs: docs1 }, function () {\n        var changes = db.changes({\n          filter: function (doc, req) {\n            if (req.query.abc) {\n              return doc.integer % 2 === 0;\n            }\n          },\n          query_params: params,\n          live: true\n        }).on('complete', function (result) {\n          result.status.should.equal('cancelled');\n          done();\n        }).on('change', function () {\n          count += 1;\n          if (count === 4) {\n            changes.cancel();\n          }\n        }).on('error', done);\n        db.bulkDocs({ docs: docs2 });\n      });\n    });\n\n    it('Non-live changes filter', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs1 }, function () {\n        db.changes().on('complete', function (allChanges) {\n          db.changes({\n            filter: function (doc) {\n              return doc.integer % 2 === 0;\n            }\n          }).on('complete', function (filteredChanges) {\n            // Should get docs 0 and 2 if the filter\n            // has been applied correctly.\n            filteredChanges.results.length.should.equal(2);\n            filteredChanges.last_seq.should.deep.equal(allChanges.last_seq);\n            done();\n          }).on('error', done);\n        }).on('error', done);\n      });\n    });\n\n    it('Non-live changes filter, descending', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs1 }, function () {\n        db.changes({\n          descending: true\n        }).on('complete', function (allChanges) {\n          db.changes({\n            descending: true,\n            filter: function (doc) {\n              return doc.integer > 2;\n            }\n          }).on('complete', function (filteredChanges) {\n            // Should get docs 2 and 3 if the filter\n            // has been applied correctly.\n            filteredChanges.results.length.should.equal(1);\n            filteredChanges.last_seq.should.deep.equal(allChanges.last_seq);\n            done();\n          }).on('error', done);\n        }).on('error', done);\n      });\n    });\n\n    it('#2569 Non-live doc_ids filter', function () {\n      var docs = [\n        {_id: '0'},\n        {_id: '1'},\n        {_id: '2'},\n        {_id: '3'}\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs(docs).then(function () {\n        return db.changes({\n          doc_ids: ['1', '3']\n        });\n      }).then(function (changes) {\n        var ids = changes.results.map(function (x) {\n          return x.id;\n        });\n        ids.sort().should.deep.equal(['1', '3']);\n      });\n    });\n\n    it('#2569 Big non-live doc_ids filter', function () {\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        var id = '';\n        for (var j = 0; j < 50; j++) {\n          // make a huge id\n          id += testUtils.btoa(Math.random().toString());\n        }\n        docs.push({_id: id});\n      }\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs(docs).then(function () {\n        return db.changes({\n          doc_ids: [docs[1]._id, docs[3]._id]\n        });\n      }).then(function (changes) {\n        var ids = changes.results.map(function (x) {\n          return x.id;\n        });\n        var expectedIds = [docs[1]._id, docs[3]._id];\n        ids.sort().should.deep.equal(expectedIds.sort());\n      });\n    });\n\n    it('#2569 Live doc_ids filter', function () {\n      var docs = [\n        {_id: '0'},\n        {_id: '1'},\n        {_id: '2'},\n        {_id: '3'}\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs(docs).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          var retChanges = [];\n          var changes = db.changes({\n            doc_ids: ['1', '3'],\n            live: true\n          }).on('change', function (change) {\n            retChanges.push(change);\n            if (retChanges.length === 2) {\n              changes.cancel();\n              resolve(retChanges);\n            }\n          }).on('error', reject);\n        });\n      }).then(function (changes) {\n        var ids = changes.map(function (x) {\n          return x.id;\n        });\n        var expectedIds = ['1', '3'];\n        ids.sort().should.deep.equal(expectedIds);\n      });\n    });\n\n    it('#2569 Big live doc_ids filter', function () {\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        var id = '';\n        for (var j = 0; j < 50; j++) {\n          // make a huge id\n          id += testUtils.btoa(Math.random().toString());\n        }\n        docs.push({_id: id});\n      }\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs(docs).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          var retChanges = [];\n          var changes = db.changes({\n            doc_ids: [docs[1]._id, docs[3]._id],\n            live: true\n          }).on('change', function (change) {\n            retChanges.push(change);\n            if (retChanges.length === 2) {\n              changes.cancel();\n              resolve(retChanges);\n            }\n          }).on('error', reject);\n        });\n      }).then(function (changes) {\n        var ids = changes.map(function (x) {\n          return x.id;\n        });\n        var expectedIds = [docs[1]._id, docs[3]._id];\n        ids.sort().should.deep.equal(expectedIds.sort());\n      });\n    });\n\n    it('#2569 Non-live doc_ids filter with filter=_doc_ids', function () {\n      var docs = [\n        {_id: '0'},\n        {_id: '1'},\n        {_id: '2'},\n        {_id: '3'}\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs(docs).then(function () {\n        return db.changes({\n          filter: '_doc_ids',\n          doc_ids: ['1', '3']\n        });\n      }).then(function (changes) {\n        var ids = changes.results.map(function (x) {\n          return x.id;\n        });\n        ids.sort().should.deep.equal(['1', '3']);\n      });\n    });\n\n    it('#2569 Live doc_ids filter with filter=_doc_ids', function () {\n      var docs = [\n        {_id: '0'},\n        {_id: '1'},\n        {_id: '2'},\n        {_id: '3'}\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs(docs).then(function () {\n        return db.changes({\n          filter: '_doc_ids',\n          doc_ids: ['1', '3']\n        });\n      }).then(function (changes) {\n        var ids = changes.results.map(function (x) {\n          return x.id;\n        });\n        ids.sort().should.deep.equal(['1', '3']);\n      });\n    });\n\n    it('Changes to same doc are grouped', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var docs2 = [\n        {_id: '2', integer: 11},\n        {_id: '3', integer: 12}\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs1 }, function (err, info) {\n        docs2[0]._rev = info[2].rev;\n        docs2[1]._rev = info[3].rev;\n        db.put(docs2[0], function () {\n          db.put(docs2[1], function () {\n            db.changes({\n              include_docs: true\n            }).on('complete', function (changes) {\n              changes.results.length.should.equal(4);\n\n              var second = findById(changes.results, '2');\n              second.changes.length.should.equal(1);\n              second.doc.integer.should.equal(11);\n              done();\n            }).on('error', done);\n          });\n        });\n      });\n    });\n\n    it('Changes with conflicts are handled correctly', function (testDone) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var docs2 = [\n        {_id: '2', integer: 11},\n        {_id: '3', integer: 12}\n      ];\n      var localdb = new PouchDB(dbs.name);\n      var remotedb = new PouchDB(dbs.remote);\n      return localdb.bulkDocs({ docs: docs1 }).then(function (info) {\n        docs2[0]._rev = info[2].rev;\n        docs2[1]._rev = info[3].rev;\n        return localdb.put(docs2[0]).then(function () {\n          return localdb.put(docs2[1]).then(function (info) {\n            var rev2 = info.rev;\n            return PouchDB.replicate(localdb, remotedb).then(function () {\n              // update remote once, local twice, then replicate from\n              // remote to local so the remote losing conflict is later in\n              // the tree\n              return localdb.put({\n                _id: '3',\n                _rev: rev2,\n                integer: 20\n              }).then(function (resp) {\n                var rev3Doc = {\n                  _id: '3',\n                  _rev: resp.rev,\n                  integer: 30\n                };\n                return localdb.put(rev3Doc).then(function (resp) {\n                  var rev4local = resp.rev;\n                  var rev4Doc = {\n                    _id: '3',\n                    _rev: rev2,\n                    integer: 100\n                  };\n                  return remotedb.put(rev4Doc).then(function (resp) {\n                    var remoterev = resp.rev;\n                    return PouchDB.replicate(remotedb, localdb).then(\n                      function () {\n                        return localdb.changes({\n                          include_docs: true,\n                          style: 'all_docs',\n                          conflicts: true\n                        }).on('error', testDone)\n                          .then(function (changes) {\n                            changes.results.length.should.equal(4);\n                            var ch = findById(changes.results, '3');\n                            ch.changes.length.should.equal(2);\n                            ch.doc.integer.should.equal(30);\n                            ch.doc._rev.should.equal(rev4local);\n                            ch.changes.should.deep.equal([\n                              { rev: rev4local },\n                              { rev: remoterev }\n                            ]);\n\n                            ch.doc.should.have.property('_conflicts');\n                            ch.doc._conflicts.length.should.equal(1);\n                            ch.doc._conflicts[0].should.equal(remoterev);\n                          });\n                      });\n                  });\n                });\n              });\n            });\n          });\n        }).then(function () {\n          testDone();\n        }, testDone);\n      });\n    });\n\n    it('Change entry for a deleted doc', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs1 }, function (err, info) {\n        var rev = info[3].rev;\n        db.remove({\n          _id: '3',\n          _rev: rev\n        }, function () {\n          db.changes({\n            include_docs: true\n          }).on('complete', function (changes) {\n            changes.results.length.should.equal(4);\n            var ch = findById(changes.results, '3');\n            // sequence numbers are not incremental in CouchDB 2.0\n            if (!testUtils.isCouchMaster()) {\n              ch.seq.should.equal(5);\n            }\n            ch.deleted.should.equal(true);\n            done();\n          }).on('error', done);\n        });\n      });\n    });\n\n    it('changes large number of docs', function (done) {\n      var docs = [];\n      var num = 30;\n      for (var i = 0; i < num; i++) {\n        docs.push({\n          _id: 'doc_' + i,\n          foo: 'bar_' + i\n        });\n      }\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs }, function () {\n        db.changes().on('complete', function (res) {\n          res.results.length.should.equal(num);\n          done();\n        }).on('error', done);\n      });\n    });\n\n    it('Calling db.changes({since: \\'now\\'})', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: [{ foo: 'bar' }] }, function () {\n        db.info(function (err, info) {\n          var api = db.changes({\n            since: 'now'\n          }).on('complete', function (res) {\n            // last_seq and update_seq might be encoded differently\n            // in clustered CouchDB - they cannot be reliably compared.\n            if (!testUtils.isCouchMaster()) {\n              res.last_seq.should.equal(info.update_seq);\n            }\n            done();\n          }).on('error', done);\n          api.should.be.an('object');\n          api.cancel.should.be.an('function');\n        });\n      });\n    });\n\n    //Duplicate to make sure both api options work.\n    it('Calling db.changes({since: \\'latest\\'})', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: [{ foo: 'bar' }] }, function () {\n        db.info(function (err, info) {\n          var api = db.changes({\n            since: 'latest'\n          }).on('complete', function (res) {\n            // last_seq and update_seq might be encoded differently\n            // in clustered CouchDB - they cannot be reliably compared.\n            if (!testUtils.isCouchMaster()) {\n              res.last_seq.should.equal(info.update_seq);\n            }\n            done();\n          }).on('error', done);\n          api.should.be.an('object');\n          api.cancel.should.be.an('function');\n        });\n      });\n    });\n\n    it('Closing db does not cause a crash if changes cancelled',\n      function (done) {\n      var db = new PouchDB(dbs.name);\n      var called = 0;\n      function checkDone() {\n        called++;\n        if (called === 2) {\n          done();\n        }\n      }\n      db.bulkDocs({ docs: [{ foo: 'bar' }] }, function () {\n        var changes = db.changes({\n          live: true\n        }).on('complete', function (result) {\n          result.status.should.equal('cancelled');\n          checkDone();\n        });\n        should.exist(changes);\n        changes.cancel.should.be.a('function');\n        changes.cancel();\n        db.close(function (error) {\n          should.not.exist(error);\n          checkDone();\n        });\n      });\n    });\n\n    it('fire-complete-on-cancel', function (done) {\n      var db = new PouchDB(dbs.name);\n      var cancelled = false;\n      var changes = db.changes({\n        live: true\n      }).on('complete', function (result) {\n        cancelled.should.equal(true);\n        should.exist(result);\n        if (result) {\n          result.status.should.equal('cancelled');\n        }\n        done();\n      }).on('error', done);\n      should.exist(changes);\n      changes.cancel.should.be.a('function');\n      setTimeout(function () {\n        cancelled = true;\n        changes.cancel();\n      }, 100);\n    });\n\n    it('changes are not duplicated', function (done) {\n      var db = new PouchDB(dbs.name);\n      var called = 0;\n      var changes = db.changes({\n        live: true\n      }).on('change', function () {\n        called++;\n        if (called === 1) {\n          setTimeout(function () {\n            changes.cancel();\n          }, 1000);\n        }\n      }).on('complete', function () {\n        called.should.equal(1);\n        done();\n      });\n      db.post({key: 'value'});\n    });\n\n    it('supports return_docs=false', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      var num = 10;\n      for (var i = 0; i < num; i++) {\n        docs.push({ _id: 'doc_' + i});\n      }\n      var changes = 0;\n      db.bulkDocs({ docs: docs }, function (err) {\n        if (err) {\n          return done(err);\n        }\n        db.changes({\n          descending: true,\n          return_docs: false\n        }).on('change', function () {\n          changes++;\n        }).on('complete', function (results) {\n          results.results.should.have.length(0, '0 results returned');\n          changes.should.equal(num, 'correct number of changes');\n          done();\n        }).on('error', function (err) {\n          done(err);\n        });\n      });\n    });\n\n    // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n    it('supports returnDocs=false', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [];\n      var num = 10;\n      for (var i = 0; i < num; i++) {\n        docs.push({ _id: 'doc_' + i});\n      }\n      var changes = 0;\n      db.bulkDocs({ docs: docs }, function (err) {\n        if (err) {\n          return done(err);\n        }\n        db.changes({\n          descending: true,\n          returnDocs: false\n        }).on('change', function () {\n          changes++;\n        }).on('complete', function (results) {\n          results.results.should.have.length(0, '0 results returned');\n          changes.should.equal(num, 'correct number of changes');\n          done();\n        }).on('error', function (err) {\n          done(err);\n        });\n      });\n    });\n\n    it('should respects limit', function (done) {\n      var docs1 = [\n        {_id: '_local/foo'},\n        {_id: 'a', integer: 0},\n        {_id: 'b', integer: 1},\n        {_id: 'c', integer: 2},\n        {_id: 'd', integer: 3}\n      ];\n      var called = 0;\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs1 }, function () {\n        db.changes({\n          limit: 1\n        }).on('change', function () {\n          (called++).should.equal(0);\n        }).on('complete', function () {\n          setTimeout(function () {\n            done();\n          }, 50);\n        });\n      });\n    });\n\n    it.skip('should respects limit with live replication', function (done) {\n      var docs1 = [\n        {_id: '_local/foo'},\n        {_id: 'a', integer: 0},\n        {_id: 'b', integer: 1},\n        {_id: 'c', integer: 2},\n        {_id: 'd', integer: 3}\n      ];\n      var called = 0;\n      var doneCalled = 0;\n      function calldone() {\n        doneCalled++;\n        if (doneCalled === 2) {\n          done();\n        }\n      }\n      var db = new PouchDB(dbs.name);\n      db.changes({\n        limit: 1,\n        live: true\n      }).on('change', function (ch) {\n        ch.id.should.equal('a');\n        (called++).should.equal(0);\n      }).on('complete', function () {\n        calldone();\n      });\n      db.bulkDocs({ docs: docs1 }).then(calldone);\n    });\n\n    it('doesn\\'t throw if opts.complete is undefined', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({_id: 'foo'}).then(function () {\n        db.changes().on('change', function () {\n          done();\n        }).on('error', function (err) {\n          done(err);\n        });\n      }, done);\n    });\n\n    it('it handles a bunch of individual changes in live replication',\n      function (done) {\n      var db = new PouchDB(dbs.name);\n      var len = 80;\n      var called = 0;\n      var changesDone = false;\n      var changesWritten = 0;\n      var changes = db.changes({live: true});\n\n      changes.on('change', function () {\n        called++;\n        if (called === len) {\n          changes.cancel();\n        }\n      }).on('error', done).on('complete', function () {\n        changesDone = true;\n        maybeDone();\n      });\n\n      var i = -1;\n\n      function maybeDone() {\n        if (changesDone && changesWritten === len) {\n          done();\n        }\n      }\n\n      function after() {\n        changesWritten++;\n        db.listeners('destroyed').should.have.length.lessThan(5);\n        maybeDone();\n      }\n\n      while (++i < len) {\n        db.post({}).then(after).catch(done);\n      }\n\n    });\n\n    it('changes-filter without filter', function (done) {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var docs2 = [\n        {_id: '4', integer: 4},\n        {_id: '5', integer: 5},\n        {_id: '6', integer: 6},\n        {_id: '7', integer: 7}\n      ];\n      var db = new PouchDB(dbs.name);\n      var count = 0;\n      db.bulkDocs({ docs: docs1 }, function () {\n        var changes = db.changes({\n          live: true\n        }).on('complete', function (result) {\n          result.status.should.equal('cancelled');\n          done();\n        }).on('change', function () {\n          count += 1;\n          if (count === 8) {\n            changes.cancel();\n          }\n        }).on('error', done);\n        db.bulkDocs({ docs: docs2 });\n      });\n    });\n\n\n    it('#3539 - Exception in changes is fine', function (done) {\n\n      var db = new PouchDB(dbs.name);\n      var count = 0;\n\n      var changes = db.changes({live: true});\n\n      changes.on('change', function () {\n        ++count;\n        if (count === 1) {\n          throw new Error('an error');\n        } else if (count === 3) {\n          changes.cancel();\n        }\n      });\n\n      changes.on('complete', function () {\n        done();\n      });\n\n      db.post({ test: 'some stuff' }).then(function () {\n        return db.post({ test: 'more stuff' });\n      }).then(function () {\n        db.post({ test: 'and more stuff' });\n      });\n    });\n\n  });\n});\n\ndescribe('changes-standalone', function () {\n\n  it('Changes reports errors', function (done) {\n    this.timeout(2000);\n    var db = new PouchDB('http://infiniterequest.com', { skipSetup: true });\n    db.changes({\n      timeout: 1000\n    }).on('error', function (err) {\n      should.exist(err);\n      done();\n    });\n  });\n\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.compaction.js",
    "content": "'use strict';\n\nvar adapters = ['http', 'local'];\nvar autoCompactionAdapters = ['local'];\n\nadapters.forEach(function (adapter) {\n  describe('test.compaction.js-' + adapter, function () {\n    if (testUtils.isCouchMaster()) {\n      return true;\n    }\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n    \n    it('#3350 compact should return {ok: true}', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.compact(function (err, result) {\n        should.not.exist(err);\n        result.should.eql({ok: true});\n\n        done();\n      });\n    });\n\n    it('compact with options object', function () {\n      var db = new PouchDB(dbs.name);\n      return db.compact({}).then(function (result) {\n        result.should.eql({ok: true});\n      });\n    });\n\n    it('#2913 massively parallel compaction', function () {\n      var db = new PouchDB(dbs.name);\n      var tasks = [];\n      for (var i = 0; i < 30; i++) {\n        tasks.push(i);\n      }\n\n      return testUtils.Promise.all(tasks.map(function (i) {\n        var doc = {_id: 'doc_' + i};\n        return db.put(doc).then(function () {\n          return db.compact();\n        }).then(function () {\n          return db.get('doc_' + i);\n        }).then(function (doc) {\n          return db.put(doc);\n        }).then(function () {\n          return db.compact();\n        });\n      }));\n    });\n\n    it('Compaction document with no revisions to remove', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'foo', value: 'bar'};\n      db.put(doc, function () {\n        db.compact(function () {\n          db.get('foo', function (err) {\n            done(err);\n          });\n        });\n      });\n    });\n\n    it('Compation on empty db', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.compact(function () {\n        done();\n      });\n    });\n\n    it('Compation on empty db with interval option', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.compact({ interval: 199 }, function () {\n        done();\n      });\n    });\n\n    it('Simple compation test', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = {\n        _id: 'foo',\n        value: 'bar'\n      };\n      db.post(doc, function (err, res) {\n        var rev1 = res.rev;\n        doc._rev = rev1;\n        doc.value = 'baz';\n        db.post(doc, function (err, res) {\n          var rev2 = res.rev;\n          db.compact(function () {\n            db.get('foo', { rev: rev1 }, function (err) {\n              err.status.should.equal(404);\n              err.name.should.equal(\n                'not_found', 'compacted document is missing'\n              );\n              db.get('foo', { rev: rev2 }, function (err) {\n                done(err);\n              });\n            });\n          });\n        });\n      });\n    });\n\n    var checkBranch = function (db, docs, callback) {\n      function check(i) {\n        var doc = docs[i];\n        db.get(doc._id, { rev: doc._rev }, function (err) {\n          if (i < docs.length - 1) {\n            should.exist(err, 'should be compacted: ' + doc._rev);\n            err.status.should.equal(404, 'compacted!');\n            check(i + 1);\n          } else {\n            should.not.exist(err, 'should not be compacted: ' + doc._rev);\n            callback();\n          }\n        });\n      }\n      check(0);\n    };\n\n    var checkTree = function (db, tree, callback) {\n      function check(i) {\n        checkBranch(db, tree[i], function () {\n          if (i < tree.length - 1) {\n            check(i + 1);\n          } else {\n            callback();\n          }\n        });\n      }\n      check(0);\n    };\n\n    var exampleTree = [\n      [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n       {_id: 'foo', _rev: '2-b', value: 'foo b'},\n       {_id: 'foo', _rev: '3-c', value: 'foo c'}\n      ],\n      [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n       {_id: 'foo', _rev: '2-d', value: 'foo d'},\n       {_id: 'foo', _rev: '3-e', value: 'foo e'},\n       {_id: 'foo', _rev: '4-f', value: 'foo f'}\n      ],\n      [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n       {_id: 'foo', _rev: '2-g', value: 'foo g'},\n       {_id: 'foo', _rev: '3-h', value: 'foo h'},\n       {_id: 'foo', _rev: '4-i', value: 'foo i'},\n       {_id: 'foo', _rev: '5-j', _deleted: true, value: 'foo j'}\n      ]\n    ];\n\n    var exampleTree2 = [\n      [{_id: 'bar', _rev: '1-m', value: 'bar m'},\n       {_id: 'bar', _rev: '2-n', value: 'bar n'},\n       {_id: 'bar', _rev: '3-o', _deleted: true, value: 'foo o'}\n      ],\n      [{_id: 'bar', _rev: '2-n', value: 'bar n'},\n       {_id: 'bar', _rev: '3-p', value: 'bar p'},\n       {_id: 'bar', _rev: '4-r', value: 'bar r'},\n       {_id: 'bar', _rev: '5-s', value: 'bar s'}\n      ],\n      [{_id: 'bar', _rev: '3-p', value: 'bar p'},\n       {_id: 'bar', _rev: '4-t', value: 'bar t'},\n       {_id: 'bar', _rev: '5-u', value: 'bar u'}\n      ]\n    ];\n\n    it('Compact more complicated tree', function (done) {\n      var db = new PouchDB(dbs.name);\n      testUtils.putTree(db, exampleTree, function () {\n        db.compact(function () {\n          checkTree(db, exampleTree, function () {\n            done();\n          });\n        });\n      });\n    });\n\n    it('Compact two times more complicated tree', function (done) {\n      var db = new PouchDB(dbs.name);\n      testUtils.putTree(db, exampleTree, function () {\n        db.compact(function () {\n          db.compact(function () {\n            checkTree(db, exampleTree, function () {\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Compact database with at least two documents', function (done) {\n      var db = new PouchDB(dbs.name);\n      testUtils.putTree(db, exampleTree, function () {\n        testUtils.putTree(db, exampleTree2, function () {\n          db.compact(function () {\n            checkTree(db, exampleTree, function () {\n              checkTree(db, exampleTree2, function () {\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Compact deleted document', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'foo' }, function (err, res) {\n        var firstRev = res.rev;\n        db.remove({\n          _id: 'foo',\n          _rev: firstRev\n        }, function () {\n          db.compact(function () {\n            db.get('foo', { rev: firstRev }, function (err) {\n              should.exist(err, 'got error');\n              err.status.should.equal(testUtils.errors.MISSING_DOC.status,\n                                      'correct error status returned');\n              err.message.should.equal(testUtils.errors.MISSING_DOC.message,\n                                   'correct error message returned');\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Compact db with sql-injecty doc id', function (done) {\n      var db = new PouchDB(dbs.name);\n      var id = '\\'sql_injection_here';\n      db.put({ _id: id }, function (err, res) {\n        var firstRev = res.rev;\n        db.remove({\n          _id: id,\n          _rev: firstRev\n        }, function () {\n          db.compact(function () {\n            db.get(id, { rev: firstRev }, function (err) {\n              should.exist(err, 'got error');\n              err.status.should.equal(testUtils.errors.MISSING_DOC.status,\n                                      'correct error status returned');\n              err.message.should.equal(testUtils.errors.MISSING_DOC.message,\n                                   'correct error message returned');\n              done();\n            });\n          });\n        });\n      });\n    });\n\n\n    function getRevisions(db, docId) {\n      return db.get(docId, {\n        revs: true,\n        open_revs: 'all'\n      }).then(function (docs) {\n        var combinedResult = [];\n        return testUtils.Promise.all(docs.map(function (doc) {\n          doc = doc.ok;\n          // convert revision IDs into full _rev hashes\n          var start = doc._revisions.start;\n          return testUtils.Promise.all(\n            doc._revisions.ids.map(function (id, i) {\n              var rev = (start - i) + '-' + id;\n              return db.get(docId, {rev: rev}).then(function (doc) {\n                return { rev: rev, doc: doc };\n              }).catch(function (err) {\n                if (err.status !== 404) {\n                  throw err;\n                }\n                return { rev: rev };\n              });\n            })).then(function (docsAndRevs) {\n              combinedResult = combinedResult.concat(docsAndRevs);\n            });\n        })).then(function () {\n          return combinedResult;\n        });\n      });\n    }\n\n    it('Compaction removes non-leaf revs (#2807)', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(1);\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(2);\n        should.exist(docsAndRevs[0].doc);\n        should.exist(docsAndRevs[1].doc);\n        return db.compact();\n      }).then(function () {\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(2);\n        should.exist(docsAndRevs[0].doc);\n        should.not.exist(docsAndRevs[1].doc);\n      });\n    });\n\n    it('Compaction removes non-leaf revs pt 2 (#2807)', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        return db.put(doc);\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(3);\n        should.exist(docsAndRevs[0].doc);\n        should.not.exist(docsAndRevs[1].doc);\n        should.not.exist(docsAndRevs[2].doc);\n      });\n    });\n\n    it('Compaction removes non-leaf revs pt 3 (#2807)', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n\n      var docs = [\n        {\n          _id: 'foo',\n          _rev: '1-a1',\n          _revisions: { start: 1, ids: [ 'a1' ] }\n        }, {\n          _id: 'foo',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n        }, {\n          _id: 'foo',\n          _deleted: true,\n          _rev: '3-a3',\n          _revisions: { start: 3, ids: [ 'a3', 'a2', 'a1' ] }\n        }, {\n          _id: 'foo',\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] }\n        }\n      ];\n\n      return db.bulkDocs(docs, {new_edits: false}).then(function () {\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(4);\n        should.exist(docsAndRevs[0].doc);\n        should.exist(docsAndRevs[1].doc);\n        should.exist(docsAndRevs[2].doc);\n        should.exist(docsAndRevs[3].doc);\n        return db.compact();\n      }).then(function () {\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(4);\n        var asMap = {};\n        docsAndRevs.forEach(function (docAndRev) {\n          asMap[docAndRev.rev] = docAndRev.doc;\n        });\n        // only leafs remain\n        should.not.exist(asMap['1-a1']);\n        should.not.exist(asMap['2-a2']);\n        should.exist(asMap['3-a3']);\n        should.exist(asMap['1-b1']);\n      });\n    });\n\n    it('Compaction removes non-leaf revs pt 4 (#2807)', function () {\n      if (testUtils.isCouchMaster()) {\n        return true;\n      }\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        doc._deleted = true;\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        delete doc._deleted;\n        return db.put(doc);\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(3);\n        should.exist(docsAndRevs[0].doc);\n        should.not.exist(docsAndRevs[1].doc);\n        should.not.exist(docsAndRevs[2].doc);\n      });\n    });\n\n    it('Compaction removes non-leaf revs pt 5 (#2807)', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        doc._deleted = true;\n        return db.put(doc);\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(3);\n        should.exist(docsAndRevs[0].doc);\n        should.not.exist(docsAndRevs[1].doc);\n        should.not.exist(docsAndRevs[2].doc);\n      });\n    });\n\n    it('#2931 - synchronous putAttachment + compact', function () {\n\n      var db = new PouchDB(dbs.name);\n      var queue = db.put({_id: 'doc'});\n\n      var otherPromises = [];\n\n      for (var i = 0; i < 50; i++) {\n        /* jshint loopfunc:true */\n        queue = queue.then(function () {\n          return db.get('doc').then(function (doc) {\n            doc._attachments = doc._attachments || {};\n            var blob = testUtils.makeBlob(\n              testUtils.btoa(Math.random().toString()),\n              'text/plain');\n            return db.putAttachment(doc._id, 'att.txt', doc._rev, blob,\n              'text/plain');\n          });\n        });\n        queue.then(function () {\n          var promise = testUtils.Promise.all([\n            db.compact(),\n            db.compact(),\n            db.compact(),\n            db.compact(),\n            db.compact()\n          ]);\n          otherPromises.push(promise);\n          return promise;\n        });\n      }\n      return queue.then(function () {\n        return testUtils.Promise.all(otherPromises);\n      });\n    });\n\n    it('#2931 - synchronous putAttachment + compact 2', function () {\n\n      var db = new PouchDB(dbs.name);\n      var queue = db.put({_id: 'doc'});\n\n      var compactQueue = testUtils.Promise.resolve();\n\n      for (var i = 0; i < 50; i++) {\n        /* jshint loopfunc:true */\n        queue = queue.then(function () {\n          return db.get('doc').then(function (doc) {\n            doc._attachments = doc._attachments || {};\n            var blob = testUtils.makeBlob(\n              testUtils.btoa(Math.random().toString()),\n              'text/plain');\n            return db.putAttachment(doc._id, 'att.txt', doc._rev, blob,\n              'text/plain');\n          });\n        });\n        queue.then(function () {\n          compactQueue = compactQueue.then(function () {\n            return testUtils.Promise.all([\n              db.compact(),\n              db.compact(),\n              db.compact(),\n              db.compact(),\n              db.compact()\n            ]);\n          });\n        });\n      }\n      return queue.then(function () {\n        return compactQueue;\n      });\n    });\n\n    //\n    // NO MORE HTTP TESTS AFTER THIS POINT!\n    //\n    // We're testing some functionality specific to the implementation\n    // of pouch-adapter-(idb|websql|leveldb), skip the tests if\n    // HTTP or if using new adapters (NEXT=1).\n\n\n    if (autoCompactionAdapters.indexOf(adapter) === -1 ||\n        'NEXT' in testUtils.params()) {\n      return;\n    }\n\n    //\n    // Tests for issue #2818 follow, which make some assumptions\n    // about how binary data is stored, so they don't pass in\n    // CouchDB. Namely, PouchDB dedups attachments based on\n    // md5sum, whereas CouchDB does not.\n    //\n\n    // per https://en.wikipedia.org/wiki/MD5,\n    // these two should have colliding md5sums\n    var att1 = '0THdAsXm7sRpPZoGmK/5XC/KtQcSRn6r' +\n      'QARYPrj7f4lVrTQGCfSzAoPkiIMl8UFaCFEl6PfNyZ/Z' +\n      'Hb1ygDc8W9iCPjFWNI9brm2s1DbJGcbdU+I0h9oD/' +\n      'QI5YwbSSM2g6Z8zQg9XfujOVLZwgCgNHsaY' +\n      'Iby2qIOTlvllq2/3KnA=';\n    var att2 = '0THdAsXm7sRpPZoGmK/5XC/KtYcSRn6r' +\n      'QARYPrj7f4lVrTQGCfSzAoPkiIMlcUFaCFEl6PfNyZ/Z' +\n      'Hb3ygDc8W9iCPjFWNI9brm2s1DbJGcbdU+K0h9oD/' +\n      'QI5YwbSSM2g6Z8zQg9XfujOVLZwgKgNHsaY' +\n      'Iby2qIOTlvllK2/3KnA=';\n\n    it('#2818 md5 collision (sanity check)', function () {\n      //\n      // CouchDB will throw!\n      //\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc1 = {\n        _id: 'doc1',\n        _attachments: {\n          'att.txt': {\n            data: att1,\n            content_type: 'application/octet-stream'\n          }\n        }\n      };\n      var doc2 = {\n        _id: 'doc2',\n        _attachments: {\n          'att.txt': {\n            data: att2,\n            content_type: 'application/octet-stream'\n          }\n        }\n      };\n      var doc3 = {\n        _id: 'doc3',\n        _attachments: {\n          'att.txt': {\n            data: '1' + att2.substring(1), // distractor\n            content_type: 'application/octet-stream'\n          }\n        }\n      };\n      return db.put(doc1).then(function () {\n        return db.put(doc2);\n      }).then(function () {\n        return db.put(doc3);\n      }).then(function () {\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        var md1 = res.rows[0].doc._attachments['att.txt'].digest;\n        var md2 = res.rows[1].doc._attachments['att.txt'].digest;\n        var md3 = res.rows[2].doc._attachments['att.txt'].digest;\n        md1.should.not.equal(md3, 'md5 sums should not collide');\n        md2.should.not.equal(md3, 'md5 sums should not collide');\n        md1.should.equal(md2,\n          'md5 sums should collide. if not, other #2818 tests will fail');\n      }).then(function () {\n        return testUtils.Promise.all(['doc1', 'doc2'].map(function (id) {\n          return db.get(id, {attachments: true});\n        })).then(function (docs) {\n          var data1 = docs[0]._attachments['att.txt'].data;\n          var data2 = docs[1]._attachments['att.txt'].data;\n          data1.should.equal(data2,\n            'yay, we are vulnerable to md5sum collision (1)');\n          att1.should.equal(data2,\n              'att1 is the final one, not att2');\n        });\n      });\n    });\n\n    it('#2818 md5 collision between revs (sanity check)', function () {\n      //\n      // CouchDB will throw!\n      //\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc1 = {\n        _id: 'doc1',\n        _attachments: {\n          'att.txt': {\n            data: att1,\n            content_type: 'application/octet-stream'\n          }\n        }\n      };\n      var rev1;\n      var rev2;\n      return db.put(doc1).then(function (res) {\n        rev1 = doc1._rev = res.rev;\n        doc1._attachments['att.txt'].data = att2;\n        return db.put(doc1);\n      }).then(function (res) {\n        rev2 = res.rev;\n        return testUtils.Promise.all([rev1, rev2].map(function (rev) {\n          return db.get('doc1', {rev: rev, attachments: true});\n        }));\n      }).then(function (docs) {\n        var data1 = docs[0]._attachments['att.txt'].data;\n        var data2 = docs[1]._attachments['att.txt'].data;\n        data1.should.equal(data2,\n          'yay, we are vulnerable to md5sum collision');\n      });\n    });\n\n    it('#2818 doesn\\'t throw 412, thanks to digest', function () {\n      //\n      // CouchDB will throw!\n      //\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc1 = {\n        _id: 'doc1',\n        _attachments: {\n          'att.txt': {\n            data: 'Zm9vYmFy', // 'foobar'\n            content_type: 'text/plain'\n          }\n        }\n      };\n\n      return db.put(doc1).then(function () {\n        return db.get('doc1');\n      }).then(function (doc1) {\n        var doc2 = {\n          _id: 'doc2',\n          _attachments: {\n            'att.txt': {\n              stub: true,\n              digest: doc1._attachments['att.txt'].digest,\n              content_type: 'text/plain'\n            }\n          }\n        };\n        return db.put(doc2);\n      });\n    });\n\n    it('#2818 Compaction removes attachments', function () {\n      // now that we've established no 412s thanks to digests,\n      // we can use that to detect true attachment deletion\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = {\n        _id: 'doc1',\n        _attachments: {\n          'deleteme.txt': {\n            data: 'Zm9vYmFy', // 'foobar'\n            content_type: 'text/plain'\n          }\n        }\n      };\n      var digest;\n      return db.put(doc).then(function () {\n        return db.get('doc1');\n      }).then(function (doc) {\n        digest = doc._attachments['deleteme.txt'].digest;\n        delete doc._attachments['deleteme.txt'];\n        doc._attachments['retainme.txt'] = {\n          data: 'dG90bw==', // 'toto'\n          content_type: 'text/plain'\n        };\n        return db.put(doc);\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return db.get('doc1');\n      }).then(function (doc) {\n        doc._attachments['newatt.txt'] = {\n          content_type: \"text/plain\",\n          digest: digest,\n          stub: true\n        };\n        return db.put(doc).then(function () {\n          throw new Error('shouldn\\'t have gotten here');\n        }, function (err) {\n          err.status.should.equal(412);\n        });\n      });\n    });\n\n    it('#2818 Compaction removes attachments given conflicts', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n\n      var docs = [\n        {\n          _id: 'fubar',\n          _rev: '1-a1',\n          _revisions: { start: 1, ids: [ 'a1' ] },\n          _attachments: {\n            'att.txt': {\n              data: 'Zm9vYmFy', // 'foobar'\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'fubar',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] },\n          _attachments: {\n            'att.txt': {\n              data: 'dG90bw==', // 'toto'\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'fubar',\n          _rev: '3-a3',\n          _revisions: { start: 3, ids: [ 'a3', 'a2', 'a1' ] },\n          _attachments: {\n            'att.txt': {\n              data: 'Ym9uZ28=', // 'bongo'\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'fubar',\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] },\n          _attachments: {\n            'att.txt': {\n              data: 'enV6dQ==', // 'zuzu'\n              content_type: 'text/plain'\n            }\n          }\n        }\n      ];\n\n      var allDigests = [];\n      var digestsToForget = [];\n      var digestsToRemember = [];\n      return db.bulkDocs({\n        docs: docs,\n        new_edits: false\n      }).then(function () {\n        return testUtils.Promise.all([\n          '1-a1', '2-a2', '3-a3', '1-b1'\n        ].map(function (rev) {\n          return db.get('fubar', {rev: rev, attachments: true});\n        }));\n      }).then(function (docs) {\n        digestsToForget.push(docs[0]._attachments['att.txt'].digest);\n        digestsToForget.push(docs[1]._attachments['att.txt'].digest);\n        digestsToRemember.push(docs[2]._attachments['att.txt'].digest);\n        digestsToRemember.push(docs[3]._attachments['att.txt'].digest);\n\n        allDigests = allDigests.concat(digestsToForget).concat(\n          digestsToRemember);\n\n        return testUtils.Promise.all(allDigests.map(function (digest) {\n          var doc = {\n            _attachments: {\n              'newatt.txt': {\n                content_type: \"text/plain\",\n                digest: digest,\n                stub: true\n              }\n            }\n          };\n          return db.post(doc).then(function (res) {\n            return db.remove(res.id, res.rev);\n          });\n        }));\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return testUtils.Promise.all(digestsToForget.map(\n            function (digest) {\n          var doc = {\n            _attachments: {\n              'newatt.txt': {\n                content_type: \"text/plain\",\n                digest: digest,\n                stub: true\n              }\n            }\n          };\n          return db.post(doc).then(function () {\n            throw new Error('shouldn\\'t have gotten here');\n          }, function (err) {\n            err.status.should.equal(412);\n          });\n        }));\n      }).then(function () {\n        return testUtils.Promise.all(digestsToRemember.map(\n            function (digest) {\n          var doc = {\n            _attachments: {\n              'newatt.txt': {\n                content_type: \"text/plain\",\n                digest: digest,\n                stub: true\n              }\n            }\n          };\n          return db.post(doc);\n        }));\n      });\n    });\n\n    it('#2818 Compaction retains attachments if unorphaned', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = {\n        _id: 'doc1',\n        _attachments: {\n          'deleteme.txt': {\n            data: 'Zm9vYmFy', // 'foobar'\n            content_type: 'text/plain'\n          }\n        }\n      };\n      var digest;\n      return db.put(doc).then(function () {\n        return db.get('doc1');\n      }).then(function (doc) {\n        digest = doc._attachments['deleteme.txt'].digest;\n        delete doc._attachments['deleteme.txt'];\n        doc._attachments['retainme.txt'] = {\n          data: 'dG90bw==', // 'toto'\n          content_type: 'text/plain'\n        };\n        return db.put(doc);\n      }).then(function () {\n        return db.put({\n          _id: 'doc2',\n          _attachments: {\n            'nodontdeleteme.txt': {\n              data: 'Zm9vYmFy', // 'foobar'\n              content_type: 'text/plain'\n            }\n          }\n        });\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return db.get('doc1');\n      }).then(function (doc) {\n        doc._attachments['newatt.txt'] = {\n          content_type: \"text/plain\",\n          digest: digest,\n          stub: true\n        };\n        return db.put(doc);\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        // ok, now let's really delete them\n        var docs = [\n          {\n            _id: 'doc1',\n            _rev: res.rows[0].value.rev\n          },\n          {\n            _id: 'doc2',\n            _rev: res.rows[1].value.rev\n          }\n        ];\n        return db.bulkDocs(docs);\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        var doc = {\n          _attachments: {\n            'foo.txt': {\n              content_type: \"text/plain\",\n              digest: digest,\n              stub: true\n            }\n          }\n        };\n        return db.post(doc).then(function () {\n          throw new Error('shouldn\\'t have gotten here');\n        }, function (err) {\n          err.status.should.equal(412);\n        });\n      });\n    });\n\n    it('#2818 successive new_edits okay with attachments', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [{\n        '_id': 'foo',\n        '_rev': '1-x',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        },\n        _attachments: {\n          'att.txt': {\n            data: 'Zm9vYmFy', // 'foobar'\n            content_type: 'text/plain'\n          }\n        }\n      }];\n      var digest;\n      return db.bulkDocs({docs: docs, new_edits: false}).then(function () {\n        return db.bulkDocs({docs: docs, new_edits: false});\n      }).then(function () {\n        return db.get('foo', {attachments: true});\n      }).then(function (doc) {\n        doc._rev.should.equal('1-x');\n        digest = doc._attachments['att.txt'].digest;\n      }).then(function () {\n        var doc = {\n          _attachments: {\n            'foo.txt': {\n              content_type: \"text/plain\",\n              digest: digest,\n              stub: true\n            }\n          }\n        };\n        return db.post(doc);\n      });\n    });\n\n    it('#2818 Compaction really replaces attachments', function () {\n      // now that we've established md5sum collisions,\n      // we can use that to detect true attachment replacement\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      return db.put({\n        _id: 'doc1',\n        _attachments: {\n          'att.txt': {\n            data: att1,\n            content_type: 'application/octet-stream'\n          }\n        }\n      }).then(function () {\n        return db.get('doc1', {attachments: true});\n      }).then(function (doc1) {\n        doc1._attachments['att.txt'].data.should.equal(att1, 'doc1');\n        return db.put({\n          _id: 'doc2',\n          _attachments: {\n            'att.txt': {\n              data: att2,\n              content_type: 'application/octet-stream'\n            }\n          }\n        });\n      }).then(function () {\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        res.rows[0].doc._attachments['att.txt'].digest.should.equal(\n          res.rows[1].doc._attachments['att.txt'].digest,\n          'digests collide'\n        );\n        return db.get('doc1', {attachments: true});\n      }).then(function (doc1) {\n        doc1._attachments['att.txt'].data.should.equal(att1,\n          'doc1 has original att, indicating we didn\\'t overwrite it');\n        return db.get('doc2', {attachments: true});\n      }).then(function (doc2) {\n        doc2._attachments['att.txt'].data.should.equal(att1,\n          'doc2 also has original att');\n        return db.remove(doc2);\n      }).then(function () {\n        return db.get('doc1');\n      }).then(function (doc1) {\n        return db.remove(doc1);\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return db.put({\n          _id: 'doc3',\n          _attachments: {\n            'att.txt': {\n              data: att2,\n              content_type: 'application/octet-stream'\n            }\n          }\n        });\n      }).then(function () {\n        return db.put({\n          _id: 'doc4',\n          _attachments: {\n            'att.txt': {\n              data: att1,\n              content_type: 'application/octet-stream'\n            }\n          }\n        });\n      }).then(function () {\n        return db.get('doc3', {attachments: true});\n      }).then(function (doc3) {\n        doc3._attachments['att.txt'].data.should.equal(att2,\n          'md5-colliding content was really replaced');\n        return db.get('doc4', {attachments: true});\n      }).then(function (doc4) {\n        doc4._attachments['att.txt'].data.should.equal(att2,\n          'md5-colliding content was really replaced');\n      });\n    });\n\n    it('#2818 Many orphaned attachments', function () {\n      // now that we've established md5sum collisions,\n      // we can use that to detect true attachment replacement\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var docs = [\n        {\n          _id: 'doc1',\n          _attachments: {\n            'att1.txt': {\n              data: testUtils.btoa('1'),\n              content_type: 'text/plain'\n            },\n            'att2.txt': {\n              data: testUtils.btoa('2'),\n              content_type: 'text/plain'\n            },\n            'att3.txt': {\n              data: testUtils.btoa('3'),\n              content_type: 'text/plain'\n            },\n            'att4.txt': {\n              data: testUtils.btoa('4'),\n              content_type: 'text/plain'\n            },\n            'att5.txt': {\n              data: testUtils.btoa('5'),\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'doc2',\n          _attachments: {\n            'att3.txt': {\n              data: testUtils.btoa('3'),\n              content_type: 'text/plain'\n            },\n            'att4.txt': {\n              data: testUtils.btoa('4'),\n              content_type: 'text/plain'\n            },\n            'att5.txt': {\n              data: testUtils.btoa('5'),\n              content_type: 'text/plain'\n            },\n            'att6.txt': {\n              data: testUtils.btoa('6'),\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'doc3',\n          _attachments: {\n            'att1.txt': {\n              data: testUtils.btoa('1'),\n              content_type: 'text/plain'\n            },\n            'att6.txt': {\n              data: testUtils.btoa('6'),\n              content_type: 'text/plain'\n            },\n            'att7.txt': {\n              data: testUtils.btoa('7'),\n              content_type: 'text/plain'\n            }\n          }\n        }\n      ];\n\n      var digestsToForget;\n      var digestsToRemember;\n      return db.bulkDocs(docs).then(function () {\n        return db.compact();\n      }).then(function () {\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        var allAtts = {};\n        res.rows.forEach(function (row) {\n          Object.keys(row.doc._attachments).forEach(function (attName) {\n            var att = row.doc._attachments[attName];\n            allAtts[attName] = att.digest;\n          });\n        });\n        digestsToForget = [\n          allAtts['att2.txt'],\n          allAtts['att3.txt'],\n          allAtts['att4.txt'],\n          allAtts['att5.txt']\n        ];\n        digestsToRemember = [\n          allAtts['att1.txt'],\n          allAtts['att6.txt'],\n          allAtts['att7.txt']\n        ];\n        return db.get('doc1');\n      }).then(function (doc1) {\n        return db.remove(doc1);\n      }).then(function () {\n        return db.get('doc2');\n      }).then(function (doc2) {\n        return db.remove(doc2);\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return testUtils.Promise.all(\n            digestsToRemember.map(function (digest) {\n          return db.post({\n            _attachments: {\n              'baz.txt' : {\n                stub: true,\n                digest: digest,\n                content_type: 'text/plain'\n              }\n            }\n          });\n        }));\n      }).then(function () {\n        return testUtils.Promise.all(\n            digestsToForget.map(function (digest) {\n          return db.post({\n            _attachments: {\n              'baz.txt' : {\n                stub: true,\n                digest: digest,\n                content_type: 'text/plain'\n              }\n            }\n          }).then(function () {\n            throw new Error('shouldn\\'t have gotten here');\n          }, function (err) {\n            err.status.should.equal(412);\n          });\n        }));\n      });\n    });\n\n    it('#3092 atts should be ignored when _deleted - bulkDocs', function () {\n      // now that we've established md5sum collisions,\n      // we can use that to detect true attachment replacement\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = { _id: 'doc1'};\n      return db.put(doc).then(function (info) {\n        doc._rev = info.rev;\n        doc._deleted = true;\n        doc._attachments = {\n          'att1.txt': {\n            data: testUtils.btoa('1'),\n            content_type: 'application/octet-stream'\n          }\n        };\n        return db.bulkDocs([doc]);\n      }).then(function () {\n        return db.post({\n          _attachments: {\n            'baz.txt' : {\n              stub: true,\n              digest: 'md5-xMpCOKC5I4INzFCab3WEmw==',\n              content_type: 'application/octet-stream'\n            }\n          }\n        }).then(function () {\n          throw new Error('shouldn\\'t have gotten here');\n        }, function (err) {\n          err.status.should.equal(412);\n        });\n      });\n    });\n\n    it('#3091 atts should be ignored when _deleted - put', function () {\n      // now that we've established md5sum collisions,\n      // we can use that to detect true attachment replacement\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var doc = { _id: 'doc1'};\n      return db.put(doc).then(function (info) {\n        doc._rev = info.rev;\n        doc._deleted = true;\n        doc._attachments = {\n          'att1.txt': {\n            data: testUtils.btoa('1'),\n            content_type: 'application/octet-stream'\n          }\n        };\n        return db.put(doc);\n      }).then(function () {\n        return db.post({\n          _attachments: {\n            'baz.txt' : {\n              stub: true,\n              digest: 'md5-xMpCOKC5I4INzFCab3WEmw==',\n              content_type: 'application/octet-stream'\n            }\n          }\n        }).then(function () {\n          throw new Error('shouldn\\'t have gotten here');\n        }, function (err) {\n          err.status.should.equal(412);\n        });\n      });\n    });\n\n    it('#3089 Many orphaned atts w/ parallel compaction', function () {\n      // now that we've established md5sum collisions,\n      // we can use that to detect true attachment replacement\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var docs = [\n        {\n          _id: 'doc1',\n          _attachments: {\n            'att1.txt': {\n              data: testUtils.btoa('1'),\n              content_type: 'text/plain'\n            },\n            'att2.txt': {\n              data: testUtils.btoa('2'),\n              content_type: 'text/plain'\n            },\n            'att3.txt': {\n              data: testUtils.btoa('3'),\n              content_type: 'text/plain'\n            },\n            'att4.txt': {\n              data: testUtils.btoa('4'),\n              content_type: 'text/plain'\n            },\n            'att5.txt': {\n              data: testUtils.btoa('5'),\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'doc2',\n          _attachments: {\n            'att3.txt': {\n              data: testUtils.btoa('3'),\n              content_type: 'text/plain'\n            },\n            'att4.txt': {\n              data: testUtils.btoa('4'),\n              content_type: 'text/plain'\n            },\n            'att5.txt': {\n              data: testUtils.btoa('5'),\n              content_type: 'text/plain'\n            },\n            'att6.txt': {\n              data: testUtils.btoa('6'),\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'doc3',\n          _attachments: {\n            'att1.txt': {\n              data: testUtils.btoa('1'),\n              content_type: 'text/plain'\n            },\n            'att6.txt': {\n              data: testUtils.btoa('6'),\n              content_type: 'text/plain'\n            },\n            'att7.txt': {\n              data: testUtils.btoa('7'),\n              content_type: 'text/plain'\n            }\n          }\n        }\n      ];\n\n      var digestsToForget;\n      var digestsToRemember;\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        var allAtts = {};\n        res.rows.forEach(function (row) {\n          Object.keys(row.doc._attachments).forEach(function (attName) {\n            var att = row.doc._attachments[attName];\n            allAtts[attName] = att.digest;\n          });\n        });\n        digestsToForget = [\n          allAtts['att2.txt'],\n          allAtts['att3.txt'],\n          allAtts['att4.txt'],\n          allAtts['att5.txt']\n        ];\n        digestsToRemember = [\n          allAtts['att1.txt'],\n          allAtts['att6.txt'],\n          allAtts['att7.txt']\n        ];\n        return db.allDocs({keys: ['doc1', 'doc2']});\n      }).then(function (res) {\n        var docs = res.rows.map(function (row) {\n          return {\n            _deleted: true,\n            _id: row.id,\n            _rev: row.value.rev\n          };\n        });\n        return db.bulkDocs(docs);\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return testUtils.Promise.all(\n          digestsToRemember.map(function (digest) {\n            return db.post({\n              _attachments: {\n                'baz.txt' : {\n                  stub: true,\n                  digest: digest,\n                  content_type: 'text/plain'\n                }\n              }\n            });\n          }));\n      }).then(function () {\n        return testUtils.Promise.all(\n          digestsToForget.map(function (digest) {\n            return db.post({\n              _attachments: {\n                'baz.txt' : {\n                  stub: true,\n                  digest: digest,\n                  content_type: 'text/plain'\n                }\n              }\n            }).then(function () {\n              throw new Error('shouldn\\'t have gotten here');\n            }, function (err) {\n              err.status.should.equal(412);\n            });\n          }));\n      });\n    });\n\n    it('#3089 Same att orphaned by many documents', function () {\n      // In this test, a single attachment is shared by many docs,\n      // which are all deleted in a single bulkDocs. This is to\n      // hunt down race conditions in our orphan compaction.\n\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n\n      var docs = [];\n      for (var i = 0; i < 100; i++) {\n        docs.push({\n          _id: i.toString(),\n          _attachments: {\n            'att1.txt': {\n              data: testUtils.btoa('1'),\n              content_type: 'text/plain'\n            }\n          }\n        });\n      }\n\n      return db.bulkDocs(docs).then(function (results) {\n        results.forEach(function (res, i) {\n          docs[i]._rev = res.rev;\n        });\n        return db.get(docs[0]._id);\n      }).then(function (doc) {\n        var digest = doc._attachments['att1.txt'].digest;\n        docs.forEach(function (doc) {\n          doc._deleted = true;\n        });\n        return db.bulkDocs(docs).then(function () {\n          return db.compact();\n        }).then(function () {\n          return db.post({\n            _attachments: {\n              'baz.txt' : {\n                stub: true,\n                digest: digest,\n                content_type: 'text/plain'\n              }\n            }\n          }).then(function () {\n            throw new Error('shouldn\\'t have gotten here');\n          }, function (err) {\n            err.status.should.equal(412);\n          });\n        });\n      });\n    });\n\n    //\n    // AUTO-COMPACTION TESTS FOLLOW\n    // http adapters need not apply!\n    //\n\n    it('Auto-compaction test', function (done) {\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n      var doc = {_id: 'doc', val: '1'};\n      db.post(doc, function (err, res) {\n        var rev1 = res.rev;\n        doc._rev = rev1;\n        doc.val = '2';\n        db.post(doc, function (err, res) {\n          var rev2 = res.rev;\n          doc._rev = rev2;\n          doc.val = '3';\n          db.post(doc, function (err, res) {\n            var rev3 = res.rev;\n            db.get('doc', { rev: rev1 }, function (err) {\n              err.status.should.equal(404, 'rev-1 should be missing');\n              err.name.should.equal(\n                'not_found', 'rev-1 should be missing'\n              );\n              db.get('doc', { rev: rev2 }, function (err) {\n                err.status.should.equal(404, 'rev-2 should be missing');\n                err.name.should.equal(\n                  'not_found', 'rev-2 should be missing'\n                );\n                db.get('doc', { rev: rev3 }, function (err) {\n                  done(err);\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('#3251 massively parallel autocompaction while getting', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n\n      var doc = {_id: 'foo'};\n\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n      }).then(function () {\n\n        var updatePromise = testUtils.Promise.resolve();\n\n        for (var i  = 0; i < 20; i++) {\n          /* jshint loopfunc: true */\n          updatePromise = updatePromise.then(function () {\n            return db.put(doc).then(function (res) {\n              doc._rev = res.rev;\n            });\n          });\n        }\n\n        var tasks = [updatePromise];\n        for (var ii = 0; ii < 300; ii++) {\n          /* jshint loopfunc: true */\n          var task = db.get('foo');\n          for (var j =0; j < 10; j++) {\n            task = task.then(function () {\n              return new testUtils.Promise(function (resolve) {\n                setTimeout(resolve, Math.floor(Math.random() * 10));\n              });\n            }).then(function () {\n              return db.get('foo');\n            });\n          }\n          tasks.push(task);\n        }\n        return testUtils.Promise.all(tasks);\n      });\n    });\n\n    it('#3251 massively parallel autocompaction while allDocsing', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n\n      var doc = {_id: 'foo'};\n\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n      }).then(function () {\n\n        var updatePromise = testUtils.Promise.resolve();\n\n        for (var i  = 0; i < 20; i++) {\n          /* jshint loopfunc: true */\n          updatePromise = updatePromise.then(function () {\n            return db.put(doc).then(function (res) {\n              doc._rev = res.rev;\n            });\n          });\n        }\n\n        var tasks = [updatePromise];\n        for (var ii = 0; ii < 300; ii++) {\n          /* jshint loopfunc: true */\n          var task = db.allDocs({key: 'foo', include_docs: true});\n          for (var j =0; j < 10; j++) {\n            task = task.then(function () {\n              return new testUtils.Promise(function (resolve) {\n                setTimeout(resolve, Math.floor(Math.random() * 10));\n              });\n            }).then(function () {\n              return db.allDocs({key: 'foo', include_docs: true});\n            });\n          }\n          tasks.push(task);\n        }\n        return testUtils.Promise.all(tasks);\n      });\n    });\n\n    it('#3251 massively parallel autocompaction while changesing', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n\n      var doc = {_id: 'foo'};\n\n      // we know we're going to reach this because of all the changes()\n      // we're doing at once\n      db.setMaxListeners(1000);\n\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n      }).then(function () {\n\n        var updatePromise = testUtils.Promise.resolve();\n\n        for (var i  = 0; i < 20; i++) {\n          /* jshint loopfunc: true */\n          updatePromise = updatePromise.then(function () {\n            return db.put(doc).then(function (res) {\n              doc._rev = res.rev;\n            });\n          });\n        }\n\n        var tasks = [updatePromise];\n        for (var ii = 0; ii < 300; ii++) {\n          /* jshint loopfunc: true */\n          var task = db.changes({include_docs: true});\n          for (var j =0; j < 10; j++) {\n            task = task.then(function () {\n              return new testUtils.Promise(function (resolve) {\n                setTimeout(resolve, Math.floor(Math.random() * 10));\n              });\n            }).then(function () {\n              return db.changes({include_docs: true});\n            });\n          }\n          tasks.push(task);\n        }\n        return testUtils.Promise.all(tasks);\n      });\n    });\n\n    it('#3089 Many orphaned attachments w/ auto-compaction', function () {\n      // now that we've established md5sum collisions,\n      // we can use that to detect true attachment replacement\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n      var docs = [\n        {\n          _id: 'doc1',\n          _attachments: {\n            'att1.txt': {\n              data: testUtils.btoa('1'),\n              content_type: 'text/plain'\n            },\n            'att2.txt': {\n              data: testUtils.btoa('2'),\n              content_type: 'text/plain'\n            },\n            'att3.txt': {\n              data: testUtils.btoa('3'),\n              content_type: 'text/plain'\n            },\n            'att4.txt': {\n              data: testUtils.btoa('4'),\n              content_type: 'text/plain'\n            },\n            'att5.txt': {\n              data: testUtils.btoa('5'),\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'doc2',\n          _attachments: {\n            'att3.txt': {\n              data: testUtils.btoa('3'),\n              content_type: 'text/plain'\n            },\n            'att4.txt': {\n              data: testUtils.btoa('4'),\n              content_type: 'text/plain'\n            },\n            'att5.txt': {\n              data: testUtils.btoa('5'),\n              content_type: 'text/plain'\n            },\n            'att6.txt': {\n              data: testUtils.btoa('6'),\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'doc3',\n          _attachments: {\n            'att1.txt': {\n              data: testUtils.btoa('1'),\n              content_type: 'text/plain'\n            },\n            'att6.txt': {\n              data: testUtils.btoa('6'),\n              content_type: 'text/plain'\n            },\n            'att7.txt': {\n              data: testUtils.btoa('7'),\n              content_type: 'text/plain'\n            }\n          }\n        }\n      ];\n\n      var digestsToForget;\n      var digestsToRemember;\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        var allAtts = {};\n        res.rows.forEach(function (row) {\n          Object.keys(row.doc._attachments).forEach(function (attName) {\n            var att = row.doc._attachments[attName];\n            allAtts[attName] = att.digest;\n          });\n        });\n        digestsToForget = [\n          allAtts['att2.txt'],\n          allAtts['att3.txt'],\n          allAtts['att4.txt'],\n          allAtts['att5.txt']\n        ];\n        digestsToRemember = [\n          allAtts['att1.txt'],\n          allAtts['att6.txt'],\n          allAtts['att7.txt']\n        ];\n        return db.get('doc1');\n      }).then(function (doc1) {\n        return db.remove(doc1);\n      }).then(function () {\n        return db.get('doc2');\n      }).then(function (doc2) {\n        return db.remove(doc2);\n      }).then(function () {\n        return testUtils.Promise.all(\n          digestsToRemember.map(function (digest) {\n            return db.post({\n              _attachments: {\n                'baz.txt' : {\n                  stub: true,\n                  digest: digest,\n                  content_type: 'text/plain'\n                }\n              }\n            });\n          }));\n      }).then(function () {\n        return testUtils.Promise.all(\n          digestsToForget.map(function (digest) {\n            return db.post({\n              _attachments: {\n                'baz.txt' : {\n                  stub: true,\n                  digest: digest,\n                  content_type: 'text/plain'\n                }\n              }\n            }).then(function () {\n              throw new Error('shouldn\\'t have gotten here');\n            }, function (err) {\n              err.status.should.equal(412);\n            });\n          }));\n      });\n    });\n\n    it('#3089 Many orphaned atts w/ parallel auto-compaction', function () {\n      // now that we've established md5sum collisions,\n      // we can use that to detect true attachment replacement\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n      var docs = [\n        {\n          _id: 'doc1',\n          _attachments: {\n            'att1.txt': {\n              data: testUtils.btoa('1'),\n              content_type: 'text/plain'\n            },\n            'att2.txt': {\n              data: testUtils.btoa('2'),\n              content_type: 'text/plain'\n            },\n            'att3.txt': {\n              data: testUtils.btoa('3'),\n              content_type: 'text/plain'\n            },\n            'att4.txt': {\n              data: testUtils.btoa('4'),\n              content_type: 'text/plain'\n            },\n            'att5.txt': {\n              data: testUtils.btoa('5'),\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'doc2',\n          _attachments: {\n            'att3.txt': {\n              data: testUtils.btoa('3'),\n              content_type: 'text/plain'\n            },\n            'att4.txt': {\n              data: testUtils.btoa('4'),\n              content_type: 'text/plain'\n            },\n            'att5.txt': {\n              data: testUtils.btoa('5'),\n              content_type: 'text/plain'\n            },\n            'att6.txt': {\n              data: testUtils.btoa('6'),\n              content_type: 'text/plain'\n            }\n          }\n        }, {\n          _id: 'doc3',\n          _attachments: {\n            'att1.txt': {\n              data: testUtils.btoa('1'),\n              content_type: 'text/plain'\n            },\n            'att6.txt': {\n              data: testUtils.btoa('6'),\n              content_type: 'text/plain'\n            },\n            'att7.txt': {\n              data: testUtils.btoa('7'),\n              content_type: 'text/plain'\n            }\n          }\n        }\n      ];\n\n      var digestsToForget;\n      var digestsToRemember;\n      return db.bulkDocs(docs).then(function () {\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        var allAtts = {};\n        res.rows.forEach(function (row) {\n          Object.keys(row.doc._attachments).forEach(function (attName) {\n            var att = row.doc._attachments[attName];\n            allAtts[attName] = att.digest;\n          });\n        });\n        digestsToForget = [\n          allAtts['att2.txt'],\n          allAtts['att3.txt'],\n          allAtts['att4.txt'],\n          allAtts['att5.txt']\n        ];\n        digestsToRemember = [\n          allAtts['att1.txt'],\n          allAtts['att6.txt'],\n          allAtts['att7.txt']\n        ];\n        return db.allDocs({keys: ['doc1', 'doc2']});\n      }).then(function (res) {\n        var docs = res.rows.map(function (row) {\n          return {\n            _deleted: true,\n            _id: row.id,\n            _rev: row.value.rev\n          };\n        });\n        return db.bulkDocs(docs);\n      }).then(function () {\n        return testUtils.Promise.all(\n          digestsToRemember.map(function (digest) {\n            return db.post({\n              _attachments: {\n                'baz.txt' : {\n                  stub: true,\n                  digest: digest,\n                  content_type: 'text/plain'\n                }\n              }\n            });\n          }));\n      }).then(function () {\n        return testUtils.Promise.all(\n          digestsToForget.map(function (digest) {\n            return db.post({\n              _attachments: {\n                'baz.txt' : {\n                  stub: true,\n                  digest: digest,\n                  content_type: 'text/plain'\n                }\n              }\n            }).then(function () {\n              throw new Error('shouldn\\'t have gotten here');\n            }, function (err) {\n              err.status.should.equal(412);\n            });\n          }));\n      });\n    });\n\n    it('#3089 Auto-compaction retains atts if unorphaned', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n      var doc = {\n        _id: 'doc1',\n        _attachments: {\n          'deleteme.txt': {\n            data: 'Zm9vYmFy', // 'foobar'\n            content_type: 'text/plain'\n          }\n        }\n      };\n      var digest;\n      return db.put(doc).then(function () {\n        return db.get('doc1');\n      }).then(function (doc) {\n        digest = doc._attachments['deleteme.txt'].digest;\n        delete doc._attachments['deleteme.txt'];\n        doc._attachments['retainme.txt'] = {\n          data: 'dG90bw==', // 'toto'\n          content_type: 'text/plain'\n        };\n        return db.put(doc);\n      }).then(function () {\n        return db.put({\n          _id: 'doc2',\n          _attachments: {\n            'nodontdeleteme.txt': {\n              data: 'Zm9vYmFy', // 'foobar'\n              content_type: 'text/plain'\n            }\n          }\n        });\n      }).then(function () {\n        return db.get('doc1');\n      }).then(function (doc) {\n        doc._attachments['newatt.txt'] = {\n          content_type: \"text/plain\",\n          digest: digest,\n          stub: true\n        };\n        return db.put(doc);\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        // ok, now let's really delete them\n        var docs = [\n          {\n            _id: 'doc1',\n            _rev: res.rows[0].value.rev\n          },\n          {\n            _id: 'doc2',\n            _rev: res.rows[1].value.rev\n          }\n        ];\n        return db.bulkDocs(docs);\n      }).then(function () {\n        var doc = {\n          _attachments: {\n            'foo.txt': {\n              content_type: \"text/plain\",\n              digest: digest,\n              stub: true\n            }\n          }\n        };\n        return db.post(doc).then(function () {\n          throw new Error('shouldn\\'t have gotten here');\n        }, function (err) {\n          err.status.should.equal(412);\n        });\n      });\n    });\n\n    it('#2818 successive new_edits okay with attachments', function () {\n      var db = new PouchDB(dbs.name);\n      var docs = [{\n        '_id': 'foo',\n        '_rev': '1-x',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        },\n        _attachments: {\n          'att.txt': {\n            data: 'Zm9vYmFy', // 'foobar'\n            content_type: 'text/plain'\n          }\n        }\n      }];\n      var digest;\n      return db.bulkDocs({docs: docs, new_edits: false}).then(function () {\n        return db.bulkDocs({docs: docs, new_edits: false});\n      }).then(function () {\n        return db.get('foo', {attachments: true});\n      }).then(function (doc) {\n        doc._rev.should.equal('1-x');\n        digest = doc._attachments['att.txt'].digest;\n      }).then(function () {\n        var doc = {\n          _attachments: {\n            'foo.txt': {\n              content_type: \"text/plain\",\n              digest: digest,\n              stub: true\n            }\n          }\n        };\n        return db.post(doc);\n      });\n    });\n\n    it('Auto-compaction removes non-leaf revs (#2807)', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(1);\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(2);\n        should.exist(docsAndRevs[0].doc);\n        should.not.exist(docsAndRevs[1].doc);\n      });\n    });\n\n    it('Auto-compaction removes non-leaf revs pt 2 (#2807)', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        return db.put(doc);\n      }).then(function () {\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(3);\n        should.exist(docsAndRevs[0].doc);\n        should.not.exist(docsAndRevs[1].doc);\n        should.not.exist(docsAndRevs[2].doc);\n      });\n    });\n\n    it('Auto-compaction removes non-leaf revs pt 3 (#2807)', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n\n      var docs = [\n        {\n          _id: 'foo',\n          _rev: '1-a1',\n          _revisions: { start: 1, ids: [ 'a1' ] }\n        }, {\n          _id: 'foo',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n        }, {\n          _id: 'foo',\n          _deleted: true,\n          _rev: '3-a3',\n          _revisions: { start: 3, ids: [ 'a3', 'a2', 'a1' ] }\n        }, {\n          _id: 'foo',\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] }\n        }\n      ];\n\n      return db.bulkDocs(docs, {new_edits: false}).then(function () {\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(4);\n        var asMap = {};\n        docsAndRevs.forEach(function (docAndRev) {\n          asMap[docAndRev.rev] = docAndRev.doc;\n        });\n        // only leafs remain\n        should.not.exist(asMap['1-a1']);\n        should.not.exist(asMap['2-a2']);\n        should.exist(asMap['3-a3']);\n        should.exist(asMap['1-b1']);\n      });\n    });\n\n    it('Auto-compaction removes non-leaf revs pt 4 (#2807)', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        doc._deleted = true;\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        delete doc._deleted;\n        return db.put(doc);\n      }).then(function () {\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(3);\n        should.exist(docsAndRevs[0].doc);\n        should.not.exist(docsAndRevs[1].doc);\n        should.not.exist(docsAndRevs[2].doc);\n      });\n    });\n\n    it('Auto-compaction removes non-leaf revs pt 5 (#2807)', function () {\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        doc._deleted = true;\n        return db.put(doc);\n      }).then(function () {\n        return getRevisions(db, 'foo');\n      }).then(function (docsAndRevs) {\n        docsAndRevs.should.have.length(3);\n        should.exist(docsAndRevs[0].doc);\n        should.not.exist(docsAndRevs[1].doc);\n        should.not.exist(docsAndRevs[2].doc);\n      });\n    });\n\n    it('#3089 Same att orphaned by many docs, auto-compact', function () {\n      // In this test, a single attachment is shared by many docs,\n      // which are all deleted in a single bulkDocs. This is to\n      // hunt down race conditions in our orphan compaction.\n\n      var db = new PouchDB(dbs.name, {auto_compaction: true});\n\n      var docs = [];\n      for (var i = 0; i < 100; i++) {\n        docs.push({\n          _id: i.toString(),\n          _attachments: {\n            'att1.txt': {\n              data: testUtils.btoa('1'),\n              content_type: 'text/plain'\n            }\n          }\n        });\n      }\n\n      return db.bulkDocs(docs).then(function (results) {\n        results.forEach(function (res, i) {\n          docs[i]._rev = res.rev;\n        });\n        return db.get(docs[0]._id);\n      }).then(function (doc) {\n        var digest = doc._attachments['att1.txt'].digest;\n        docs.forEach(function (doc) {\n          doc._deleted = true;\n        });\n        return db.bulkDocs(docs).then(function () {\n          return db.post({\n            _attachments: {\n              'baz.txt' : {\n                stub: true,\n                digest: digest,\n                content_type: 'text/plain'\n              }\n            }\n          }).then(function () {\n            throw new Error('shouldn\\'t have gotten here');\n          }, function (err) {\n            err.status.should.equal(412);\n          });\n        });\n      });\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.conflicts.js",
    "content": "'use strict';\n\nvar adapters = ['http', 'local'];\n\nadapters.forEach(function (adapter) {\n  describe('test.conflicts.js-' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n\n    it('Testing conflicts', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: 'foo', a: 1, b: 1};\n      db.put(doc, function (err, res) {\n        doc._rev = res.rev;\n        should.exist(res.ok, 'Put first document');\n        db.get('foo', function (err, doc2) {\n          doc._id.should.equal(doc2._id);\n          doc.should.have.property('_rev');\n          doc2.should.have.property('_rev');\n          doc.a = 2;\n          doc2.a = 3;\n          db.put(doc, function (err, res) {\n            should.exist(res.ok, 'Put second doc');\n            db.put(doc2, function (err) {\n              err.name.should.equal('conflict', 'Put got a conflicts');\n              db.changes().on('complete', function (results) {\n                results.results.should.have.length(1);\n                doc2._rev = undefined;\n                db.put(doc2, function (err) {\n                  err.name.should.equal('conflict', 'Another conflict');\n                  done();\n                });\n              }).on('error', done);\n            });\n          });\n        });\n      });\n    });\n\n    it('Testing conflicts', function (done) {\n      var doc = {_id: 'fubar', a: 1, b: 1};\n      var db = new PouchDB(dbs.name);\n      db.put(doc, function (err, ndoc) {\n        doc._rev = ndoc.rev;\n        db.remove(doc, function () {\n          delete doc._rev;\n          db.put(doc, function (err, ndoc) {\n            if (err) {\n              return done(err);\n            }\n            should.exist(ndoc.ok, 'written previously deleted doc without rev');\n            done();\n          });\n        });\n      });\n    });\n\n    it('#2882/#2883 last_seq for empty db', function () {\n      // CouchDB 2.0 sequence numbers are not\n      // incremental so skip this test\n      if (testUtils.isCouchMaster()) {\n        return true;\n      }\n\n      var db = new PouchDB(dbs.name);\n      return db.changes().then(function (changes) {\n        changes.last_seq.should.equal(0);\n        changes.results.should.have.length(0);\n        return db.info();\n      }).then(function (info) {\n        info.update_seq.should.equal(0);\n      });\n    });\n\n    it('#2882/#2883 last_seq when putting parent before leaf', function () {\n      // CouchDB 2.0 sequence numbers are not\n      // incremental so skip this test\n      if (testUtils.isCouchMaster()) {\n        return true;\n      }\n\n      var db = new PouchDB(dbs.name);\n      var lastSeq;\n      return db.bulkDocs({\n        docs: [\n          {\n            _id: 'fubar',\n            _rev: '2-a2',\n            _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n          }, {\n            _id: 'fubar',\n            _rev: '1-a1',\n            _revisions: { start: 1, ids: [ 'a1' ] }\n          }\n        ],\n        new_edits: false\n      }).then(function () {\n        return db.changes();\n      }).then(function (changes) {\n        lastSeq = changes.last_seq;\n        changes.results[0].changes[0].rev.should.equal('2-a2');\n        changes.results[0].seq.should.equal(lastSeq);\n        return db.info();\n      }).then(function (info) {\n        info.update_seq.should.equal(lastSeq);\n      });\n    });\n\n    // Each revision includes a list of previous revisions. The\n    // revision with the longest revision history list becomes the\n    // winning revision. If they are the same, the _rev values are\n    // compared in ASCII sort order, and the highest wins. So, in our\n    // example, 2-de0ea16f8621cbac506d23a0fbbde08a beats\n    // 2-7c971bb974251ae8541b8fe045964219.\n\n    it('Conflict resolution 1', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _rev: '1-a',\n          _revisions: {\n            start: 1,\n            ids: [ 'a' ]\n          }\n        }, {\n          _id: 'fubar',\n          _rev: '1-b',\n          _revisions: {\n            start: 1,\n            ids: [ 'b' ]\n          }\n        }, {\n          _id: 'fubar',\n          _rev: '1-1',\n          _revisions: {\n            start: 1,\n            ids: [ '1' ]\n          }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('1-b', 'Correct revision wins');\n        return db.bulkDocs({\n          new_edits: false,\n          docs: [{\n            _id: 'fubar',\n            _rev: '2-2',\n            _revisions: {\n              start: 2,\n              ids: [ '2', '1' ]\n            }\n          }]\n        });\n      }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('2-2', 'Correct revision wins');\n      });\n    });\n\n    it('Conflict resolution 2', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _rev: '2-a',\n          _revisions: {\n            start: 2,\n            ids: [ 'a' ]\n          }\n        }, {\n          _id: 'fubar',\n          _rev: '1-b',\n          _revisions: {\n            start: 1,\n            ids: [ 'b' ]\n          }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('2-a', 'Correct revision wins');\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1, 'Correct number of docs');\n      });\n    });\n\n    it('Conflict resolution 3', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _rev: '10-a',\n          _revisions: {\n            start: 10,\n            ids: [ 'a' ]\n          }\n        }, {\n          _id: 'fubar',\n          _rev: '2-b',\n          _revisions: {\n            start: 2,\n            ids: [ 'b' ]\n          }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('10-a', 'Correct revision wins');\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1, 'Correct number of docs');\n      });\n    });\n\n    it('Conflict resolution 4-a', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _rev: '1-a1',\n          _revisions: { start: 1, ids: [ 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '3-a3',\n          _revisions: { start: 3, ids: [ 'a3', 'a2', 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('1-b1', 'Correct revision wins');\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1, 'Correct number of docs');\n      });\n    });\n\n    it('Conflict resolution 4-b', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '3-a3',\n          _revisions: { start: 3, ids: [ 'a3', 'a2', 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '1-a1',\n          _revisions: { start: 1, ids: [ 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('1-b1', 'Correct revision wins');\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1, 'Correct number of docs');\n      });\n    });\n\n    it('Conflict resolution 4-c', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _rev: '1-a1',\n          _revisions: { start: 1, ids: [ 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '3-a3',\n          _revisions: { start: 3, ids: [ 'a3', 'a2', 'a1' ] }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n          doc._rev.should.equal('1-b1', 'Correct revision wins');\n          return db.info();\n        }).then(function (info) {\n          info.doc_count.should.equal(1, 'Correct number of docs');\n        });\n    });\n\n    it('Conflict resolution 4-d', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _rev: '1-a1',\n          _revisions: { start: 1, ids: [ 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '3-a3',\n          _revisions: { start: 3, ids: [ 'a3', 'a2', 'a1' ] }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('1-b1', 'Correct revision wins');\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1, 'Correct number of docs');\n      });\n    });\n\n    it('Conflict resolution 4-e', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '3-a3',\n          _revisions: { start: 3, ids: [ 'a3', 'a2', 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '1-a1',\n          _revisions: { start: 1, ids: [ 'a1' ] }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('1-b1', 'Correct revision wins');\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1, 'Correct number of docs');\n      });\n    });\n\n    it('Conflict resolution 5-a', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] }\n        }, {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '1-c1',\n          _revisions: { start: 1, ids: [ 'c1' ] }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('2-a2', 'Correct revision wins');\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1, 'Correct number of docs');\n      });\n    });\n\n    it('Conflict resolution 5-b', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n        }, {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '1-c1',\n          _revisions: { start: 1, ids: [ 'c1' ] }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('2-a2', 'Correct revision wins');\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1, 'Correct number of docs');\n      });\n    });\n\n    it('Conflict resolution 5-c', function () {\n      var docs = [\n        {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '1-b1',\n          _revisions: { start: 1, ids: [ 'b1' ] }\n        }, {\n          _id: 'fubar',\n          _deleted: true,\n          _rev: '1-c1',\n          _revisions: { start: 1, ids: [ 'c1' ] }\n        }, {\n          _id: 'fubar',\n          _rev: '2-a2',\n          _revisions: { start: 2, ids: [ 'a2', 'a1' ] }\n        }\n      ];\n      var db = new PouchDB(dbs.name);\n      return db.bulkDocs({ docs: docs, new_edits: false }).then(function () {\n        return db.get('fubar');\n      }).then(function (doc) {\n        doc._rev.should.equal('2-a2', 'Correct revision wins');\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(1, 'Correct number of docs');\n      });\n    });\n\n    it('#2543 excessive recursion with merging', function () {\n      var chain = testUtils.Promise.resolve();\n\n      var db = new PouchDB(dbs.name);\n\n      function addTask(batch) {\n        return function () {\n          var docs = [];\n          for (var i = 0; i < 50; i++) {\n            var hash = batch + 'a' +  i;\n            docs.push({\n              _id: 'foo',\n              _rev: '2-' + hash,\n              _revisions: {\n                start: 2,\n                ids: [hash, 'a']\n              }\n            });\n          }\n          return db.bulkDocs(docs, {new_edits: false});\n        };\n      }\n\n      chain = chain.then(function () {\n        return db.bulkDocs([{\n          _id: 'foo',\n          _rev: '1-a'\n        }], {new_edits: false});\n      });\n\n      for (var i = 0; i < 10; i++) {\n        chain = chain.then(addTask(i));\n      }\n      return chain;\n    });\n\n    it('local conflicts', function (done) {\n      if (testUtils.isCouchMaster()) {\n        return done();\n      }\n      var db = new PouchDB(dbs.name);\n      return db.put({foo: 'bar'}, '_local/baz').then(function (result) {\n        return db.put({foo: 'bar'}, '_local/baz', result.res);\n      }).then(function () {\n        return db.put({foo: 'bar'}, '_local/baz');\n      }, function (e) {\n        should.not.exist(e, 'shouldn\\'t error yet');\n        done(e);\n      }).then(undefined, function (e) {\n        should.exist(e, 'error when you have a conflict');\n        done();\n      });\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.constructor.js",
    "content": "'use strict';\n\ndescribe('constructor errors', function () {\n\n  it('should error on an undefined name', function (done) {\n    try {\n      new PouchDB();\n      done('Should have thrown');\n    } catch (err) {\n      should.equal(err instanceof Error, true, 'should be an error');\n      done();\n    }\n  });\n\n  it('should error on an undefined adapter', function (done) {\n    try {\n      new PouchDB('foo', {adapter : 'myFakeAdapter'});\n      done('Should have thrown');\n    } catch (err) {\n      should.equal(err instanceof Error, true, 'should be an error');\n      err.message.should\n        .equal('Invalid Adapter: myFakeAdapter',\n               'should give the correct error message');\n      done();\n    }\n  });\n\n  it('should error on a null name', function (done) {\n    try {\n      new PouchDB(null);\n      done('Should have thrown');\n    } catch (err) {\n      should.equal(err instanceof Error, true, 'should be an error');\n      done();\n    }\n  });\n\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.design_docs.js",
    "content": "'use strict';\n\nvar adapters = ['http', 'local'];\n\nadapters.forEach(function (adapter) {\n  describe('test.design_docs.js-' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n\n    var doc = {\n      _id: '_design/foo',\n      views: {\n        scores: {\n          map: 'function (doc) { if (doc.score) { emit(null, doc.score); } }',\n          reduce: 'function (keys, values, rereduce) { return sum(values); }'\n        }\n      },\n      filters: { even: 'function (doc) { return doc.integer % 2 === 0; }' }\n    };\n\n    it('Test writing design doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post(doc, function (err) {\n        should.not.exist(err, 'Wrote design doc');\n        db.get('_design/foo', function (err) {\n          done(err);\n        });\n      });\n    });\n\n    it('Changes filter', function (done) {\n      var docs1 = [\n        doc,\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var docs2 = [\n        {_id: '4', integer: 4},\n        {_id: '5', integer: 5},\n        {_id: '6', integer: 6},\n        {_id: '7', integer: 7}\n      ];\n\n      var db = new PouchDB(dbs.name);\n      var count = 0;\n      db.bulkDocs({ docs: docs1 }, function () {\n        var changes = db.changes({\n          live: true,\n          filter: 'foo/even'\n        }).on('change', function () {\n          count += 1;\n          if (count === 4) {\n            changes.cancel();\n          }\n        }).on('complete', function (result) {\n          result.status.should.equal('cancelled');\n          done();\n        }).on('error', done);\n        db.bulkDocs({ docs: docs2 }, {});\n      });\n    });\n\n    it('Basic views', function (done) {\n\n      var docs1 = [\n        doc,\n        {_id: 'dale', score: 3},\n        {_id: 'mikeal', score: 5},\n        {_id: 'max', score: 4},\n        {_id: 'nuno', score: 3}\n      ];\n      var db = new PouchDB(dbs.name);\n      // Test invalid if adapter doesnt support mapreduce\n      if (!db.query) {\n        return done();\n      }\n\n      db.bulkDocs({ docs: docs1 }, function () {\n        db.query('foo/scores', { reduce: false }, function (err, result) {\n          result.rows.should.have.length(4, 'Correct # of results');\n          db.query('foo/scores', function (err, result) {\n            result.rows[0].value.should.equal(15, 'Reduce gave correct result');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Concurrent queries', function (done) {\n      var db = new PouchDB(dbs.name);\n      // Test invalid if adapter doesnt support mapreduce\n      if (!db.query) {\n        return done();\n      }\n\n      db.bulkDocs({\n        docs: [\n          doc,\n          {_id: 'dale', score: 3}\n        ]\n      }, function () {\n        var cnt = 0;\n        db.query('foo/scores', { reduce: false }, function (err, result) {\n          result.rows.should.have.length(1, 'Correct # of results');\n          if (++cnt === 2) {\n            done();\n          }\n        });\n        db.query('foo/scores', { reduce: false }, function (err, result) {\n          result.rows.should.have.length(1, 'Correct # of results');\n          if (++cnt === 2) {\n            done();\n          }\n        });\n      });\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.events.js",
    "content": "'use strict';\n\nvar adapters = ['local', 'http'];\n\nadapters.forEach(function (adapter) {\n  describe('test.events.js-' + adapter, function () {\n\n    var dbs = {};\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n\n    it('PouchDB emits creation event', function (done) {\n      PouchDB.once('created', function (name) {\n        name.should.equal(dbs.name, 'should be same thing');\n        done();\n      });\n      new PouchDB(dbs.name);\n    });\n\n    it('PouchDB emits destruction event', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.once('destroyed', done);\n      db.destroy();\n    });\n\n    it('PouchDB emits destruction event on PouchDB object', function (done) {\n      PouchDB.once('destroyed', function (name) {\n        name.should.equal(dbs.name, 'should have the same name');\n        done();\n      });\n      new PouchDB(dbs.name).destroy();\n    });\n\n    it('PouchDB emits destroyed when using {name: foo}', function () {\n      var db = new PouchDB({name: 'testdb'});\n      return new testUtils.Promise(function (resolve) {\n        PouchDB.once('destroyed', function (name) {\n          name.should.equal('testdb');\n          resolve();\n        });\n        db.destroy();\n      });\n    });\n\n    it('db emits destroyed on all DBs', function () {\n      var db1 = new PouchDB('testdb');\n      var db2 = new PouchDB('testdb');\n\n      return new testUtils.Promise(function (resolve) {\n        var called = 0;\n        function checkDone() {\n          if (++called === 2) {\n            resolve();\n          }\n        }\n        db1.once('destroyed', checkDone);\n        db2.once('destroyed', checkDone);\n        db1.destroy();\n      });\n    });\n\n    it('3900 db emits destroyed event', function () {\n      var db = new PouchDB('testdb');\n      return new testUtils.Promise(function (resolve) {\n        db.once('destroyed', function () {\n          resolve();\n        });\n        db.destroy();\n      });\n    });\n\n    it('3900 db emits destroyed event 2', function () {\n      var db = new PouchDB('testdb');\n      return new testUtils.Promise(function (resolve) {\n        db.once('destroyed', function () {\n          resolve();\n        });\n        db.destroy();\n      });\n    });\n\n    it('emit creation event', function (done) {\n      var db = new PouchDB(dbs.name).on('created', function (newDB) {\n        db.should.equal(newDB, 'should be same thing');\n        done();\n      });\n    });\n\n    it('#4168 multiple constructor calls don\\'t leak listeners', function () {\n      for (var i = 0; i < 50; i++) {\n        new PouchDB(dbs.name);\n      }\n    });\n\n    it('4922 Destroyed is not called twice', function (done) {\n      var count = 0;\n      function destroyed() {\n        count++;\n        if (count === 1) {\n          setTimeout(function () {\n            count.should.equal(1);\n            PouchDB.removeListener('destroyed', destroyed);\n            done();\n          }, 50);\n        }\n      }\n      PouchDB.on('destroyed', destroyed);\n      new PouchDB(dbs.name).destroy();\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.get.js",
    "content": "'use strict';\n\nvar adapters = ['http', 'local'];\n\nadapters.forEach(function (adapter) {\n  describe('test.get.js-' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n\n    var origDocs = [\n      {_id: '0', a: 1, b: 1},\n      {_id: '3', a: 4, b: 16},\n      {_id: '1', a: 2, b: 4},\n      {_id: '2', a: 3, b: 9}\n    ];\n\n    it('Get doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ test: 'somestuff' }, function (err, info) {\n        db.get(info.id, function (err, doc) {\n          doc.should.have.property('test');\n          db.get(info.id + 'asdf', function (err) {\n            err.status.should.equal(testUtils.errors.MISSING_DOC.status,\n                                    'correct error status returned');\n            err.name.should.equal(testUtils.errors.MISSING_DOC.name,\n                                  'correct error name returned');\n            err.message.should.equal(testUtils.errors.MISSING_DOC.message,\n                                    'correct error message returned');\n            // todo: does not work in pouchdb-server.\n            // err.reason.should.equal(testUtils.errors.MISSING_DOC.reason,\n            //                           'correct error reason returned');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Get design doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({\n        _id: '_design/someid',\n        test: 'somestuff'\n      }, function (err, info) {\n        db.get(info.id, function () {\n          db.get(info.id + 'asdf', function (err) {\n            err.status.should.equal(testUtils.errors.MISSING_DOC.status,\n                                    'correct error status returned');\n            err.name.should.equal(testUtils.errors.MISSING_DOC.name,\n                                  'correct error name returned');\n            err.message.should.equal(testUtils.errors.MISSING_DOC.message,\n                                    'correct error message returned');\n            // todo: does not work in pouchdb-server.\n            // err.reason.should.equal(testUtils.errors.MISSING_DOC.reason,\n            //                           'correct error reason returned');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Check error of deleted document', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ test: 'somestuff' }, function (err, info) {\n        db.remove({\n          _id: info.id,\n          _rev: info.rev\n        }, function () {\n          db.get(info.id, function (err) {\n            err.status.should.equal(testUtils.errors.MISSING_DOC.status,\n                                      'correct error status returned');\n            err.name.should.equal(testUtils.errors.MISSING_DOC.name,\n                                      'correct error name returned');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Get revisions of removed doc', function (done) {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      db.post({ test: 'somestuff' }, function (err, info) {\n        var rev = info.rev;\n        db.remove({\n          test: 'somestuff',\n          _id: info.id,\n          _rev: info.rev\n        }, function () {\n          db.get(info.id, { rev: rev }, function (err) {\n            should.not.exist(err);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Testing get with rev', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = JSON.parse(JSON.stringify(origDocs));\n      testUtils.writeDocs(db, docs, function () {\n        db.get('3', function (err, parent) {\n          // add conflicts\n          var pRevId = parent._rev.split('-')[1];\n          var conflicts = [\n            {\n              _id: '3',\n              _rev: '2-aaa',\n              value: 'x',\n              _revisions: {\n                start: 2,\n                ids: [\n                  'aaa',\n                  pRevId\n                ]\n              }\n            },\n            {\n              _id: '3',\n              _rev: '3-bbb',\n              value: 'y',\n              _deleted: true,\n              _revisions: {\n                start: 3,\n                ids: [\n                  'bbb',\n                  'some',\n                  pRevId\n                ]\n              }\n            },\n            {\n              _id: '3',\n              _rev: '4-ccc',\n              value: 'z',\n              _revisions: {\n                start: 4,\n                ids: [\n                  'ccc',\n                  'even',\n                  'more',\n                  pRevId\n                ]\n              }\n            }\n          ];\n          db.put(conflicts[0], { new_edits: false }, function () {\n            db.put(conflicts[1], { new_edits: false }, function () {\n              db.put(conflicts[2], { new_edits: false }, function () {\n                db.get('3', { rev: '2-aaa' }, function (err, doc) {\n                  doc._rev.should.equal('2-aaa');\n                  doc.value.should.equal('x');\n                  db.get('3', { rev: '3-bbb' }, function (err, doc) {\n                    doc._rev.should.equal('3-bbb');\n                    doc.value.should.equal('y');\n                    db.get('3', { rev: '4-ccc' }, function (err, doc) {\n                      doc._rev.should.equal('4-ccc');\n                      doc.value.should.equal('z');\n                      done();\n                    });\n                  });\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Testing rev format', function (done) {\n      var revs = [];\n      var db = new PouchDB(dbs.name);\n      db.post({ test: 'somestuff' }, function (err, info) {\n        revs.unshift(info.rev.split('-')[1]);\n        db.put({\n          _id: info.id,\n          _rev: info.rev,\n          another: 'test1'\n        }, function (err, info2) {\n          revs.unshift(info2.rev.split('-')[1]);\n          db.put({\n            _id: info.id,\n            _rev: info2.rev,\n            last: 'test2'\n          }, function (err, info3) {\n            revs.unshift(info3.rev.split('-')[1]);\n            db.get(info.id, { revs: true }, function (err, doc) {\n              doc._revisions.start.should.equal(3);\n              revs.should.deep.equal(doc._revisions.ids);\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Test opts.revs=true with rev other than winning', function (done) {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var docs = [\n        {_id: 'foo', _rev: '1-a', value: 'foo a'},\n        {_id: 'foo', _rev: '2-b', value: 'foo b'},\n        {_id: 'foo', _rev: '3-c', value: 'foo c'},\n        {_id: 'foo', _rev: '4-d', value: 'foo d'}\n      ];\n      testUtils.putBranch(db, docs, function () {\n        db.get('foo', {\n          rev: '3-c',\n          revs: true\n        }, function (err, doc) {\n          doc._revisions.ids.length.should.equal(3, 'correct revisions length');\n          doc._revisions.start.should.equal(3, 'correct revisions start');\n          doc._revisions.ids[0].should.equal('c', 'correct rev');\n          doc._revisions.ids[1].should.equal('b', 'correct rev');\n          doc._revisions.ids[2].should.equal('a', 'correct rev');\n          done();\n        });\n      });\n    });\n\n    it('Test opts.revs=true return only winning branch', function (done) {\n      var db = new PouchDB(dbs.name);\n      var simpleTree = [\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-b', value: 'foo b'},\n         {_id: 'foo', _rev: '3-c', value: 'foo c'}],\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-d', value: 'foo d'},\n         {_id: 'foo', _rev: '3-e', value: 'foo e'},\n         {_id: 'foo', _rev: '4-f', value: 'foo f'}\n        ]\n      ];\n      testUtils.putTree(db, simpleTree, function () {\n        db.get('foo', { revs: true }, function (err, doc) {\n          doc._revisions.ids.length.should.equal(4, 'correct revisions length');\n          doc._revisions.start.should.equal(4, 'correct revisions start');\n          doc._revisions.ids[0].should.equal('f', 'correct rev');\n          doc._revisions.ids[1].should.equal('e', 'correct rev');\n          doc._revisions.ids[2].should.equal('d', 'correct rev');\n          doc._revisions.ids[3].should.equal('a', 'correct rev');\n          done();\n        });\n      });\n    });\n\n    it('Test get with simple revs_info', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ test: 'somestuff' }, function (err, info) {\n        db.put({\n          _id: info.id,\n          _rev: info.rev,\n          another: 'test'\n        }, function (err, info) {\n          db.put({\n            _id: info.id,\n            _rev: info.rev,\n            a: 'change'\n          }, function () {\n            db.get(info.id, { revs_info: true }, function (err, doc) {\n              doc._revs_info.length.should.equal(3, 'updated a doc with put');\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Test get with revs_info on tree', function (done) {\n      var db = new PouchDB(dbs.name);\n      var simpleTree = [\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-b', value: 'foo b'},\n         {_id: 'foo', _rev: '3-c', value: 'foo c'}],\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-d', value: 'foo d'},\n         {_id: 'foo', _rev: '3-e', _deleted: true}]\n      ];\n      testUtils.putTree(db, simpleTree, function () {\n        db.get('foo', { revs_info: true }, function (err, doc) {\n          var revs = doc._revs_info;\n          revs.length.should.equal(3, 'correct number of revs');\n          revs[0].rev.should.equal('3-c', 'rev ok');\n          revs[1].rev.should.equal('2-b', 'rev ok');\n          revs[2].rev.should.equal('1-a', 'rev ok');\n          done();\n        });\n      });\n    });\n\n    it('Test get with revs_info on compacted tree', function (done) {\n      // _compact endpoint is not exposed in CouchDB 2.0\n      // (it's exposed via a private port). Skip\n      // this test for now\n      if (testUtils.isCouchMaster()) {\n        return done();\n      }\n\n      var db = new PouchDB(dbs.name);\n      var simpleTree = [\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            value: 'foo a'\n          },\n          {\n            _id: 'foo',\n            _rev: '2-b',\n            value: 'foo d'\n          },\n          {\n            _id: 'foo',\n            _rev: '3-c',\n            value: 'foo c'\n          }\n        ],\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            value: 'foo a'\n          },\n          {\n            _id: 'foo',\n            _rev: '2-d',\n            value: 'foo d'\n          },\n          {\n            _id: 'foo',\n            _rev: '3-e',\n            _deleted: true\n          }\n        ]\n      ];\n      testUtils.putTree(db, simpleTree, function () {\n        db.compact(function () {\n          db.get('foo', { revs_info: true }, function (err, doc) {\n            var revs = doc._revs_info;\n            revs.length.should.equal(3, 'correct number of revs');\n            revs[0].rev.should.equal('3-c', 'rev ok');\n            revs[0].status.should.equal('available', 'not compacted');\n            revs[1].rev.should.equal('2-b', 'rev ok');\n            revs[1].status.should.equal('missing', 'compacted');\n            revs[2].rev.should.equal('1-a', 'rev ok');\n            revs[2].status.should.equal('missing', 'compacted');\n            done();\n          });\n        });\n      });\n    });\n\n    it('#2951 Parallelized gets with 409s/404s', function () {\n      var db = new PouchDB(dbs.name);\n\n      var numSimultaneous = 20;\n      var numDups = 3;\n\n      var tasks = [];\n\n      for (var i = 0; i < numSimultaneous; i++) {\n        var key = Math.random().toString();\n        for (var j = 0; j < numDups; j++) {\n          tasks.push(key);\n        }\n      }\n\n      function getDocWithDefault(db, id, defaultDoc) {\n        return db.get(id).catch(function (err) {\n          /* istanbul ignore if */\n          if (err.status !== 404) {\n            throw err;\n          }\n          defaultDoc._id = id;\n          return db.put(defaultDoc).catch(function (err) {\n            /* istanbul ignore if */\n            if (err.status !== 409) { // conflict\n              throw err;\n            }\n          }).then(function () {\n            return db.get(id);\n          });\n        });\n      }\n\n      return testUtils.Promise.all(tasks.map(function (task) {\n        return getDocWithDefault(db, task, {foo: 'bar'});\n      }));\n    });\n\n    it('#2951 Parallelized _local gets with 409s/404s', function () {\n      var db = new PouchDB(dbs.name);\n\n      var numSimultaneous = 20;\n      var numDups = 3;\n\n      var tasks = [];\n\n      for (var i = 0; i < numSimultaneous; i++) {\n        var key = Math.random().toString();\n        for (var j = 0; j < numDups; j++) {\n          tasks.push('_local/' + key);\n        }\n      }\n\n      function getDocWithDefault(db, id, defaultDoc) {\n        return db.get(id).catch(function (err) {\n          /* istanbul ignore if */\n          if (err.status !== 404) {\n            throw err;\n          }\n          defaultDoc._id = id;\n          return db.put(defaultDoc).catch(function (err) {\n            /* istanbul ignore if */\n            if (err.status !== 409) { // conflict\n              throw err;\n            }\n          }).then(function () {\n            return db.get(id);\n          });\n        });\n      }\n\n      return testUtils.Promise.all(tasks.map(function (task) {\n        return getDocWithDefault(db, task, {foo: 'bar'});\n      }));\n    });\n\n    it('Test get with conflicts', function (done) {\n      var db = new PouchDB(dbs.name);\n      var simpleTree = [\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            value: 'foo a'\n          },\n          {\n            _id: 'foo',\n            _rev: '2-b',\n            value: 'foo b'\n          }\n        ],\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            value: 'foo a'\n          },\n          {\n            _id: 'foo',\n            _rev: '2-c',\n            value: 'foo c'\n          }\n        ],\n        [\n          {\n            _id: 'foo',\n            _rev: '1-a',\n            value: 'foo a'\n          },\n          {\n            _id: 'foo',\n            _rev: '2-d',\n            value: 'foo d',\n            _deleted: true\n          }\n        ]\n      ];\n      testUtils.putTree(db, simpleTree, function () {\n        db.get('foo', { conflicts: true }, function (err, doc) {\n          doc._rev.should.equal('2-c', 'correct rev');\n          doc._conflicts.length.should.equal(1, 'just one conflict');\n          doc._conflicts[0].should.equal('2-b', 'just one conflict');\n          done();\n        });\n      });\n    });\n\n    it('Retrieve old revision', function (done) {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      db.post({ version: 'first' }, function (err, info) {\n        db.put({\n          _id: info.id,\n          _rev: info.rev,\n          version: 'second'\n        }, function (err) {\n          should.not.exist(err);\n          db.get(info.id, { rev: info.rev }, function (err, oldRev) {\n            oldRev.version.should.equal('first', 'Fetched old revision');\n            db.get(info.id, { rev: '1-nonexistentRev' }, function (err) {\n              should.exist(err, 'Non existent row error correctly reported');\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Testing get open_revs=\"all\"', function (done) {\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, JSON.parse(JSON.stringify(origDocs)),\n        function () {\n        db.get('3', function (err, parent) {\n          // add conflicts\n          var previd = parent._rev.split('-')[1];\n          var conflicts = [\n            {\n              _id: '3',\n              _rev: '2-aaa',\n              value: 'x',\n              _revisions: {\n                start: 2,\n                ids: [\n                  'aaa',\n                  previd\n                ]\n              }\n            },\n            {\n              _id: '3',\n              _rev: '3-bbb',\n              value: 'y',\n              _deleted: true,\n              _revisions: {\n                start: 3,\n                ids: [\n                  'bbb',\n                  'some',\n                  previd\n                ]\n              }\n            },\n            {\n              _id: '3',\n              _rev: '4-ccc',\n              value: 'z',\n              _revisions: {\n                start: 4,\n                ids: [\n                  'ccc',\n                  'even',\n                  'more',\n                  previd\n                ]\n              }\n            }\n          ];\n          db.put(conflicts[0], { new_edits: false }, function () {\n            db.put(conflicts[1], { new_edits: false }, function () {\n              db.put(conflicts[2], { new_edits: false }, function () {\n                db.get('3', { open_revs: 'all' }, function (err, res) {\n                  var i;\n                  res = res.map(function (row) {\n                    return row.ok;\n                  });\n                  res.sort(function (a, b) {\n                    return a._rev === b._rev ? 0 : a._rev < b._rev ? -1 : 1;\n                  });\n                  res.length.should.equal(conflicts.length);\n                  for (i = 0; i < conflicts.length; i++) {\n                    conflicts[i]._rev.should.equal(res[i]._rev, 'correct rev');\n                  }\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Testing get with some open_revs', function (done) {\n      var db = new PouchDB(dbs.name);\n      testUtils.writeDocs(db, JSON.parse(JSON.stringify(origDocs)),\n        function () {\n        db.get('3', function (err, parent) {\n          // add conflicts\n          var previd = parent._rev.split('-')[1];\n          var conflicts = [\n            {\n              _id: '3',\n              _rev: '2-aaa',\n              value: 'x',\n              _revisions: {\n                start: 2,\n                ids: [\n                  'aaa',\n                  previd\n                ]\n              }\n            },\n            {\n              _id: '3',\n              _rev: '3-bbb',\n              value: 'y',\n              _deleted: true,\n              _revisions: {\n                start: 3,\n                ids: [\n                  'bbb',\n                  'some',\n                  previd\n                ]\n              }\n            },\n            {\n              _id: '3',\n              _rev: '4-ccc',\n              value: 'z',\n              _revisions: {\n                start: 4,\n                ids: [\n                  'ccc',\n                  'even',\n                  'more',\n                  previd\n                ]\n              }\n            }\n          ];\n          db.put(conflicts[0], { new_edits: false }, function () {\n            db.put(conflicts[1], { new_edits: false }, function () {\n              db.put(conflicts[2], { new_edits: false }, function () {\n                db.get('3', {\n                  open_revs: [\n                    '2-aaa',\n                    '5-nonexistent',\n                    '3-bbb'\n                  ]\n                }, function (err, res) {\n                  res.sort(function (a, b) {\n                    if (a.ok) {\n                      if (b.ok) {\n                        var x = a.ok._rev, y = b.ok._rev;\n                        return x === y ? 0 : x < y ? -1 : 1;\n                      } else {\n                        return -1;\n                      }\n                    }\n                    return 1;\n                  });\n                  res.length.should.equal(3, 'correct number of open_revs');\n                  res[0].ok._rev.should.equal('2-aaa', 'ok');\n                  res[1].ok._rev.should.equal('3-bbb', 'ok');\n                  res[2].missing.should.equal('5-nonexistent', 'ok');\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Testing get with open_revs and revs', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-b', value: 'foo b'}\n        ],\n        [{_id: 'foo', _rev: '1-a', value: 'foo a'},\n         {_id: 'foo', _rev: '2-c', value: 'foo c'}]\n      ];\n      testUtils.putTree(db, docs, function () {\n        db.get('foo', {\n          open_revs: ['2-b'],\n          revs: true\n        }, function (err, res) {\n          var doc = res[0].ok;\n          doc._revisions.ids.length.should.equal(2, 'got two revs');\n          doc._revisions.ids[0].should.equal('b', 'got correct rev');\n          done();\n        });\n      });\n    });\n\n    it('Testing get with open_revs on nonexistent doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.get('nonexistent', { open_revs: ['2-whatever'] }, function (err, res) {\n        res.length.should.equal(1, 'just one result');\n        res[0].missing.should.equal('2-whatever', 'just one result');\n        db.get('nonexistent', { open_revs: 'all' }, function (err) {\n          // CouchDB 1.X doesn't handle this situation correctly\n          // CouchDB 2.0 fixes it (see COUCHDB-2517)\n          testUtils.isCouchDB(function (isCouchDB) {\n            if (isCouchDB && !testUtils.isCouchMaster()) {\n              return done();\n            }\n\n            err.status.should.equal(404);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Testing get with open_revs with wrong params', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.put({ _id: 'foo' }, function () {\n        db.get('foo', {\n          open_revs: {\n            'whatever': 'which is',\n            'not an array': 'or all string'\n          }\n        }, function (err) {\n          var acceptable_errors = ['unknown_error', 'bad_request'];\n          acceptable_errors.indexOf(err.name)\n            .should.not.equal(-1, 'correct error');\n          // unfortunately!\n          db.get('foo', {\n            open_revs: [\n              '1-almost',\n              '2-correct',\n              'keys'\n            ]\n          }, function (err) {\n            err.name.should.equal('bad_request', 'correct error');\n            done();\n          });\n        });\n      });\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.http.js",
    "content": "'use strict';\n\ndescribe('test.http.js', function () {\n\n  var dbs = {};\n\n  beforeEach(function (done) {\n    dbs.name = testUtils.adapterUrl('http', 'test_http');\n    testUtils.cleanup([dbs.name], done);\n  });\n\n  after(function (done) {\n    testUtils.cleanup([dbs.name], done);\n  });\n\n  // TODO: Remove `skipSetup` in favor of `skip_setup` in a future release\n  it('Create a pouch without DB setup (skipSetup)', function (done) {\n    var instantDB;\n    testUtils.isCouchDB(function (isCouchDB) {\n      if (!isCouchDB) {\n        return done();\n      }\n      var db = new PouchDB(dbs.name);\n      db.destroy(function () {\n        instantDB = new PouchDB(dbs.name, { skipSetup: true });\n        instantDB.post({ test: 'abc' }, function (err) {\n          should.exist(err);\n          err.name.should.equal('not_found', 'Skipped setup of database');\n          done();\n        });\n      });\n    });\n  });\n\n  it('Create a pouch without DB setup (skip_setup)', function (done) {\n    var instantDB;\n    testUtils.isCouchDB(function (isCouchDB) {\n      if (!isCouchDB) {\n        return done();\n      }\n      var db = new PouchDB(dbs.name);\n      db.destroy(function () {\n        instantDB = new PouchDB(dbs.name, { skip_setup: true });\n        instantDB.post({ test: 'abc' }, function (err) {\n          should.exist(err);\n          err.name.should.equal('not_found', 'Skipped setup of database');\n          done();\n        });\n      });\n    });\n  });\n\n  it('Issue 1269 redundant _changes requests', function (done) {\n    var docs = [];\n    var num = 100;\n    for (var i = 0; i < num; i++) {\n      docs.push({\n        _id: 'doc_' + i,\n        foo: 'bar_' + i\n      });\n    }\n    var db = new PouchDB(dbs.name);\n    db.bulkDocs({ docs: docs }, function () {\n      db.info(function (err, info) {\n        var update_seq = info.update_seq;\n\n        var callCount = 0;\n        var ajax = db._ajax;\n        db._ajax = function (opts) {\n          if (/_changes/.test(opts.url)) {\n            callCount++;\n          }\n          ajax.apply(this, arguments);\n        };\n        db.changes({\n          since: update_seq\n        }).on('change', function () {\n        }).on('complete', function () {\n          callCount.should.equal(1, 'One _changes call to complete changes');\n          db._ajax = ajax;\n          done();\n        }).on('error', done);\n      });\n    });\n  });\n\n  it('handle ddocs with slashes', function (done) {\n    var ddoc = {\n      _id: '_design/foo/bar'\n    };\n    var db = new PouchDB(dbs.name);\n    db.bulkDocs({ docs: [ddoc] }, function () {\n      db.get(ddoc._id, function (err, doc) {\n        should.not.exist(err);\n        doc._id.should.equal(ddoc._id, 'Correct doc returned');\n        done();\n      });\n    });\n  });\n\n  it('Properly escape url params #4008', function () {\n    var db = new PouchDB(dbs.name);\n    var ajax = db._ajax;\n    db._ajax = function (opts) {\n      opts.url.should.not.contain('[');\n      ajax.apply(this, arguments);\n    };\n    return db.changes({doc_ids: ['1']}).then(function () {\n      db._ajax = ajax;\n    });\n  });\n\n  it('Allows the \"ajax timeout\" to extend \"changes timeout\"', function (done) {\n    var timeout = 120000;\n    var db = new PouchDB(dbs.name, {\n      skipSetup: true,\n      ajax: {\n        timeout: timeout\n      }\n    });\n\n    var ajax = db._ajax;\n    var ajaxOpts;\n    db._ajax = function (opts) {\n      if (/changes/.test(opts.url)) {\n        ajaxOpts = opts;\n        changes.cancel();\n      }\n      ajax.apply(this, arguments);\n    };\n\n    var changes = db.changes();\n\n    changes.on('complete', function () {\n      should.exist(ajaxOpts);\n      ajaxOpts.timeout.should.equal(timeout);\n      db._ajax = ajax;\n      done();\n    });\n\n  });\n\n  it('Test custom header', function () {\n    var db = new PouchDB(dbs.name, {\n      headers: {\n        'X-Custom': 'some-custom-header'\n      }\n    });\n    return db.info();\n  });\n\n  it('test url too long error for allDocs()', function () {\n    var docs = [];\n    var numDocs = 75;\n    for (var i = 0; i < numDocs; i++) {\n      docs.push({\n        _id: 'fairly_long_doc_name_' + i\n      });\n    }\n    var db = new PouchDB(dbs.name);\n    return db.bulkDocs(docs).then(function () {\n      return db.allDocs({\n        keys: docs.map(function (x) { return x._id; })\n      });\n    }).then(function (res) {\n      res.rows.should.have.length(numDocs);\n    });\n  });\n\n  it('4358 db.info rejects when server is down', function () {\n    var db = new PouchDB('http://example.com/foo');\n    return db.info().then(function () {\n      throw new Error('expected an error');\n    }).catch(function (err) {\n      should.exist(err);\n    });\n  });\n\n  it('4358 db.destroy rejects when server is down', function () {\n    var db = new PouchDB('http://example.com/foo');\n    return db.destroy().then(function () {\n      throw new Error('expected an error');\n    }).catch(function (err) {\n      should.exist(err);\n    });\n  });\n\n\n  it('5574 Create a pouch with / in name and prefix url', function () {\n    var db = new PouchDB('test/suffix', {\n      prefix: testUtils.adapterUrl('http', '')\n    });\n    return db.info().then(function () {\n      return db.destroy();\n    });\n  });\n\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.issue1175.js",
    "content": "'use strict';\nfunction MockDatabase(statusCodeToReturn, dataToReturn) {\n  this.once = this.removeListener = function () {};\n  this.type = function () { return 'mock'; };\n  this.id = function (callback) {\n    if (callback) {\n      callback(123);\n    } else {\n      return testUtils.Promise.resolve(123);\n    }\n  };\n  this.get = function () {\n    return new testUtils.Promise(function (fulfill, reject) {\n      setTimeout(function () {\n        if (statusCodeToReturn !== 200) {\n          reject({ status: statusCodeToReturn });\n        } else {\n          fulfill(dataToReturn);\n        }\n      }, 0);\n    });\n  };\n  this.changes = function (opts) {\n    if (opts.complete) {\n      opts.complete(null, {results: []});\n    }\n    var promise = testUtils.Promise.resolve({results: []});\n    promise.on = function () { return this; };\n    return promise;\n  };\n  this.put = function () {\n    return testUtils.Promise.resolve();\n  };\n}\nfunction getCallback(expectError, done) {\n  // returns a function which expects to be called within a certain time.\n  // Fails the test otherwise\n  var maximumTimeToWait = 500;\n  var hasBeenCalled = false;\n  var err;\n  function callback(error) {\n    hasBeenCalled = true;\n    err = error;\n  }\n  function timeOutCallback() {\n    hasBeenCalled.should.equal(true, 'callback has been called');\n    if (!expectError) {\n      should.not.exist(err, 'error expectation fulfilled');\n    }\n    done();\n  }\n  setTimeout(timeOutCallback, maximumTimeToWait);\n  return callback;\n}\ndescribe('replication-http-errors:', function () {\n  it('Initial replication is ok if source returns HTTP 404', function (done) {\n    var source = new MockDatabase(404, null);\n    var target = new MockDatabase(200, {});\n    PouchDB.replicate(source, target, {}, getCallback(false, done));\n  });\n  it('Initial replication is ok if target returns HTTP 404', function (done) {\n    var source = new MockDatabase(200, {});\n    var target = new MockDatabase(404, null);\n    PouchDB.replicate(source, target, {}, getCallback(false, done));\n  });\n  it('Initial replication is ok if source and target return HTTP 200',\n    function (done) {\n    var source = new MockDatabase(200, {});\n    var target = new MockDatabase(200, {});\n    PouchDB.replicate(source, target, {}, getCallback(false, done));\n  });\n  it('Initial replication returns err if source returns HTTP 500',\n    function (done) {\n    var source = new MockDatabase(500, null);\n    var target = new MockDatabase(200, {});\n    PouchDB.replicate(source, target, {retry: false}, getCallback(true, done));\n  });\n  it('Initial replication returns err if target returns HTTP 500',\n    function (done) {\n    var source = new MockDatabase(200, {});\n    var target = new MockDatabase(500, null);\n    PouchDB.replicate(source, target, {retry: false}, getCallback(true, done));\n  });\n  it('Initial replication returns err if target and source return HTTP 500',\n    function (done) {\n    var source = new MockDatabase(500, null);\n    var target = new MockDatabase(500, null);\n    PouchDB.replicate(source, target, {retry: false}, getCallback(true, done));\n  });\n  it('Subsequent replication returns err if source return HTTP 500',\n    function (done) {\n    var source = new MockDatabase(500, null);\n    var target = new MockDatabase(200, { last_seq: 456 });\n    PouchDB.replicate(source, target, {retry: false}, getCallback(true, done));\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.issue221.js",
    "content": "'use strict';\n\nvar adapters = [\n  ['local', 'http'],\n  ['http', 'http'],\n  ['http', 'local'],\n  ['local', 'local']\n];\n\nadapters.forEach(function (adapters) {\n  describe('test.issue221.js-' + adapters[0] + '-' + adapters[1], function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_repl_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n\n    it('Testing issue #221', function () {\n      var doc = {_id: '0', integer: 0};\n      var local = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      // Write a doc in CouchDB.\n      return remote.put(doc).then(function (results) {\n        // Update the doc.\n        doc._rev = results.rev;\n        doc.integer = 1;\n        return remote.put(doc);\n      }).then(function () {\n        // Compact the db.\n        return remote.compact();\n      }).then(function () {\n       return remote.get(doc._id, { revs_info: true });\n      }).then(function (data) {\n        var correctRev = data._revs_info[0];\n        return local.replicate.from(remote).then(function () {\n          // Check the Pouch doc.\n          return local.get(doc._id, function (err, results) {\n            results._rev.should.equal(correctRev.rev);\n            results.integer.should.equal(1);\n          });\n        });\n      });\n    });\n\n    it('Testing issue #221 again', function () {\n      if (testUtils.isCouchMaster()) {\n        return;\n      }\n      var doc = {_id: '0', integer: 0};\n      var local = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      // Write a doc in CouchDB.\n      return remote.put(doc).then(function (results) {\n        doc._rev = results.rev;\n        // Second doc so we get 2 revisions from replicate.\n        return remote.put(doc);\n      }).then(function (results) {\n        doc._rev = results.rev;\n        return local.replicate.from(remote);\n      }).then(function () {\n        doc.integer = 1;\n        // One more change\n        return remote.put(doc);\n      }).then(function () {\n        // Testing if second replications fails now\n        return local.replicate.from(remote);\n      }).then(function () {\n        return local.get(doc._id);\n      }).then(function (results) {\n        results.integer.should.equal(1);\n      });\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.issue3179.js",
    "content": "'use strict';\n\nvar adapters = [\n  ['http', 'http'],\n  ['http', 'local'],\n  ['local', 'http'],\n  ['local', 'local']\n];\n\nif ('saucelabs' in testUtils.params()) {\n  adapters = [['local', 'http'], ['http', 'local']];\n}\n\nadapters.forEach(function (adapters) {\n  describe('test.issue3179.js-' + adapters[0] + '-' + adapters[1], function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_repl_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    it('#3179 conflicts synced, non-live replication', function () {\n      var local = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      return local.put({ _id: '1'}).then(function () {\n        return local.replicate.to(remote).then(function () {\n          return remote.replicate.to(local);\n        });\n      }).then(function () {\n        return local.get('1').then(function (doc) {\n          doc.foo = Math.random();\n          return local.put(doc);\n        });\n      }).then(function () {\n        return remote.get('1').then(function (doc) {\n          doc.foo = Math.random();\n          return remote.put(doc);\n        });\n      }).then(function () {\n        return local.replicate.to(remote).then(function () {\n          return remote.replicate.to(local);\n        });\n      }).then(function () {\n        return local.get('1', {conflicts: true}).then(function (doc) {\n          return local.remove(doc._id, doc._conflicts[0]);\n        });\n      }).then(function () {\n        return local.replicate.to(remote).then(function () {\n          return remote.replicate.to(local);\n        });\n      }).then(function () {\n        return local.get('1', {conflicts: true, revs: true});\n      }).then(function (localDoc) {\n        return remote.get('1', {\n          conflicts: true,\n          revs: true\n        }).then(function (remoteDoc) {\n          remoteDoc.should.deep.equal(localDoc);\n        });\n      });\n    });\n\n    it('#3179 conflicts synced, non-live sync', function () {\n      var local = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      return local.put({ _id: '1'}).then(function () {\n        return local.sync(remote);\n      }).then(function () {\n        return local.get('1').then(function (doc) {\n          doc.foo = Math.random();\n          return local.put(doc);\n        });\n      }).then(function () {\n        return remote.get('1').then(function (doc) {\n          doc.foo = Math.random();\n          return remote.put(doc);\n        });\n      }).then(function () {\n        return local.sync(remote);\n      }).then(function () {\n        return local.get('1', {conflicts: true}).then(function (doc) {\n          return local.remove(doc._id, doc._conflicts[0]);\n        });\n      }).then(function () {\n        return local.sync(remote);\n      }).then(function () {\n        return local.get('1', {conflicts: true, revs: true});\n      }).then(function (localDoc) {\n        return remote.get('1', {\n          conflicts: true,\n          revs: true\n        }).then(function (remoteDoc) {\n          remoteDoc.should.deep.equal(localDoc);\n        });\n      });\n    });\n\n    it('#3179 conflicts synced, live sync', function () {\n      var local = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var sync = local.sync(remote, { live: true });\n\n      function waitForUptodate() {\n\n        function defaultToEmpty(promise) {\n          return promise.catch(function (err) {\n            if (err.status !== 404) {\n              throw err;\n            }\n            return {_revisions: []};\n          });\n        }\n\n        return defaultToEmpty(local.get('1', {\n          revs: true,\n          conflicts: true\n        })).then(function (localDoc) {\n          return defaultToEmpty(remote.get('1', {\n            revs: true,\n            conflicts: true\n          })).then(function (remoteDoc) {\n            var revsEqual = JSON.stringify(localDoc._revisions) ===\n              JSON.stringify(remoteDoc._revisions);\n            var conflictsEqual = JSON.stringify(localDoc._conflicts || []) ===\n              JSON.stringify(remoteDoc._conflicts || []);\n            if (!revsEqual || !conflictsEqual) {\n              return waitForUptodate();\n            }\n          });\n        });\n      }\n\n      function waitForConflictsResolved() {\n        return new testUtils.Promise(function (resolve) {\n          var changes = remote.changes({\n            live: true,\n            include_docs: true,\n            conflicts: true\n          }).on('change', function (change) {\n            if (!('_conflicts' in change.doc)) {\n              changes.cancel();\n            }\n          });\n          changes.on('complete', resolve);\n        });\n      }\n\n      function cleanup() {\n        return new testUtils.Promise(function (resolve, reject) {\n          sync.on('complete', resolve);\n          sync.on('error', reject);\n          sync.cancel();\n          sync = null;\n        });\n      }\n\n      return local.put({ _id: '1'}).then(function () {\n        return waitForUptodate();\n      }).then(function () {\n        sync.cancel();\n        return waitForUptodate();\n      }).then(function () {\n        return local.get('1').then(function (doc) {\n          doc.foo = Math.random();\n          return local.put(doc);\n        });\n      }).then(function () {\n        return remote.get('1').then(function (doc) {\n          doc.foo = Math.random();\n          return remote.put(doc);\n        });\n      }).then(function () {\n        sync = local.sync(remote, { live: true });\n        return waitForUptodate();\n      }).then(function () {\n        return local.get('1', {conflicts: true}).then(function (doc) {\n          return local.remove(doc._id, doc._conflicts[0]);\n        });\n      }).then(function () {\n        return waitForConflictsResolved();\n      }).then(function () {\n        return local.get('1', {conflicts: true, revs: true});\n      }).then(function (localDoc) {\n        return remote.get('1', {\n          conflicts: true,\n          revs: true\n        }).then(function (remoteDoc) {\n          remoteDoc.should.deep.equal(localDoc);\n        });\n      }).then(function () {\n        return cleanup();\n      }, function (err) {\n        return cleanup().then(function () {\n          throw err;\n        });\n      });\n    });\n\n    it('#3179 conflicts synced, live repl', function () {\n      var local = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var repl1 = local.replicate.to(remote, { live: true });\n      var repl2 = local.replicate.from(remote, { live: true });\n\n      function waitForConflictsResolved() {\n        return new testUtils.Promise(function (resolve) {\n          var changes = remote.changes({\n            live: true,\n            include_docs: true,\n            conflicts: true\n          }).on('change', function (change) {\n            if (!('_conflicts' in change.doc)) {\n              changes.cancel();\n            }\n          });\n          changes.on('complete', resolve);\n        });\n      }\n\n      function waitForUptodate() {\n\n        function defaultToEmpty(promise) {\n          return promise.catch(function (err) {\n            if (err.status !== 404) {\n              throw err;\n            }\n            return {_revisions: []};\n          });\n        }\n\n        return defaultToEmpty(local.get('1', {\n          revs: true,\n          conflicts: true\n        })).then(function (localDoc) {\n          return defaultToEmpty(remote.get('1', {\n            revs: true,\n            conflicts: true\n          })).then(function (remoteDoc) {\n            var revsEqual = JSON.stringify(localDoc._revisions) ===\n              JSON.stringify(remoteDoc._revisions);\n            var conflictsEqual = JSON.stringify(localDoc._conflicts || []) ===\n              JSON.stringify(remoteDoc._conflicts || []);\n            if (!revsEqual || !conflictsEqual) {\n              return waitForUptodate();\n            }\n          });\n        });\n      }\n\n      function cleanup() {\n        return new testUtils.Promise(function (resolve, reject) {\n          var numDone = 0;\n\n          function checkDone() {\n            if (++numDone === 2) {\n              resolve();\n            }\n          }\n          repl1.on('complete', checkDone);\n          repl2.on('complete', checkDone);\n          repl1.on('error', reject);\n          repl2.on('error', reject);\n          repl1.cancel();\n          repl2.cancel();\n          repl1 = null;\n          repl2 = null;\n        });\n      }\n\n      return local.put({ _id: '1'}).then(function () {\n        return waitForUptodate();\n      }).then(function () {\n        repl1.cancel();\n        repl2.cancel();\n        return waitForUptodate();\n      }).then(function () {\n        return local.get('1').then(function (doc) {\n          doc.foo = Math.random();\n          return local.put(doc);\n        });\n      }).then(function () {\n        return remote.get('1').then(function (doc) {\n          doc.foo = Math.random();\n          return remote.put(doc);\n        });\n      }).then(function () {\n        repl1 = local.replicate.to(remote, { live: true });\n        repl2 = local.replicate.from(remote, { live: true });\n        return waitForUptodate();\n      }).then(function () {\n        return local.get('1', {conflicts: true}).then(function (doc) {\n          return local.remove(doc._id, doc._conflicts[0]);\n        });\n      }).then(function () {\n        return waitForConflictsResolved();\n      }).then(function () {\n        return local.get('1', {conflicts: true, revs: true});\n      }).then(function (localDoc) {\n        return remote.get('1', {\n          conflicts: true,\n          revs: true\n        }).then(function (remoteDoc) {\n          remoteDoc.should.deep.equal(localDoc);\n        });\n      }).then(function () {\n        return cleanup();\n      }, function (err) {\n        return cleanup().then(function () {\n          throw err;\n        });\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.issue3646.js",
    "content": "'use strict';\n\nvar adapters = ['local', 'http'];\n\nadapters.forEach(function (adapter) {\n  describe('test.issue3646.js- ' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    it('Should finish with 0 documents', function () {\n      var db = new PouchDB(dbs.name);\n\n      return db.bulkDocs(data[0], {new_edits: false}).then(function () {\n        return db.bulkDocs(data[1], {new_edits: false});\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(0, 'all docs length is 0');\n        res.total_rows.should.equal(0);\n        return db.allDocs({keys: ['b74e3b45'], include_docs: true});\n      }).then(function (res) {\n        var first = res.rows[0];\n        should.equal(first.value.deleted, true, 'all docs value.deleted');\n        first.value.rev.should.equal('6-441f43a31c89dc68a7cc934ce5779bf8');\n        res.total_rows.should.equal(0);\n        return db.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(0, 'doc_count is 0');\n        return db.changes({include_docs: true});\n      }).then(function (changes) {\n        changes.results.should.have.length(1);\n        var first = changes.results[0];\n        first.doc._rev.should.equal('6-441f43a31c89dc68a7cc934ce5779bf8');\n        should.equal(first.deleted, true, 'changes metadata.deleted');\n        should.equal(first.doc._deleted, true, 'changes doc._deleted');\n      });\n    });\n\n    var data = [\n      {\n        \"docs\": [\n          {\n            \"_revisions\": {\n              \"start\": 2,\n              \"ids\": [\n                \"4e16ac64356d4358bf1bdb4857fc299f\",\n                \"aed67b17ea5ba6b78e704ad65d3fb5db\"\n              ]\n            },\n            \"_rev\": \"2-4e16ac64356d4358bf1bdb4857fc299f\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 2,\n              \"ids\": [\n                \"3757f03a178b34284361c89303cf8c35\",\n                \"0593f4c87b24f0f9b620526433929bb0\"\n              ]\n            },\n            \"_rev\": \"2-3757f03a178b34284361c89303cf8c35\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 3,\n              \"ids\": [\n                \"f28d17ab990dcadd20ad38860fde9f11\",\n                \"6cf4b9e2115d7e884292b97aa8765285\",\n                \"dcfdf66ab61873ee512a9ccf3e3731a1\"\n              ]\n            },\n            \"_rev\": \"3-f28d17ab990dcadd20ad38860fde9f11\",\n            \"_id\": \"b74e3b45\"\n          },\n          {\n            \"_revisions\": {\n              \"start\": 3,\n              \"ids\": [\n                \"4d93920c00a4a7269095b22ff4329b3c\",\n                \"7190eca51acb2b302a89ed1204ac2813\",\n                \"017eba7ef1e4f529143f463779822627\"\n              ]\n            },\n            \"_rev\": \"3-4d93920c00a4a7269095b22ff4329b3c\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 3,\n              \"ids\": [\n                \"91b47d7b889feb36eaf9336c071f00cc\",\n                \"0e3379b8f9128e6062d13eeb98ec538e\",\n                \"1c006ce18b663e2a031ced4669797c28\"\n              ]\n            },\n            \"_rev\": \"3-91b47d7b889feb36eaf9336c071f00cc\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 4,\n              \"ids\": [\n                \"2c3c860d421fc9f6cc82e4fb811dc8e2\",\n                \"4473170dcffa850aca381b4f644b2947\",\n                \"3524a871600080f5e30e59a292b02a3f\",\n                \"89eb0b5131800963bb7caf1fc83b6242\"\n              ]\n            },\n            \"_rev\": \"4-2c3c860d421fc9f6cc82e4fb811dc8e2\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 6,\n              \"ids\": [\n                \"441f43a31c89dc68a7cc934ce5779bf8\",\n                \"4c7f8b00508144d049d18668d17e552a\",\n                \"e8431fb3b448f3457c5b2d77012fa8b4\",\n                \"f2e7dc8102123e13ca792a0a05ca6235\",\n                \"37a13a5c1e2ce5926a3ffcda7e669106\",\n                \"78739468c87b30f76d067a2d7f373803\"\n              ]\n            },\n            \"_rev\": \"6-441f43a31c89dc68a7cc934ce5779bf8\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          }\n        ]\n      },\n      {\n        \"docs\": [\n          {\n            \"_revisions\": {\n              \"start\": 2,\n              \"ids\": [\n                \"3757f03a178b34284361c89303cf8c35\",\n                \"0593f4c87b24f0f9b620526433929bb0\"\n              ]\n            },\n            \"_rev\": \"2-3757f03a178b34284361c89303cf8c35\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 2,\n              \"ids\": [\n                \"4e16ac64356d4358bf1bdb4857fc299f\",\n                \"aed67b17ea5ba6b78e704ad65d3fb5db\"\n              ]\n            },\n            \"_rev\": \"2-4e16ac64356d4358bf1bdb4857fc299f\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 3,\n              \"ids\": [\n                \"91b47d7b889feb36eaf9336c071f00cc\",\n                \"0e3379b8f9128e6062d13eeb98ec538e\",\n                \"1c006ce18b663e2a031ced4669797c28\"\n              ]\n            },\n            \"_rev\": \"3-91b47d7b889feb36eaf9336c071f00cc\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 3,\n              \"ids\": [\n                \"4d93920c00a4a7269095b22ff4329b3c\",\n                \"7190eca51acb2b302a89ed1204ac2813\",\n                \"017eba7ef1e4f529143f463779822627\"\n              ]\n            },\n            \"_rev\": \"3-4d93920c00a4a7269095b22ff4329b3c\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 4,\n              \"ids\": [\n                \"2c3c860d421fc9f6cc82e4fb811dc8e2\",\n                \"4473170dcffa850aca381b4f644b2947\",\n                \"3524a871600080f5e30e59a292b02a3f\",\n                \"89eb0b5131800963bb7caf1fc83b6242\"\n              ]\n            },\n            \"_rev\": \"4-2c3c860d421fc9f6cc82e4fb811dc8e2\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 4,\n              \"ids\": [\n                \"dbaa7e6c02381c2c0ec5259572387d7c\",\n                \"f28d17ab990dcadd20ad38860fde9f11\",\n                \"6cf4b9e2115d7e884292b97aa8765285\",\n                \"dcfdf66ab61873ee512a9ccf3e3731a1\"\n              ]\n            },\n            \"_rev\": \"4-dbaa7e6c02381c2c0ec5259572387d7c\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          },\n          {\n            \"_revisions\": {\n              \"start\": 6,\n              \"ids\": [\n                \"441f43a31c89dc68a7cc934ce5779bf8\",\n                \"4c7f8b00508144d049d18668d17e552a\",\n                \"e8431fb3b448f3457c5b2d77012fa8b4\",\n                \"f2e7dc8102123e13ca792a0a05ca6235\",\n                \"37a13a5c1e2ce5926a3ffcda7e669106\",\n                \"78739468c87b30f76d067a2d7f373803\"\n              ]\n            },\n            \"_rev\": \"6-441f43a31c89dc68a7cc934ce5779bf8\",\n            \"_id\": \"b74e3b45\",\n            \"_deleted\": true\n          }\n        ]\n      }\n    ];\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.local_docs.js",
    "content": "'use strict';\n\nvar adapters = ['http', 'local'];\n\nadapters.forEach(function (adapter) {\n  describe('test.local_docs.js-' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    it('local docs - put then get', function () {\n      var db = new PouchDB(dbs.name);\n      return db.put({_id: '_local/foo'}).then(function (res) {\n        res.id.should.equal('_local/foo');\n        res.rev.should.be.a('string');\n        res.ok.should.equal(true);\n        return db.get('_local/foo');\n      });\n    });\n\n    it('local docs - put then get w/ revisions', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {\n        _id: '_local/foo'\n      };\n      return db.put(doc).then(function (res) {\n        res.id.should.equal('_local/foo');\n        res.rev.should.be.a('string');\n        res.ok.should.equal(true);\n        return db.get('_local/foo');\n      }).then(function (doc) {\n        should.not.exist(doc._revisions);\n        doc._revisions = {start: 0, ids: ['1']};\n        return db.put(doc);\n      }).then(function () {\n        return db.get('_local/foo');\n      }).then(function (doc) {\n        should.not.exist(doc._revisions);\n      });\n    });\n\n    it('local docs - put then remove then get', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: '_local/foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.remove(doc);\n      }).then(function (res) {\n        res.id.should.equal('_local/foo');\n        res.rev.should.equal('0-0');\n        res.ok.should.equal(true);\n        return db.get('_local/foo').then(function (doc) {\n          should.not.exist(doc);\n        }).catch(function (err) {\n          err.name.should.equal('not_found');\n        });\n      });\n    });\n\n    it('local docs - put after remove', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: '_local/foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.remove(doc);\n      }).then(function (res) {\n        res.id.should.equal('_local/foo');\n        res.rev.should.equal('0-0');\n        res.ok.should.equal(true);\n        delete doc._rev;\n        return db.put(doc);\n      });\n    });\n\n    it('local docs - put after remove, check return vals', function () {\n      // as long as it starts with 0-, couch\n      // treats it as a new local doc\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: '_local/quux'};\n      return db.put(doc).then(function (res) {\n        res.ok.should.equal(true);\n        doc._rev = res.rev;\n        return db.put(doc);\n      }).then(function (res) {\n        res.ok.should.equal(true);\n        doc._rev = res.rev;\n        return db.put(doc);\n      }).then(function (res) {\n        res.ok.should.equal(true);\n      });\n    });\n\n    it('local docs - remove missing', function () {\n      var db = new PouchDB(dbs.name);\n      return db.remove({\n        _id: '_local/foo',\n        _rev: '1-fake'\n      }).then(function () {\n        throw new Error('should not be here');\n      }, function (err) {\n        err.name.should.be.a('string');\n      });\n    });\n\n    it('local docs - put after put w/ deleted:true', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: '_local/foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        doc._deleted = true;\n        return db.put(doc);\n      }).then(function (res) {\n        res.id.should.equal('_local/foo');\n        res.rev.should.equal('0-0');\n        res.ok.should.equal(true);\n        delete doc._deleted;\n        delete doc._rev;\n        return db.put(doc);\n      });\n    });\n\n    it('local docs - put after remove with a rev', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: '_local/foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.remove(doc);\n      }).then(function (res) {\n        res.id.should.equal('_local/foo');\n        res.ok.should.equal(true);\n        res.rev.should.equal('0-0');\n        delete doc._rev;\n        return db.put(doc);\n      });\n    });\n\n    it('local docs - multiple removes', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: '_local/foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        return db.remove(doc);\n      }).then(function (res) {\n        res.rev.should.equal('0-0');\n        delete doc._rev;\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        return db.remove(doc);\n      }).then(function (res) {\n        res.rev.should.equal('0-0');\n      });\n    });\n\n    it('local docs - get unknown', function () {\n      var db = new PouchDB(dbs.name);\n      return db.get('_local/foo').then(function (doc) {\n        should.not.exist(doc);\n      }).catch(function (err) {\n        err.name.should.equal('not_found');\n      });\n    });\n\n    it('local docs - put unknown', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: '_local/foo', _rev: '1-fake'};\n      return db.put(doc).then(function (res) {\n        should.not.exist(res);\n      }).catch(function (err) {\n        err.name.should.be.a('string');\n      });\n    });\n\n    it('local docs - put new and conflicting', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: '_local/foo'};\n      return db.put(doc).then(function () {\n        return db.put(doc);\n      }).then(function (res) {\n        should.not.exist(res);\n      }).catch(function (err) {\n        err.name.should.be.a('string');\n      });\n    });\n\n    it('local docs - put modified and conflicting', function () {\n      var db = new PouchDB(dbs.name);\n      var doc = {_id: '_local/foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.put(doc);\n      }).then(function () {\n        return db.put(doc);\n      }).then(function (res) {\n        should.not.exist(res);\n      }).catch(function (err) {\n        err.name.should.be.a('string');\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.replication.js",
    "content": "'use strict';\n\nvar adapters = [\n  ['local', 'http'],\n  ['http', 'http'],\n  ['http', 'local'],\n  ['local', 'local']\n];\n\nif ('saucelabs' in testUtils.params()) {\n  adapters = [['local', 'http'], ['http', 'local']];\n}\n\nvar downAdapters = ['local'];\n\nadapters.forEach(function (adapters) {\n  describe('suite2 test.replication.js-' + adapters[0] + '-' + adapters[1],\n    function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_repl_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n\n    var docs = [\n      {_id: '0', integer: 0, string: '0'},\n      {_id: '1', integer: 1, string: '1'},\n      {_id: '2', integer: 2, string: '2'}\n    ];\n\n    // simplify for easier deep equality checks\n    function simplifyChanges(res) {\n      var changes = res.results.map(function (change) {\n        if (testUtils.isSyncGateway() &&\n          change.doc && change.doc._conflicts) {\n          // CSG does not render conflict metadata inline\n          // in the document. Remove it for comparisons.\n          delete change.doc._conflicts;\n        }\n        return {\n          id: change.id,\n          deleted: change.deleted,\n          changes: change.changes.map(function (x) {\n            return x.rev;\n          }).sort(),\n          doc: change.doc\n        };\n      });\n\n      // in CouchDB 2.0, changes is not guaranteed to be\n      // ordered\n      if (testUtils.isCouchMaster() || testUtils.isSyncGateway()) {\n        changes.sort(function (a, b) {\n          return a.id > b.id;\n        });\n      }\n      // CSG will send a change event when just the ACL changed\n      if (testUtils.isSyncGateway()) {\n        changes = changes.filter(function (change){\n          return change.id !== \"_user/\";\n        });\n      }\n      return changes;\n    }\n\n    function verifyInfo(info, expected) {\n      if (!testUtils.isCouchMaster()) {\n        if (typeof info.doc_count === 'undefined') {\n          // info is from Sync Gateway, which allocates an extra seqnum\n          // for user access control purposes.\n          info.update_seq.should.be.within(expected.update_seq,\n            expected.update_seq + 1, 'update_seq');\n        } else {\n          info.update_seq.should.equal(expected.update_seq, 'update_seq');\n        }\n      }\n      if (info.doc_count) { // info is NOT from Sync Gateway\n        info.doc_count.should.equal(expected.doc_count, 'doc_count');\n      }\n    }\n\n    it('Test basic pull replication', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        db.replicate.from(dbs.remote, function (err, result) {\n          result.ok.should.equal(true);\n          result.docs_written.should.equal(docs.length);\n          db.info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 3,\n              doc_count: 3\n            });\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test basic pull replication plain api', function (done) {\n      var remote = new PouchDB(dbs.remote);\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        PouchDB.replicate(dbs.remote, dbs.name, {}, function (err, result) {\n          result.ok.should.equal(true);\n          result.docs_written.should.equal(docs.length);\n          new PouchDB(dbs.name).info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 3,\n              doc_count: 3\n            });\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test basic pull replication plain api 2', function (done) {\n      var remote = new PouchDB(dbs.remote);\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        PouchDB.replicate(\n          dbs.remote, dbs.name).on('complete', function (result) {\n          result.ok.should.equal(true);\n          result.docs_written.should.equal(docs.length);\n          new PouchDB(dbs.name).info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 3,\n              doc_count: 3\n            });\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test pull replication with many changes', function (done) {\n      var remote = new PouchDB(dbs.remote);\n\n      var numDocs = 201;\n      var docs = [];\n      for (var i = 0; i < numDocs; i++) {\n        docs.push({_id: i.toString()});\n      }\n\n      remote.bulkDocs({ docs: docs }, {}, function (err) {\n        should.not.exist(err);\n        PouchDB.replicate(\n          dbs.remote, dbs.name).on('complete', function (result) {\n          result.ok.should.equal(true);\n          result.docs_written.should.equal(docs.length);\n          new PouchDB(dbs.name).info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: numDocs,\n              doc_count: numDocs\n            });\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test basic pull replication with funny ids', function (done) {\n      var docs = [\n        {_id: '4/5', integer: 0, string: '0'},\n        {_id: '3&2', integer: 1, string: '1'},\n        {_id: '1>0', integer: 2, string: '2'}\n      ];\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      remote.bulkDocs({docs: docs}, function () {\n        db.replicate.from(dbs.remote, function (err, result) {\n          result.ok.should.equal(true);\n          result.docs_written.should.equal(docs.length);\n          db.info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 3,\n              doc_count: 3\n            });\n            done();\n          });\n        });\n      });\n    });\n\n    it('pull replication with many changes + a conflict (#2543)', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      // simulate 5000 normal commits with two conflicts at the very end\n      function uuid() {\n        return testUtils.uuid(32, 16).toLowerCase();\n      }\n\n      var numRevs = 5000;\n      var isSafari = (typeof process === 'undefined' || process.browser) &&\n        /Safari/.test(window.navigator.userAgent) &&\n        !/Chrome/.test(window.navigator.userAgent);\n      if (isSafari) {\n        numRevs = 10; // fuck safari, we've hit the storage limit again\n      }\n\n      var uuids = [];\n      for (var i = 0; i < numRevs - 1; i++) {\n        uuids.push(uuid());\n      }\n      var conflict1 = 'a' + uuid();\n      var conflict2 = 'b' + uuid();\n\n      var doc1 = {\n        _id: 'doc',\n        _rev: numRevs + '-' + conflict1,\n        _revisions: {\n          start: numRevs,\n          ids: [conflict1].concat(uuids)\n        }\n      };\n      var doc2 = {\n        _id: 'doc',\n        _rev: numRevs + '-' + conflict2,\n        _revisions: {\n          start: numRevs,\n          ids: [conflict2].concat(uuids)\n        }\n      };\n      return remote.bulkDocs([doc1], {new_edits: false}).then(function () {\n        return remote.replicate.to(db);\n      }).then(function (result) {\n        result.ok.should.equal(true);\n        result.docs_written.should.equal(1, 'correct # docs written (1)');\n        return db.info();\n      }).then(function (info) {\n        if (!testUtils.isSyncGateway() || info.doc_count) {\n          info.doc_count.should.equal(1, 'doc_count');\n        }\n        return db.get('doc', {open_revs: \"all\"});\n      }).then(function (doc) {\n        doc[0].ok._id.should.equal(\"doc\");\n        doc[0].ok._rev.should.equal(doc1._rev);\n        return remote.bulkDocs([doc2], {new_edits: false});\n      }).then(function () {\n        return remote.replicate.to(db);\n      }).then(function (result) {\n        result.ok.should.equal(true);\n        result.docs_written.should.equal(1, 'correct # docs written (2)');\n        return db.info();\n      }).then(function (info) {\n        if (!testUtils.isSyncGateway() || info.doc_count) {\n          info.doc_count.should.equal(1, 'doc_count');\n        }\n        return db.get('doc', {open_revs: \"all\"});\n      }).then(function (docs) {\n        // order with open_revs is unspecified\n        docs.sort(function (a, b) {\n          return a.ok._rev < b.ok._rev ? -1 : 1;\n        });\n        docs[0].ok._id.should.equal(\"doc\");\n        docs[1].ok._id.should.equal(\"doc\");\n        docs[0].ok._rev.should.equal(doc1._rev);\n        docs[1].ok._rev.should.equal(doc2._rev);\n      });\n    });\n\n    it('issue 2779, undeletion when replicating', function () {\n      if (testUtils.isCouchMaster()) {\n        return true;\n      }\n      var db =  new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var rev;\n\n      function checkNumRevisions(num) {\n        return db.get('foo', {\n          open_revs: 'all',\n          revs: true\n        }).then(function (fullDocs) {\n          fullDocs[0].ok._revisions.ids.should.have.length(num,\n            'local is correct');\n        }).then(function () {\n          return remote.get('foo', {\n            open_revs: 'all',\n            revs: true\n          });\n        }).then(function (fullDocs) {\n          fullDocs[0].ok._revisions.ids.should.have.length(num,\n            'remote is correct');\n        });\n      }\n\n      return db.put({_id: 'foo'}).then(function (resp) {\n        rev = resp.rev;\n        return db.replicate.to(remote);\n      }).then(function () {\n        return checkNumRevisions(1);\n      }).then(function () {\n        return db.remove('foo', rev);\n      }).then(function () {\n        return db.replicate.to(remote);\n      }).then(function () {\n        return checkNumRevisions(2);\n      }).then(function () {\n        return db.allDocs({keys: ['foo']});\n      }).then(function (res) {\n        if (testUtils.isSyncGateway() && !res.rows[0].value) {\n          return remote.get('foo', {open_revs:'all'}).then(function (doc){\n            return db.put({_id: 'foo', _rev: doc[0].ok._rev});\n          });\n        } else {\n          rev = res.rows[0].value.rev;\n          return db.put({_id: 'foo', _rev: rev});\n        }\n      }).then(function () {\n        return db.replicate.to(remote);\n      }).then(function () {\n        return checkNumRevisions(3);\n      });\n    });\n\n    it('Test pull replication with many conflicts', function (done) {\n      var remote = new PouchDB(dbs.remote);\n\n      var numRevs = 200; // repro \"url too long\" error with open_revs\n      var docs = [];\n      for (var i = 0; i < numRevs; i++) {\n        var rev =  '1-' + testUtils.uuid(32, 16).toLowerCase();\n        docs.push({_id: 'doc', _rev: rev});\n      }\n\n      remote.bulkDocs({ docs: docs }, {new_edits: false}, function (err) {\n        should.not.exist(err);\n        PouchDB.replicate(\n          dbs.remote, dbs.name).on('complete', function (result) {\n          result.ok.should.equal(true);\n          result.docs_written.should.equal(docs.length);\n          var db = new PouchDB(dbs.name);\n          db.info(function (err, info) {\n            should.not.exist(err);\n            info.doc_count.should.equal(1, 'doc_count');\n            db.get('doc', {open_revs: \"all\"}, function (err, docs) {\n              should.not.exist(err);\n              var okDocs = docs.filter(function (doc) { return doc.ok; });\n              okDocs.should.have.length(numRevs);\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Test correct # docs replicated with staggered revs', function (done) {\n      // ensure we don't just process all the open_revs with\n      // every replication; we should only process the current subset\n      var remote = new PouchDB(dbs.remote);\n\n      var docs = [{_id: 'doc', _rev: '1-a'}, {_id: 'doc', _rev: '1-b'}];\n      remote.bulkDocs({ docs: docs }, {new_edits: false}, function (err) {\n        should.not.exist(err);\n        PouchDB.replicate(\n          dbs.remote, dbs.name).on('complete', function (result) {\n          result.ok.should.equal(true);\n          result.docs_written.should.equal(2);\n          result.docs_read.should.equal(2);\n          var docs = [{_id: 'doc', _rev: '1-c'}, {_id: 'doc', _rev: '1-d'}];\n          remote.bulkDocs({ docs: docs }, {new_edits: false}, function (err) {\n            should.not.exist(err);\n            PouchDB.replicate(\n              dbs.remote, dbs.name).on('complete', function (result) {\n              result.docs_written.should.equal(2);\n              result.docs_read.should.equal(2);\n              var db = new PouchDB(dbs.name);\n              db.info(function (err, info) {\n                should.not.exist(err);\n                info.doc_count.should.equal(1, 'doc_count');\n                db.get('doc', {open_revs: \"all\"}, function (err, docs) {\n                  should.not.exist(err);\n                  var okDocs = docs.filter(function (doc) {\n                    return doc.ok;\n                  });\n                  okDocs.should.have.length(4);\n                  done();\n                });\n              });\n            }).on('error', done);\n          });\n        }).on('error', done);\n      });\n    });\n\n    it('Local DB contains documents', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        db.bulkDocs({ docs: docs }, {}, function () {\n          db.replicate.from(dbs.remote, function () {\n            db.allDocs(function (err, result) {\n              result.rows.length.should.equal(docs.length);\n              db.info(function (err, info) {\n                if (!testUtils.isCouchMaster()) {\n                  info.update_seq.should.be.above(2, 'update_seq local');\n                }\n                info.doc_count.should.equal(3, 'doc_count local');\n                remote.info(function (err, info) {\n                  if (!testUtils.isCouchMaster()) {\n                    info.update_seq.should.be.above(2, 'update_seq remote');\n                  }\n                  if (!testUtils.isSyncGateway() || info.doc_count) {\n                    info.doc_count.should.equal(3, 'doc_count remote');\n                  }\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Test basic push replication', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs }, {}, function () {\n        db.replicate.to(dbs.remote, function (err, result) {\n          result.ok.should.equal(true);\n          result.docs_written.should.equal(docs.length);\n          db.info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 3,\n              doc_count: 3\n            });\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test basic push replication take 2', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.bulkDocs({ docs: docs }, {}, function () {\n        db.replicate.to(dbs.remote, function () {\n          remote.allDocs(function (err, result) {\n            result.rows.length.should.equal(docs.length);\n            db.info(function (err, info) {\n              verifyInfo(info, {\n                update_seq: 3,\n                doc_count: 3\n              });\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Test basic push replication sequence tracking', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc1 = {_id: 'adoc', foo: 'bar'};\n      db.put(doc1, function () {\n        db.replicate.to(dbs.remote, function (err, result) {\n          result.docs_read.should.equal(1);\n          db.replicate.to(dbs.remote, function (err, result) {\n            result.docs_read.should.equal(0);\n            db.replicate.to(dbs.remote, function (err, result) {\n              result.docs_read.should.equal(0);\n              db.info(function (err, info) {\n                verifyInfo(info, {\n                  update_seq: 1,\n                  doc_count: 1\n                });\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Test checkpoint', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        db.replicate.from(dbs.remote, function (err, result) {\n          result.ok.should.equal(true);\n          result.docs_written.should.equal(docs.length);\n          db.replicate.from(dbs.remote, function (err, result) {\n            result.ok.should.equal(true);\n            result.docs_written.should.equal(0);\n            result.docs_read.should.equal(0);\n            db.info(function (err, info) {\n              verifyInfo(info, {\n                update_seq: 3,\n                doc_count: 3\n              });\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Test live pull checkpoint', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      remote.bulkDocs({ docs: docs }).then(function () {\n        var changeCount = docs.length;\n        var changes = db.changes({\n          live: true\n        }).on('change', function () {\n          if (--changeCount) {\n            return;\n          }\n          replication.cancel();\n          changes.cancel();\n        }).on('complete', function () {\n          db.replicate.from(dbs.remote).on('complete', function (details) {\n            details.docs_read.should.equal(0);\n            db.info(function (err, info) {\n              verifyInfo(info, {\n                update_seq: 3,\n                doc_count: 3\n              });\n              done();\n            });\n          });\n        }).on('error', done);\n        var replication = db.replicate.from(remote, { live: true });\n      });\n    });\n\n    it('Test live push checkpoint', function (done) {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      function complete(details) {\n\n        if (testUtils.isSyncGateway()) {\n          // TODO investigate why Sync Gateway sometimes reads a\n          // document. This seems to come up 1 more in the browser\n          // and 0 more in node, but I've seen 1 in node.\n          details.docs_read.should.be.within(0, 1);\n        } else {\n          details.docs_read.should.equal(0);\n        }\n\n        db.info(function (err, info) {\n          verifyInfo(info, {\n            update_seq: 3,\n            doc_count: 3\n          });\n          done();\n        });\n      }\n\n      var finished = 0;\n      function isFinished() {\n        if (++finished !== 2) {\n          return;\n        }\n        db.replicate.to(dbs.remote)\n          .on('error', done)\n          .on('complete', complete);\n      }\n\n      db.bulkDocs({ docs: docs }).then(function () {\n\n        var changeCount = docs.length;\n        function onChange() {\n          if (--changeCount) {\n            return;\n          }\n          replication.cancel();\n          changes.cancel();\n        }\n\n        var changes = remote.changes({live: true})\n          .on('error', done)\n          .on('change', onChange)\n          .on('complete', isFinished);\n\n        var replication = db.replicate.to(remote, {live: true})\n          .on('error', done)\n          .on('complete', isFinished);\n\n      }).catch(done);\n    });\n\n    it('Test checkpoint 2', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var doc = {_id: '3', count: 0};\n      remote.put(doc, {}, function (err, results) {\n        db.replicate.from(dbs.remote, function (err, result) {\n          result.ok.should.equal(true);\n          doc._rev = results.rev;\n          doc.count++;\n          remote.put(doc, {}, function (err, results) {\n            doc._rev = results.rev;\n            doc.count++;\n            remote.put(doc, {}, function () {\n              db.replicate.from(dbs.remote, function (err, result) {\n                result.ok.should.equal(true);\n                result.docs_written.should.equal(1);\n                db.info(function (err, info) {\n                  verifyInfo(info, {\n                    update_seq: 2,\n                    doc_count: 1\n                  });\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Test checkpoint 3 :)', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var doc = {_id: '3', count: 0};\n      db.put(doc, {}, function (err, results) {\n        PouchDB.replicate(db, remote, {}, function (err, result) {\n          result.ok.should.equal(true);\n          doc._rev = results.rev;\n          doc.count++;\n          db.put(doc, {}, function (err, results) {\n            doc._rev = results.rev;\n            doc.count++;\n            db.put(doc, {}, function () {\n              PouchDB.replicate(db, remote, {}, function (err, result) {\n                result.ok.should.equal(true);\n                result.docs_written.should.equal(1);\n                db.info(function (err, info) {\n                  verifyInfo(info, {\n                    update_seq: 3,\n                    doc_count: 1\n                  });\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('#3136 open revs returned correctly 1', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var doc = {_id: 'foo'};\n      var chain = testUtils.Promise.resolve().then(function () {\n        return db.put(doc);\n      });\n\n      function addConflict(i) {\n        chain = chain.then(function () {\n          return db.bulkDocs({\n            docs: [{\n              _id: 'foo',\n              _rev: '2-' + i\n            }],\n            new_edits: false\n          });\n        });\n      }\n\n      for (var i = 0; i < 50; i++) {\n        addConflict(i);\n      }\n      return chain.then(function () {\n        var revs1;\n        var revs2;\n        return db.get('foo', {\n          conflicts: true,\n          revs: true,\n          open_revs: 'all'\n        }).then(function (res) {\n          revs1 = res.map(function (x) {\n            return x.ok._rev;\n          }).sort();\n          return db.replicate.to(remote);\n        }).then(function () {\n          return remote.get('foo', {\n            conflicts: true,\n            revs: true,\n            open_revs: 'all'\n          });\n        }).then(function (res) {\n          revs2 = res.map(function (x) {\n            return x.ok._rev;\n          }).sort();\n          revs1.should.deep.equal(revs2);\n        });\n      });\n    });\n\n    it('#3136 open revs returned correctly 2', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var doc = {_id: 'foo'};\n      var chain = testUtils.Promise.resolve().then(function () {\n        return db.put(doc);\n      });\n\n      function addConflict(i) {\n        chain = chain.then(function () {\n          return db.bulkDocs({\n            docs: [{\n              _id: 'foo',\n              _rev: '2-' + i,\n              _deleted: (i % 3 === 1)\n            }],\n            new_edits: false\n          });\n        });\n      }\n\n      for (var i = 0; i < 50; i++) {\n        addConflict(i);\n      }\n      return chain.then(function () {\n        var revs1;\n        var revs2;\n        return db.get('foo', {\n          conflicts: true,\n          revs: true,\n          open_revs: 'all'\n        }).then(function (res) {\n          revs1 = res.map(function (x) {\n            return x.ok._rev;\n          }).sort();\n          return db.replicate.to(remote);\n        }).then(function () {\n          return remote.get('foo', {\n            conflicts: true,\n            revs: true,\n            open_revs: 'all'\n          });\n        }).then(function (res) {\n          revs2 = res.map(function (x) {\n            return x.ok._rev;\n          }).sort();\n          revs1.should.deep.equal(revs2);\n        });\n      });\n    });\n\n    it('#3136 winningRev has a lower seq', function () {\n      var db1 = new PouchDB(dbs.name);\n      var db2 = new PouchDB(dbs.remote);\n      var tree = [\n        [\n          {_id: 'foo', _rev: '1-a',\n           _revisions: {start: 1, ids: ['a']}},\n          {_id: 'foo', _rev: '2-e', _deleted: true,\n           _revisions: { start: 2, ids: ['e', 'a']}},\n          {_id: 'foo', _rev: '3-g',\n           _revisions: { start: 3, ids: ['g', 'e', 'a']}}\n        ],\n        [\n          {_id: 'foo', _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}},\n          {_id: 'foo', _rev: '2-b',\n            _revisions: {start: 2, ids: ['b', 'a']}},\n          {_id: 'foo', _rev: '3-c',\n            _revisions: {start: 3, ids: ['c', 'b', 'a']}}\n        ],\n        [\n          {_id: 'foo', _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}},\n          {_id: 'foo', _rev: '2-d',\n            _revisions: {start: 2, ids: ['d', 'a']}},\n          {_id: 'foo', _rev: '3-h',\n            _revisions: {start: 3, ids: ['h', 'd', 'a']}},\n          {_id: 'foo', _rev: '4-f',\n            _revisions: {start: 4, ids: ['f', 'h', 'd', 'a']}}\n        ]\n      ];\n\n      var chain = testUtils.Promise.resolve();\n      tree.forEach(function (docs) {\n        chain = chain.then(function () {\n          var revs1;\n          var revs2;\n\n          return db1.bulkDocs({\n            docs: docs,\n            new_edits: false\n          }).then(function () {\n            return db1.replicate.to(db2);\n          }).then(function () {\n            return db1.get('foo', {\n              open_revs: 'all',\n              revs: true,\n              conflicts: true\n            });\n          }).then(function (res1) {\n            revs1 = res1.map(function (x) {\n              return x.ok._rev;\n            }).sort();\n\n            return db2.get('foo', {\n              open_revs: 'all',\n              revs: true,\n              conflicts: true\n            });\n          }).then(function (res2) {\n            revs2 = res2.map(function (x) {\n              return x.ok._rev;\n            }).sort();\n            revs1.should.deep.equal(revs2, 'same revs');\n          });\n        });\n      });\n      return chain;\n    });\n\n    it('#3136 same changes with style=all_docs', function () {\n      var db1 = new PouchDB(dbs.name);\n      var db2 = new PouchDB(dbs.remote);\n      var tree = [\n        [\n          {_id: 'foo', _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}},\n          {_id: 'foo', _rev: '2-e', _deleted: true,\n            _revisions: { start: 2, ids: ['e', 'a']}},\n          {_id: 'foo', _rev: '3-g',\n            _revisions: { start: 3, ids: ['g', 'e', 'a']}}\n        ],\n        [\n          {_id: 'foo', _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}},\n          {_id: 'foo', _rev: '2-b',\n            _revisions: {start: 2, ids: ['b', 'a']}},\n          {_id: 'foo', _rev: '3-c',\n            _revisions: {start: 3, ids: ['c', 'b', 'a']}}\n        ],\n        [\n          {_id: 'foo', _rev: '1-a',\n            _revisions: {start: 1, ids: ['a']}},\n          {_id: 'foo', _rev: '2-d',\n            _revisions: {start: 2, ids: ['d', 'a']}},\n          {_id: 'foo', _rev: '3-h',\n            _revisions: {start: 3, ids: ['h', 'd', 'a']}},\n          {_id: 'foo', _rev: '4-f',\n            _revisions: {start: 4, ids: ['f', 'h', 'd', 'a']}}\n        ]\n      ];\n\n      var chain = testUtils.Promise.resolve();\n      tree.forEach(function (docs) {\n        chain = chain.then(function () {\n          var changes1;\n          var changes2;\n\n          return db1.bulkDocs({\n            docs: docs,\n            new_edits: false\n          }).then(function () {\n            return db1.replicate.to(db2);\n          }).then(function () {\n            return db1.changes({style: 'all_docs'});\n          }).then(function (res1) {\n            changes1 = simplifyChanges(res1);\n            return db2.changes({style: 'all_docs'});\n          }).then(function (res2) {\n            changes2 = simplifyChanges(res2);\n\n            changes1.should.deep.equal(changes2, 'same changes');\n          });\n        });\n      });\n      return chain;\n    });\n\n    it('#3136 style=all_docs with conflicts', function () {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var docs2 = [\n        {_id: '2', integer: 11},\n        {_id: '3', integer: 12}\n      ];\n      var rev2;\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      return db.bulkDocs({ docs: docs1 }).then(function (info) {\n        docs2[0]._rev = info[2].rev;\n        docs2[1]._rev = info[3].rev;\n        return db.put(docs2[0]);\n      }).then(function () {\n        return db.put(docs2[1]);\n      }).then(function (info) {\n        rev2 = info.rev;\n        return PouchDB.replicate(db, remote);\n      }).then(function () {\n        // update remote once, local twice, then replicate from\n        // remote to local so the remote losing conflict is later in\n        // the tree\n        return db.put({\n          _id: '3',\n          _rev: rev2,\n          integer: 20\n        });\n      }).then(function (resp) {\n        var rev3Doc = {\n          _id: '3',\n          _rev: resp.rev,\n          integer: 30\n        };\n        return db.put(rev3Doc);\n      }).then(function () {\n        var rev4Doc = {\n          _id: '3',\n          _rev: rev2,\n          integer: 100\n        };\n        return remote.put(rev4Doc).then(function () {\n          return PouchDB.replicate(remote, db).then(function () {\n            return PouchDB.replicate(db, remote);\n          }).then(function () {\n            return db.changes({\n              include_docs: true,\n              style: 'all_docs',\n              conflicts: true\n            });\n          }).then(function (localChanges) {\n            return remote.changes({\n              include_docs: true,\n              style: 'all_docs',\n              conflicts: true\n            }).then(function (remoteChanges) {\n              localChanges = simplifyChanges(localChanges);\n              remoteChanges = simplifyChanges(remoteChanges);\n\n              localChanges.should.deep.equal(remoteChanges,\n                'same changes');\n            });\n          });\n        });\n      });\n    });\n\n    it('#3136 style=all_docs with conflicts reversed', function () {\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var docs2 = [\n        {_id: '2', integer: 11},\n        {_id: '3', integer: 12}\n      ];\n      var rev2;\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      return db.bulkDocs({ docs: docs1 }).then(function (info) {\n        docs2[0]._rev = info[2].rev;\n        docs2[1]._rev = info[3].rev;\n        return db.put(docs2[0]);\n      }).then(function () {\n        return db.put(docs2[1]);\n      }).then(function (info) {\n        rev2 = info.rev;\n        return PouchDB.replicate(db, remote);\n      }).then(function () {\n        // update remote once, local twice, then replicate from\n        // remote to local so the remote losing conflict is later in\n        // the tree\n        return db.put({\n          _id: '3',\n          _rev: rev2,\n          integer: 20\n        });\n      }).then(function (resp) {\n        var rev3Doc = {\n          _id: '3',\n          _rev: resp.rev,\n          integer: 30\n        };\n        return db.put(rev3Doc);\n      }).then(function () {\n        var rev4Doc = {\n          _id: '3',\n          _rev: rev2,\n          integer: 100\n        };\n        return remote.put(rev4Doc).then(function () {\n          return PouchDB.replicate(remote, db).then(function () {\n            return PouchDB.replicate(db, remote);\n          }).then(function () {\n            return db.changes({\n              include_docs: true,\n              style: 'all_docs',\n              conflicts: true,\n              descending: true\n            });\n          }).then(function (localChanges) {\n            return remote.changes({\n              include_docs: true,\n              style: 'all_docs',\n              conflicts: true,\n              descending: true\n            }).then(function (remoteChanges) {\n              localChanges = simplifyChanges(localChanges);\n              remoteChanges = simplifyChanges(remoteChanges);\n\n              localChanges.should.deep.equal(remoteChanges,\n                'same changes');\n            });\n          });\n        });\n      });\n    });\n\n    it('Test checkpoint read only 3 :)', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var put = function (doc) {\n        return db.bulkDocs({docs: [doc]}).then(function (resp) {\n          return resp[0];\n        });\n      };\n      var err = {\n        \"message\": \"_writer access is required for this request\",\n        \"name\": \"unauthorized\",\n        \"status\": 401\n      };\n      db.put = function () {\n        if (typeof arguments[arguments.length - 1] === 'function') {\n          arguments[arguments.length - 1](err);\n        } else {\n          return testUtils.Promise.reject(err);\n        }\n      };\n      var doc = {_id: '3', count: 0};\n      put(doc).then(function (results) {\n        return PouchDB.replicate(db, remote).then(function (result) {\n          result.ok.should.equal(true);\n          doc._rev = results.rev;\n          doc.count++;\n          return put(doc);\n        });\n      }).then(function (results) {\n        doc._rev = results.rev;\n        doc.count++;\n        return put(doc);\n      }).then(function () {\n        return PouchDB.replicate(db, remote);\n      }).then(function (result) {\n        result.ok.should.equal(true);\n        result.docs_written.should.equal(1);\n        db.info(function (err, info) {\n          verifyInfo(info, {\n            update_seq: 3,\n            doc_count: 1\n          });\n          done();\n        });\n      }, function (a) {\n        done(JSON.stringify(a, false, 4));\n      });\n    });\n\n    it('Testing allDocs with some conflicts (issue #468)', function (done) {\n      var db1 = new PouchDB(dbs.name);\n      var db2 = new PouchDB(dbs.remote);\n      // we indeed needed replication to create failing test here!\n      var doc = {_id: 'foo', _rev: '1-a', value: 'generic'};\n      db1.put(doc, { new_edits: false }, function () {\n        db2.put(doc, { new_edits: false }, function () {\n          testUtils.putAfter(db2, {\n            _id: 'foo',\n            _rev: '2-b',\n            value: 'db2'\n          }, '1-a', function () {\n            testUtils.putAfter(db1, {\n              _id: 'foo',\n              _rev: '2-c',\n              value: 'whatever'\n            }, '1-a', function () {\n              testUtils.putAfter(db1, {\n                _id: 'foo',\n                _rev: '3-c',\n                value: 'db1'\n              }, '2-c', function () {\n                db1.get('foo', function (err, doc) {\n                  doc.value.should.equal('db1');\n                  db2.get('foo', function (err, doc) {\n                    doc.value.should.equal('db2');\n                    PouchDB.replicate(db1, db2, function () {\n                      PouchDB.replicate(db2, db1, function () {\n                        db1.get('foo', function (err, doc) {\n                          doc.value.should.equal('db1');\n                          db2.get('foo', function (err, doc) {\n                            doc.value.should.equal('db1');\n                            db1.allDocs({ include_docs: true },\n                              function (err, res) {\n                              res.rows.should.have.length.above(0, 'first');\n                              // redundant but we want to test it\n                              res.rows[0].doc.value.should.equal('db1');\n                              db2.allDocs({ include_docs: true },\n                                function (err, res) {\n                                res.rows.should.have.length.above(0, 'second');\n                                res.rows[0].doc.value.should.equal('db1');\n                                db1.info(function (err, info) {\n                                  // if auto_compaction is enabled, will\n                                  // be 5 because 2-c goes \"missing\" and\n                                  // the other db tries to re-put it\n                                  if (!testUtils.isCouchMaster()) {\n                                    info.update_seq.should.be.within(4, 5);\n                                  }\n                                  info.doc_count.should.equal(1);\n                                  db2.info(function (err, info2) {\n                                    verifyInfo(info2, {\n                                      update_seq: 3,\n                                      doc_count: 1\n                                    });\n                                    done();\n                                  });\n                                });\n                              });\n                            });\n                          });\n                        });\n                      });\n                    });\n                  });\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    // CouchDB will not generate a conflict here, it uses a deteministic\n    // method to generate the revision number, however we cannot copy its\n    // method as it depends on erlangs internal data representation\n    it('Test basic conflict', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var doc1 = {_id: 'adoc', foo: 'bar'};\n      var doc2 = {_id: 'adoc', bar: 'baz'};\n      db.put(doc1, function () {\n        remote.put(doc2, function () {\n     db.replicate.to(dbs.remote, function () {\n            remote.get('adoc', { conflicts: true }, function (err, result) {\n              result.should.have.property('_conflicts');\n              db.info(function (err, info) {\n                verifyInfo(info, {\n                  update_seq: 1,\n                  doc_count: 1\n                });\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Test _conflicts key', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      // Test invalid if adapter doesnt support mapreduce\n      if (!remote.query) {\n        return done();\n      }\n\n      var doc1 = {_id: 'adoc', foo: 'bar'};\n      var doc2 = {_id: 'adoc', bar: 'baz'};\n      var ddoc = {\n        \"_id\": \"_design/conflicts\",\n        views: {\n          conflicts: {\n            map: function (doc) {\n              if (doc._conflicts) {\n                emit(doc._id, [doc._rev].concat(doc._conflicts));\n              }\n            }.toString()\n          }\n        }\n      };\n      remote.put(ddoc, function () {\n        db.put(doc1, function () {\n          remote.put(doc2, function () {\n            db.replicate.to(dbs.remote, function () {\n              remote.query('conflicts/conflicts', {\n                reduce: false,\n                conflicts: true\n              }, function (_, res) {\n                res.rows.length.should.equal(1);\n                db.info(function (err, info) {\n                  verifyInfo(info, {\n                    update_seq: 1,\n                    doc_count: 1\n                  });\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Test basic live pull replication', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var doc1 = {_id: 'adoc', foo: 'bar'};\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        var count = 0;\n        var finished = 0;\n        var isFinished = function () {\n          if (++finished !== 2) {\n            return;\n          }\n          db.info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 4,\n              doc_count: 4\n            });\n            done();\n          });\n        };\n        var rep = db.replicate.from(dbs.remote, {\n          live: true\n        }).on('complete', isFinished);\n        var changes = db.changes({\n          live: true\n        }).on('change', function () {\n          ++count;\n          if (count === 3) {\n            return remote.put(doc1);\n          }\n          if (count === 4) {\n            rep.cancel();\n            changes.cancel();\n          }\n        }).on('complete', isFinished).on('error', done);\n      });\n    });\n\n    it('Test basic live push replication', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var doc1 = {_id: 'adoc', foo: 'bar'};\n      db.bulkDocs({ docs: docs }, {}, function () {\n        var count = 0;\n        var finished = 0;\n        var isFinished = function () {\n          if (++finished !== 2) {\n            return;\n          }\n          db.info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 4,\n              doc_count: 4\n            });\n            done();\n          });\n        };\n        var rep = remote.replicate.from(db, {\n          live: true\n        }).on('complete', isFinished);\n        var changes = remote.changes({\n          live: true\n        }).on('change', function () {\n          ++count;\n          if (count === 3) {\n            return db.put(doc1);\n          }\n          if (count === 4) {\n            rep.cancel();\n            changes.cancel();\n          }\n        }).on('complete', isFinished).on('error', done);\n      });\n    });\n\n    it('test-cancel-pull-replication', function (done) {\n      var remote = new PouchDB(dbs.remote);\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {_id: '0', integer: 0, string: '0'},\n        {_id: '1', integer: 1, string: '1'},\n        {_id: '2', integer: 2, string: '2'}\n      ];\n      var doc1 = {_id: 'adoc', foo: 'bar' };\n      var doc2 = {_id: 'anotherdoc', foo: 'baz'};\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        var count = 0;\n        var replicate = db.replicate.from(remote, {\n          live: true\n        }).on('complete', function () {\n          remote.put(doc2);\n          setTimeout(function () {\n            changes.cancel();\n          }, 100);\n        });\n        var changes = db.changes({\n          live: true\n        }).on('complete', function () {\n          count.should.equal(4);\n          db.info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 4,\n              doc_count: 4\n            });\n            done();\n          });\n        }).on('change', function () {\n          ++count;\n          if (count === 3) {\n            remote.put(doc1);\n          }\n          if (count === 4) {\n            replicate.cancel();\n          }\n        }).on('error', done);\n      });\n    });\n\n    it('Test basic events', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs }).then(function () {\n        db.replicate.to(dbs.remote)\n        .on('complete', function (res) {\n          should.exist(res);\n          db.replicate.to('http://0.0.0.0:13370')\n          .on('error', function (res) {\n            should.exist(res);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Replication filter', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      remote.bulkDocs({ docs: docs1 }, function () {\n        db.replicate.from(remote, {\n          filter: function (doc) {\n            return doc.integer % 2 === 0;\n          }\n        }).on('error', done).on('complete', function () {\n          db.allDocs(function (err, docs) {\n            if (err) { done(err); }\n            docs.rows.length.should.equal(2);\n            db.info(function (err, info) {\n              verifyInfo(info, {\n                update_seq: 2,\n                doc_count: 2\n              });\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Replication with different filters', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var more_docs = [\n        {_id: '3', integer: 3, string: '3'},\n        {_id: '4', integer: 4, string: '4'}\n      ];\n      remote.bulkDocs({ docs: docs }, function () {\n        db.replicate.from(remote, {\n          filter: function (doc) {\n            return doc.integer % 2 === 0;\n          }\n        }, function () {\n          remote.bulkDocs({ docs: more_docs }, function () {\n            db.replicate.from(remote, {}, function (err, response) {\n              response.docs_written.should.equal(3);\n              db.info(function (err, info) {\n                verifyInfo(info, {\n                  update_seq: 5,\n                  doc_count: 5\n                });\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Replication doc ids', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var thedocs = [\n        {_id: '3', integer: 3, string: '3'},\n        {_id: '4', integer: 4, string: '4'},\n        {_id: '5', integer: 5, string: '5'}\n      ];\n      remote.bulkDocs({ docs: thedocs }, function () {\n        db.replicate.from(remote, {\n          doc_ids: ['3', '4']\n        }, function (err, response) {\n          response.docs_written.should.equal(2);\n          db.info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 2,\n              doc_count: 2\n            });\n            done();\n          });\n        });\n      });\n    });\n\n    it('2204 Invalid doc_ids', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var thedocs = [\n        {_id: '3', integer: 3, string: '3'},\n        {_id: '4', integer: 4, string: '4'},\n        {_id: '5', integer: 5, string: '5'}\n      ];\n      return remote.bulkDocs({docs: thedocs}).then(function () {\n        return db.replicate.from(remote, {doc_ids: 'foo'});\n      }).catch(function (err) {\n        err.name.should.equal('bad_request');\n        err.reason.should.equal(\"`doc_ids` filter parameter is not a list.\");\n      });\n    });\n\n    it('Replication since', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docs1 = [\n        {_id: '1', integer: 1, string: '1'},\n        {_id: '2', integer: 2, string: '2'},\n        {_id: '3', integer: 3, string: '3'}\n      ];\n      remote.bulkDocs({ docs: docs1 }, function () {\n        remote.info(function (err, info) {\n          var update_seq = info.update_seq;\n          var docs2 = [\n            {_id: '4', integer: 4, string: '4'},\n            {_id: '5', integer: 5, string: '5'}\n          ];\n          remote.bulkDocs({ docs: docs2 }, function () {\n            db.replicate.from(remote, {\n              since: update_seq\n            }).on('complete', function (result) {\n              result.docs_written.should.equal(2);\n              db.replicate.from(remote, {\n                since: 0\n              }).on('complete', function (result) {\n                result.docs_written.should.equal(3);\n                db.info(function (err, info) {\n                  verifyInfo(info, {\n                    update_seq: 5,\n                    doc_count: 5\n                  });\n                  done();\n                });\n              }).on('error', done);\n            }).on('error', done);\n          });\n        });\n      });\n    });\n\n    it('Replication with same filters', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var more_docs = [\n        {_id: '3', integer: 3, string: '3'},\n        {_id: '4', integer: 4, string: '4'}\n      ];\n      remote.bulkDocs({ docs: docs }, function () {\n        db.replicate.from(remote, {\n          filter: function (doc) {\n            return doc.integer % 2 === 0;\n          }\n        }, function () {\n          remote.bulkDocs({ docs: more_docs }, function () {\n            db.replicate.from(remote, {\n              filter: function (doc) {\n                return doc.integer % 2 === 0;\n              }\n            }, function (err, response) {\n              response.docs_written.should.equal(1);\n              db.info(function (err, info) {\n                verifyInfo(info, {\n                  update_seq: 3,\n                  doc_count: 3\n                });\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Replication with filter that leads to some empty batches (#2689)',\n       function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 1},\n        {_id: '3', integer: 1},\n        {_id: '4', integer: 2},\n        {_id: '5', integer: 2}\n      ];\n      remote.bulkDocs({ docs: docs1 }, function () {\n        db.replicate.from(remote, {\n          batch_size: 2,\n          filter: function (doc) {\n            return doc.integer % 2 === 0;\n          }\n        }).on('complete', function () {\n          db.allDocs(function (err, docs) {\n            if (err) { done(err); }\n            docs.rows.length.should.equal(3);\n            db.info(function (err, info) {\n              verifyInfo(info, {\n                update_seq: 3,\n                doc_count: 3\n              });\n              done();\n            });\n          });\n        }).on('error', done);\n      });\n    });\n\n    it('Empty replication updates checkpoint (#5145)', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var changes = remote.changes;\n      remote.changes = function (params) {\n        changesSince.push(params.since);\n        return changes.apply(this, arguments);\n      };\n      var changesSince = [];\n      var replicationOpts = {\n        filter: function () {\n          return false;\n        }\n      };\n      return remote.bulkDocs({ docs: docs }).then(function () {\n        return db.replicate.from(remote, replicationOpts);\n      }).then(function (result) {\n        result.ok.should.equal(true);\n        result.docs_written.should.equal(0);\n        result.docs_read.should.equal(0);\n        changesSince.length.should.equal(2);\n\n        // the 'since' parameter should be different on the\n        // next request\n        changesSince[0].should.not.equal(changesSince[1]);\n\n        // kick off a second replication\n        return db.replicate.from(remote, replicationOpts);\n      }).then(function (result) {\n        result.ok.should.equal(true);\n        result.docs_written.should.equal(0);\n        result.docs_read.should.equal(0);\n        changesSince.length.should.equal(3);\n\n        // nothing has changed on the remote so 'since'\n        // should be the same\n        changesSince[1].should.equal(changesSince[2]);\n      }).then(function () {\n        // Restore remote.changes to original\n        remote.changes = changes;\n      }).catch(function (err) {\n        remote.changes = changes;\n        throw err;\n      });\n    });\n\n    it('Does not update checkpoint unncessarily (#5379)', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var bulkDocs = remote.bulkDocs;\n      var bulkDocsCalled = false;\n      remote.bulkDocs = function () {\n        bulkDocsCalled = true;\n        return bulkDocs.apply(this, arguments);\n      };\n      return remote.bulkDocs({ docs: docs }).then(function () {\n        return db.replicate.from(remote);\n      }).then(function (result) {\n        result.ok.should.equal(true);\n        bulkDocsCalled = false;\n\n        // kick off a second replication where there are no changes\n        // checkpoints are written using bulkDocs so\n        // we don't expect any calls\n        return db.replicate.from(remote);\n      }).then(function (result) {\n        result.ok.should.equal(true);\n        bulkDocsCalled.should.equal(false);\n      }).then(function () {\n        // Restore remote.bulkDocs to original\n        remote.bulkDocs = bulkDocs;\n      }).catch(function (err) {\n        remote.bulkDocs = bulkDocs;\n        throw err;\n      });\n    });\n\n    it('Replication with deleted doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docs1 = [\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3},\n        {_id: '4', integer: 4, _deleted: true}\n      ];\n      remote.bulkDocs({ docs: docs1 }, function () {\n        db.replicate.from(remote, function () {\n          db.allDocs(function (err, res) {\n            res.total_rows.should.equal(4);\n            db.info(function (err, info) {\n              verifyInfo(info, {\n                update_seq: 5,\n                doc_count: 4\n              });\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Replication with doc deleted twice', function (done) {\n      if (testUtils.isCouchMaster()) {\n        return done();\n      }\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      remote.bulkDocs({ docs: docs }).then(function () {\n        return remote.get('0');\n      }).then(function (doc) {\n        return remote.remove(doc);\n      }).then(function () {\n        return db.replicate.from(remote);\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.total_rows.should.equal(2);\n        return remote.allDocs({ keys: [ '0' ] });\n      }).then(function (res) {\n        var row = res.rows[0];\n        should.not.exist(row.error);\n        // set rev to latest so we go at the end (otherwise new\n        // rev is 1 and the subsequent remove below won't win)\n        var doc = {\n          _id: '0',\n          integer: 10,\n          string: '10',\n          _rev: row.value.rev\n        };\n        return remote.put(doc);\n      }).then(function () {\n        return remote.get('0');\n      }).then(function (doc) {\n        return remote.remove(doc);\n      }).then(function () {\n        return db.replicate.from(remote);\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.total_rows.should.equal(2);\n        db.info(function (err, info) {\n          verifyInfo(info, {\n            update_seq: 4,\n            doc_count: 2\n          });\n          done();\n        });\n      }).catch(function (err) {\n        done(JSON.stringify(err, false, 4));\n      });\n    });\n\n    it('Replication notifications', function (done) {\n      var changes = 0;\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var onChange = function (c) {\n        changes += c.docs.length;\n\n        if (changes === 3) {\n          db.info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 3,\n              doc_count: 3\n            });\n            done();\n          });\n        }\n      };\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        db.replicate.from(dbs.remote).on('change', onChange);\n      });\n    });\n\n    it('Replication with remote conflict', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var doc = {_id: 'test', test: 'Remote 1'}, winningRev;\n      remote.post(doc, function (err, resp) {\n        doc._rev = resp.rev;\n        PouchDB.replicate(remote, db, function () {\n          doc.test = 'Local 1';\n          db.put(doc, function () {\n            doc.test = 'Remote 2';\n            remote.put(doc, function (err, resp) {\n              doc._rev = resp.rev;\n              doc.test = 'Remote 3';\n              remote.put(doc, function (err, resp) {\n                winningRev = resp.rev;\n                PouchDB.replicate(db, remote, function () {\n                  PouchDB.replicate(remote, db, function () {\n                    remote.get('test', { revs_info: true },\n                      function (err, remotedoc) {\n                      db.get('test', { revs_info: true },\n                        function (err, localdoc) {\n                        localdoc._rev.should.equal(winningRev);\n                        remotedoc._rev.should.equal(winningRev);\n                        db.info(function (err, info) {\n                          verifyInfo(info, {\n                            update_seq: 3,\n                            doc_count: 1\n                          });\n                          done();\n                        });\n                      });\n                    });\n                  });\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Replicate and modify three times', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var doc = {\n        _id: 'foo',\n        generation: 1\n      };\n\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.replicate.to(remote);\n      }).then(function () {\n        return remote.get('foo');\n      }).then(function (doc) {\n        doc.generation.should.equal(1);\n        doc.generation = 2;\n        return remote.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        return remote.replicate.to(db);\n      }).then(function () {\n        return db.get('foo');\n      }).then(function (doc) {\n        doc.generation.should.equal(2);\n        doc.generation = 3;\n        return db.put(doc);\n      }).then(function () {\n        return db.replicate.to(remote);\n      }).then(function () {\n        return db.get('foo', {conflicts: true});\n      }).then(function (doc) {\n        doc.generation.should.equal(3);\n        should.not.exist(doc._conflicts);\n      }).then(function () {\n        return remote.get('foo', {conflicts: true});\n      }).then(function (doc) {\n        doc.generation.should.equal(3);\n        should.not.exist(doc._conflicts);\n      });\n    });\n\n    function waitForChange(db, fun) {\n      return new testUtils.Promise(function (resolve) {\n        var remoteChanges = db.changes({live: true, include_docs: true});\n        remoteChanges.on('change', function (change) {\n          if (fun(change)) {\n            remoteChanges.cancel();\n            resolve();\n          }\n        });\n      });\n    }\n\n    it('live replication, starting offline', function () {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      // id() is the first thing called\n      var origId = remote.id;\n      var i = 0;\n      remote.id = function () {\n        // Reject only the first 3 times\n        if (++i <= 3) {\n          return Promise.reject(new Error('flunking you'));\n        }\n        return origId.apply(remote, arguments);\n      };\n\n      return remote.post({}).then(function () {\n        return new Promise(function (resolve, reject) {\n          var rep = db.replicate.from(remote, {\n            live: true\n          });\n          rep.on('error', reject);\n        }).then(function () {\n            throw new Error('should have thrown error');\n          }, function (err) {\n            should.exist(err);\n          });\n      });\n    });\n\n    it('Replicates deleted docs (issue #2636)', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var replication = db.replicate.to(remote, {\n        live: true\n      });\n\n      return db.post({}).then(function (res) {\n        var doc = {\n          _id: res.id,\n          _rev: res.rev\n        };\n        return db.remove(doc);\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(0, 'deleted locally');\n      }).then(function () {\n        return waitForChange(remote, function (change) {\n          return change.deleted === true;\n        });\n      }).then(function () {\n        return remote.allDocs();\n      }).then(function (res) {\n        replication.cancel();\n        res.rows.should.have.length(0, 'deleted in remote');\n      });\n    });\n\n    it('Replicates deleted docs w/ delay (issue #2636)', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var replication = db.replicate.to(remote, {\n        live: true\n      });\n\n      var doc;\n      return db.post({}).then(function (res) {\n        doc = {_id: res.id, _rev: res.rev};\n        return waitForChange(remote, function () { return true; });\n      }).then(function () {\n        return db.remove(doc);\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(0, 'deleted locally');\n      }).then(function () {\n        return waitForChange(remote, function (c) {\n          return c.id === doc._id && c.deleted;\n        });\n      }).then(function () {\n        return remote.allDocs();\n      }).then(function (res) {\n        replication.cancel();\n        res.rows.should.have.length(0, 'deleted in remote');\n      });\n    });\n\n    it('Replicates deleted docs w/ compaction', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var doc = {_id: 'foo'};\n      return db.put(doc).then(function (res) {\n        doc._rev = res.rev;\n        return db.replicate.to(remote);\n      }).then(function () {\n        return db.put(doc);\n      }).then(function (res) {\n        doc._rev = res.rev;\n        return db.remove(doc);\n      }).then(function () {\n        return db.compact();\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(0, 'deleted locally');\n      }).then(function () {\n        return db.replicate.to(remote);\n      }).then(function () {\n        return remote.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(0, 'deleted in remote');\n      });\n    });\n\n    it('Replicates modified docs (issue #2636)', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var replication = db.replicate.to(remote, {\n        live: true\n      });\n\n      return db.post({}).then(function (res) {\n        var doc = {\n          _id: res.id,\n          _rev: res.rev,\n          modified: 'yep'\n        };\n\n        return db.put(doc);\n      }).then(function () {\n        return db.allDocs({include_docs: true});\n      }).then(function (res) {\n        res.rows.should.have.length(1, 'one doc synced locally');\n        res.rows[0].doc.modified.should.equal('yep', 'modified locally');\n      }).then(function () {\n        return waitForChange(remote, function (change) {\n          return change.doc.modified === 'yep';\n        });\n      }).then(function () {\n        return remote.allDocs({include_docs: true});\n      }).then(function (res) {\n        replication.cancel();\n        res.rows.should.have.length(1, '1 doc in remote');\n        res.rows[0].doc.modified.should.equal('yep', 'modified in remote');\n      });\n    });\n\n    it('Replication of multiple remote conflicts (#789)', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var doc = {_id: '789', _rev: '1-a', value: 'test'};\n      function createConflicts(db, callback) {\n        db.put(doc, { new_edits: false }, function () {\n          testUtils.putAfter(db, {\n            _id: '789',\n            _rev: '2-a',\n            value: 'v1'\n          }, '1-a', function () {\n            testUtils.putAfter(db, {\n              _id: '789',\n              _rev: '2-b',\n              value: 'v2'\n            }, '1-a', function () {\n              testUtils.putAfter(db, {\n                _id: '789',\n                _rev: '2-c',\n                value: 'v3'\n              }, '1-a', function () {\n                callback();\n              });\n            });\n          });\n        });\n      }\n      createConflicts(remote, function () {\n        db.replicate.from(remote, function (err, result) {\n          result.ok.should.equal(true);\n          // in this situation, all the conflicting revisions should be read and\n          // written to the target database (this is consistent with CouchDB)\n          result.docs_written.should.equal(3);\n          result.docs_read.should.equal(3);\n          db.info(function (err, info) {\n            if (!testUtils.isCouchMaster()) {\n              info.update_seq.should.be.above(0);\n            }\n            info.doc_count.should.equal(1);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Replicate large number of docs', function (done) {\n      if ('saucelabs' in testUtils.params()) {\n        return done();\n      }\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docs = [];\n      var num = 30;\n      for (var i = 0; i < num; i++) {\n        docs.push({\n          _id: 'doc_' + i,\n          foo: 'bar_' + i\n        });\n      }\n      remote.bulkDocs({ docs: docs }, function () {\n        db.replicate.from(remote, {}, function () {\n          db.allDocs(function (err, res) {\n            res.total_rows.should.equal(num);\n            db.info(function (err, info) {\n              verifyInfo(info, {\n                update_seq: 30,\n                doc_count: 30\n              });\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Ensure checkpoint after deletion', function (done) {\n      var db1name = dbs.name;\n      var adoc = { '_id': 'adoc' };\n      var newdoc = { '_id': 'newdoc' };\n      var db1 = new PouchDB(dbs.name);\n      var db2 = new PouchDB(dbs.remote);\n      db1.post(adoc, function () {\n        PouchDB.replicate(db1, db2).on('complete', function () {\n          db1.destroy(function () {\n            var fresh = new PouchDB(db1name);\n            fresh.post(newdoc, function () {\n              PouchDB.replicate(fresh, db2).on('complete', function () {\n                db2.allDocs(function (err, docs) {\n                  docs.rows.length.should.equal(2);\n                  done();\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('issue #1001 cb as 3rd argument', function (done) {\n      PouchDB.replicate('http://example.com', dbs.name, function (err) {\n        should.exist(err);\n        done();\n      });\n    });\n\n    it('issue #1001 cb as 4th argument', function (done) {\n      var url = 'http://example.com';\n      PouchDB.replicate(url, dbs.name, {}, function (err) {\n        should.exist(err);\n        done();\n      });\n    });\n\n    it('issue #909 Filtered replication bails at paging limit',\n      function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docs = [];\n      var num = 100;\n      for (var i = 0; i < num; i++) {\n        docs.push({\n          _id: 'doc_' + i,\n          foo: 'bar_' + i\n        });\n      }\n      num = 100;\n      var docList = [];\n      for (i = 0; i < num; i += 5) {\n        docList.push('doc_' + i);\n      }\n      // uncomment this line to test only docs higher than paging limit\n      docList = [\n        'doc_33',\n        'doc_60',\n        'doc_90'\n      ];\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        db.replicate.from(dbs.remote, {\n          live: false,\n          doc_ids: docList\n        }, function (err, result) {\n          result.docs_written.should.equal(docList.length);\n          db.info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 3,\n              doc_count: 3\n            });\n            done();\n          });\n        });\n      });\n    });\n\n    it.skip('(#1240) - get error', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      // 10 test documents\n      var num = 10;\n      var docs = [];\n      for (var i = 0; i < num; i++) {\n        docs.push({\n          _id: 'doc_' + i,\n          foo: 'bar_' + i\n        });\n      }\n      // Initialize remote with test documents\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        var get = remote.get;\n        function first_replicate() {\n          // Mock remote.get to fail writing doc_3 (fourth doc)\n          remote.get = function () {\n            // Simulate failure to get the document with id 'doc_4'\n            // This should block the replication at seq 4\n            if (arguments[0] === 'doc_4') {\n              arguments[2].apply(null, [{}]);\n            } else {\n              get.apply(this, arguments);\n            }\n          };\n          // Replicate and confirm failure, docs_written and target docs\n          db.replicate.from(remote, function (err, result) {\n            should.exist(err);\n            should.exist(result);\n            result.docs_written.should.equal(4);\n            function check_docs(id) {\n              if (!id) {\n                second_replicate();\n                return;\n              }\n              db.get(id, function (err, exists) {\n                if (exists) {\n                  should.not.exist(err);\n                } else {\n                  should.exist(err);\n                }\n                check_docs(docs.shift());\n              });\n            }\n            var docs = [\n              [\n                'doc_0',\n                true\n              ],\n              [\n                'doc_1',\n                true\n              ],\n              [\n                'doc_2',\n                true\n              ],\n              [\n                'doc_3',\n                false\n              ],\n              [\n                'doc_4',\n                false\n              ],\n              [\n                'doc_5',\n                false\n              ],\n              [\n                'doc_6',\n                false\n              ],\n              [\n                'doc_7',\n                false\n              ],\n              [\n                'doc_8',\n                false\n              ],\n              [\n                'doc_9',\n                false\n              ]\n            ];\n            check_docs(docs.shift());\n          });\n        }\n        function second_replicate() {\n          // Restore remote.get to original\n          remote.get = get;\n          // Replicate and confirm success, docs_written and target docs\n          db.replicate.from(remote, function (err, result) {\n            should.not.exist(err);\n            should.exist(result);\n            result.docs_written.should.equal(6);\n            function check_docs(id, exists) {\n              if (!id) {\n                db.info(function (err, info) {\n                  verifyInfo(info, {\n                    update_seq: 6,\n                    doc_count: 6\n                  });\n                  done();\n                });\n                return;\n              }\n              db.get(id, function (err) {\n                if (exists) {\n                  should.not.exist(err);\n                } else {\n                  should.exist(err);\n                }\n                check_docs(docs.shift());\n              });\n            }\n            var docs = [\n              [\n                'doc_0',\n                true\n              ],\n              [\n                'doc_1',\n                true\n              ],\n              [\n                'doc_2',\n                true\n              ],\n              [\n                'doc_3',\n                true\n              ],\n              [\n                'doc_4',\n                true\n              ],\n              [\n                'doc_5',\n                true\n              ],\n              [\n                'doc_6',\n                true\n              ],\n              [\n                'doc_7',\n                true\n              ],\n              [\n                'doc_8',\n                true\n              ],\n              [\n                'doc_9',\n                true\n              ]\n            ];\n            check_docs(docs.shift());\n          });\n        }\n        // Done the test\n        first_replicate();\n      });\n    });\n\n    it.skip('Get error 2', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      // 10 test documents\n      var num = 10;\n      var docs = [];\n      for (var i = 0; i < num; i++) {\n        docs.push({\n          _id: 'doc_' + i,\n          foo: 'bar_' + i\n        });\n      }\n      // Initialize remote with test documents\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        var get = remote.get;\n        function first_replicate() {\n          // Mock remote.get to fail writing doc_3 (fourth doc)\n          remote.get = function () {\n            // Simulate failure to get the document with id 'doc_4'\n            // This should block the replication at seq 4\n            if (arguments[0] === 'doc_4') {\n              arguments[2].apply(null, [{\n                status: 500,\n                error: 'mock error',\n                reason: 'mock get failure'\n              }]);\n            } else {\n              get.apply(this, arguments);\n            }\n          };\n          // Replicate and confirm failure, docs_written and target docs\n          db.replicate.from(remote, function (err, result) {\n            err.status.should.equal(500);\n            err.error.should.equal('Replication aborted');\n            err.reason.should.equal('src.get completed with error');\n            err.details.status.should.equal(500);\n            err.details.error.should.equal('mock error');\n            err.details.reason.should.equal('mock get failure');\n            result.errors[0].status.should.equal(500);\n            result.errors[0].error.should.equal('mock error');\n            result.errors[0].reason.should.equal('mock get failure');\n            result.docs_written.should.equal(4);\n            function check_docs(id) {\n              if (!id) {\n                second_replicate();\n                return;\n              }\n              db.get(id, function (err, exists) {\n                if (exists) {\n                  should.not.exist(err);\n                } else {\n                  should.exist(err);\n                }\n                check_docs(docs.shift());\n              });\n            }\n            var docs = [\n              [\n                'doc_0',\n                true\n              ],\n              [\n                'doc_1',\n                true\n              ],\n              [\n                'doc_2',\n                true\n              ],\n              [\n                'doc_3',\n                false\n              ],\n              [\n                'doc_4',\n                false\n              ],\n              [\n                'doc_5',\n                false\n              ],\n              [\n                'doc_6',\n                false\n              ],\n              [\n                'doc_7',\n                false\n              ],\n              [\n                'doc_8',\n                false\n              ],\n              [\n                'doc_9',\n                false\n              ]\n            ];\n            check_docs(docs.shift());\n          });\n        }\n        function second_replicate() {\n          // Restore remote.get to original\n          remote.get = get;\n          // Replicate and confirm success, docs_written and target docs\n          db.replicate.from(remote, function (err, result) {\n            should.not.exist(err);\n            should.exist(result);\n            result.docs_written.should.equal(6);\n            function check_docs(id, exists) {\n              if (!id) {\n                db.info(function (err, info) {\n                  verifyInfo(info, {\n                    update_seq: 6,\n                    doc_count: 6\n                  });\n                  done();\n                });\n                return;\n              }\n              db.get(id, function (err) {\n                if (exists) {\n                  should.not.exist(err);\n                } else {\n                  should.exist(err);\n                }\n                check_docs(docs.shift());\n              });\n            }\n            var docs = [\n              [\n                'doc_0',\n                true\n              ],\n              [\n                'doc_1',\n                true\n              ],\n              [\n                'doc_2',\n                true\n              ],\n              [\n                'doc_3',\n                true\n              ],\n              [\n                'doc_4',\n                true\n              ],\n              [\n                'doc_5',\n                true\n              ],\n              [\n                'doc_6',\n                true\n              ],\n              [\n                'doc_7',\n                true\n              ],\n              [\n                'doc_8',\n                true\n              ],\n              [\n                'doc_9',\n                true\n              ]\n            ];\n            check_docs(docs.shift());\n          });\n        }\n        // Done the test\n        first_replicate();\n      });\n    });\n\n    it('(#4963) Ensure successful docs are saved but seq not updated if single doc fails to replicate', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      // 10 test documents\n      var num = 10;\n      var docs = [];\n      for (var i = 0; i < num; i++) {\n        docs.push({\n          _id: 'doc_' + i,\n          foo: 'bar_' + i,\n          // needed to cause the code to fetch using get\n          _attachments: {\n            text: {\n              content_type: 'text\\/plain',\n              data: \"VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=\"\n            }\n          }\n        });\n      }\n      // Initialize remote with test documents\n      remote.bulkDocs({ docs: docs }, {}, function (err, results) {\n        var bulkGet = remote.bulkGet;\n        function first_replicate() {\n          remote.bulkGet = function () {\n            var getResults = [];\n            for (var i = 0; i < docs.length; i++) {\n              var doc = docs[i];\n              getResults.push({\n                id: doc._id,\n                docs: [ {\n                  ok: {\n                    _id: doc._id,\n                    foo: doc.foo,\n                    _attachments: doc._attachments,\n                    _rev: results[i].rev\n                  }\n                } ]\n              });\n            }\n            // Mock remote.get to fail writing doc_3 (fourth doc)\n            getResults[3].docs[0] = { error: new Error('timeout') };\n            return Promise.resolve({ results: getResults });\n          };\n          // Replicate and confirm failure, docs_written and target docs\n          db.replicate.from(remote).then(function () {\n            done(new Error('First replication should fail'));\n          }).catch(function (err) {\n            // We expect that first replication should fail\n            should.exist(err);\n\n            err.result.ok.should.equal(false);\n            err.result.docs_written.should.equal(9);\n            if (!testUtils.isCouchMaster()) {\n              err.result.last_seq.should.equal(0);\n            }\n\n            var docs = [\n              [ 'doc_0', true ],\n              [ 'doc_1', true ],\n              [ 'doc_2', true ],\n              [ 'doc_3', false ],\n              [ 'doc_4', true ],\n              [ 'doc_5', true ],\n              [ 'doc_6', true ],\n              [ 'doc_7', true ],\n              [ 'doc_8', true ],\n              [ 'doc_9', true ]\n            ];\n\n            function check_docs(id, exists) {\n              if (!id) {\n                db.info(function (err, info) {\n                  verifyInfo(info, {\n                    update_seq: 9,\n                    doc_count: 9\n                  });\n\n                  second_replicate();\n                });\n                return;\n              }\n              db.get(id, function (err) {\n                if (exists) {\n                  should.not.exist(err);\n                } else {\n                  should.exist(err);\n                }\n                check_docs.apply(this, docs.shift());\n              });\n            }\n\n            check_docs.apply(this, docs.shift());\n          });\n        }\n        function second_replicate() {\n          // Restore remote.bulkGet to original\n          remote.bulkGet = bulkGet;\n          // Replicate and confirm success, docs_written and target docs\n          db.replicate.from(remote).then(function (result) {\n            should.exist(result);\n            result.docs_written.should.equal(1);\n            if (!testUtils.isCouchMaster()) {\n              result.last_seq.should.equal(10);\n            }\n\n            var docs = [ 'doc_0', 'doc_1', 'doc_2', 'doc_3', 'doc_4', 'doc_5', 'doc_6', 'doc_7', 'doc_8', 'doc_9' ];\n\n            function check_docs(id) {\n              if (!id) {\n                db.info(function (err, info) {\n                  verifyInfo(info, {\n                    update_seq: 10,\n                    doc_count: 10\n                  });\n                  done();\n                });\n                return;\n              }\n              db.get(id, function (err) {\n                should.not.exist(err);\n                check_docs(docs.shift());\n              });\n            }\n\n            check_docs(docs.shift());\n          }).catch(done);\n        }\n        // Done the test\n        first_replicate();\n      });\n    });\n\n    it.skip(\"error updating checkpoint\", function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      remote.bulkDocs({docs: docs}, {}, function () {\n        var get = remote.get;\n        var local_count = 0;\n        // Mock remote.get to fail writing doc_3 (fourth doc)\n        remote.get = function () {\n          // Simulate failure to get the checkpoint\n          if (arguments[0].slice(0, 6) === '_local') {\n            local_count++;\n            if (local_count === 2) {\n              arguments[1].apply(null, [{\n                status: 500,\n                error: 'mock get error',\n                reason: 'simulate an error updating the checkpoint'\n              }]);\n            } else {\n              get.apply(this, arguments);\n            }\n          } else {\n            get.apply(this, arguments);\n          }\n        };\n\n        db.replicate.from(remote).on('error', function (err) {\n          should.exist(err);\n          db.info(function (err, info) {\n            verifyInfo(info, {\n              update_seq: 2,\n              doc_count: 2\n            });\n            done();\n          });\n        });\n      });\n    });\n\n    // Should not start replication over if last_seq mismatches in checkpoints\n    // and it can be resolved some other way\n    it('#3999-1 should not start over if last_seq mismatches', function () {\n\n      var source = new PouchDB(dbs.remote);\n      var mismatch = false;\n      var failWrite = false;\n      var checkpoint;\n      var checkpointCount = 0;\n\n      // 1. This is where we fake the mismatch:\n      var putte = source.put;\n\n      source.put = function (doc) {\n\n        // We need the checkpoint id so we can inspect it later\n        if (/local/.test(doc._id)) {\n          checkpointCount++;\n          checkpoint = doc._id;\n        }\n\n        if (failWrite && checkpointCount > 1) {\n          return testUtils.Promise.reject({\n            status: 0,\n            message: 'Database encountered an unknown error'\n          });\n        }\n\n        return putte.apply(this, arguments);\n      };\n\n      // 2. We measure that the replication starts in the expected\n      // place in the 'changes' function\n      var changes = source.changes;\n      source.changes = function (opts) {\n\n        if (mismatch) {\n          opts.since.should.not.equal(0);\n        }\n        return changes.apply(source, arguments);\n      };\n\n\n      var doc = { _id: '3', count: 0 };\n      var put;\n\n      return source.put({ _id: '4', count: 1 }, {}).then(function () {\n        return source.put(doc, {});\n      }).then(function (_put) {\n        put = _put;\n        // Do one replication, this replication\n        // will fail writing one checkpoint\n        failWrite = true;\n        return source.replicate.to(dbs.name, { batch_size: 1 });\n      }).catch(function () {\n        failWrite = false;\n      }).then(function () {\n        // Verify that checkpoints are indeed mismatching:\n        should.exist(checkpoint);\n        var target = new PouchDB(dbs.name);\n        return testUtils.Promise.all([\n          target.get(checkpoint),\n          source.get(checkpoint)\n        ]);\n      }).then(function (res) {\n        res[0].session_id.should.equal(res[1].session_id);\n        res[0].last_seq.should.not.equal(res[1].last_seq);\n\n        doc._rev = put.rev;\n        doc.count++;\n        return source.put(doc, {});\n      }).then(function () {\n        // Trigger the mismatch on the 2nd replication\n        mismatch = true;\n        return source.replicate.to(dbs.name);\n      });\n    });\n\n    it('#3999-2 should start over if no common session is found', function () {\n\n      var source = new PouchDB(dbs.remote);\n      var mismatch = false;\n      var writeStrange = false;\n      var checkpoint;\n      var checkpointCount = 0;\n\n      // 1. This is where we fake the mismatch:\n      var putte = source.put;\n      source.put = function (doc) {\n\n        // We need the checkpoint id so we can inspect it later\n        if (/local/.test(doc._id)) {\n          checkpointCount++;\n          checkpoint = doc._id;\n        }\n\n        if (!writeStrange || checkpointCount < 1) {\n          return putte.apply(this, arguments);\n        }\n\n        // Change session id of source checkpoint to mismatch\n        doc.session_id = \"aaabbbbb\";\n        doc.history[0].session_id = \"aaabbbbb\";\n        return putte.apply(this, arguments);\n      };\n\n      // 2. We measure that the replication starts in the expected\n      // place in the 'changes' function\n      var changes = source.changes;\n      source.changes = function (opts) {\n        if(mismatch) {\n          // We expect this replication to start over,\n          // so the correct value of since is 0\n          // if it's higher, the replication read the checkpoint\n          // without caring for session id\n          opts.since.should.equal(0);\n          mismatch = false;\n        }\n\n        return changes.apply(source, arguments);\n      };\n\n      var doc = { _id: '3', count: 0 };\n      var put;\n\n      return source.put(doc, {}).then(function (_put) {\n        put = _put;\n        writeStrange = true;\n        // Do one replication, to not start from 0\n        return source.replicate.to(dbs.name);\n      }).then(function () {\n        writeStrange = false;\n\n        // Verify that checkpoints are indeed mismatching:\n        should.exist(checkpoint);\n        var target = new PouchDB(dbs.name);\n        return testUtils.Promise.all([\n          target.get(checkpoint),\n          source.get(checkpoint)\n        ]);\n      }).then(function (res) {\n        // [0] = target checkpoint, [1] = source checkpoint\n        res[0].session_id.should.not.equal(res[1].session_id);\n\n        doc._rev = put.rev;\n        doc.count++;\n        return source.put(doc, {});\n      }).then(function () {\n        // Trigger the mismatch on the 2nd replication\n        mismatch = true;\n        return source.replicate.to(dbs.name);\n      });\n    });\n\n    it('#3999-3 should not start over if common session is found', function () {\n\n      var source = new PouchDB(dbs.remote);\n      var mismatch = false;\n      var writeStrange = false;\n      var checkpoint;\n      var checkpointCount = 0;\n\n      // 1. This is where we fake the mismatch:\n      var putte = source.put;\n      source.put = function (doc) {\n\n        // We need the checkpoint id so we can inspect it later\n        if (/local/.test(doc._id)) {\n          checkpointCount++;\n          checkpoint = doc._id;\n        }\n\n        if (!writeStrange || checkpointCount < 1) {\n          return putte.apply(this, arguments);\n        }\n\n        // Change session id of source checkpoint to mismatch\n        var session = doc.session_id;\n\n        doc.session_id = \"aaabbbbb\";\n        doc.history[0].session_id = \"aaabbbbb\";\n        // put a working session id in the history:\n        doc.history.push({\n          session_id: session,\n          last_seq: doc.last_seq\n        });\n        return putte.apply(this, arguments);\n      };\n\n      // 2. We measure that the replication starts in the expected\n      // place in the 'changes' function\n      var changes = source.changes;\n\n      source.changes = function (opts) {\n        if(mismatch) {\n          // If we resolve to 0, the checkpoint resolver has not\n          // been going through the sessions\n          opts.since.should.not.equal(0);\n\n          mismatch = false;\n        }\n\n        return changes.apply(source, arguments);\n      };\n\n\n      var doc = { _id: '3', count: 0 };\n      var put;\n\n      return source.put(doc, {}).then(function (_put) {\n        put = _put;\n        // Do one replication, to not start from 0\n        writeStrange = true;\n        return source.replicate.to(dbs.name);\n      }).then(function () {\n        writeStrange = false;\n        // Verify that checkpoints are indeed mismatching:\n        should.exist(checkpoint);\n        var target = new PouchDB(dbs.name);\n        return testUtils.Promise.all([\n          target.get(checkpoint),\n          source.get(checkpoint)\n        ]);\n      }).then(function (res) {\n        // [0] = target checkpoint, [1] = source checkpoint\n        res[0].session_id.should.not.equal(res[1].session_id);\n\n        doc._rev = put.rev;\n        doc.count++;\n        return source.put(doc, {});\n      }).then(function () {\n        // Trigger the mismatch on the 2nd replication\n        mismatch = true;\n        return source.replicate.to(dbs.name);\n      });\n    });\n\n    it('#3999-4 should \"upgrade\" an old checkpoint', function () {\n\n      var secondRound = false;\n      var writeStrange = false;\n      var checkpoint;\n      var checkpointCount = 0;\n      var source = new PouchDB(dbs.remote);\n      var target = new PouchDB(dbs.name);\n\n      // 1. This is where we fake the mismatch:\n      var putter = function (doc) {\n\n        // We need the checkpoint id so we can inspect it later\n        if (/local/.test(doc._id)) {\n          checkpointCount++;\n          checkpoint = doc._id;\n        }\n\n        var args = [].slice.call(arguments, 0);\n\n        // Write an old-style checkpoint on the first replication:\n        if (writeStrange && checkpointCount >= 1) {\n          var newDoc = {\n            _id: doc._id,\n            last_seq: doc.last_seq\n          };\n\n          args.shift();\n          args.unshift(newDoc);\n        }\n\n        if (this === source) {\n          return sourcePut.apply(this, args);\n        }\n\n        return targetPut.apply(this, args);\n      };\n\n      var sourcePut = source.put;\n      source.put = putter;\n      var targetPut =  target.put;\n      target.put = putter;\n\n      var changes = source.changes;\n      source.changes = function (opts) {\n        if (secondRound) {\n          // Test 1: Check that we read the old style local doc\n          // and didn't start from 0\n          opts.since.should.not.equal(0);\n        }\n        return changes.apply(source, arguments);\n      };\n\n       var doc = { _id: '3', count: 0 };\n\n       return source.put({ _id: '4', count: 1 }, {}).then(function () {\n         writeStrange = true;\n         return source.replicate.to(target);\n       }).then(function () {\n         writeStrange = false;\n         // Verify that we have old checkpoints:\n         should.exist(checkpoint);\n         var target = new PouchDB(dbs.name);\n         return testUtils.Promise.all([\n           target.get(checkpoint),\n           source.get(checkpoint)\n         ]);\n       }).then(function (res) {\n        // [0] = target checkpoint, [1] = source checkpoint\n        should.not.exist(res[0].session_id);\n        should.not.exist(res[1].session_id);\n\n         return source.put(doc, {});\n       }).then(function () {\n         // Do one replication, check that we start from expected last_seq\n         secondRound = true;\n         return source.replicate.to(target);\n       }).then(function () {\n         should.exist(checkpoint);\n         return source.get(checkpoint);\n       }).then(function (res) {\n         should.exist(res.version);\n         should.exist(res.replicator);\n         should.exist(res.session_id);\n         res.version.should.equal(1);\n         res.session_id.should.be.a('string');\n       });\n    });\n\n    it('(#1307) - replicate empty database', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.replicate.from(remote, function (err, result) {\n        should.not.exist(err);\n        should.exist(result);\n        result.docs_written.should.equal(0);\n        db.info(function (err, info) {\n          verifyInfo(info, {\n            update_seq: 0,\n            doc_count: 0\n          });\n          done();\n        });\n      });\n    });\n\n\n    // This fails as it somehow triggers an xhr abort in the http adapter in\n    // node which doesnt have xhr....\n    it.skip('Syncing should stop if one replication fails (issue 838)',\n      function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var doc1 = {_id: 'adoc', foo: 'bar'};\n      var doc2 = {_id: 'anotherdoc', foo: 'baz'};\n      var finished = false;\n      var replications = db.replicate.sync(remote, {\n        live: true\n      }).on('complete',  function () {\n        if (finished) {\n          return;\n        }\n        finished = true;\n        remote.put(doc2, function () {\n          setTimeout(function () {\n            db.allDocs(function (err, res) {\n              res.total_rows.should.be.below(2);\n              done();\n            });\n          }, 100);\n        });\n      });\n      db.put(doc1, function () {\n        replications.pull.cancel();\n      });\n    });\n\n    it(\"Reporting write failures (#942)\", function (done) {\n      var docs = [{_id: 'a', _rev: '1-a'}, {_id: 'b', _rev: '1-b'}];\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.bulkDocs({docs: docs}, {new_edits: false}, function () {\n        var bulkDocs = remote.bulkDocs;\n        var bulkDocsCallCount = 0;\n        remote.bulkDocs = function (content, opts, callback) {\n          return new testUtils.Promise(function (fulfill, reject) {\n            if (typeof callback !== 'function') {\n              callback = function (err, resp) {\n                if (err) {\n                  reject(err);\n                } else {\n                  fulfill(resp);\n                }\n              };\n            }\n\n            // mock a successful write for the first\n            // document and a failed write for the second\n            var doc = content.docs[0];\n\n            if (/^_local/.test(doc._id)) {\n              return bulkDocs.apply(remote, [content, opts, callback]);\n            }\n\n            if (bulkDocsCallCount === 0) {\n              bulkDocsCallCount++;\n              callback(null, [{ok: true, id: doc._id, rev: doc._rev}]);\n            } else if (bulkDocsCallCount === 1) {\n              bulkDocsCallCount++;\n              callback(null, [{\n                id: doc._id,\n                error: 'internal server error',\n                reason: 'test document write error'\n              }]);\n            } else {\n              bulkDocs.apply(remote, [content, opts, callback]);\n            }\n          });\n        };\n\n        db.replicate.to(remote, {batch_size: 1, retry: false},\n                        function (err, result) {\n          should.not.exist(result);\n          should.exist(err);\n          err.result.docs_read.should.equal(2, 'docs_read');\n          err.result.docs_written.should.equal(1, 'docs_written');\n          err.result.doc_write_failures.should.equal(1, 'doc_write_failures');\n          remote.bulkDocs = bulkDocs;\n          db.replicate.to(remote, {batch_size: 1, retry: false},\n                          function (err, result) {\n            // checkpoint should not be moved past first doc\n            // should continue from this point and retry second doc\n            result.docs_read.should.equal(1, 'second replication, docs_read');\n            result.docs_written.should\n              .equal(1, 'second replication, docs_written');\n            result.doc_write_failures.should\n              .equal(0, 'second replication, doc_write_failures');\n            db.info(function (err, info) {\n              verifyInfo(info, {\n                update_seq: 2,\n                doc_count: 2\n              });\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it(\"Reporting write failures if whole saving fails (#942)\",\n      function (done) {\n      var docs = [{_id: 'a', _rev: '1-a'}, {_id: 'b', _rev: '1-b'}];\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.bulkDocs({docs: docs}, {new_edits: false}, function () {\n        var bulkDocs = remote.bulkDocs;\n        remote.bulkDocs = function (docs, opts, callback) {\n          if (typeof callback !== 'function') {\n            return testUtils.Promise.reject(new Error());\n          }\n          callback(new Error());\n        };\n\n        db.replicate.to(remote, {batch_size: 1, retry: false},\n                        function (err, result) {\n          should.not.exist(result);\n          should.exist(err);\n          err.result.docs_read.should.equal(1, 'docs_read');\n          err.result.docs_written.should.equal(0, 'docs_written');\n          err.result.doc_write_failures.should.equal(1, 'doc_write_failures');\n          err.result.last_seq.should.equal(0, 'last_seq');\n          remote.bulkDocs = bulkDocs;\n          db.replicate.to(remote, {batch_size: 1, retry: false},\n                          function (err, result) {\n            result.doc_write_failures.should\n              .equal(0, 'second replication, doc_write_failures');\n            result.docs_written.should\n              .equal(2, 'second replication, docs_written');\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test consecutive replications with different query_params',\n      function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var myDocs = [\n        {_id: '0', integer: 0, string: '0'},\n        {_id: '1', integer: 1, string: '1'},\n        {_id: '2', integer: 2, string: '2'},\n        {_id: '3', integer: 3, string: '3'},\n        {_id: '4', integer: 5, string: '5'}\n      ];\n      remote.bulkDocs({ docs: myDocs }, {}, function () {\n        var filterFun = function (doc, req) {\n          if (req.query.even) {\n            return doc.integer % 2 === 0;\n          } else {\n            return true;\n          }\n        };\n        db.replicate.from(dbs.remote, {\n          filter: filterFun,\n          query_params: { 'even': true }\n        }, function (err, result) {\n          result.docs_written.should.equal(2);\n          db.replicate.from(dbs.remote, {\n            filter: filterFun,\n            query_params: { 'even': false }\n          }, function (err, result) {\n            result.docs_written.should.equal(3);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test consecutive replications with different query_params and promises',\n      function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var myDocs = [\n        {_id: '0', integer: 0, string: '0'},\n        {_id: '1', integer: 1, string: '1'},\n        {_id: '2', integer: 2, string: '2'},\n        {_id: '3', integer: 3, string: '3'},\n        {_id: '4', integer: 5, string: '5'}\n      ];\n      var filterFun;\n      remote.bulkDocs({ docs: myDocs }).then(function () {\n        filterFun = function (doc, req) {\n          if (req.query.even) {\n            return doc.integer % 2 === 0;\n          } else {\n            return true;\n          }\n        };\n        return db.replicate.from(dbs.remote, {\n          filter: filterFun,\n          query_params: { 'even': true }\n        });\n      }).then(function (result) {\n        result.docs_written.should.equal(2);\n        return db.replicate.from(dbs.remote, {\n          filter: filterFun,\n          query_params: { 'even': false }\n        });\n      }).then(function (result) {\n        result.docs_written.should.equal(3);\n        done();\n      }).catch(done);\n    });\n\n    it('Test consecutive replications with different doc_ids', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var myDocs = [\n        {_id: '0', integer: 0, string: '0'},\n        {_id: '1', integer: 1, string: '1'},\n        {_id: '2', integer: 2, string: '2'},\n        {_id: '3', integer: 3, string: '3'},\n        {_id: '4', integer: 5, string: '5'}\n      ];\n      remote.bulkDocs({ docs: myDocs }, {}, function () {\n        db.replicate.from(dbs.remote, {\n          doc_ids: ['0', '4']\n        }, function (err, result) {\n          result.docs_written.should.equal(2);\n          db.replicate.from(dbs.remote, {\n            doc_ids: ['1', '2', '3']\n          }, function (err, result) {\n            result.docs_written.should.equal(3);\n            db.replicate.from(dbs.remote, {\n              doc_ids: ['5']\n            }, function (err, result) {\n              result.docs_written.should.equal(0);\n              db.info(function (err, info) {\n                verifyInfo(info, {\n                  update_seq: 5,\n                  doc_count: 5\n                });\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('#3962 - Test many attachments', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var doc = {_id: 'foo', _attachments: {}};\n      var num = 50;\n\n      Array.apply(null, {length: num}).forEach(function (_, i) {\n        doc._attachments['file_' + i] = {\n          content_type: 'text\\/plain',\n          data: testUtils.makeBlob('Some text: ' + i)\n        };\n      });\n\n      return remote.put(doc).then(function () {\n        return db.replicate.from(dbs.remote);\n      }).then(function () {\n        return db.get('foo');\n      }).then(function (res) {\n        Object.keys(res._attachments).length.should.equal(num);\n      });\n    });\n\n    it('doc count after multiple replications', function (done) {\n      var runs = 2;\n      // helper. remove each document in db and bulk load docs into same\n      function rebuildDocuments(db, docs, callback) {\n        db.allDocs({ include_docs: true }, function (err, response) {\n          var count = 0;\n          var limit = response.rows.length;\n          if (limit === 0) {\n            bulkLoad(db, docs, callback);\n          }\n          response.rows.forEach(function (doc) {\n            db.remove(doc, function () {\n              ++count;\n              if (count === limit) {\n                bulkLoad(db, docs, callback);\n              }\n            });\n          });\n        });\n      }\n\n      // helper.\n      function bulkLoad(db, docs, callback) {\n        db.bulkDocs({ docs: docs }, function (err, results) {\n          if (err) {\n            console.error('Unable to bulk load docs.  Err: ' +\n                          JSON.stringify(err));\n            return;\n          }\n          callback(results);\n        });\n      }\n\n      // The number of workflow cycles to perform. 2+ was always failing\n      // reason for this test.\n      var workflow = function (name, remote, x) {\n        // some documents.  note that the variable Date component,\n        //thisVaries, makes a difference.\n        // when the document is otherwise static, couch gets the same hash\n        // when calculating revision.\n        // and the revisions get messed up in pouch\n        var docs = [\n          {\n            _id: '0',\n            integer: 0,\n            thisVaries: new Date(),\n            common: true\n          },\n          {\n            _id: '1',\n            integer: 1,\n            thisVaries: new Date(),\n            common: true\n          },\n          {\n            _id: '2',\n            integer: 2,\n            thisVaries: new Date(),\n            common: true\n          },\n          {\n            _id: '3',\n            integer: 3,\n            thisVaries: new Date(),\n            common: true\n          },\n          {\n            \"_id\": \"_design/common\",\n            views: {\n              common: {\n                map: function (doc) {\n                  if (doc.common) {\n                    emit(doc._id, doc._rev);\n                  }\n                }.toString()\n              }\n            }\n          }\n        ];\n        var dbr = new PouchDB(remote);\n        // Test invalid if adapter doesnt support mapreduce\n        if (!dbr.query) {\n          return done();\n        }\n\n        rebuildDocuments(dbr, docs, function () {\n          var db = new PouchDB(name);\n          db.replicate.from(remote, function () {\n            db.query('common/common', { reduce: false },\n              function (err, result) {\n                // -1 for the design doc\n                result.rows.length.should.equal(docs.length - 1);\n                if (--x) {\n                  workflow(name, remote, x);\n                } else {\n                  db.info(function (err, info) {\n                    verifyInfo(info, {\n                      update_seq: 5,\n                      doc_count: 5\n                    });\n                    done();\n                  });\n                }\n              }\n            );\n          });\n        });\n      };\n\n      workflow(dbs.name, dbs.remote, runs);\n    });\n\n    it('issue #300 rev id unique per doc', function (done) {\n      var remote = new PouchDB(dbs.remote);\n      var db = new PouchDB(dbs.name);\n      var docs = [{ _id: 'a' }, { _id: 'b' }];\n      remote.bulkDocs({ docs: docs }, {}, function () {\n        db.replicate.from(dbs.remote, function () {\n          db.allDocs(function (err, result) {\n            result.rows.length.should.equal(2);\n            result.rows[0].id.should.equal('a');\n            result.rows[1].id.should.equal('b');\n            db.info(function (err, info) {\n              verifyInfo(info, {\n                update_seq: 2,\n                doc_count: 2\n              });\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('issue #585 Store checkpoint on target db.', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docs = [{ _id: 'a' }, { _id: 'b' }];\n      db.bulkDocs({ docs: docs }, {}, function () {\n        db.replicate.to(dbs.remote, function (err, result) {\n          result.docs_written.should.equal(docs.length);\n          remote.destroy(function () {\n            db.replicate.to(dbs.remote, function (err, result) {\n              result.docs_written.should.equal(docs.length);\n              db.info(function (err, info) {\n                verifyInfo(info, {\n                  update_seq: 2,\n                  doc_count: 2\n                });\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n    it('should work with a read only source', function (done) {\n      var src = new PouchDB(dbs.name);\n      var target = new PouchDB(dbs.remote);\n      var err = {\n        \"message\": \"_writer access is required for this request\",\n        \"name\": \"unauthorized\",\n        \"status\": 401\n      };\n      src.bulkDocs({docs: [\n        {_id: '0', integer: 0, string: '0'},\n        {_id: '1', integer: 1, string: '1'},\n        {_id: '2', integer: 2, string: '2'}\n      ]}).then(function () {\n        src.put = function () {\n          if (typeof arguments[arguments.length - 1] === 'function') {\n            arguments[arguments.length - 1](err);\n          } else {\n            return testUtils.Promise.reject(err);\n          }\n        };\n        return src.replicate.to(target);\n      }).then(function () {\n        target.info(function (err, info) {\n          verifyInfo(info, {\n            update_seq: 3,\n            doc_count: 3\n          });\n          done();\n        });\n      }, function (a) {\n        done(JSON.stringify(a, false, 4));\n      });\n    });\n\n    it('issue #2342 update_seq after replication', function (done) {\n      var docs = [];\n      for (var i = 0; i < 10; i++) {\n        docs.push({_id: i.toString()});\n      }\n\n      var remote = new PouchDB(dbs.remote);\n      var db = new PouchDB(dbs.name);\n\n      remote.bulkDocs({ docs: docs }, {}, function (err, res) {\n        res.forEach(function (row, i) {\n          docs[i]._rev = row.rev;\n          if (i % 2 === 0) {\n            docs[i]._deleted = true;\n          }\n        });\n        remote.bulkDocs({docs: docs}, {}, function () {\n          db.replicate.from(dbs.remote, function () {\n            db.info(function (err, info) {\n              db.changes({\n                descending: true,\n                limit: 1\n              }).on('change', function (change) {\n                change.changes.should.have.length(1);\n\n                // not a valid assertion in CouchDB 2.0\n                if (!testUtils.isCouchMaster()) {\n                  change.seq.should.equal(info.update_seq);\n                }\n                done();\n              }).on('error', done);\n            });\n          });\n        });\n      });\n    });\n\n    it('issue #2393 update_seq after new_edits + replication', function (done) {\n      // the assertions below do not hold in a clustered CouchDB\n      if (testUtils.isCouchMaster()) {\n        return done();\n      }\n\n      var docs = [{\n        '_id': 'foo',\n        '_rev': '1-x',\n        '_revisions': {\n          'start': 1,\n          'ids': ['x']\n        }\n      }];\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      remote.bulkDocs({docs: docs, new_edits: false}, function (err) {\n        should.not.exist(err);\n        remote.bulkDocs({docs: docs, new_edits: false}, function (err) {\n          should.not.exist(err);\n          db.replicate.from(dbs.remote, function () {\n            db.info(function (err, info) {\n              var changes = db.changes({\n                descending: true,\n                limit: 1\n              }).on('change', function (change) {\n                change.changes.should.have.length(1);\n                change.seq.should.equal(info.update_seq);\n                changes.cancel();\n              }).on('complete', function () {\n                remote.info(function (err, info) {\n                  var rchanges = remote.changes({\n                    descending: true,\n                    limit: 1\n                  }).on('change', function (change) {\n                    change.changes.should.have.length(1);\n                    change.seq.should.equal(info.update_seq);\n                    rchanges.cancel();\n                  }).on('complete', function () {\n                    done();\n                  }).on('error', done);\n                });\n              }).on('error', done);\n            });\n          });\n        });\n      });\n    });\n\n    it('should cancel for live replication', function (done) {\n      var remote = new PouchDB(dbs.remote);\n      var db = new PouchDB(dbs.name);\n      var rep = db.replicate.from(remote, {live: true});\n      var called = false;\n      rep.on('change', function () {\n        if (called) {\n          done(new Error('called too many times!'));\n        } else {\n          called = true;\n          rep.cancel();\n          remote.put({_id: 'foo'}).then(function () {\n            return remote.put({_id: 'bar'});\n          }).then(function () {\n            setTimeout(function () {\n              done();\n            }, 500);\n          });\n        }\n      });\n      remote.put({_id: 'hazaa'});\n    });\n\n    it('#2970 should replicate remote database w/ deleted conflicted revs',\n        function (done) {\n      var local = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docid = \"mydoc\";\n\n      function uuid() {\n        return testUtils.uuid(32, 16).toLowerCase();\n      }\n\n      // create a bunch of rando, good revisions\n      var numRevs = 5;\n      var uuids = [];\n      for (var i = 0; i < numRevs - 1; i++) {\n        uuids.push(uuid());\n      }\n\n      // good branch\n      // this branch is one revision ahead of the conflicted branch\n      var a_conflict = uuid();\n      var a_burner = uuid();\n      var a_latest = uuid();\n      var a_rev_num = numRevs + 2;\n      var a_doc = {\n        _id: docid,\n        _rev: a_rev_num + '-' + a_latest,\n        _revisions: {\n          start: a_rev_num,\n          ids: [ a_latest, a_burner, a_conflict ].concat(uuids)\n        }\n      };\n\n      // conflicted deleted branch\n      var b_conflict = uuid();\n      var b_deleted = uuid();\n      var b_rev_num = numRevs + 1;\n      var b_doc = {\n        _id: docid,\n        _rev: b_rev_num + '-' + b_deleted,\n        _deleted: true,\n        _revisions: {\n          start: b_rev_num,\n          ids: [ b_deleted, b_conflict ].concat(uuids)\n        }\n      };\n\n      // push the conflicted documents\n      return remote.bulkDocs([ a_doc, b_doc ], {\n        new_edits: false\n      }).then(function () {\n        return remote.get(docid, { open_revs: 'all' }).then(function (revs) {\n          revs.length.should.equal(2, 'correct number of open revisions');\n          revs[0].ok._id.should.equal(docid, 'rev 1, correct document id');\n          revs[1].ok._id.should.equal(docid, 'rev 2, correct document id');\n          // order of revisions is not specified\n          ((\n            revs[0].ok._rev === a_doc._rev &&\n            revs[1].ok._rev === b_doc._rev) ||\n          (\n            revs[0].ok._rev === b_doc._rev &&\n            revs[1].ok._rev === a_doc._rev)\n          ).should.equal(true);\n        });\n      })\n\n      // attempt to replicate\n      .then(function () {\n        return local.replicate.from(remote).then(function (result) {\n          result.ok.should.equal(true, 'replication result was ok');\n          // # of documents is 2 because deleted\n          // conflicted revision counts as one\n          result.docs_written.should.equal(2,\n            'replicated the correct number of documents');\n        });\n      })\n\n      .then(function () { done(); }, done);\n    });\n\n\n    // test validate_doc_update, which is a reasonable substitute\n    // for testing design doc replication of non-admin users, since we\n    // always test in admin party\n    it('#2268 dont stop replication if single forbidden', function (done) {\n\n      testUtils.isCouchDB(function (isCouchDB) {\n        if (adapters[1] !== 'http' || !isCouchDB) {\n          return done();\n        }\n\n        var ddoc = {\n          \"_id\": \"_design/validate\",\n          \"validate_doc_update\": function (newDoc) {\n            if (newDoc.foo === undefined) {\n              throw {forbidden: 'Document must have a foo.'};\n            }\n          }.toString()\n        };\n\n        var remote = new PouchDB(dbs.remote);\n        var db = new PouchDB(dbs.name);\n\n        return remote.put(ddoc).then(function () {\n          var docs = [{foo: 'bar'}, {foo: 'baz'}, {}, {foo: 'quux'}];\n          return db.bulkDocs({docs: docs});\n        }).then(function () {\n          return db.replicate.to(dbs.remote);\n        }).then(function (res) {\n          res.ok.should.equal(true);\n          res.docs_read.should.equal(4);\n          res.docs_written.should.equal(3);\n          res.doc_write_failures.should.equal(1);\n          res.errors.should.have.length(1);\n\n          return remote.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(4); // 3 plus the validate doc\n          return db.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(4); // 3 plus the invalid doc\n        }).then(done);\n      });\n    });\n\n    it('#2268 dont stop replication if single unauth', function (done) {\n\n      testUtils.isCouchDB(function (isCouchDB) {\n        if (adapters[1] !== 'http' || !isCouchDB) {\n          return done();\n        }\n\n        var ddoc = {\n          \"_id\": \"_design/validate\",\n          \"validate_doc_update\": function (newDoc) {\n            if (newDoc.foo === undefined) {\n              throw {unauthorized: 'Document must have a foo.'};\n            }\n          }.toString()\n        };\n\n        var remote = new PouchDB(dbs.remote);\n        var db = new PouchDB(dbs.name);\n\n        return remote.put(ddoc).then(function () {\n          var docs = [{foo: 'bar'}, {foo: 'baz'}, {}, {foo: 'quux'}];\n          return db.bulkDocs({docs: docs});\n        }).then(function () {\n          return db.replicate.to(dbs.remote);\n        }).then(function (res) {\n          res.ok.should.equal(true);\n          res.docs_read.should.equal(4);\n          res.docs_written.should.equal(3);\n          res.doc_write_failures.should.equal(1);\n          res.errors.should.have.length(1);\n\n          return remote.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(4); // 3 plus the validate doc\n          return db.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(4); // 3 plus the invalid doc\n        }).then(done);\n      });\n    });\n\n    it('#2268 dont stop replication if many unauth', function (done) {\n\n      testUtils.isCouchDB(function (isCouchDB) {\n        if (adapters[1] !== 'http' || !isCouchDB) {\n          return done();\n        }\n\n        var ddoc = {\n          \"_id\": \"_design/validate\",\n          \"validate_doc_update\": function (newDoc) {\n            if (newDoc.foo === undefined) {\n              throw {unauthorized: 'Document must have a foo.'};\n            }\n          }.toString()\n        };\n\n        var remote = new PouchDB(dbs.remote);\n        var db = new PouchDB(dbs.name);\n\n        return remote.put(ddoc).then(function () {\n          var docs = [{foo: 'bar'}, {foo: 'baz'}, {}, {foo: 'quux'}, {}, {},\n                      {foo: 'toto'}, {}];\n          return db.bulkDocs({docs: docs});\n        }).then(function () {\n          return db.replicate.to(dbs.remote);\n        }).then(function (res) {\n          res.ok.should.equal(true);\n          res.docs_read.should.equal(8);\n          res.docs_written.should.equal(4);\n          res.doc_write_failures.should.equal(4);\n          res.errors.should.have.length(4);\n\n          return remote.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(5); // 4 plus the validate doc\n          return db.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(8); // 4 valid and 4 invalid\n        }).then(done);\n      });\n    });\n\n    // Errors from validate_doc_update should have the message\n    // defined in PourchDB.Errors instead of the thrown value.\n    it('#3171 Forbidden validate_doc_update error message',\n        function (done) {\n      testUtils.isCouchDB(function (isCouchDB) {\n        if (adapters[1] !== 'http' || !isCouchDB) {\n          return done();\n        }\n\n        var ddoc = {\n          \"_id\": \"_design/validate\",\n          \"validate_doc_update\": function (newDoc) {\n            if (newDoc.foo === 'object') {\n              throw { forbidden: { foo: 'is object' } };\n            } else if (newDoc.foo === 'string') {\n              throw { forbidden: 'Document foo is string' };\n            }\n          }.toString()\n        };\n\n        var remote = new PouchDB(dbs.remote);\n        var db = new PouchDB(dbs.name);\n\n        return remote.put(ddoc).then(function () {\n          var docs = [{foo: 'string'}, {}, {foo: 'object'}];\n          return db.bulkDocs({docs: docs});\n        }).then(function () {\n          return db.replicate.to(dbs.remote);\n        }).then(function (res) {\n          res.ok.should.equal(true);\n          res.docs_read.should.equal(3);\n          res.docs_written.should.equal(1);\n          res.doc_write_failures.should.equal(2);\n          res.errors.should.have.length(2);\n          res.errors.forEach(function (e) {\n            e.name.should.equal(testUtils.errors.FORBIDDEN.name,\n                                'correct error name returned');\n          });\n\n          return remote.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(2); // 1 plus the validate doc\n          return db.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(3); // 1 valid and 2 invalid\n        }).then(done);\n      });\n    });\n\n    it.skip('Test immediate replication canceling', function (done) {\n      //See  http://pouchdb.com/guides/replication.html : Cancelling replication\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var replicationHandler = remote.replicate.to(db, {\n        live: true,\n        retry: true\n      });\n\n      replicationHandler.on('complete', function () {\n        done();\n      }).on('error', done);\n\n      replicationHandler.cancel();\n    });\n\n    it('#3171 Unauthorized validate_doc_update error message',\n        function (done) {\n      testUtils.isCouchDB(function (isCouchDB) {\n        if (adapters[1] !== 'http' || !isCouchDB) {\n          return done();\n        }\n\n        var ddoc = {\n          \"_id\": \"_design/validate\",\n          \"validate_doc_update\": function (newDoc) {\n            if (newDoc.foo === 'object') {\n              throw { unauthorized: { foo: 'is object' } };\n            } else if (newDoc.foo === 'string') {\n              throw { unauthorized: 'Document foo is string' };\n            }\n          }.toString()\n        };\n\n        var remote = new PouchDB(dbs.remote);\n        var db = new PouchDB(dbs.name);\n\n        return remote.put(ddoc).then(function () {\n          var docs = [{foo: 'string'}, {}, {foo: 'object'}];\n          return db.bulkDocs({docs: docs});\n        }).then(function () {\n          return db.replicate.to(dbs.remote);\n        }).then(function (res) {\n          res.ok.should.equal(true);\n          res.docs_read.should.equal(3);\n          res.docs_written.should.equal(1);\n          res.doc_write_failures.should.equal(2);\n          res.errors.should.have.length(2);\n          res.errors.forEach(function (e) {\n            e.name.should.equal(testUtils.errors.UNAUTHORIZED.name,\n                                'correct error name returned');\n          });\n\n          return remote.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(2); // 1 plus the validate doc\n          return db.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(3); // 1 valid and 2 invalid\n        }).then(done);\n      });\n    });\n\n    it('#3070 Doc IDs with validate_doc_update errors',\n        function (done) {\n      testUtils.isCouchDB(function (isCouchDB) {\n        if (adapters[1] !== 'http' || !isCouchDB) {\n          return done();\n        }\n\n        var ddoc = {\n          \"_id\": \"_design/validate\",\n          \"validate_doc_update\": function (newDoc) {\n            if (newDoc.foo) {\n              throw { unauthorized: 'go away, no picture' };\n            }\n          }.toString()\n        };\n\n        var remote = new PouchDB(dbs.remote);\n        var db = new PouchDB(dbs.name);\n\n        return remote.put(ddoc).then(function () {\n          var docs = [{foo: 'string'}, {}, {foo: 'object'}];\n          return db.bulkDocs({docs: docs});\n        }).then(function () {\n          return db.replicate.to(dbs.remote);\n        }).then(function (res) {\n          var ids = [];\n          res.ok.should.equal(true);\n          res.docs_read.should.equal(3);\n          res.docs_written.should.equal(1);\n          res.doc_write_failures.should.equal(2);\n          res.errors.should.have.length(2);\n          res.errors.forEach(function (e) {\n            should.exist(e.id, 'get doc id with error message');\n            ids.push(e.id);\n          });\n          ids = ids.filter(function (id) {\n            return ids.indexOf(id) === ids.lastIndexOf(id);\n          });\n          ids.length.should.equal(res.errors.length,\n                                  'doc ids are unique');\n          return remote.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(2); // 1 plus the validate doc\n          return db.allDocs({limit: 0});\n        }).then(function (res) {\n          res.total_rows.should.equal(3); // 1 valid and 2 invalid\n        }).then(done);\n      });\n    });\n\n    it('#3270 triggers \"denied\" events', function (done) {\n      testUtils.isCouchDB(function (isCouchDB) {\n        if (/*adapters[1] !== 'http' || */!isCouchDB) {\n          return done();\n        }\n        if (adapters[0] !== 'local' || adapters[1] !== 'http') {\n          return done();\n        }\n\n        var deniedErrors = [];\n        var ddoc = {\n          \"_id\": \"_design/validate\",\n          \"validate_doc_update\": function (newDoc) {\n            if (newDoc.foo) {\n              throw { unauthorized: 'go away, no picture' };\n            }\n          }.toString()\n        };\n\n        var remote = new PouchDB(dbs.remote);\n        var db = new PouchDB(dbs.name);\n\n        return remote.put(ddoc).then(function () {\n          var docs = [\n            {_id: 'foo1', foo: 'string'},\n            {_id: 'nofoo'},\n            {_id: 'foo2', foo: 'object'}\n          ];\n          return db.bulkDocs({docs: docs});\n        }).then(function () {\n          var replication = db.replicate.to(dbs.remote);\n          replication.on('denied', function (error) {\n            deniedErrors.push(error);\n          });\n          return replication;\n        }).then(function () {\n          deniedErrors.length.should.equal(2);\n          deniedErrors[0].name.should.equal('unauthorized');\n          deniedErrors[1].name.should.equal('unauthorized');\n          done();\n        }).catch(done);\n      });\n    });\n\n    it('#3606 - live replication with filtered ddoc', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      return remote.bulkDocs([{\n          _id: '_design/myddoc',\n          filters: {\n            myfilter: function (doc) {\n              return doc.name === 'barbara';\n            }.toString()\n          }\n        },\n        {_id: 'a', name: 'anna'},\n        {_id: 'b', name: 'barbara'},\n        {_id: 'c', name: 'charlie'}\n      ]).then(function () {\n        return new Promise(function (resolve, reject) {\n          var replicate = remote.replicate.to(db, {\n            filter: 'myddoc/myfilter',\n            live: true\n          }).on('change', function () {\n            replicate.cancel();\n          }).on('complete', resolve)\n            .on('error', reject);\n        });\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(1);\n        res.rows[0].id.should.equal('b');\n      });\n    });\n\n    it('#3606 - live repl with filtered ddoc+query_params', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      return remote.bulkDocs([{\n          _id: '_design/myddoc',\n          filters: {\n            myfilter: function (doc, req) {\n              return doc.name === req.query.name;\n            }.toString()\n          }\n        },\n        {_id: 'a', name: 'anna'},\n        {_id: 'b', name: 'barbara'},\n        {_id: 'c', name: 'charlie'}\n      ]).then(function () {\n        return new Promise(function (resolve, reject) {\n          var replicate = remote.replicate.to(db, {\n            filter: 'myddoc/myfilter',\n            query_params: {name: 'barbara'},\n            live: true\n          }).on('change', function () {\n            replicate.cancel();\n          }).on('complete', resolve)\n            .on('error', reject);\n        });\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(1);\n        res.rows[0].id.should.equal('b');\n      });\n    });\n\n    it('#3606 - live repl with doc_ids', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      return remote.bulkDocs([{\n        _id: '_design/myddoc',\n          filters: {\n            myfilter: function (doc, req) {\n              return doc.name === req.query.name;\n            }.toString()\n          }\n        },\n        {_id: 'a', name: 'anna'},\n        {_id: 'b', name: 'barbara'},\n        {_id: 'c', name: 'charlie'}\n      ]).then(function () {\n        return new Promise(function (resolve, reject) {\n          var replicate = remote.replicate.to(db, {\n            doc_ids: ['b'],\n            live: true\n          }).on('change', function () {\n            replicate.cancel();\n          }).on('complete', resolve)\n            .on('error', reject);\n        });\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(1);\n        res.rows[0].id.should.equal('b');\n      });\n    });\n\n    it('#3606 - live repl with view', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      return remote.bulkDocs([{\n        _id: '_design/myddoc',\n        views: {\n          mymap: {\n            map: function (doc) {\n              if (doc.name === 'barbara') {\n                emit(doc._id, null);\n              }\n            }.toString()\n          }\n        }\n      },\n        {_id: 'a', name: 'anna'},\n        {_id: 'b', name: 'barbara'},\n        {_id: 'c', name: 'charlie'}\n      ]).then(function () {\n        return new Promise(function (resolve, reject) {\n          var replicate = remote.replicate.to(db, {\n            filter: '_view',\n            view: 'myddoc/mymap',\n            live: true\n          }).on('change', function () {\n            replicate.cancel();\n          }).on('complete', resolve)\n            .on('error', reject);\n        });\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(1);\n        res.rows[0].id.should.equal('b');\n      });\n    });\n\n    it('#3569 - 409 during replication', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      // we know we're easily going to go over that limit\n      // because of all the parallel replications we're doing\n      db.setMaxListeners(100);\n\n      function timeoutPromise(delay, fun) {\n        return new Promise(function (resolve) {\n          setTimeout(resolve, delay);\n        }).then(fun);\n      }\n\n      return Promise.all([\n        db.put({_id: 'foo'}).then(function () {\n          return db.get('foo');\n        }).then(function (doc) {\n          return db.remove(doc);\n        }).then(function () {\n          return db.replicate.to(remote);\n        }),\n        db.replicate.to(remote),\n        timeoutPromise(0, function () {\n          return db.replicate.to(remote);\n        }),\n        timeoutPromise(1, function () {\n          return db.replicate.to(remote);\n        }),\n        timeoutPromise(2, function () {\n          return db.replicate.to(remote);\n        })\n      ]).then(function () {\n        return db.info();\n      }).then(function (localInfo) {\n        return remote.info().then(function (remoteInfo) {\n          localInfo.doc_count.should.equal(remoteInfo.doc_count);\n        });\n      });\n    });\n\n    it('#3270 triggers \"change\" events with .docs property', function (done) {\n      var replicatedDocs = [];\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: docs }, {}).then(function () {\n        var replication = db.replicate.to(dbs.remote);\n        replication.on('change', function (change) {\n          replicatedDocs = replicatedDocs.concat(change.docs);\n        });\n        return replication;\n      })\n      .then(function () {\n        replicatedDocs.sort(function (a, b) {\n          return a._id > b._id ? 1 : -1;\n        });\n        replicatedDocs.length.should.equal(3);\n        replicatedDocs[0]._id.should.equal('0');\n        replicatedDocs[1]._id.should.equal('1');\n        replicatedDocs[2]._id.should.equal('2');\n        done();\n      })\n      .catch(done);\n    });\n\n    it('#3543 replication with a ddoc filter', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      return remote.bulkDocs([{\n        _id: '_design/myddoc',\n        filters: {\n          myfilter: function (doc) {\n            return doc._id === 'a';\n          }.toString()\n        }\n      },\n        {_id: 'a'},\n        {_id: 'b'},\n        {_id: 'c'}\n      ]).then(function () {\n        return remote.replicate.to(db, {filter: 'myddoc/myfilter'});\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(1);\n        res.rows[0].id.should.equal('a');\n      });\n    });\n\n    it(\"#3578 replication with a ddoc filter w/ _deleted=true\", function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      return remote.bulkDocs([{\n        _id: '_design/myddoc',\n        filters: {\n          myfilter: function (doc) {\n            return doc._id === 'a' || doc._id === 'b';\n          }.toString()\n        }\n      },\n        {_id: 'a'},\n        {_id: 'b'},\n        {_id: 'c'}\n      ]).then(function () {\n        return remote.replicate.to(db, {filter: 'myddoc/myfilter'});\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(2);\n      }).then(function () {\n        return remote.get('a');\n      }).then(function (doc) {\n        doc._deleted = true;\n        return remote.put(doc);\n      }).then(function () {\n        return remote.replicate.to(db, {filter: 'myddoc/myfilter'});\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(1);\n      });\n    });\n\n    it(\"#3578 replication with a ddoc filter w/ remove()\", function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      return remote.bulkDocs([{\n        _id: '_design/myddoc',\n        filters: {\n          myfilter: function (doc) {\n            return doc._id === 'a' || doc._id === 'b';\n          }.toString()\n        }\n      },\n        {_id: 'a'},\n        {_id: 'b'},\n        {_id: 'c'}\n      ]).then(function () {\n        return remote.replicate.to(db, {filter: 'myddoc/myfilter'});\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(2);\n      }).then(function (){\n        return remote.get('a');\n      }).then(function (doc) {\n        return remote.remove(doc);\n      }).then(function () {\n        return remote.replicate.to(db, {filter: 'myddoc/myfilter'});\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (docs) {\n        docs.rows.should.have.length(1);\n      });\n    });\n\n    it(\"#2454 info() call breaks taskqueue\", function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      remote.bulkDocs(docs).then(function () {\n\n        var repl = db.replicate.from(remote, {live: true});\n        repl.on('complete', done.bind(null, null));\n\n        remote.info().then(function () {\n          repl.cancel();\n        }).catch(done);\n      }).catch(done);\n    });\n\n\n    it('4094 cant fetch server uuid', function (done) {\n      this.timeout(120000);\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var ajax = remote._ajax;\n\n      remote._ajax = function (opts, cb) {\n        var uri = testUtils.parseUri(opts.url);\n        if (uri.path === '/') {\n          cb(new Error('flunking you'));\n        } else {\n          ajax.apply(this, arguments);\n        }\n      };\n\n      var _complete = 0;\n      function complete() {\n        if (++_complete === 2) {\n          remote._ajax = ajax;\n          done();\n        }\n      }\n\n      var rep = db.replicate.from(remote, {live: true, retry: true})\n        .on('complete', complete);\n\n      var changes = db.changes({live: true}).on('change', function () {\n        rep.cancel();\n        changes.cancel();\n      }).on('complete', complete);\n\n      remote.post({a: 'doc'});\n    });\n\n    it('#4293 Triggers extra replication events', function (done) {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var hasChange = false;\n      function change() {\n        hasChange = true;\n      }\n\n      var _complete = 0;\n      function complete() {\n        if (++_complete === 2) {\n          hasChange.should.equal(false);\n          done();\n        }\n      }\n\n      function paused() {\n        // Because every setTimeout should be justified :)\n        // We are testing a negative, that there are no extra events\n        // triggered from our replication, cancelling the replication will\n        // cancel the event anyway so we wait a short period and give it time\n        // to fire (since there is nothing to wait deteministically for)\n        // Without the setTimeout this will pass, just less likely to catch\n        // the failing case\n        setTimeout(function () {\n          push.cancel();\n          pull.cancel();\n        }, 100);\n      }\n\n      var push = remote.replicate.from(db, {live: true})\n        .on('paused', paused)\n        .on('complete', complete);\n\n      var pull = db.replicate.from(remote, {live: true})\n        .on('change', change)\n        .on('complete', complete);\n\n      db.post({a: 'doc'});\n    });\n\n    it('Heartbeat gets passed', function (done) {\n\n      if (!(/http/.test(dbs.remote) && !/http/.test(dbs.name))) {\n        return done();\n      }\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var seenHeartBeat = false;\n      var ajax = remote._ajax;\n      remote._ajax = function (opts) {\n        if (/heartbeat/.test(opts.url)) {\n          seenHeartBeat = true;\n        }\n        ajax.apply(this, arguments);\n      };\n\n      return remote.bulkDocs([{foo: 'bar'}]).then(function () {\n        return db.replicate.from(remote, {heartbeat: 10});\n      }).then(function () {\n        seenHeartBeat.should.equal(true);\n        remote._ajax = ajax;\n        done();\n      });\n    });\n\n    it('Timeout gets passed', function (done) {\n\n      if (!(/http/.test(dbs.remote) && !/http/.test(dbs.name))) {\n        return done();\n      }\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var seenTimeout = false;\n      var ajax = remote._ajax;\n      remote._ajax = function (opts) {\n        // the http adapter takes 5s off the provided timeout\n        if (/timeout=15000/.test(opts.url)) {\n          seenTimeout = true;\n        }\n        ajax.apply(this, arguments);\n      };\n\n      return remote.bulkDocs([{foo: 'bar'}]).then(function () {\n        return db.replicate.from(remote, {timeout: 20000});\n      }).then(function () {\n        seenTimeout.should.equal(true);\n        remote._ajax = ajax;\n        done();\n      });\n    });\n\n    it('#5452 Cleanly fail with no unhandled promises on a bad connection', function (done) {\n\n      if (!/http/.test(dbs.remote)) {\n        return done();\n      }\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB('http://localhost:9382/does_not_exist', {skip_setup: true});\n\n      return remote.replicate.to(db, {\n          live: true,\n          since: 0,\n          timeout: 20000\n      }).catch(function () {\n          done();\n      });\n    });\n\n    it('#2426 doc_ids dont prevent replication', function () {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var writes = [];\n      for (var i = 0; i < 20; i++) {\n        writes.push(remote.put({_id: i + ''}));\n      }\n\n      return testUtils.Promise.all(writes).then(function () {\n        return db.sync(remote, {batch_size: 10, doc_ids: ['11', '12', '13']});\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (allDocs) {\n        allDocs.total_rows.should.equal(3);\n      });\n    });\n\n  });\n});\n\n// This test only needs to run for one configuration, and it slows stuff\n// down\ndownAdapters.map(function (){\n\n  describe('suite2 test.replication.js-down-test', function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    afterEach(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    it('replicate from down server test', function (done) {\n      var source = new PouchDB('http://infiniterequest.com', {\n        ajax: {timeout: 10}\n      });\n      var target = new PouchDB(dbs.name);\n      source.replicate.to(target, function (err) {\n        should.exist(err);\n        done();\n      });\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.replication_events.js",
    "content": "'use strict';\n\nvar adapters = [\n  ['local', 'http'],\n  ['http', 'http'],\n  ['http', 'local'],\n  ['local', 'local']\n];\n\nif ('saucelabs' in testUtils.params()) {\n  adapters = [['local', 'http'], ['http', 'local']];\n}\n\n\nadapters.forEach(function (adapters) {\n  var title = 'test.replication_events.js-' + adapters[0] + '-' + adapters[1];\n  describe('suite2 ' + title, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_repl_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n\n    it('#3852 Test basic starting empty', function (done) {\n\n      var db = new PouchDB(dbs.name);\n      var repl = db.replicate.to(dbs.remote, {retry: true, live: true});\n      var counter = 0;\n\n      repl.on('complete', function () { done(); });\n\n      repl.on('active', function () {\n        counter++;\n        if (!(counter === 2 || counter === 4)) {\n          done('active fired incorrectly');\n        }\n      });\n\n      repl.on('paused', function () {\n        counter++;\n        // We should receive a paused event when replication\n        // starts because there is nothing to replicate\n        if (counter === 1) {\n          db.bulkDocs([{_id: 'a'}, {_id: 'b'}]);\n        } else if (counter === 3) {\n          db.bulkDocs([{_id: 'c'}, {_id: 'd'}]);\n        } else if (counter === 5) {\n          repl.cancel();\n        } else {\n          done('paused fired incorrectly');\n        }\n      });\n    });\n\n\n    it('#3852 Test basic starting with docs', function (done) {\n\n      var db = new PouchDB(dbs.name);\n\n      db.bulkDocs([{_id: 'a'}, {_id: 'b'}]).then(function () {\n\n        var repl = db.replicate.to(dbs.remote, {retry: true, live: true});\n\n        var counter = 0;\n\n        repl.on('complete', function () { done(); });\n\n        repl.on('active', function () {\n          counter++;\n          if (!(counter === 1 || counter === 3 || counter === 5)) {\n            done('active fired incorrectly:' + counter);\n          }\n        });\n\n        repl.on('paused', function () {\n          counter++;\n          // We should receive a paused event when replication\n          // starts because there is nothing to replicate\n          if (counter === 2) {\n            db.bulkDocs([{_id: 'c'}, {_id: 'd'}]);\n          } else if (counter === 4) {\n            db.bulkDocs([{_id: 'e'}, {_id: 'f'}]);\n          } else if (counter === 6) {\n            repl.cancel();\n          } else {\n            done('paused fired incorrectly');\n          }\n        });\n      });\n    });\n\n    it('#3852 Test errors', function (done) {\n\n      if (!(/http/.test(dbs.remote) && !/http/.test(dbs.name))) {\n        // Only run test when remote is http and local is local\n        return done();\n      }\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var rejectAjax = true;\n      var ajax = remote._ajax;\n\n      remote._ajax = function (opts, cb) {\n        if (rejectAjax) {\n          cb(new Error('flunking you'));\n        } else {\n          ajax.apply(this, arguments);\n        }\n      };\n\n      db.bulkDocs([{_id: 'a'}, {_id: 'b'}]).then(function () {\n\n        var repl = db.replicate.to(remote, {\n          retry: true,\n          live: true,\n          back_off_function: function () { return 0; }\n        });\n\n        var counter = 0;\n\n        repl.on('complete', function () {\n          remote._ajax = ajax;\n          done();\n        });\n\n        repl.on('active', function () {\n          counter++;\n          if (counter === 2) {\n            // All good, wait for pause\n          } else if (counter === 4) {\n            // Lets start failing while active\n            rejectAjax = true;\n            db.bulkDocs([{_id: 'e'}, {_id: 'f'}]);\n          } else if (counter === 6) {\n            // All good, wait for pause\n          } else {\n            done('active fired incorrectly');\n          }\n        });\n\n        repl.on('paused', function (err) {\n          counter++;\n          // Replication starts with a paused(err) because ajax is\n          // failing\n          if (counter === 1) {\n            should.exist(err);\n            // Lets let the repliation start\n            rejectAjax = false;\n          } else if (counter === 3) {\n            db.bulkDocs([{_id: 'c'}, {_id: 'd'}]);\n          } else if (counter === 5) {\n            // We started failing while active, should have an error\n            // then we stop rejecting and should become active again\n            should.exist(err);\n            rejectAjax = false;\n          } else if (counter === 7) {\n            repl.cancel();\n          } else {\n            done('paused fired incorrectly');\n          }\n        });\n      }).catch(done);\n    });\n\n\n    // this test sets up a 2 way replication which initially transfers\n    // documents from a remote to a local database.\n    // At the same time, we insert documents locally - the changes\n    // should propagate to the remote database and then back to the\n    // local database via the live replications.\n    // Previously, this test resulted in 'change' events being\n    // generated for already-replicated documents. When PouchDB is working\n    // as expected, each remote document should be passed to a\n    // change event exactly once (though a change might contain multiple docs)\n    it('#4627 Test no duplicate changes in live replication', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var docId = -1;\n      var docsToGenerate = 10;\n      var lastChange = -1;\n      var firstReplication;\n      var secondReplication;\n      var completeCalls = 0;\n\n      function generateDocs(n) {\n        return Array.apply(null, new Array(n)).map(function () {\n          docId += 1;\n          return {\n            _id: docId.toString(),\n            foo: Math.random().toString()\n          };\n        });\n      }\n\n      function complete() {\n        completeCalls++;\n        if (completeCalls === 2) {\n          done();\n        }\n      }\n\n      remote.bulkDocs(generateDocs(docsToGenerate)).then(function () {\n        firstReplication = db.replicate.to(remote, {\n          live: true,\n          retry: true,\n          since: 0\n        })\n        .on('error', done)\n        .on('complete', complete);\n\n        secondReplication = remote.replicate.to(db, {\n          live: true,\n          retry: true,\n          since: 0\n        })\n        .on('error', done)\n        .on('complete', complete)\n        .on('change', function (feed) {\n          // attempt to detect changes loop\n          var ids = feed.docs.map(function (d) {\n            return parseInt(d._id, 10);\n          }).sort();\n\n          var firstChange = ids[0];\n          if (firstChange <= lastChange) {\n            done(new Error(\"Duplicate change events detected\"));\n          }\n\n          lastChange = ids[ids.length - 1];\n\n          if (lastChange === docsToGenerate - 1) {\n            // if a change loop doesn't occur within 2 seconds, assume success\n            setTimeout(function () {\n              // success!\n              // cancelling the replications to clean up and trigger\n              // the 'complete' event, which in turn ends the test\n              firstReplication.cancel();\n              secondReplication.cancel();\n            }, 2000);\n          }\n\n          // write doc to local db - should round trip in _changes\n          // but not generate a change event\n          db.bulkDocs(generateDocs(1));\n        });\n      }).catch(done);\n    });\n\n    describe('#5172 triggering error when replicating', function () {\n      var securedDbs = [], source, dest, previousAjax;\n      beforeEach(function () {\n        var err = {\n          'status': 401,\n          'name': 'unauthorized',\n          'message': 'You are not authorized to access this db.'\n        };\n\n        source = new PouchDB(dbs.name);\n        dest = new PouchDB(dbs.remote);\n\n        if (adapters[0] === 'http') {\n          previousAjax = source._ajax;\n          source._ajax = function (opts, cb) { cb(err); };\n          securedDbs.push(source);\n        }\n\n        if (adapters[1] === 'http') {\n          previousAjax = dest._ajax;\n          dest._ajax = function (opts, cb) { cb(err); };\n          securedDbs.push(dest);\n        }\n      });\n\n      afterEach(function () {\n        securedDbs.forEach(function (db) {\n          db._ajax = previousAjax;\n        });\n      });\n\n      function attachHandlers(replication) {\n        var invokedHandlers = [];\n        ['change', 'complete', 'paused', 'active', 'denied', 'error'].forEach(function (type) {\n          replication.on(type, function () {\n            invokedHandlers.push(type);\n          });\n        });\n        return invokedHandlers;\n      }\n\n      it('from or to a secured database, using live replication', function () {\n        if (adapters[0] === 'local' && adapters[1] === 'local') {\n          return;\n        }\n\n        var replication = source.replicate.to(dest, {live: true});\n        var invokedHandlers = attachHandlers(replication);\n\n        return replication.then(function () {\n          throw new Error('Resulting promise should be rejected');\n        }, function () {\n          invokedHandlers.should.be.eql(['error'], 'incorrect handler was invoked');\n        });\n      });\n\n      it('from or to a secured database, using live replication with checkpoint', function () {\n        if (adapters[0] === 'local' && adapters[1] === 'local') {\n          return;\n        }\n\n        var replication = source.replicate.to(dest, {live: true, since: 1234});\n        var invokedHandlers = attachHandlers(replication);\n\n        return replication.then(function () {\n          throw new Error('Resulting promise should be rejected');\n        }, function () {\n          invokedHandlers.should.be.eql(['error'], 'incorrect handler was invoked');\n        });\n      });\n\n      it('from or to a secured database, using live replication with retrying', function () {\n        if (adapters[0] === 'local' && adapters[1] === 'local') {\n          return;\n        }\n\n        var replication = source.replicate.to(dest, {live: true, retry: true});\n        var invokedHandlers = attachHandlers(replication);\n\n        return replication.then(function () {\n          throw new Error('Resulting promise should be rejected');\n        }, function () {\n          invokedHandlers.should.be.eql(['error'], 'incorrect handler was invoked');\n        });\n      });\n\n      it('from or to a secured database, using one-shot replication', function () {\n        if (adapters[0] === 'local' && adapters[1] === 'local') {\n          return;\n        }\n\n        var replication = source.replicate.to(dest);\n        var invokedHandlers = attachHandlers(replication);\n\n        return replication.then(function () {\n          throw new Error('Resulting promise should be rejected');\n        }, function () {\n          invokedHandlers.should.be.eql(['error'], 'incorrect handler was invoked');\n        });\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.reserved.js",
    "content": "'use strict';\n\nvar adapters = [\n  ['local', 'http'],\n  ['http', 'http'],\n  ['http', 'local'],\n  ['local', 'local']\n];\n\nadapters.forEach(function (adapters) {\n  describe('test.reserved.js-' + adapters[0] + '-' + adapters[1], function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_repl_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    it('test docs with reserved javascript ids', function () {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      return db.bulkDocs([\n        {_id: 'constructor'},\n        {_id: 'toString'},\n        {_id: 'valueOf'},\n        {\n          _id: '_design/all',\n          views: {\n            all: {\n              map: function (doc) {\n                emit(doc._id);\n              }.toString()\n            }\n          }\n        }\n      ]).then(function () {\n        return db.allDocs({key: 'constructor'});\n      }).then(function (res) {\n        res.rows.should.have.length(1, 'allDocs with key');\n        return db.allDocs({keys: ['constructor']});\n      }).then(function (res) {\n        res.rows.should.have.length(1, 'allDocs with keys');\n        return db.allDocs();\n      }).then(function (res) {\n        res.rows.should.have.length(4, 'allDocs empty opts');\n        if (!db.query) {\n          return testUtils.Promise.resolve();\n        }\n        return db.query('all/all', {key: 'constructor'});\n      }).then(function (res) {\n        if (!db.query) {\n          return testUtils.Promise.resolve();\n        }\n        res.rows.should.have.length(1, 'query with key');\n        return db.query('all/all', {keys: ['constructor']});\n      }).then(function (res) {\n        if (db.query) {\n          res.rows.should.have.length(1, 'query with keys');\n        }\n        return new testUtils.Promise(function (resolve, reject) {\n          db.replicate.to(remote).on('complete', resolve).on('error', reject);\n        });\n      });\n    });\n\n    it('can create db with reserved name', function () {\n      var db = new PouchDB('constructor');\n      return db.info().then(function () {\n        return db.destroy();\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.retry.js",
    "content": "'use strict';\n\nvar adapters = [\n  ['local', 'http'],\n  ['http', 'http'],\n  ['http', 'local'],\n  ['local', 'local']\n];\n\nif ('saucelabs' in testUtils.params()) {\n  adapters = [['local', 'http'], ['http', 'local']];\n}\n\nadapters.forEach(function (adapters) {\n  var suiteName = 'test.retry.js-' + adapters[0] + '-' + adapters[1];\n  describe(suiteName, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_repl_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    it('retry stuff', function (done) {\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n      var allDocs = remote.allDocs;\n\n      // Reject attempting to write 'foo' 3 times, then let it succeed\n      var i = 0;\n      remote.allDocs = function (opts) {\n        if (opts.keys[0] === 'foo') {\n          if (++i !== 3) {\n            return Promise.reject(new Error('flunking you'));\n          }\n        }\n        return allDocs.apply(remote, arguments);\n      };\n\n      var db = new PouchDB(dbs.name);\n      var rep = db.replicate.from(remote, {\n        live: true,\n        retry: true,\n        back_off_function: function () { return 0; }\n      });\n\n      var paused = 0;\n      rep.on('paused', function (e) {\n        ++paused;\n        // The first paused event is the replication up to date\n        // and waiting on changes (no error)\n        if (paused === 1) {\n          should.not.exist(e);\n          return remote.put({_id: 'foo'}).then(function () {\n            return remote.put({_id: 'bar'});\n          });\n        }\n        // Second paused event is due to failed writes, should\n        // have an error\n        if (paused === 2) {\n          should.exist(e);\n        }\n      });\n\n      var active = 0;\n      rep.on('active', function () {\n        ++active;\n      });\n\n      rep.on('complete', function () {\n        active.should.be.at.least(2);\n        paused.should.be.at.least(2);\n        done();\n      });\n\n      rep.catch(done);\n\n      var numChanges = 0;\n      rep.on('change', function (c) {\n        numChanges += c.docs_written;\n        if (numChanges === 3) {\n          rep.cancel();\n        }\n      });\n\n      remote.put({_id: 'hazaa'});\n    });\n\n    it('#3687 active event only fired once...', function (done) {\n\n      var remote = new PouchDB(dbs.remote);\n      var db = new PouchDB(dbs.name);\n      var rep = db.replicate.from(remote, {\n        live: true,\n        retry: true,\n        back_off_function: function () { return 0; }\n      });\n\n      var paused = 0;\n      var error;\n      rep.on('paused', function (e) {\n        ++paused;\n        // The first paused event is the replication up to date\n        // and waiting on changes (no error)\n        try {\n          should.not.exist(e);\n        } catch (err) {\n          error = err;\n          rep.cancel();\n        }\n        if (paused === 1) {\n          return remote.put({_id: 'foo'});\n        } else {\n          rep.cancel();\n        }\n      });\n\n      var active = 0;\n      rep.on('active', function () {\n        ++active;\n      });\n\n      var numChanges = 0;\n      rep.on('change', function () {\n        ++numChanges;\n      });\n\n      rep.on('complete', function () {\n        try {\n          active.should.be.within(1, 2);\n          paused.should.equal(2);\n          numChanges.should.equal(2);\n          done(error);\n        } catch (err) {\n          done(err);\n        }\n      });\n\n      rep.catch(done);\n\n      remote.put({_id: 'hazaa'});\n    });\n\n    it('source doesn\\'t leak \"destroyed\" event', function () {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      var origGet = remote.get;\n      var i = 0;\n      remote.get = function () {\n        // Reject three times, every 5th time\n        if ((++i % 5 === 0) && i <= 15) {\n          return Promise.reject(new Error('flunking you'));\n        }\n        return origGet.apply(remote, arguments);\n      };\n\n      var rep = db.replicate.from(remote, {\n        live: true,\n        retry: true,\n        back_off_function: function () { return 0; }\n      });\n\n      var numDocsToWrite = 10;\n\n      return remote.post({}).then(function () {\n        var originalNumListeners;\n        var posted = 0;\n\n        return new Promise(function (resolve, reject) {\n\n          var error;\n          function cleanup(err) {\n            if (err) {\n              error = err;\n            }\n            rep.cancel();\n          }\n          function finish() {\n            if (error) {\n              return reject(error);\n            }\n            resolve();\n          }\n\n          rep.on('complete', finish).on('error', cleanup);\n          rep.on('change', function () {\n            if (++posted < numDocsToWrite) {\n              remote.post({}).catch(cleanup);\n            } else {\n              db.info().then(function (info) {\n                if (info.doc_count === numDocsToWrite) {\n                  cleanup();\n                }\n              }).catch(cleanup);\n            }\n\n            try {\n              var numListeners = db.listeners('destroyed').length;\n              if (typeof originalNumListeners !== 'number') {\n                originalNumListeners = numListeners;\n              } else {\n                numListeners.should.equal(originalNumListeners,\n                  'numListeners should never increase');\n              }\n            } catch (err) {\n              cleanup(err);\n            }\n          });\n        });\n      });\n    });\n\n    it('target doesn\\'t leak \"destroyed\" event', function () {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      var origGet = remote.get;\n      var i = 0;\n      remote.get = function () {\n        // Reject three times, every 5th time\n        if ((++i % 5 === 0) && i <= 15) {\n          return Promise.reject(new Error('flunking you'));\n        }\n        return origGet.apply(remote, arguments);\n      };\n\n      var rep = db.replicate.from(remote, {\n        live: true,\n        retry: true,\n        back_off_function: function () { return 0; }\n      });\n\n      var numDocsToWrite = 10;\n\n      return remote.post({}).then(function () {\n        var originalNumListeners;\n        var posted = 0;\n\n        return new Promise(function (resolve, reject) {\n\n          var error;\n          function cleanup(err) {\n            if (err) {\n              error = err;\n            }\n            rep.cancel();\n          }\n          function finish() {\n            if (error) {\n              return reject(error);\n            }\n            resolve();\n          }\n\n          rep.on('complete', finish).on('error', cleanup);\n          rep.on('change', function () {\n            if (++posted < numDocsToWrite) {\n              remote.post({}).catch(cleanup);\n            } else {\n              db.info().then(function (info) {\n                if (info.doc_count === numDocsToWrite) {\n                  cleanup();\n                }\n              }).catch(cleanup);\n            }\n\n            try {\n              var numListeners = remote.listeners('destroyed').length;\n              if (typeof originalNumListeners !== 'number') {\n                originalNumListeners = numListeners;\n              } else {\n                // special case for \"destroy\" - because there are\n                // two Changes() objects for local databases,\n                // there can briefly be one extra listener or one\n                // fewer listener. The point of this test is to ensure\n                // that the listeners don't grow out of control.\n                numListeners.should.be.within(\n                  originalNumListeners - 1,\n                  originalNumListeners + 1,\n                  'numListeners should never increase by +1/-1');\n              }\n            } catch (err) {\n              cleanup(err);\n            }\n          });\n        });\n      });\n    });\n\n    [\n      'complete', 'error', 'paused', 'active',\n      'change', 'cancel'\n    ].forEach(function (event) {\n      it('returnValue doesn\\'t leak \"' + event + '\" event', function () {\n\n        var db = new PouchDB(dbs.name);\n        var remote = new PouchDB(dbs.remote);\n        var Promise = testUtils.Promise;\n\n        var origGet = remote.get;\n        var i = 0;\n        remote.get = function () {\n          // Reject three times, every 5th time\n          if ((++i % 5 === 0) && i <= 15) {\n            return Promise.reject(new Error('flunking you'));\n          }\n          return origGet.apply(remote, arguments);\n        };\n\n        var rep = db.replicate.from(remote, {\n          live: true,\n          retry: true,\n          back_off_function: function () { return 0; }\n        });\n\n        var numDocsToWrite = 10;\n\n        return remote.post({}).then(function () {\n          var originalNumListeners;\n          var posted = 0;\n\n          return new Promise(function (resolve, reject) {\n\n            var error;\n            function cleanup(err) {\n              if (err) {\n                error = err;\n              }\n              rep.cancel();\n            }\n            function finish() {\n              if (error) {\n                return reject(error);\n              }\n              resolve();\n            }\n\n            rep.on('complete', finish).on('error', cleanup);\n            rep.on('change', function () {\n              if (++posted < numDocsToWrite) {\n                remote.post({}).catch(cleanup);\n              } else {\n                db.info().then(function (info) {\n                  if (info.doc_count === numDocsToWrite) {\n                    cleanup();\n                  }\n                }).catch(cleanup);\n              }\n\n              try {\n                var numListeners = rep.listeners(event).length;\n                if (typeof originalNumListeners !== 'number') {\n                  originalNumListeners = numListeners;\n                } else {\n                  if(event === \"paused\") {\n                    Math.abs(numListeners -  originalNumListeners).should.be.at.most(1);\n                  } else {\n                    Math.abs(numListeners -  originalNumListeners).should.be.eql(0);\n                  }\n                }\n              } catch (err) {\n                cleanup(err);\n              }\n            });\n          });\n        });\n      });\n    });\n\n    it('returnValue doesn\\'t leak \"change\" event w/ onChange', function () {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      var origGet = remote.get;\n      var i = 0;\n      remote.get = function () {\n        // Reject three times, every 5th time\n        if ((++i % 5 === 0) && i <= 15) {\n          return Promise.reject(new Error('flunking you'));\n        }\n        return origGet.apply(remote, arguments);\n      };\n\n      var rep = db.replicate.from(remote, {\n        live: true,\n        retry: true,\n        back_off_function: function () { return 0; }\n      }).on('change', function () {});\n\n      var numDocsToWrite = 10;\n\n      return remote.post({}).then(function () {\n        var originalNumListeners;\n        var posted = 0;\n\n        return new Promise(function (resolve, reject) {\n\n          var error;\n          function cleanup(err) {\n            if (err) {\n              error = err;\n            }\n            rep.cancel();\n          }\n          function finish() {\n            if (error) {\n              return reject(error);\n            }\n            resolve();\n          }\n\n          rep.on('complete', finish).on('error', cleanup);\n          rep.on('change', function () {\n            if (++posted < numDocsToWrite) {\n              remote.post({}).catch(cleanup);\n            } else {\n              db.info().then(function (info) {\n                if (info.doc_count === numDocsToWrite) {\n                  cleanup();\n                }\n              }).catch(cleanup);\n            }\n\n            try {\n              var numListeners = rep.listeners('change').length;\n              if (typeof originalNumListeners !== 'number') {\n                originalNumListeners = numListeners;\n              } else {\n                numListeners.should.equal(originalNumListeners,\n                  'numListeners should never increase');\n              }\n            } catch (err) {\n              cleanup(err);\n            }\n          });\n        });\n      });\n    });\n\n    it('retry many times, no leaks on any events', function () {\n      this.timeout(200000);\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var Promise = testUtils.Promise;\n\n      var flunked = 0;\n      var origGet = remote.get;\n      var i = 0;\n      remote.get = function () {\n        // Reject five times, every 5th time\n        if ((++i % 5 === 0) && i <= 25) {\n          flunked++;\n          return Promise.reject(new Error('flunking you'));\n        }\n        return origGet.apply(remote, arguments);\n      };\n\n      var rep = db.replicate.from(remote, {\n        live: true,\n        retry: true,\n        back_off_function: function () { return 0; }\n      });\n\n      var active = 0;\n      var paused = 0;\n      var numDocsToWrite = 50;\n\n      return remote.post({}).then(function () {\n        var originalNumListeners;\n        var posted = 0;\n\n        return new Promise(function (resolve, reject) {\n\n          var error;\n          function cleanup(err) {\n            if (err) {\n              error = err;\n            }\n            rep.cancel();\n          }\n          function finish() {\n            if (error) {\n              return reject(error);\n            }\n            resolve();\n          }\n          function getTotalListeners() {\n            var events = ['complete', 'error', 'paused', 'active',\n              'change', 'cancel'];\n            return events.map(function (event) {\n              return rep.listeners(event).length;\n            }).reduce(function (a, b) {return a + b; }, 0);\n          }\n\n          rep.on('complete', finish)\n            .on('error', cleanup)\n            .on('active', function () {\n            active++;\n          }).on('paused', function () {\n            paused++;\n          }).on('change', function () {\n            if (++posted < numDocsToWrite) {\n              remote.post({}).catch(cleanup);\n            } else {\n              db.info().then(function (info) {\n                if (info.doc_count === numDocsToWrite) {\n                  cleanup();\n                }\n              }).catch(cleanup);\n            }\n\n            try {\n              var numListeners = getTotalListeners();\n              if (typeof originalNumListeners !== 'number') {\n                originalNumListeners = numListeners;\n              } else {\n                Math.abs(numListeners -  originalNumListeners).should.be.at.most(1);\n              }\n            } catch (err) {\n              cleanup(err);\n            }\n          });\n        });\n      }).then(function () {\n        flunked.should.equal(5);\n        active.should.be.at.least(5);\n        paused.should.be.at.least(5);\n      });\n    });\n\n\n    it('4049 retry while starting offline', function (done) {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var ajax = remote._ajax;\n      var _called = 0;\n      var startFailing = false;\n\n      remote._ajax = function (opts, cb) {\n        if (!startFailing || ++_called > 3) {\n          ajax.apply(this, arguments);\n        } else {\n          cb(new Error('flunking you'));\n        }\n      };\n\n      remote.post({a: 'doc'}).then(function () {\n        startFailing = true;\n        var rep = db.replicate.from(remote, {live: true, retry: true})\n          .on('change', function () { rep.cancel(); });\n\n        rep.on('complete', function () {\n          remote._ajax = ajax;\n          done();\n        });\n      });\n\n    });\n\n    it('#5157 replicate many docs with live+retry', function () {\n      var Promise = testUtils.Promise;\n      var numDocs = 512; // uneven number\n      var docs = [];\n      for (var i = 0; i < numDocs; i++) {\n        // mix of generation-1 and generation-2 docs\n        if (i % 2 === 0) {\n          docs.push({\n            _id: testUtils.uuid(),\n            _rev: '1-x',\n            _revisions: { start: 1, ids: ['x'] }\n          });\n        } else {\n          docs.push({\n            _id: testUtils.uuid(),\n            _rev: '2-x',\n            _revisions: { start: 2, ids: ['x', 'y'] }\n          });\n        }\n      }\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      return db.bulkDocs({\n        docs: docs,\n        new_edits: false\n      }).then(function () {\n        function replicatePromise(fromDB, toDB) {\n          return new Promise(function (resolve, reject) {\n            var replication = fromDB.replicate.to(toDB, {\n              live: true,\n              retry: true,\n              batches_limit: 10,\n              batch_size: 20\n            }).on('paused', function (err) {\n              if (!err) {\n                replication.cancel();\n              }\n            }).on('complete', resolve)\n              .on('error', reject);\n          });\n        }\n        return Promise.all([\n          replicatePromise(db, remote),\n          replicatePromise(remote, db)\n        ]);\n      }).then(function () {\n        return remote.info();\n      }).then(function (info) {\n        info.doc_count.should.equal(numDocs);\n      });\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.revs_diff.js",
    "content": "'use strict';\n\nvar adapters = ['http', 'local'];\n\nadapters.forEach(function (adapter) {\n  describe('test.revs_diff.js-' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    afterEach(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n\n    it('Test revs diff', function (done) {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var revs = [];\n      db.post({\n        test: 'somestuff',\n        _id: 'somestuff'\n      }, function (err, info) {\n        revs.push(info.rev);\n        db.put({\n          _id: info.id,\n          _rev: info.rev,\n          another: 'test'\n        }, function (err, info2) {\n          revs.push(info2.rev);\n          db.revsDiff({ 'somestuff': revs }, function (err, results) {\n            results.should.not.include.keys('somestuff');\n            revs.push('2-randomid');\n            db.revsDiff({ 'somestuff': revs }, function (err, results) {\n              results.should.include.keys('somestuff');\n              results.somestuff.missing.should.have.length(1);\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Test revs diff with opts object', function (done) {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var revs = [];\n      db.post({\n        test: 'somestuff',\n        _id: 'somestuff'\n      }, function (err, info) {\n        revs.push(info.rev);\n        db.put({\n          _id: info.id,\n          _rev: info.rev,\n          another: 'test'\n        }, function (err, info2) {\n          revs.push(info2.rev);\n          db.revsDiff({ 'somestuff': revs }, {}, function (err, results) {\n            results.should.not.include.keys('somestuff');\n            revs.push('2-randomid');\n            db.revsDiff({ 'somestuff': revs }, function (err, results) {\n              results.should.include.keys('somestuff');\n              results.somestuff.missing.should.have.length(1);\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Missing docs should be returned with all revisions', function (done) {\n      var db = new PouchDB(dbs.name);\n      var revs = ['1-a', '2-a', '2-b'];\n      db.revsDiff({'foo': revs }, function (err, results) {\n        results.should.include.keys('foo');\n        results.foo.missing.should.deep.equal(revs, 'listed all revs');\n        done();\n      });\n    });\n\n    it('Conflicting revisions that are available', function (done) {\n      var doc = {_id: '939', _rev: '1-a'};\n      function createConflicts(db, callback) {\n        db.put(doc, { new_edits: false }, function () {\n          testUtils.putAfter(db, {\n            _id: '939',\n            _rev: '2-a'\n          }, '1-a', function () {\n            testUtils.putAfter(db, {\n              _id: '939',\n              _rev: '2-b'\n            }, '1-a', callback);\n          });\n        });\n      }\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      createConflicts(db, function () {\n        db.revsDiff({'939': ['1-a', '2-a', '2-b']}, function (err, results) {\n          results.should.not.include.keys('939');\n          done();\n        });\n      });\n    });\n\n    it('Deleted revisions that are available', function (done) {\n      function createDeletedRevision(db, callback) {\n        db.put({\n          _id: '935',\n          _rev: '1-a'\n        }, { new_edits: false }, function () {\n          testUtils.putAfter(db, {\n            _id: '935',\n            _rev: '2-a',\n            _deleted: true\n          }, '1-a', callback);\n        });\n      }\n      var db = new PouchDB(dbs.name);\n      createDeletedRevision(db, function () {\n        db.revsDiff({'935': ['1-a', '2-a']}, function (err, results) {\n          results.should.not.include.keys('939');\n          done();\n        });\n      });\n    });\n\n    it('Revs diff with empty revs', function () {\n      var db = new PouchDB(dbs.name);\n      return db.revsDiff({}).then(function (res) {\n        should.exist(res);\n      });\n    });\n\n    it('Test revs diff with reserved ID', function (done) {\n      var db = new PouchDB(dbs.name, {auto_compaction: false});\n      var revs = [];\n      db.post({\n        test: 'constructor',\n        _id: 'constructor'\n      }, function (err, info) {\n        revs.push(info.rev);\n        db.put({\n          _id: info.id,\n          _rev: info.rev,\n          another: 'test'\n        }, function (err, info2) {\n          revs.push(info2.rev);\n          db.revsDiff({ 'constructor': revs }, function (err, results) {\n            results.should.not.include.keys('constructor');\n            revs.push('2-randomid');\n            db.revsDiff({ 'constructor': revs }, function (err, results) {\n              results.should.include.keys('constructor');\n              results.constructor.missing.should.have.length(1);\n              done();\n            });\n          });\n        });\n      });\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.slash_id.js",
    "content": "'use strict';\n\nvar adapters = ['local', 'http'];\nvar repl_adapters = [\n  ['local', 'http'],\n  ['http', 'http'],\n  ['http', 'local'],\n  ['local', 'local']\n];\n\nadapters.forEach(function (adapter) {\n  describe('test.slash_ids.js-' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n\n    it('Insert a doc, putAttachment and allDocs', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docId = 'doc/with/slashes';\n      var attachmentId = 'attachment/with/slashes';\n      var blobData = 'attachment content';\n      var blob = testUtils.makeBlob(blobData);\n      var doc = {_id: docId, test: true};\n      db.put(doc, function (err, info) {\n        should.not.exist(err, 'saved doc');\n        info.id.should.equal('doc/with/slashes', 'id is the same as inserted');\n        db.putAttachment(docId, attachmentId, info.rev, blob, 'text/plain',\n                         function () {\n          db.getAttachment(docId, attachmentId, function (err, res) {\n            testUtils.readBlob(res, function () {\n              db.get(docId, function (err, res) {\n                res._id.should.equal(docId);\n                res._attachments.should.include.keys(attachmentId);\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('BulkDocs and changes', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {_id: 'part/doc1', int: 1},\n        {_id: 'part/doc2', int: 2, _attachments: {\n          'attachment/with/slash': {\n            content_type: 'text/plain',\n            data: 'c29tZSBkYXRh'\n          }\n        }},\n        {_id: 'part/doc3', int: 3}\n      ];\n      db.bulkDocs({ docs: docs }, function (err, res) {\n        for (var i = 0; i < 3; i++) {\n          res[i].ok.should.equal(true, 'correctly inserted ' + docs[i]._id);\n        }\n        db.allDocs({\n          include_docs: true,\n          attachments: true\n        }, function (err, res) {\n          res.rows.sort(function (a, b) {\n            return a.doc.int - b.doc.int;\n          });\n          for (var i = 0; i < 3; i++) {\n            res.rows[i].doc._id.should\n              .equal(docs[i]._id, '(allDocs) correctly inserted ' +\n                     docs[i]._id);\n          }\n          res.rows[1].doc._attachments.should.include\n            .keys('attachment/with/slash');\n          db.changes().on('complete', function (res) {\n            res.results.sort(function (a, b) {\n              return a.id.localeCompare(b.id);\n            });\n            for (var i = 0; i < 3; i++) {\n              res.results[i].id.should\n                .equal(docs[i]._id, 'correctly inserted');\n            }\n            done();\n          }).on('error', done);\n        });\n      });\n    });\n\n  });\n});\n\n\nrepl_adapters.forEach(function (adapters) {\n  describe('test.slash_ids.js-' + adapters[0] + '-' + adapters[1], function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'test_slash_ids');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_slash_ids_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    afterEach(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n\n    it('Attachments replicate', function (done) {\n      var binAttDoc = {\n        _id: 'bin_doc/with/slash',\n        _attachments: {\n          'foo/with/slash.txt': {\n            content_type: 'text/plain',\n            data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ='\n          }\n        }\n      };\n      var docs1 = [\n        binAttDoc,\n        {_id: '0', integer: 0},\n        {_id: '1', integer: 1},\n        {_id: '2', integer: 2},\n        {_id: '3', integer: 3}\n      ];\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      remote.bulkDocs({ docs: docs1 }, function () {\n        db.replicate.from(remote, function () {\n          db.get('bin_doc/with/slash', { attachments: true },\n            function (err, doc) {\n            binAttDoc._attachments['foo/with/slash.txt'].data.should\n              .equal(doc._attachments['foo/with/slash.txt'].data);\n            done();\n          });\n        });\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.sync.js",
    "content": "'use strict';\n\nvar adapters = [\n  ['local', 'http'],\n  ['http', 'http'],\n  ['http', 'local'],\n  ['local', 'local']\n];\n\nif ('saucelabs' in testUtils.params()) {\n  adapters = [['local', 'http'], ['http', 'local']];\n}\n\nadapters.forEach(function (adapters) {\n  describe('test.sync.js-' + adapters[0] + '-' + adapters[1], function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_repl_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    it('PouchDB.sync event', function (done) {\n      var doc1 = {\n          _id: 'adoc',\n          foo: 'bar'\n        };\n      var doc2 = {\n          _id: 'anotherdoc',\n          foo: 'baz'\n        };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.put(doc1, function () {\n        remote.put(doc2, function () {\n          PouchDB.sync(db, remote).on('complete', function (result) {\n            result.pull.ok.should.equal(true);\n            result.pull.docs_read.should.equal(1);\n            result.pull.docs_written.should.equal(1);\n            result.pull.errors.should.have.length(0);\n            done();\n          });\n        });\n      });\n    });\n\n    it('sync throws errors in promise', function () {\n      var doc1 = {\n        _id: 'adoc',\n        foo: 'bar'\n      };\n      var doc2 = {\n        _id: 'anotherdoc',\n        foo: 'baz'\n      };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      // intentionally throw an error during replication\n      remote.allDocs = function () {\n        return testUtils.Promise.reject(new Error('flunking you'));\n      };\n\n      return db.put(doc1).then(function () {\n        return remote.put(doc2);\n      }).then(function () {\n        return db.sync(remote);\n      }).then(function () {\n        throw new Error('expected an error');\n      }, function (err) {\n        should.exist(err);\n        err.should.be.instanceof(Error);\n      });\n    });\n\n    it('sync throws errors in promise catch()', function () {\n      var doc1 = {\n        _id: 'adoc',\n        foo: 'bar'\n      };\n      var doc2 = {\n        _id: 'anotherdoc',\n        foo: 'baz'\n      };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      // intentionally throw an error during replication\n      remote.allDocs = function () {\n        return testUtils.Promise.reject(new Error('flunking you'));\n      };\n\n      var landedInCatch = false;\n      return db.put(doc1).then(function () {\n        return remote.put(doc2);\n      }).then(function () {\n        return db.sync(remote).catch(function (err) {\n          landedInCatch = true;\n          should.exist(err);\n          err.should.be.instanceof(Error);\n        });\n      }).then(function () {\n        if (!landedInCatch) {\n          throw new Error('expected catch(), not then()');\n        }\n      });\n    });\n\n    it('sync throws errors in error listener', function () {\n      var doc1 = {\n        _id: 'adoc',\n        foo: 'bar'\n      };\n      var doc2 = {\n        _id: 'anotherdoc',\n        foo: 'baz'\n      };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      // intentionally throw an error during replication\n      remote.allDocs = function () {\n        return testUtils.Promise.reject(new Error('flunking you'));\n      };\n\n      return db.put(doc1).then(function () {\n        return remote.put(doc2);\n      }).then(function () {\n        return new testUtils.Promise(function (resolve) {\n          db.sync(remote).on('error', resolve);\n        });\n      }).then(function (err) {\n        should.exist(err);\n        err.should.be.instanceof(Error);\n      });\n    });\n\n    it('sync throws errors in callback', function () {\n      var doc1 = {\n        _id: 'adoc',\n        foo: 'bar'\n      };\n      var doc2 = {\n        _id: 'anotherdoc',\n        foo: 'baz'\n      };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      // intentionally throw an error during replication\n      remote.allDocs = function () {\n        return testUtils.Promise.reject(new Error('flunking you'));\n      };\n\n      return db.put(doc1).then(function () {\n        return remote.put(doc2);\n      }).then(function () {\n        return new testUtils.Promise(function (resolve) {\n          db.sync(remote, function (err) {\n            resolve(err);\n          }).catch(function () {\n            // avoid annoying chrome warning about uncaught (in promise)\n          });\n        });\n      }).then(function (err) {\n        should.exist(err);\n        err.should.be.instanceof(Error);\n      });\n    });\n\n    it('sync returns result in callback', function () {\n      var doc1 = {\n        _id: 'adoc',\n        foo: 'bar'\n      };\n      var doc2 = {\n        _id: 'anotherdoc',\n        foo: 'baz'\n      };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      return db.put(doc1).then(function () {\n        return remote.put(doc2);\n      }).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          db.sync(remote, function (err, res) {\n            if (err) {\n              return reject(err);\n            }\n            resolve(res);\n          });\n        });\n      }).then(function (res) {\n        should.exist(res);\n      });\n    });\n\n    it('PouchDB.sync callback', function (done) {\n      var doc1 = {\n          _id: 'adoc',\n          foo: 'bar'\n        };\n      var doc2 = {\n          _id: 'anotherdoc',\n          foo: 'baz'\n        };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.put(doc1, function () {\n        remote.put(doc2, function () {\n          PouchDB.sync(db, remote, function (err, result) {\n            result.pull.ok.should.equal(true);\n            result.pull.docs_read.should.equal(1);\n            result.pull.docs_written.should.equal(1);\n            result.pull.errors.should.have.length(0);\n            done();\n          });\n        });\n      });\n    });\n\n    it('PouchDB.sync promise', function (done) {\n      var doc1 = {\n          _id: 'adoc',\n          foo: 'bar'\n        };\n      var doc2 = {\n          _id: 'anotherdoc',\n          foo: 'baz'\n        };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.put(doc1).then(function () {\n        return remote.put(doc2);\n      }).then(function () {\n        return PouchDB.sync(db, remote);\n      }).then(function (result) {\n        result.pull.ok.should.equal(true);\n        result.pull.docs_read.should.equal(1);\n        result.pull.docs_written.should.equal(1);\n        result.pull.errors.should.have.length(0);\n        done();\n      }, done);\n    });\n\n    it('db.sync event', function (done) {\n      var doc1 = {\n          _id: 'adoc',\n          foo: 'bar'\n        };\n      var doc2 = {\n          _id: 'anotherdoc',\n          foo: 'baz'\n        };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.put(doc1, function () {\n        remote.put(doc2, function () {\n          db.sync(remote).on('complete', function (result) {\n            result.pull.ok.should.equal(true);\n            result.pull.docs_read.should.equal(1);\n            result.pull.docs_written.should.equal(1);\n            result.pull.errors.should.have.length(0);\n            done();\n          });\n        });\n      });\n    });\n\n    it('db.sync callback', function (done) {\n      var doc1 = {\n          _id: 'adoc',\n          foo: 'bar'\n        };\n      var doc2 = {\n          _id: 'anotherdoc',\n          foo: 'baz'\n        };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.put(doc1, function () {\n        remote.put(doc2, function () {\n          db.sync(remote, function (err, result) {\n            result.pull.ok.should.equal(true);\n            result.pull.docs_read.should.equal(1);\n            result.pull.docs_written.should.equal(1);\n            result.pull.errors.should.have.length(0);\n            done();\n          });\n        });\n      });\n    });\n\n    it('db.sync promise', function (done) {\n      var doc1 = {\n          _id: 'adoc',\n          foo: 'bar'\n        };\n      var doc2 = {\n          _id: 'anotherdoc',\n          foo: 'baz'\n        };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.put(doc1).then(function () {\n        return remote.put(doc2);\n      }).then(function () {\n        return db.sync(remote);\n      }).then(function (result) {\n        result.pull.ok.should.equal(true);\n        result.pull.docs_read.should.equal(1);\n        result.pull.docs_written.should.equal(1);\n        result.pull.errors.should.have.length(0);\n        done();\n      }, done);\n    });\n\n    it.skip('Test sync cancel', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var replications = db.sync(remote).on('complete', function () {\n        done();\n      });\n      should.exist(replications);\n      replications.cancel();\n    });\n\n    it.skip('Test sync cancel called twice', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var replications = db.sync(remote).on('complete', function () {\n        setTimeout(done); // let cancel() get called twice before finishing\n      });\n      should.exist(replications);\n      replications.cancel();\n      replications.cancel();\n    });\n\n    it('Test syncing two endpoints (issue 838)', function () {\n      var doc1 = {\n          _id: 'adoc',\n          foo: 'bar'\n        };\n      var doc2 = {\n          _id: 'anotherdoc',\n          foo: 'baz'\n        };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      return db.put(doc1).then(function () {\n        return remote.put(doc2);\n      }).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          db.sync(remote).on('complete', resolve).on('error', reject);\n        });\n      }).then(function () {\n        // Replication isn't finished until onComplete has been called twice\n        return db.allDocs().then(function (res1) {\n          return remote.allDocs().then(function (res2) {\n            res1.total_rows.should.equal(res2.total_rows);\n          });\n        });\n      });\n    });\n\n    it.skip('3894 re-sync after immediate cancel', function () {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      db.setMaxListeners(100);\n      remote.setMaxListeners(100);\n\n      var promise = testUtils.Promise.resolve();\n\n      function syncThenCancel() {\n        promise = promise.then(function () {\n          return new testUtils.Promise(function (resolve, reject) {\n            db = new PouchDB(dbs.name);\n            remote = new PouchDB(dbs.remote);\n            var sync = db.sync(remote)\n              .on('error', reject)\n              .on('complete', resolve);\n            sync.cancel();\n          }).then(function () {\n            return testUtils.Promise.all([\n              db.destroy(),\n              remote.destroy()\n            ]);\n          });\n        });\n      }\n\n      for (var i = 0; i < 5; i++) {\n        syncThenCancel();\n      }\n\n      return promise;\n    });\n\n    it('Syncing should stop if one replication fails (issue 838)',\n      function (done) {\n      var doc1 = {_id: 'adoc', foo: 'bar'};\n      var doc2 = {_id: 'anotherdoc', foo: 'baz'};\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var replications = db.sync(remote, {live: true});\n\n      replications.on('complete', function () {\n        remote.put(doc2, function () {\n          changes.should.equal(1);\n          done();\n        });\n      });\n\n      var changes = 0;\n      replications.on('change', function () {\n        changes++;\n        if (changes === 1) {\n          replications.pull.cancel();\n        }\n      });\n      db.put(doc1);\n    });\n\n    it('Push and pull changes both fire (issue 2555)', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      var correct = false;\n      db.post({}).then(function () {\n        return remote.post({});\n      }).then(function () {\n        var numChanges = 0;\n        var lastChange;\n        var sync = db.sync(remote);\n        sync.on('change', function (change) {\n          ['push', 'pull'].should.contain(change.direction);\n          change.change.docs_read.should.equal(1);\n          change.change.docs_written.should.equal(1);\n          if (!lastChange) {\n            lastChange = change.direction;\n          } else {\n            lastChange.should.not.equal(change.direction);\n          }\n          if (++numChanges === 2) {\n            correct = true;\n            sync.cancel();\n          }\n        }).on('complete', function () {\n          correct.should.equal(true, 'things happened right');\n          done();\n        });\n      });\n    });\n\n    it('Remove an event listener', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      db.bulkDocs([{}, {}, {}]).then(function () {\n        return remote.bulkDocs([{}, {}, {}]);\n      }).then(function () {\n\n        function changesCallback() {\n          changeCalled = true;\n        }\n\n        var sync = db.replicate.to(remote);\n        var changeCalled = false;\n        sync.on('change', changesCallback);\n        sync.removeListener('change', changesCallback);\n        sync.on('error', function () {});\n        sync.on('complete', function () {\n          setTimeout(function () {\n            Object.keys(sync._events).should.have.length(0);\n            changeCalled.should.equal(false);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Remove an invalid event listener', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      db.bulkDocs([{}, {}, {}]).then(function () {\n        return remote.bulkDocs([{}, {}, {}]);\n      }).then(function () {\n        function otherCallback() {}\n        function realCallback() {\n          changeCalled = true;\n        }\n        var sync = db.replicate.to(remote);\n        var changeCalled = false;\n        sync.on('change', realCallback);\n        sync.removeListener('change', otherCallback);\n        sync.on('error', function () {});\n        sync.on('complete', function () {\n          setTimeout(function () {\n            Object.keys(sync._events).should.have.length(0);\n            changeCalled.should.equal(true);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Doesn\\'t have a memory leak (push)', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      db.bulkDocs([{}, {}, {}]).then(function () {\n        return remote.bulkDocs([{}, {}, {}]);\n      }).then(function () {\n        var sync = db.replicate.to(remote);\n        sync.on('change', function () {});\n        sync.on('error', function () {});\n        sync.on('complete', function () {\n          setTimeout(function () {\n            Object.keys(sync._events).should.have.length(0);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Doesn\\'t have a memory leak (pull)', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      db.bulkDocs([{}, {}, {}]).then(function () {\n        return remote.bulkDocs([{}, {}, {}]);\n      }).then(function () {\n        var sync = db.replicate.from(remote);\n        sync.on('change', function () {});\n        sync.on('error', function () {});\n        sync.on('complete', function () {\n          setTimeout(function () {\n            Object.keys(sync._events).should.have.length(0);\n            done();\n          });\n        });\n      });\n    });\n\n    it('Doesn\\'t have a memory leak (bi)', function (done) {\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      db.bulkDocs([{}, {}, {}]).then(function () {\n        return remote.bulkDocs([{}, {}, {}]);\n      }).then(function () {\n        var sync = db.sync(remote);\n        sync.on('change', function () {});\n        sync.on('error', function () {});\n        sync.on('complete', function () {\n          setTimeout(function () {\n            Object.keys(sync._events).should.have.length(0);\n            done();\n          });\n        });\n      });\n    });\n    it('PouchDB.sync with strings for dbs', function (done) {\n      var doc1 = {\n          _id: 'adoc',\n          foo: 'bar'\n        };\n      var doc2 = {\n          _id: 'anotherdoc',\n          foo: 'baz'\n        };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.put(doc1).then(function () {\n        return remote.put(doc2);\n      }).then(function () {\n        return PouchDB.sync(dbs.name, dbs.remote);\n      }).then(function (result) {\n        result.pull.ok.should.equal(true);\n        result.pull.docs_read.should.equal(1);\n        result.pull.docs_written.should.equal(1);\n        result.pull.errors.should.have.length(0);\n        done();\n      }, done);\n    });\n\n    it('#3270 triggers \"denied\" events',\n        function (done) {\n      testUtils.isCouchDB(function (isCouchDB) {\n        if (/*adapters[1] !== 'http' || */!isCouchDB) {\n          return done();\n        }\n        if (adapters[0] !== 'local' || adapters[1] !== 'http') {\n          return done();\n        }\n\n        var deniedErrors = [];\n        var ddoc = {\n          \"_id\": \"_design/validate\",\n          \"validate_doc_update\": function (newDoc) {\n            if (newDoc.foo) {\n              throw { unauthorized: 'go away, no picture' };\n            }\n          }.toString()\n        };\n\n        var remote = new PouchDB(dbs.remote);\n        var db = new PouchDB(dbs.name);\n\n        return remote.put(ddoc).then(function () {\n          var docs = [\n            {_id: 'foo1', foo: 'string'},\n            {_id: 'nofoo'},\n            {_id: 'foo2', foo: 'object'}\n          ];\n          return db.bulkDocs({docs: docs});\n        }).then(function () {\n          var sync = db.sync(dbs.remote);\n          sync.on('denied', function (error) {\n            deniedErrors.push(error);\n          });\n          return sync;\n        }).then(function () {\n          deniedErrors.length.should.equal(2);\n          deniedErrors[0].doc.name.should.equal('unauthorized');\n          deniedErrors[1].doc.name.should.equal('unauthorized');\n          deniedErrors[0].direction.should.equal('push');\n        })\n        .then(done, done);\n      });\n    });\n\n    it('#3270 triggers \"denied\" events, reverse direction',\n      function (done) {\n        testUtils.isCouchDB(function (isCouchDB) {\n          if (/*adapters[1] !== 'http' || */!isCouchDB) {\n            return done();\n          }\n          if (adapters[0] !== 'local' || adapters[1] !== 'http') {\n            return done();\n          }\n\n          var deniedErrors = [];\n          var ddoc = {\n            \"_id\": \"_design/validate\",\n            \"validate_doc_update\": function (newDoc) {\n              if (newDoc.foo) {\n                throw { unauthorized: 'go away, no picture' };\n              }\n            }.toString()\n          };\n\n          var remote = new PouchDB(dbs.remote);\n          var db = new PouchDB(dbs.name);\n\n          return remote.put(ddoc).then(function () {\n            var docs = [\n              {_id: 'foo1', foo: 'string'},\n              {_id: 'nofoo'},\n              {_id: 'foo2', foo: 'object'}\n            ];\n            return db.bulkDocs({docs: docs});\n          }).then(function () {\n            var sync = remote.sync(db);\n            sync.on('denied', function (error) {\n              deniedErrors.push(error);\n            });\n            return sync;\n          }).then(function () {\n            deniedErrors.length.should.equal(2);\n            deniedErrors[0].doc.name.should.equal('unauthorized');\n            deniedErrors[1].doc.name.should.equal('unauthorized');\n            deniedErrors[0].direction.should.equal('pull');\n          })\n            .then(done, done);\n        });\n      });\n\n    it('#3270 triggers \"change\" events with .docs property', function (done) {\n      var syncedDocs = [];\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {_id: '1'},\n        {_id: '2'},\n        {_id: '3'}\n      ];\n\n      db.bulkDocs({ docs: docs }, {}).then(function () {\n        var sync = db.sync(dbs.remote);\n        sync.on('change', function (change) {\n          syncedDocs = syncedDocs.concat(change.change.docs);\n        });\n        return sync;\n      })\n      .then(function () {\n        syncedDocs.sort(function (a, b) {\n          return a._id > b._id ? 1 : -1;\n        });\n\n        syncedDocs.length.should.equal(3);\n        syncedDocs[0]._id.should.equal('1');\n        syncedDocs[1]._id.should.equal('2');\n        syncedDocs[2]._id.should.equal('3');\n        done();\n      })\n      .catch(done);\n    });\n\n    it('4791 Single filter', function () {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var localDocs = [{_id: '0'}, {_id: '1'}];\n      var remoteDocs = [{_id: 'a'}, {_id: 'b'}];\n\n      return remote.bulkDocs(remoteDocs).then(function () {\n        return db.bulkDocs(localDocs);\n      }).then(function () {\n        return db.sync(remote, {\n          filter: function (doc) { return doc._id !== '0' && doc._id !== 'a'; }\n        });\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (docs) {\n        docs.total_rows.should.equal(3);\n        return remote.allDocs();\n      }).then(function (docs) {\n        docs.total_rows.should.equal(3);\n      });\n    });\n\n\n    it('4791 Single filter, live/retry', function () {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var localDocs = [{_id: '0'}, {_id: '1'}];\n      var remoteDocs = [{_id: 'a'}, {_id: 'b'}];\n\n      return remote.bulkDocs(remoteDocs).then(function () {\n        return db.bulkDocs(localDocs);\n      }).then(function () {\n        return new testUtils.Promise(function (resolve, reject) {\n          var filter = function (doc) {\n            return doc._id !== '0' && doc._id !== 'a';\n          };\n          var changes = 0;\n          var onChange = function (c) {\n            changes += c.change.docs.length;\n            if (changes === 2) {\n              sync.cancel();\n            }\n          };\n          var sync = db.sync(remote, {filter: filter, live: true, retry: true})\n            .on('error', reject)\n            .on('change', onChange)\n            .on('complete', resolve);\n        });\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (docs) {\n        docs.total_rows.should.equal(3);\n        return remote.allDocs();\n      }).then(function (docs) {\n        docs.total_rows.should.equal(3);\n      });\n    });\n\n    it('4289 Separate to / from filters', function () {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      var localDocs = [{_id: '0'}, {_id: '1'}];\n      var remoteDocs = [{_id: 'a'}, {_id: 'b'}];\n\n      return remote.bulkDocs(remoteDocs).then(function () {\n        return db.bulkDocs(localDocs);\n      }).then(function () {\n        return db.sync(remote, {\n          push: {filter: function (doc) { return doc._id === '0'; }},\n          pull: {filter: function (doc) { return doc._id === 'a'; }}\n        });\n      }).then(function () {\n        return db.allDocs();\n      }).then(function (docs) {\n        docs.total_rows.should.equal(3);\n        return remote.allDocs();\n      }).then(function (docs) {\n        docs.total_rows.should.equal(3);\n      });\n    });\n\n    it('5007 sync 2 databases', function () {\n\n      var db = new PouchDB(dbs.name);\n\n      var remote1 = new PouchDB(dbs.remote);\n      var remote2 = new PouchDB(dbs.remote + '_2');\n\n      var sync1 = db.sync(remote1, {live: true});\n      var sync2 = db.sync(remote2, {live: true});\n\n      var numChanges = 0;\n      function onChange() {\n        if (++numChanges === 2) {\n          changes1.cancel();\n          changes2.cancel();\n          sync1.cancel();\n          sync2.cancel();\n        }\n      }\n\n      var changes1 = remote1.changes({live: true}).on('change', onChange);\n      var changes2 = remote2.changes({live: true}).on('change', onChange);\n\n      db.post({foo: 'bar'});\n\n      var promises = [changes1, changes2, sync1, sync2];\n      return testUtils.Promise.all(promises).then(function () {\n        return remote2.destroy();\n      });\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.sync_events.js",
    "content": "'use strict';\n\nvar adapters = [\n  ['local', 'http'],\n  ['http', 'http'],\n  ['http', 'local'],\n  ['local', 'local']\n];\n\nif ('saucelabs' in testUtils.params()) {\n  adapters = [['local', 'http'], ['http', 'local']];\n}\n\n\nadapters.forEach(function (adapters) {\n  var title = 'test.sync_events.js-' + adapters[0] + '-' + adapters[1];\n  describe('suite2 ' + title, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_repl_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n\n    it('#4251 Should fire paused and active on sync', function (done) {\n\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n\n      db.bulkDocs([{_id: 'a'}, {_id: 'b'}]).then(function () {\n\n        var repl = db.sync(remote, {retry: true, live: true});\n        var counter = 0;\n\n        repl.on('complete', function () {\n          done();\n        });\n\n        repl.on('active', function () {\n          counter++;\n          if (counter === 1) {\n            // We are good, initial replication\n          } else if (counter === 3) {\n            remote.bulkDocs([{_id: 'e'}, {_id: 'f'}]);\n          }\n        });\n\n        repl.on('paused', function () {\n          counter++;\n          if (counter === 1) {\n            // Maybe a bug, if we have data should probably\n            // call active first\n            counter--;\n          } if (counter === 2) {\n            db.bulkDocs([{_id: 'c'}, {_id: 'd'}]);\n          } else if (counter === 4) {\n            repl.cancel();\n          }\n        });\n      });\n\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.taskqueue.js",
    "content": "'use strict';\n\nvar adapters = ['http', 'local'];\n\nadapters.forEach(function (adapter) {\n  describe('test.taskqueue.js-' + adapter, function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapter, 'testdb');\n      testUtils.cleanup([dbs.name], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name], done);\n    });\n\n\n    it('Add a doc', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ test: 'somestuff' }, function (err) {\n        done(err);\n      });\n    });\n\n    it('Query', function (done) {\n      // temp views are not supported in CouchDB 2.0\n      if (testUtils.isCouchMaster()) {\n        return done();\n      }\n\n      var db = new PouchDB(dbs.name);\n      // Test invalid if adapter doesnt support mapreduce\n      if (!db.query) {\n        return done();\n      }\n\n      var queryFun = {\n        map: function () {}\n      };\n      db.query(queryFun, { reduce: false }, function (_, res) {\n        res.rows.should.have.length(0);\n        done();\n      });\n    });\n\n    it('Bulk docs', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { test: 'somestuff' },\n          { test: 'another' }\n        ]\n      }, function (err, infos) {\n        should.not.exist(infos[0].error);\n        should.not.exist(infos[1].error);\n        done();\n      });\n    });\n\n    it('Get', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.get('0', function (err) {\n        should.exist(err);\n        done();\n      });\n    });\n\n    it('Info', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.info(function (err, info) {\n        info.doc_count.should.equal(0);\n        done();\n      });\n    });\n\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/test.uuids.js",
    "content": "'use strict';\n/* jshint maxlen: false */\nvar rfcRegexp = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;\n\nfunction makeUuids(count, length, radix) {\n  count = count || 1;\n  var i = -1;\n  var out = [];\n  while (++i < count) {\n    out.push(testUtils.uuid(length, radix));\n  }\n  return out;\n}\n\ndescribe('test.uuid.js', function () {\n\n  it('UUID RFC4122 test', function () {\n    rfcRegexp.test(makeUuids()[0]).should\n      .equal(true, 'Single UUID complies with RFC4122.');\n    rfcRegexp.test(testUtils.uuid()).should\n      .equal(true,\n             'Single UUID through Pouch.utils.uuid complies with RFC4122.');\n  });\n\n  it('UUID generation uniqueness', function () {\n    var count = 1000;\n    var uuids = makeUuids(count);\n    testUtils.eliminateDuplicates(uuids).should.have\n      .length(count, 'Generated UUIDS are unique.');\n  });\n\n  it('Test small uuid uniqness', function () {\n    var length = 8;\n    var count = 2000;\n    var uuids = makeUuids(count, length);\n    testUtils.eliminateDuplicates(uuids).should.have\n      .length(count, 'Generated small UUIDS are unique.');\n  });\n\n  it('Test custom length', function () {\n    var length = 32;\n    var count = 10;\n    var uuids = makeUuids(count, length);\n    // Test single UUID wrapper\n    uuids.push(testUtils.uuid(length));\n    uuids.map(function (uuid) {\n      uuid.should.have.length(length, 'UUID length is correct.');\n    });\n  });\n\n  it('Test custom length, redix', function () {\n    var length = 32;\n    var count = 10;\n    var radix = 5;\n    var uuids = makeUuids(count, length, radix);\n    // Test single UUID wrapper\n    uuids.push(testUtils.uuid(length, radix));\n    uuids.map(function (uuid) {\n      var nums = uuid.split('').map(function (character) {\n          return parseInt(character, radix);\n        });\n      var max = Math.max.apply(Math, nums);\n      var min = Math.min.apply(Math, nums);\n      max.should.be.below(radix, 'Maximum character is less than radix');\n      min.should.be.at.least(0, 'Min character is greater than or equal to 0');\n    });\n  });\n});\n"
  },
  {
    "path": "test/pouchdb/integration/utils-bundle.js",
    "content": "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n'use strict';\n\nmodule.exports = argsArray;\n\nfunction argsArray(fun) {\n  return function () {\n    var len = arguments.length;\n    if (len) {\n      var args = [];\n      var i = -1;\n      while (++i < len) {\n        args[i] = arguments[i];\n      }\n      return fun.call(this, args);\n    } else {\n      return fun.call(this, []);\n    }\n  };\n}\n},{}],2:[function(require,module,exports){\n'use strict'\n\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nfunction init () {\n  var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n  for (var i = 0, len = code.length; i < len; ++i) {\n    lookup[i] = code[i]\n    revLookup[code.charCodeAt(i)] = i\n  }\n\n  revLookup['-'.charCodeAt(0)] = 62\n  revLookup['_'.charCodeAt(0)] = 63\n}\n\ninit()\n\nfunction toByteArray (b64) {\n  var i, j, l, tmp, placeHolders, arr\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n  // base64 is 4/3 + up to two characters of the original data\n  arr = new Arr(len * 3 / 4 - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n\n},{}],3:[function(require,module,exports){\n\n},{}],4:[function(require,module,exports){\n(function (global){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"base64-js\":2,\"ieee754\":9,\"isarray\":12}],5:[function(require,module,exports){\n\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  return ('WebkitAppearance' in document.documentElement.style) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (window.console && (console.firebug || (console.exception && console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  return JSON.stringify(v);\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n  var args = arguments;\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return args;\n\n  var c = 'color: ' + this.color;\n  args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n  return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n\n},{\"./debug\":6}],6:[function(require,module,exports){\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n  return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n  // define the `disabled` version\n  function disabled() {\n  }\n  disabled.enabled = false;\n\n  // define the `enabled` version\n  function enabled() {\n\n    var self = enabled;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // add the `color` if not set\n    if (null == self.useColors) self.useColors = exports.useColors();\n    if (null == self.color && self.useColors) self.color = selectColor();\n\n    var args = Array.prototype.slice.call(arguments);\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %o\n      args = ['%o'].concat(args);\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    if ('function' === typeof exports.formatArgs) {\n      args = exports.formatArgs.apply(self, args);\n    }\n    var logFn = enabled.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n  enabled.enabled = true;\n\n  var fn = exports.enabled(namespace) ? enabled : disabled;\n\n  fn.namespace = namespace;\n\n  return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  var split = (namespaces || '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n\n},{\"ms\":16}],7:[function(require,module,exports){\n(function (root, factory) {\r\n  /* istanbul ignore next */\r\n  if (typeof define === 'function' && define.amd) {\r\n    define([], factory)\r\n  } else if (typeof exports === 'object') {\r\n    module.exports = factory()\r\n  } else {\r\n    root.PromisePool = factory()\r\n    // Legacy API\r\n    root.promisePool = root.PromisePool\r\n  }\r\n})(this, function () {\r\n  'use strict'\r\n\r\n  var EventTarget = function () {\r\n    this._listeners = {}\r\n  }\r\n\r\n  EventTarget.prototype.addEventListener = function (type, listener) {\r\n    this._listeners[type] = this._listeners[type] || []\r\n    if (this._listeners[type].indexOf(listener) < 0) {\r\n      this._listeners[type].push(listener)\r\n    }\r\n  }\r\n\r\n  EventTarget.prototype.removeEventListener = function (type, listener) {\r\n    if (this._listeners[type]) {\r\n      var p = this._listeners[type].indexOf(listener)\r\n      if (p >= 0) {\r\n        this._listeners[type].splice(p, 1)\r\n      }\r\n    }\r\n  }\r\n\r\n  EventTarget.prototype.dispatchEvent = function (evt) {\r\n    if (this._listeners[evt.type] && this._listeners[evt.type].length) {\r\n      var listeners = this._listeners[evt.type].slice()\r\n      for (var i = 0, l = listeners.length; i < l; ++i) {\r\n        listeners[i].call(this, evt)\r\n      }\r\n    }\r\n  }\r\n\r\n  var isGenerator = function (func) {\r\n    return (typeof func.constructor === 'function' &&\r\n      func.constructor.name === 'GeneratorFunction')\r\n  }\r\n\r\n  var functionToIterator = function (func) {\r\n    return {\r\n      next: function () {\r\n        var promise = func()\r\n        return promise ? {value: promise} : {done: true}\r\n      }\r\n    }\r\n  }\r\n\r\n  var promiseToIterator = function (promise) {\r\n    var called = false\r\n    return {\r\n      next: function () {\r\n        if (called) {\r\n          return {done: true}\r\n        }\r\n        called = true\r\n        return {value: promise}\r\n      }\r\n    }\r\n  }\r\n\r\n  var toIterator = function (obj, Promise) {\r\n    var type = typeof obj\r\n    if (type === 'object') {\r\n      if (typeof obj.next === 'function') {\r\n        return obj\r\n      }\r\n      /* istanbul ignore else */\r\n      if (typeof obj.then === 'function') {\r\n        return promiseToIterator(obj)\r\n      }\r\n    }\r\n    if (type === 'function') {\r\n      return isGenerator(obj) ? obj() : functionToIterator(obj)\r\n    }\r\n    return promiseToIterator(Promise.resolve(obj))\r\n  }\r\n\r\n  var PromisePoolEvent = function (target, type, data) {\r\n    this.target = target\r\n    this.type = type\r\n    this.data = data\r\n  }\r\n\r\n  var PromisePool = function (source, concurrency, options) {\r\n    EventTarget.call(this)\r\n    if (typeof concurrency !== 'number' ||\r\n        Math.floor(concurrency) !== concurrency ||\r\n        concurrency < 1) {\r\n      throw new Error('Invalid concurrency')\r\n    }\r\n    this._concurrency = concurrency\r\n    this._options = options || {}\r\n    this._options.promise = this._options.promise || Promise\r\n    this._iterator = toIterator(source, this._options.promise)\r\n    this._done = false\r\n    this._size = 0\r\n    this._promise = null\r\n    this._callbacks = null\r\n  }\r\n  PromisePool.prototype = new EventTarget()\r\n  PromisePool.prototype.constructor = PromisePool\r\n\r\n  PromisePool.prototype.concurrency = function (value) {\r\n    if (typeof value !== 'undefined') {\r\n      this._concurrency = value\r\n      if (this.active()) {\r\n        this._proceed()\r\n      }\r\n    }\r\n    return this._concurrency\r\n  }\r\n\r\n  PromisePool.prototype.size = function () {\r\n    return this._size\r\n  }\r\n\r\n  PromisePool.prototype.active = function () {\r\n    return !!this._promise\r\n  }\r\n\r\n  PromisePool.prototype.promise = function () {\r\n    return this._promise\r\n  }\r\n\r\n  PromisePool.prototype.start = function () {\r\n    var that = this\r\n    var Promise = this._options.promise\r\n    this._promise = new Promise(function (resolve, reject) {\r\n      that._callbacks = {\r\n        reject: reject,\r\n        resolve: resolve\r\n      }\r\n      that._proceed()\r\n    })\r\n    return this._promise\r\n  }\r\n\r\n  PromisePool.prototype._fireEvent = function (type, data) {\r\n    this.dispatchEvent(new PromisePoolEvent(this, type, data))\r\n  }\r\n\r\n  PromisePool.prototype._settle = function (error) {\r\n    if (error) {\r\n      this._callbacks.reject(error)\r\n    } else {\r\n      this._callbacks.resolve()\r\n    }\r\n    this._promise = null\r\n    this._callbacks = null\r\n  }\r\n\r\n  PromisePool.prototype._onPooledPromiseFulfilled = function (promise, result) {\r\n    this._size--\r\n    if (this.active()) {\r\n      this._fireEvent('fulfilled', {\r\n        promise: promise,\r\n        result: result\r\n      })\r\n      this._proceed()\r\n    }\r\n  }\r\n\r\n  PromisePool.prototype._onPooledPromiseRejected = function (promise, error) {\r\n    this._size--\r\n    if (this.active()) {\r\n      this._fireEvent('rejected', {\r\n        promise: promise,\r\n        error: error\r\n      })\r\n      this._settle(error || new Error('Unknown error'))\r\n    }\r\n  }\r\n\r\n  PromisePool.prototype._trackPromise = function (promise) {\r\n    var that = this\r\n    promise\r\n      .then(function (result) {\r\n        that._onPooledPromiseFulfilled(promise, result)\r\n      }, function (error) {\r\n        that._onPooledPromiseRejected(promise, error)\r\n      })['catch'](function (err) {\r\n        that._settle(new Error('Promise processing failed: ' + err))\r\n      })\r\n  }\r\n\r\n  PromisePool.prototype._proceed = function () {\r\n    if (!this._done) {\r\n      var result = null\r\n      while (this._size < this._concurrency &&\r\n          !(result = this._iterator.next()).done) {\r\n        this._size++\r\n        this._trackPromise(result.value)\r\n      }\r\n      this._done = (result === null || !!result.done)\r\n    }\r\n    if (this._done && this._size === 0) {\r\n      this._settle()\r\n    }\r\n  }\r\n\r\n  PromisePool.PromisePoolEvent = PromisePoolEvent\r\n  // Legacy API\r\n  PromisePool.PromisePool = PromisePool\r\n\r\n  return PromisePool\r\n})\r\n\n},{}],8:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n\n    if (isFunction(evlistener))\n      return 1;\n    else if (evlistener)\n      return evlistener.length;\n  }\n  return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],9:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n},{}],10:[function(require,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],11:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},{}],12:[function(require,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n},{}],13:[function(require,module,exports){\n(function(factory) {\n  if(typeof exports === 'object') {\n    factory(exports);\n  } else {\n    factory(this);\n  }\n}).call(this, function(root) { \n\n  var slice   = Array.prototype.slice,\n      each    = Array.prototype.forEach;\n\n  var extend = function(obj) {\n    if(typeof obj !== 'object') throw obj + ' is not an object' ;\n\n    var sources = slice.call(arguments, 1); \n\n    each.call(sources, function(source) {\n      if(source) {\n        for(var prop in source) {\n          if(typeof source[prop] === 'object' && obj[prop]) {\n            extend.call(obj, obj[prop], source[prop]);\n          } else {\n            obj[prop] = source[prop];\n          }\n        } \n      }\n    });\n\n    return obj;\n  }\n\n  root.extend = extend;\n});\n\n},{}],14:[function(require,module,exports){\n'use strict';\nvar immediate = require('immediate');\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && typeof obj === 'object' && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"immediate\":10}],15:[function(require,module,exports){\n(function (process){\nvar path = require('path');\nvar fs = require('fs');\nvar _0777 = parseInt('0777', 8);\n\nmodule.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;\n\nfunction mkdirP (p, opts, f, made) {\n    if (typeof opts === 'function') {\n        f = opts;\n        opts = {};\n    }\n    else if (!opts || typeof opts !== 'object') {\n        opts = { mode: opts };\n    }\n    \n    var mode = opts.mode;\n    var xfs = opts.fs || fs;\n    \n    if (mode === undefined) {\n        mode = _0777 & (~process.umask());\n    }\n    if (!made) made = null;\n    \n    var cb = f || function () {};\n    p = path.resolve(p);\n    \n    xfs.mkdir(p, mode, function (er) {\n        if (!er) {\n            made = made || p;\n            return cb(null, made);\n        }\n        switch (er.code) {\n            case 'ENOENT':\n                mkdirP(path.dirname(p), opts, function (er, made) {\n                    if (er) cb(er, made);\n                    else mkdirP(p, opts, cb, made);\n                });\n                break;\n\n            // In the case of any other error, just see if there's a dir\n            // there already.  If so, then hooray!  If not, then something\n            // is borked.\n            default:\n                xfs.stat(p, function (er2, stat) {\n                    // if the stat fails, then that's super weird.\n                    // let the original error be the failure reason.\n                    if (er2 || !stat.isDirectory()) cb(er, made)\n                    else cb(null, made);\n                });\n                break;\n        }\n    });\n}\n\nmkdirP.sync = function sync (p, opts, made) {\n    if (!opts || typeof opts !== 'object') {\n        opts = { mode: opts };\n    }\n    \n    var mode = opts.mode;\n    var xfs = opts.fs || fs;\n    \n    if (mode === undefined) {\n        mode = _0777 & (~process.umask());\n    }\n    if (!made) made = null;\n\n    p = path.resolve(p);\n\n    try {\n        xfs.mkdirSync(p, mode);\n        made = made || p;\n    }\n    catch (err0) {\n        switch (err0.code) {\n            case 'ENOENT' :\n                made = sync(path.dirname(p), opts, made);\n                sync(p, opts, made);\n                break;\n\n            // In the case of any other error, just see if there's a dir\n            // there already.  If so, then hooray!  If not, then something\n            // is borked.\n            default:\n                var stat;\n                try {\n                    stat = xfs.statSync(p);\n                }\n                catch (err1) {\n                    throw err0;\n                }\n                if (!stat.isDirectory()) throw err0;\n                break;\n        }\n    }\n\n    return made;\n};\n\n}).call(this,require('_process'))\n},{\"_process\":18,\"fs\":3,\"path\":17}],16:[function(require,module,exports){\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} options\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options){\n  options = options || {};\n  if ('string' == typeof val) return parse(val);\n  return options.long\n    ? long(val)\n    : short(val);\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = '' + str;\n  if (str.length > 10000) return;\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);\n  if (!match) return;\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction short(ms) {\n  if (ms >= d) return Math.round(ms / d) + 'd';\n  if (ms >= h) return Math.round(ms / h) + 'h';\n  if (ms >= m) return Math.round(ms / m) + 'm';\n  if (ms >= s) return Math.round(ms / s) + 's';\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction long(ms) {\n  return plural(ms, d, 'day')\n    || plural(ms, h, 'hour')\n    || plural(ms, m, 'minute')\n    || plural(ms, s, 'second')\n    || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) return;\n  if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\n},{}],17:[function(require,module,exports){\n(function (process){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n    /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n  return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n  var result = splitPath(path),\n      root = result[0],\n      dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.substr(0, dir.length - 1);\n  }\n\n  return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n  var f = splitPath(path)[2];\n  // TODO: make this comparison case-insensitive on windows?\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\n\nexports.extname = function(path) {\n  return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n\n}).call(this,require('_process'))\n},{\"_process\":18}],18:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],19:[function(require,module,exports){\n// Generated by CoffeeScript 1.9.2\n(function() {\n  var hasProp = {}.hasOwnProperty,\n    slice = [].slice;\n\n  module.exports = function(source, scope) {\n    var key, keys, value, values;\n    keys = [];\n    values = [];\n    for (key in scope) {\n      if (!hasProp.call(scope, key)) continue;\n      value = scope[key];\n      if (key === 'this') {\n        continue;\n      }\n      keys.push(key);\n      values.push(value);\n    }\n    return Function.apply(null, slice.call(keys).concat([source])).apply(scope[\"this\"], values);\n  };\n\n}).call(this);\n\n},{}],20:[function(require,module,exports){\n(function (factory) {\n    if (typeof exports === 'object') {\n        // Node/CommonJS\n        module.exports = factory();\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(factory);\n    } else {\n        // Browser globals (with support for web workers)\n        var glob;\n\n        try {\n            glob = window;\n        } catch (e) {\n            glob = self;\n        }\n\n        glob.SparkMD5 = factory();\n    }\n}(function (undefined) {\n\n    'use strict';\n\n    /*\n     * Fastest md5 implementation around (JKM md5).\n     * Credits: Joseph Myers\n     *\n     * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n     * @see http://jsperf.com/md5-shootout/7\n     */\n\n    /* this function is much faster,\n      so if possible we use it. Some IEs\n      are the only ones I know of that\n      need the idiotic second function,\n      generated by an if clause.  */\n    var add32 = function (a, b) {\n        return (a + b) & 0xFFFFFFFF;\n    },\n        hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n    function cmn(q, a, b, x, s, t) {\n        a = add32(add32(a, q), add32(x, t));\n        return add32((a << s) | (a >>> (32 - s)), b);\n    }\n\n    function ff(a, b, c, d, x, s, t) {\n        return cmn((b & c) | ((~b) & d), a, b, x, s, t);\n    }\n\n    function gg(a, b, c, d, x, s, t) {\n        return cmn((b & d) | (c & (~d)), a, b, x, s, t);\n    }\n\n    function hh(a, b, c, d, x, s, t) {\n        return cmn(b ^ c ^ d, a, b, x, s, t);\n    }\n\n    function ii(a, b, c, d, x, s, t) {\n        return cmn(c ^ (b | (~d)), a, b, x, s, t);\n    }\n\n    function md5cycle(x, k) {\n        var a = x[0],\n            b = x[1],\n            c = x[2],\n            d = x[3];\n\n        a = ff(a, b, c, d, k[0], 7, -680876936);\n        d = ff(d, a, b, c, k[1], 12, -389564586);\n        c = ff(c, d, a, b, k[2], 17, 606105819);\n        b = ff(b, c, d, a, k[3], 22, -1044525330);\n        a = ff(a, b, c, d, k[4], 7, -176418897);\n        d = ff(d, a, b, c, k[5], 12, 1200080426);\n        c = ff(c, d, a, b, k[6], 17, -1473231341);\n        b = ff(b, c, d, a, k[7], 22, -45705983);\n        a = ff(a, b, c, d, k[8], 7, 1770035416);\n        d = ff(d, a, b, c, k[9], 12, -1958414417);\n        c = ff(c, d, a, b, k[10], 17, -42063);\n        b = ff(b, c, d, a, k[11], 22, -1990404162);\n        a = ff(a, b, c, d, k[12], 7, 1804603682);\n        d = ff(d, a, b, c, k[13], 12, -40341101);\n        c = ff(c, d, a, b, k[14], 17, -1502002290);\n        b = ff(b, c, d, a, k[15], 22, 1236535329);\n\n        a = gg(a, b, c, d, k[1], 5, -165796510);\n        d = gg(d, a, b, c, k[6], 9, -1069501632);\n        c = gg(c, d, a, b, k[11], 14, 643717713);\n        b = gg(b, c, d, a, k[0], 20, -373897302);\n        a = gg(a, b, c, d, k[5], 5, -701558691);\n        d = gg(d, a, b, c, k[10], 9, 38016083);\n        c = gg(c, d, a, b, k[15], 14, -660478335);\n        b = gg(b, c, d, a, k[4], 20, -405537848);\n        a = gg(a, b, c, d, k[9], 5, 568446438);\n        d = gg(d, a, b, c, k[14], 9, -1019803690);\n        c = gg(c, d, a, b, k[3], 14, -187363961);\n        b = gg(b, c, d, a, k[8], 20, 1163531501);\n        a = gg(a, b, c, d, k[13], 5, -1444681467);\n        d = gg(d, a, b, c, k[2], 9, -51403784);\n        c = gg(c, d, a, b, k[7], 14, 1735328473);\n        b = gg(b, c, d, a, k[12], 20, -1926607734);\n\n        a = hh(a, b, c, d, k[5], 4, -378558);\n        d = hh(d, a, b, c, k[8], 11, -2022574463);\n        c = hh(c, d, a, b, k[11], 16, 1839030562);\n        b = hh(b, c, d, a, k[14], 23, -35309556);\n        a = hh(a, b, c, d, k[1], 4, -1530992060);\n        d = hh(d, a, b, c, k[4], 11, 1272893353);\n        c = hh(c, d, a, b, k[7], 16, -155497632);\n        b = hh(b, c, d, a, k[10], 23, -1094730640);\n        a = hh(a, b, c, d, k[13], 4, 681279174);\n        d = hh(d, a, b, c, k[0], 11, -358537222);\n        c = hh(c, d, a, b, k[3], 16, -722521979);\n        b = hh(b, c, d, a, k[6], 23, 76029189);\n        a = hh(a, b, c, d, k[9], 4, -640364487);\n        d = hh(d, a, b, c, k[12], 11, -421815835);\n        c = hh(c, d, a, b, k[15], 16, 530742520);\n        b = hh(b, c, d, a, k[2], 23, -995338651);\n\n        a = ii(a, b, c, d, k[0], 6, -198630844);\n        d = ii(d, a, b, c, k[7], 10, 1126891415);\n        c = ii(c, d, a, b, k[14], 15, -1416354905);\n        b = ii(b, c, d, a, k[5], 21, -57434055);\n        a = ii(a, b, c, d, k[12], 6, 1700485571);\n        d = ii(d, a, b, c, k[3], 10, -1894986606);\n        c = ii(c, d, a, b, k[10], 15, -1051523);\n        b = ii(b, c, d, a, k[1], 21, -2054922799);\n        a = ii(a, b, c, d, k[8], 6, 1873313359);\n        d = ii(d, a, b, c, k[15], 10, -30611744);\n        c = ii(c, d, a, b, k[6], 15, -1560198380);\n        b = ii(b, c, d, a, k[13], 21, 1309151649);\n        a = ii(a, b, c, d, k[4], 6, -145523070);\n        d = ii(d, a, b, c, k[11], 10, -1120210379);\n        c = ii(c, d, a, b, k[2], 15, 718787259);\n        b = ii(b, c, d, a, k[9], 21, -343485551);\n\n        x[0] = add32(a, x[0]);\n        x[1] = add32(b, x[1]);\n        x[2] = add32(c, x[2]);\n        x[3] = add32(d, x[3]);\n    }\n\n    function md5blk(s) {\n        var md5blks = [],\n            i; /* Andy King said do it this way. */\n\n        for (i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n        }\n        return md5blks;\n    }\n\n    function md5blk_array(a) {\n        var md5blks = [],\n            i; /* Andy King said do it this way. */\n\n        for (i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n        }\n        return md5blks;\n    }\n\n    function md51(s) {\n        var n = s.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n            md5cycle(state, md5blk(s.substring(i - 64, i)));\n        }\n        s = s.substring(i - 64);\n        length = s.length;\n        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n        }\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(state, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Beware that the final length might not fit in 32 bits so we take care of that\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n\n        md5cycle(state, tail);\n        return state;\n    }\n\n    function md51_array(a) {\n        var n = a.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n            md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n        }\n\n        // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n        // containing the last element of the parent array if the sub array specified starts\n        // beyond the length of the parent array - weird.\n        // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n        a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n        length = a.length;\n        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= a[i] << ((i % 4) << 3);\n        }\n\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(state, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Beware that the final length might not fit in 32 bits so we take care of that\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n\n        md5cycle(state, tail);\n\n        return state;\n    }\n\n    function rhex(n) {\n        var s = '',\n            j;\n        for (j = 0; j < 4; j += 1) {\n            s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n        }\n        return s;\n    }\n\n    function hex(x) {\n        var i;\n        for (i = 0; i < x.length; i += 1) {\n            x[i] = rhex(x[i]);\n        }\n        return x.join('');\n    }\n\n    // In some cases the fast add32 function cannot be used..\n    if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n        add32 = function (x, y) {\n            var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n                msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n            return (msw << 16) | (lsw & 0xFFFF);\n        };\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * ArrayBuffer slice polyfill.\n     *\n     * @see https://github.com/ttaubert/node-arraybuffer-slice\n     */\n\n    if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n        (function () {\n            function clamp(val, length) {\n                val = (val | 0) || 0;\n\n                if (val < 0) {\n                    return Math.max(val + length, 0);\n                }\n\n                return Math.min(val, length);\n            }\n\n            ArrayBuffer.prototype.slice = function (from, to) {\n                var length = this.byteLength,\n                    begin = clamp(from, length),\n                    end = length,\n                    num,\n                    target,\n                    targetArray,\n                    sourceArray;\n\n                if (to !== undefined) {\n                    end = clamp(to, length);\n                }\n\n                if (begin > end) {\n                    return new ArrayBuffer(0);\n                }\n\n                num = end - begin;\n                target = new ArrayBuffer(num);\n                targetArray = new Uint8Array(target);\n\n                sourceArray = new Uint8Array(this, begin, num);\n                targetArray.set(sourceArray);\n\n                return target;\n            };\n        })();\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * Helpers.\n     */\n\n    function toUtf8(str) {\n        if (/[\\u0080-\\uFFFF]/.test(str)) {\n            str = unescape(encodeURIComponent(str));\n        }\n\n        return str;\n    }\n\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n        var length = str.length,\n           buff = new ArrayBuffer(length),\n           arr = new Uint8Array(buff),\n           i;\n\n        for (i = 0; i < length; i += 1) {\n            arr[i] = str.charCodeAt(i);\n        }\n\n        return returnUInt8Array ? arr : buff;\n    }\n\n    function arrayBuffer2Utf8Str(buff) {\n        return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n        var result = new Uint8Array(first.byteLength + second.byteLength);\n\n        result.set(new Uint8Array(first));\n        result.set(new Uint8Array(second), first.byteLength);\n\n        return returnUInt8Array ? result : result.buffer;\n    }\n\n    function hexToBinaryString(hex) {\n        var bytes = [],\n            length = hex.length,\n            x;\n\n        for (x = 0; x < length - 1; x += 2) {\n            bytes.push(parseInt(hex.substr(x, 2), 16));\n        }\n\n        return String.fromCharCode.apply(String, bytes);\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * SparkMD5 OOP implementation.\n     *\n     * Use this class to perform an incremental md5, otherwise use the\n     * static methods instead.\n     */\n\n    function SparkMD5() {\n        // call reset to init the instance\n        this.reset();\n    }\n\n    /**\n     * Appends a string.\n     * A conversion will be applied if an utf8 string is detected.\n     *\n     * @param {String} str The string to be appended\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.append = function (str) {\n        // Converts the string to utf8 bytes if necessary\n        // Then append as binary\n        this.appendBinary(toUtf8(str));\n\n        return this;\n    };\n\n    /**\n     * Appends a binary string.\n     *\n     * @param {String} contents The binary string to be appended\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.appendBinary = function (contents) {\n        this._buff += contents;\n        this._length += contents.length;\n\n        var length = this._buff.length,\n            i;\n\n        for (i = 64; i <= length; i += 64) {\n            md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n        }\n\n        this._buff = this._buff.substring(i - 64);\n\n        return this;\n    };\n\n    /**\n     * Finishes the incremental computation, reseting the internal state and\n     * returning the result.\n     *\n     * @param {Boolean} raw True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            i,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n        }\n\n        this._finish(tail, length);\n        ret = hex(this._hash);\n\n        if (raw) {\n            ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n\n        return ret;\n    };\n\n    /**\n     * Resets the internal state of the computation.\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.reset = function () {\n        this._buff = '';\n        this._length = 0;\n        this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n        return this;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @return {Object} The state\n     */\n    SparkMD5.prototype.getState = function () {\n        return {\n            buff: this._buff,\n            length: this._length,\n            hash: this._hash\n        };\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @param {Object} state The state\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.setState = function (state) {\n        this._buff = state.buff;\n        this._length = state.length;\n        this._hash = state.hash;\n\n        return this;\n    };\n\n    /**\n     * Releases memory used by the incremental buffer and other additional\n     * resources. If you plan to use the instance again, use reset instead.\n     */\n    SparkMD5.prototype.destroy = function () {\n        delete this._hash;\n        delete this._buff;\n        delete this._length;\n    };\n\n    /**\n     * Finish the final calculation based on the tail.\n     *\n     * @param {Array}  tail   The tail (will be modified)\n     * @param {Number} length The length of the remaining buffer\n     */\n    SparkMD5.prototype._finish = function (tail, length) {\n        var i = length,\n            tmp,\n            lo,\n            hi;\n\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(this._hash, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Do the final computation based on the tail and length\n        // Beware that the final length may not fit in 32 bits so we take care of that\n        tmp = this._length * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(this._hash, tail);\n    };\n\n    /**\n     * Performs the md5 hash on a string.\n     * A conversion will be applied if utf8 string is detected.\n     *\n     * @param {String}  str The string\n     * @param {Boolean} raw True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.hash = function (str, raw) {\n        // Converts the string to utf8 bytes if necessary\n        // Then compute it using the binary function\n        return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n\n    /**\n     * Performs the md5 hash on a binary string.\n     *\n     * @param {String}  content The binary string\n     * @param {Boolean} raw     True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.hashBinary = function (content, raw) {\n        var hash = md51(content),\n            ret = hex(hash);\n\n        return raw ? hexToBinaryString(ret) : ret;\n    };\n\n    // ---------------------------------------------------\n\n    /**\n     * SparkMD5 OOP implementation for array buffers.\n     *\n     * Use this class to perform an incremental md5 ONLY for array buffers.\n     */\n    SparkMD5.ArrayBuffer = function () {\n        // call reset to init the instance\n        this.reset();\n    };\n\n    /**\n     * Appends an array buffer.\n     *\n     * @param {ArrayBuffer} arr The array to be appended\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n            length = buff.length,\n            i;\n\n        this._length += arr.byteLength;\n\n        for (i = 64; i <= length; i += 64) {\n            md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n        }\n\n        this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n        return this;\n    };\n\n    /**\n     * Finishes the incremental computation, reseting the internal state and\n     * returning the result.\n     *\n     * @param {Boolean} raw True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            i,\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n        }\n\n        this._finish(tail, length);\n        ret = hex(this._hash);\n\n        if (raw) {\n            ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n\n        return ret;\n    };\n\n    /**\n     * Resets the internal state of the computation.\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.reset = function () {\n        this._buff = new Uint8Array(0);\n        this._length = 0;\n        this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n        return this;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @return {Object} The state\n     */\n    SparkMD5.ArrayBuffer.prototype.getState = function () {\n        var state = SparkMD5.prototype.getState.call(this);\n\n        // Convert buffer to a string\n        state.buff = arrayBuffer2Utf8Str(state.buff);\n\n        return state;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @param {Object} state The state\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n        // Convert string to buffer\n        state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n        return SparkMD5.prototype.setState.call(this, state);\n    };\n\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n    /**\n     * Performs the md5 hash on an array buffer.\n     *\n     * @param {ArrayBuffer} arr The array buffer\n     * @param {Boolean}     raw True to get the raw string, false to get the hex one\n     *\n     * @return {String} The result\n     */\n    SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n        var hash = md51_array(new Uint8Array(arr)),\n            ret = hex(hash);\n\n        return raw ? hexToBinaryString(ret) : ret;\n    };\n\n    return SparkMD5;\n}));\n\n},{}],21:[function(require,module,exports){\n'use strict';\n\n/**\n * Stringify/parse functions that don't operate\n * recursively, so they avoid call stack exceeded\n * errors.\n */\nexports.stringify = function stringify(input) {\n  var queue = [];\n  queue.push({obj: input});\n\n  var res = '';\n  var next, obj, prefix, val, i, arrayPrefix, keys, k, key, value, objPrefix;\n  while ((next = queue.pop())) {\n    obj = next.obj;\n    prefix = next.prefix || '';\n    val = next.val || '';\n    res += prefix;\n    if (val) {\n      res += val;\n    } else if (typeof obj !== 'object') {\n      res += typeof obj === 'undefined' ? null : JSON.stringify(obj);\n    } else if (obj === null) {\n      res += 'null';\n    } else if (Array.isArray(obj)) {\n      queue.push({val: ']'});\n      for (i = obj.length - 1; i >= 0; i--) {\n        arrayPrefix = i === 0 ? '' : ',';\n        queue.push({obj: obj[i], prefix: arrayPrefix});\n      }\n      queue.push({val: '['});\n    } else { // object\n      keys = [];\n      for (k in obj) {\n        if (obj.hasOwnProperty(k)) {\n          keys.push(k);\n        }\n      }\n      queue.push({val: '}'});\n      for (i = keys.length - 1; i >= 0; i--) {\n        key = keys[i];\n        value = obj[key];\n        objPrefix = (i > 0 ? ',' : '');\n        objPrefix += JSON.stringify(key) + ':';\n        queue.push({obj: value, prefix: objPrefix});\n      }\n      queue.push({val: '{'});\n    }\n  }\n  return res;\n};\n\n// Convenience function for the parse function.\n// This pop function is basically copied from\n// pouchCollate.parseIndexableString\nfunction pop(obj, stack, metaStack) {\n  var lastMetaElement = metaStack[metaStack.length - 1];\n  if (obj === lastMetaElement.element) {\n    // popping a meta-element, e.g. an object whose value is another object\n    metaStack.pop();\n    lastMetaElement = metaStack[metaStack.length - 1];\n  }\n  var element = lastMetaElement.element;\n  var lastElementIndex = lastMetaElement.index;\n  if (Array.isArray(element)) {\n    element.push(obj);\n  } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n    var key = stack.pop();\n    element[key] = obj;\n  } else {\n    stack.push(obj); // obj with key only\n  }\n}\n\nexports.parse = function (str) {\n  var stack = [];\n  var metaStack = []; // stack for arrays and objects\n  var i = 0;\n  var collationIndex,parsedNum,numChar;\n  var parsedString,lastCh,numConsecutiveSlashes,ch;\n  var arrayElement, objElement;\n  while (true) {\n    collationIndex = str[i++];\n    if (collationIndex === '}' ||\n        collationIndex === ']' ||\n        typeof collationIndex === 'undefined') {\n      if (stack.length === 1) {\n        return stack.pop();\n      } else {\n        pop(stack.pop(), stack, metaStack);\n        continue;\n      }\n    }\n    switch (collationIndex) {\n      case ' ':\n      case '\\t':\n      case '\\n':\n      case ':':\n      case ',':\n        break;\n      case 'n':\n        i += 3; // 'ull'\n        pop(null, stack, metaStack);\n        break;\n      case 't':\n        i += 3; // 'rue'\n        pop(true, stack, metaStack);\n        break;\n      case 'f':\n        i += 4; // 'alse'\n        pop(false, stack, metaStack);\n        break;\n      case '0':\n      case '1':\n      case '2':\n      case '3':\n      case '4':\n      case '5':\n      case '6':\n      case '7':\n      case '8':\n      case '9':\n      case '-':\n        parsedNum = '';\n        i--;\n        while (true) {\n          numChar = str[i++];\n          if (/[\\d\\.\\-e\\+]/.test(numChar)) {\n            parsedNum += numChar;\n          } else {\n            i--;\n            break;\n          }\n        }\n        pop(parseFloat(parsedNum), stack, metaStack);\n        break;\n      case '\"':\n        parsedString = '';\n        lastCh = void 0;\n        numConsecutiveSlashes = 0;\n        while (true) {\n          ch = str[i++];\n          if (ch !== '\"' || (lastCh === '\\\\' &&\n              numConsecutiveSlashes % 2 === 1)) {\n            parsedString += ch;\n            lastCh = ch;\n            if (lastCh === '\\\\') {\n              numConsecutiveSlashes++;\n            } else {\n              numConsecutiveSlashes = 0;\n            }\n          } else {\n            break;\n          }\n        }\n        pop(JSON.parse('\"' + parsedString + '\"'), stack, metaStack);\n        break;\n      case '[':\n        arrayElement = { element: [], index: stack.length };\n        stack.push(arrayElement.element);\n        metaStack.push(arrayElement);\n        break;\n      case '{':\n        objElement = { element: {}, index: stack.length };\n        stack.push(objElement.element);\n        metaStack.push(objElement);\n        break;\n      default:\n        throw new Error(\n          'unexpectedly reached end of input: ' + collationIndex);\n    }\n  }\n};\n\n},{}],22:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar jsExtend = require('js-extend');\nvar debug = _interopDefault(require('debug'));\nvar inherits = _interopDefault(require('inherits'));\nvar lie = _interopDefault(require('lie'));\nvar events = require('events');\nvar getArguments = _interopDefault(require('argsarray'));\nvar scopedEval = _interopDefault(require('scope-eval'));\nvar Md5 = _interopDefault(require('spark-md5'));\nvar vuvuzela = _interopDefault(require('vuvuzela'));\nvar PromisePool = _interopDefault(require('es6-promise-pool'));\n\n/* istanbul ignore next */\nvar PouchPromise = typeof Promise === 'function' ? Promise : lie;\n\n// based on https://github.com/montagejs/collections\nfunction mangle(key) {\n  return '$' + key;\n}\nfunction unmangle(key) {\n  return key.substring(1);\n}\nfunction _Map() {\n  this.store = {};\n}\n_Map.prototype.get = function (key) {\n  var mangled = mangle(key);\n  return this.store[mangled];\n};\n_Map.prototype.set = function (key, value) {\n  var mangled = mangle(key);\n  this.store[mangled] = value;\n  return true;\n};\n_Map.prototype.has = function (key) {\n  var mangled = mangle(key);\n  return mangled in this.store;\n};\n_Map.prototype.delete = function (key) {\n  var mangled = mangle(key);\n  var res = mangled in this.store;\n  delete this.store[mangled];\n  return res;\n};\n_Map.prototype.forEach = function (cb) {\n  var keys = Object.keys(this.store);\n  for (var i = 0, len = keys.length; i < len; i++) {\n    var key = keys[i];\n    var value = this.store[key];\n    key = unmangle(key);\n    cb(value, key);\n  }\n};\n\nfunction _Set(array) {\n  this.store = new _Map();\n\n  // init with an array\n  if (array && Array.isArray(array)) {\n    for (var i = 0, len = array.length; i < len; i++) {\n      this.add(array[i]);\n    }\n  }\n}\n_Set.prototype.add = function (key) {\n  return this.store.set(key, true);\n};\n_Set.prototype.has = function (key) {\n  return this.store.has(key);\n};\n\nfunction isBinaryObject(object) {\n  return (typeof ArrayBuffer !== 'undefined' && object instanceof ArrayBuffer) ||\n    (typeof Blob !== 'undefined' && object instanceof Blob);\n}\n\nfunction cloneArrayBuffer(buff) {\n  if (typeof buff.slice === 'function') {\n    return buff.slice(0);\n  }\n  // IE10-11 slice() polyfill\n  var target = new ArrayBuffer(buff.byteLength);\n  var targetArray = new Uint8Array(target);\n  var sourceArray = new Uint8Array(buff);\n  targetArray.set(sourceArray);\n  return target;\n}\n\nfunction cloneBinaryObject(object) {\n  if (object instanceof ArrayBuffer) {\n    return cloneArrayBuffer(object);\n  }\n  var size = object.size;\n  var type = object.type;\n  // Blob\n  if (typeof object.slice === 'function') {\n    return object.slice(0, size, type);\n  }\n  // PhantomJS slice() replacement\n  return object.webkitSlice(0, size, type);\n}\n\n// most of this is borrowed from lodash.isPlainObject:\n// https://github.com/fis-components/lodash.isplainobject/\n// blob/29c358140a74f252aeb08c9eb28bef86f2217d4a/index.js\n\nvar funcToString = Function.prototype.toString;\nvar objectCtorString = funcToString.call(Object);\n\nfunction isPlainObject(value) {\n  var proto = Object.getPrototypeOf(value);\n  /* istanbul ignore if */\n  if (proto === null) { // not sure when this happens, but I guess it can\n    return true;\n  }\n  var Ctor = proto.constructor;\n  return (typeof Ctor == 'function' &&\n    Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nfunction clone(object) {\n  var newObject;\n  var i;\n  var len;\n\n  if (!object || typeof object !== 'object') {\n    return object;\n  }\n\n  if (Array.isArray(object)) {\n    newObject = [];\n    for (i = 0, len = object.length; i < len; i++) {\n      newObject[i] = clone(object[i]);\n    }\n    return newObject;\n  }\n\n  // special case: to avoid inconsistencies between IndexedDB\n  // and other backends, we automatically stringify Dates\n  if (object instanceof Date) {\n    return object.toISOString();\n  }\n\n  if (isBinaryObject(object)) {\n    return cloneBinaryObject(object);\n  }\n\n  if (!isPlainObject(object)) {\n    return object; // don't clone objects like Workers\n  }\n\n  newObject = {};\n  for (i in object) {\n    /* istanbul ignore else */\n    if (Object.prototype.hasOwnProperty.call(object, i)) {\n      var value = clone(object[i]);\n      if (typeof value !== 'undefined') {\n        newObject[i] = value;\n      }\n    }\n  }\n  return newObject;\n}\n\nfunction once(fun) {\n  var called = false;\n  return getArguments(function (args) {\n    /* istanbul ignore if */\n    if (called) {\n      // this is a smoke test and should never actually happen\n      throw new Error('once called more than once');\n    } else {\n      called = true;\n      fun.apply(this, args);\n    }\n  });\n}\n\nfunction toPromise(func) {\n  //create the function we will be returning\n  return getArguments(function (args) {\n    // Clone arguments\n    args = clone(args);\n    var self = this;\n    var tempCB =\n      (typeof args[args.length - 1] === 'function') ? args.pop() : false;\n    // if the last argument is a function, assume its a callback\n    var usedCB;\n    if (tempCB) {\n      // if it was a callback, create a new callback which calls it,\n      // but do so async so we don't trap any errors\n      usedCB = function (err, resp) {\n        process.nextTick(function () {\n          tempCB(err, resp);\n        });\n      };\n    }\n    var promise = new PouchPromise(function (fulfill, reject) {\n      var resp;\n      try {\n        var callback = once(function (err, mesg) {\n          if (err) {\n            reject(err);\n          } else {\n            fulfill(mesg);\n          }\n        });\n        // create a callback for this invocation\n        // apply the function in the orig context\n        args.push(callback);\n        resp = func.apply(self, args);\n        if (resp && typeof resp.then === 'function') {\n          fulfill(resp);\n        }\n      } catch (e) {\n        reject(e);\n      }\n    });\n    // if there is a callback, call it back\n    if (usedCB) {\n      promise.then(function (result) {\n        usedCB(null, result);\n      }, usedCB);\n    }\n    return promise;\n  });\n}\n\nvar log = debug('pouchdb:api');\n\nfunction adapterFun(name, callback) {\n  function logApiCall(self, name, args) {\n    /* istanbul ignore if */\n    if (log.enabled) {\n      var logArgs = [self.name, name];\n      for (var i = 0; i < args.length - 1; i++) {\n        logArgs.push(args[i]);\n      }\n      log.apply(null, logArgs);\n\n      // override the callback itself to log the response\n      var origCallback = args[args.length - 1];\n      args[args.length - 1] = function (err, res) {\n        var responseArgs = [self.name, name];\n        responseArgs = responseArgs.concat(\n          err ? ['error', err] : ['success', res]\n        );\n        log.apply(null, responseArgs);\n        origCallback(err, res);\n      };\n    }\n  }\n\n  return toPromise(getArguments(function (args) {\n    if (this._closed) {\n      return PouchPromise.reject(new Error('database is closed'));\n    }\n    if (this._destroyed) {\n      return PouchPromise.reject(new Error('database is destroyed'));\n    }\n    var self = this;\n    logApiCall(self, name, args);\n    if (!this.taskqueue.isReady) {\n      return new PouchPromise(function (fulfill, reject) {\n        self.taskqueue.addTask(function (failed) {\n          if (failed) {\n            reject(failed);\n          } else {\n            fulfill(self[name].apply(self, args));\n          }\n        });\n      });\n    }\n    return callback.apply(this, args);\n  }));\n}\n\n// like underscore/lodash _.pick()\nfunction pick(obj, arr) {\n  var res = {};\n  for (var i = 0, len = arr.length; i < len; i++) {\n    var prop = arr[i];\n    if (prop in obj) {\n      res[prop] = obj[prop];\n    }\n  }\n  return res;\n}\n\n// Most browsers throttle concurrent requests at 6, so it's silly\n// to shim _bulk_get by trying to launch potentially hundreds of requests\n// and then letting the majority time out. We can handle this ourselves.\nvar MAX_NUM_CONCURRENT_REQUESTS = 6;\n\nfunction identityFunction(x) {\n  return x;\n}\n\nfunction formatResultForOpenRevsGet(result) {\n  return [{\n    ok: result\n  }];\n}\n\n// shim for P/CouchDB adapters that don't directly implement _bulk_get\nfunction bulkGet(db, opts, callback) {\n  var requests = opts.docs;\n\n  // consolidate into one request per doc if possible\n  var requestsById = {};\n  requests.forEach(function (request) {\n    if (request.id in requestsById) {\n      requestsById[request.id].push(request);\n    } else {\n      requestsById[request.id] = [request];\n    }\n  });\n\n  var numDocs = Object.keys(requestsById).length;\n  var numDone = 0;\n  var perDocResults = new Array(numDocs);\n\n  function collapseResultsAndFinish() {\n    var results = [];\n    perDocResults.forEach(function (res) {\n      res.docs.forEach(function (info) {\n        results.push({\n          id: res.id,\n          docs: [info]\n        });\n      });\n    });\n    callback(null, {results: results});\n  }\n\n  function checkDone() {\n    if (++numDone === numDocs) {\n      collapseResultsAndFinish();\n    }\n  }\n\n  function gotResult(docIndex, id, docs) {\n    perDocResults[docIndex] = {id: id, docs: docs};\n    checkDone();\n  }\n\n  var allRequests = Object.keys(requestsById);\n\n  var i = 0;\n\n  function nextBatch() {\n\n    if (i >= allRequests.length) {\n      return;\n    }\n\n    var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);\n    var batch = allRequests.slice(i, upTo);\n    processBatch(batch, i);\n    i += batch.length;\n  }\n\n  function processBatch(batch, offset) {\n    batch.forEach(function (docId, j) {\n      var docIdx = offset + j;\n      var docRequests = requestsById[docId];\n\n      // just use the first request as the \"template\"\n      // TODO: The _bulk_get API allows for more subtle use cases than this,\n      // but for now it is unlikely that there will be a mix of different\n      // \"atts_since\" or \"attachments\" in the same request, since it's just\n      // replicate.js that is using this for the moment.\n      // Also, atts_since is aspirational, since we don't support it yet.\n      var docOpts = pick(docRequests[0], ['atts_since', 'attachments']);\n      docOpts.open_revs = docRequests.map(function (request) {\n        // rev is optional, open_revs disallowed\n        return request.rev;\n      });\n\n      // remove falsey / undefined revisions\n      docOpts.open_revs = docOpts.open_revs.filter(identityFunction);\n\n      var formatResult = identityFunction;\n\n      if (docOpts.open_revs.length === 0) {\n        delete docOpts.open_revs;\n\n        // when fetching only the \"winning\" leaf,\n        // transform the result so it looks like an open_revs\n        // request\n        formatResult = formatResultForOpenRevsGet;\n      }\n\n      // globally-supplied options\n      ['revs', 'attachments', 'binary', 'ajax'].forEach(function (param) {\n        if (param in opts) {\n          docOpts[param] = opts[param];\n        }\n      });\n      db.get(docId, docOpts, function (err, res) {\n        var result;\n        /* istanbul ignore if */\n        if (err) {\n          result = [{error: err}];\n        } else {\n          result = formatResult(res);\n        }\n        gotResult(docIdx, docId, result);\n        nextBatch();\n      });\n    });\n  }\n\n  nextBatch();\n\n}\n\nfunction isChromeApp() {\n  return (typeof chrome !== \"undefined\" &&\n    typeof chrome.storage !== \"undefined\" &&\n    typeof chrome.storage.local !== \"undefined\");\n}\n\nvar hasLocal;\n\nif (isChromeApp()) {\n  hasLocal = false;\n} else {\n  try {\n    localStorage.setItem('_pouch_check_localstorage', 1);\n    hasLocal = !!localStorage.getItem('_pouch_check_localstorage');\n  } catch (e) {\n    hasLocal = false;\n  }\n}\n\nfunction hasLocalStorage() {\n  return hasLocal;\n}\n\ninherits(Changes$1, events.EventEmitter);\n\n/* istanbul ignore next */\nfunction attachBrowserEvents(self) {\n  if (isChromeApp()) {\n    chrome.storage.onChanged.addListener(function (e) {\n      // make sure it's event addressed to us\n      if (e.db_name != null) {\n        //object only has oldValue, newValue members\n        self.emit(e.dbName.newValue);\n      }\n    });\n  } else if (hasLocalStorage()) {\n    if (typeof addEventListener !== 'undefined') {\n      addEventListener(\"storage\", function (e) {\n        self.emit(e.key);\n      });\n    } else { // old IE\n      window.attachEvent(\"storage\", function (e) {\n        self.emit(e.key);\n      });\n    }\n  }\n}\n\nfunction Changes$1() {\n  events.EventEmitter.call(this);\n  this._listeners = {};\n\n  attachBrowserEvents(this);\n}\nChanges$1.prototype.addListener = function (dbName, id, db, opts) {\n  /* istanbul ignore if */\n  if (this._listeners[id]) {\n    return;\n  }\n  var self = this;\n  var inprogress = false;\n  function eventFunction() {\n    /* istanbul ignore if */\n    if (!self._listeners[id]) {\n      return;\n    }\n    if (inprogress) {\n      inprogress = 'waiting';\n      return;\n    }\n    inprogress = true;\n    var changesOpts = pick(opts, [\n      'style', 'include_docs', 'attachments', 'conflicts', 'filter',\n      'doc_ids', 'view', 'since', 'query_params', 'binary'\n    ]);\n\n    /* istanbul ignore next */\n    function onError() {\n      inprogress = false;\n    }\n\n    db.changes(changesOpts).on('change', function (c) {\n      if (c.seq > opts.since && !opts.cancelled) {\n        opts.since = c.seq;\n        opts.onChange(c);\n      }\n    }).on('complete', function () {\n      if (inprogress === 'waiting') {\n        setTimeout(function (){\n          eventFunction();\n        },0);\n      }\n      inprogress = false;\n    }).on('error', onError);\n  }\n  this._listeners[id] = eventFunction;\n  this.on(dbName, eventFunction);\n};\n\nChanges$1.prototype.removeListener = function (dbName, id) {\n  /* istanbul ignore if */\n  if (!(id in this._listeners)) {\n    return;\n  }\n  events.EventEmitter.prototype.removeListener.call(this, dbName,\n    this._listeners[id]);\n  delete this._listeners[id];\n};\n\n\n/* istanbul ignore next */\nChanges$1.prototype.notifyLocalWindows = function (dbName) {\n  //do a useless change on a storage thing\n  //in order to get other windows's listeners to activate\n  if (isChromeApp()) {\n    chrome.storage.local.set({dbName: dbName});\n  } else if (hasLocalStorage()) {\n    localStorage[dbName] = (localStorage[dbName] === \"a\") ? \"b\" : \"a\";\n  }\n};\n\nChanges$1.prototype.notify = function (dbName) {\n  this.emit(dbName);\n  this.notifyLocalWindows(dbName);\n};\n\nfunction guardedConsole(method) {\n  /* istanbul ignore else */\n  if (console !== 'undefined' && method in console) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    console[method].apply(console, args);\n  }\n}\n\nfunction randomNumber(min, max) {\n  var maxTimeout = 600000; // Hard-coded default of 10 minutes\n  min = parseInt(min, 10) || 0;\n  max = parseInt(max, 10);\n  if (max !== max || max <= min) {\n    max = (min || 1) << 1; //doubling\n  } else {\n    max = max + 1;\n  }\n  // In order to not exceed maxTimeout, pick a random value between half of maxTimeout and maxTimeout\n  if(max > maxTimeout) {\n    min = maxTimeout >> 1; // divide by two\n    max = maxTimeout;\n  }\n  var ratio = Math.random();\n  var range = max - min;\n\n  return ~~(range * ratio + min); // ~~ coerces to an int, but fast.\n}\n\nfunction defaultBackOff(min) {\n  var max = 0;\n  if (!min) {\n    max = 2000;\n  }\n  return randomNumber(min, max);\n}\n\n// designed to give info to browser users, who are disturbed\n// when they see http errors in the console\nfunction explainError(status, str) {\n  guardedConsole('info', 'The above ' + status + ' is totally normal. ' + str);\n}\n\ninherits(PouchError, Error);\n\nfunction PouchError(opts) {\n  Error.call(this, opts.reason);\n  this.status = opts.status;\n  this.name = opts.error;\n  this.message = opts.reason;\n  this.error = true;\n}\n\nPouchError.prototype.toString = function () {\n  return JSON.stringify({\n    status: this.status,\n    name: this.name,\n    message: this.message,\n    reason: this.reason\n  });\n};\n\nvar UNAUTHORIZED = new PouchError({\n  status: 401,\n  error: 'unauthorized',\n  reason: \"Name or password is incorrect.\"\n});\n\nvar MISSING_BULK_DOCS = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: \"Missing JSON list of 'docs'\"\n});\n\nvar MISSING_DOC = new PouchError({\n  status: 404,\n  error: 'not_found',\n  reason: 'missing'\n});\n\nvar REV_CONFLICT = new PouchError({\n  status: 409,\n  error: 'conflict',\n  reason: 'Document update conflict'\n});\n\nvar INVALID_ID = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: '_id field must contain a string'\n});\n\nvar MISSING_ID = new PouchError({\n  status: 412,\n  error: 'missing_id',\n  reason: '_id is required for puts'\n});\n\nvar RESERVED_ID = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Only reserved document ids may start with underscore.'\n});\n\nvar NOT_OPEN = new PouchError({\n  status: 412,\n  error: 'precondition_failed',\n  reason: 'Database not open'\n});\n\nvar UNKNOWN_ERROR = new PouchError({\n  status: 500,\n  error: 'unknown_error',\n  reason: 'Database encountered an unknown error'\n});\n\nvar BAD_ARG = new PouchError({\n  status: 500,\n  error: 'badarg',\n  reason: 'Some query argument is invalid'\n});\n\nvar INVALID_REQUEST = new PouchError({\n  status: 400,\n  error: 'invalid_request',\n  reason: 'Request was invalid'\n});\n\nvar QUERY_PARSE_ERROR = new PouchError({\n  status: 400,\n  error: 'query_parse_error',\n  reason: 'Some query parameter is invalid'\n});\n\nvar DOC_VALIDATION = new PouchError({\n  status: 500,\n  error: 'doc_validation',\n  reason: 'Bad special document member'\n});\n\nvar BAD_REQUEST = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Something wrong with the request'\n});\n\nvar NOT_AN_OBJECT = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Document must be a JSON object'\n});\n\nvar DB_MISSING = new PouchError({\n  status: 404,\n  error: 'not_found',\n  reason: 'Database not found'\n});\n\nvar IDB_ERROR = new PouchError({\n  status: 500,\n  error: 'indexed_db_went_bad',\n  reason: 'unknown'\n});\n\nvar WSQ_ERROR = new PouchError({\n  status: 500,\n  error: 'web_sql_went_bad',\n  reason: 'unknown'\n});\n\nvar LDB_ERROR = new PouchError({\n  status: 500,\n  error: 'levelDB_went_went_bad',\n  reason: 'unknown'\n});\n\nvar FORBIDDEN = new PouchError({\n  status: 403,\n  error: 'forbidden',\n  reason: 'Forbidden by design doc validate_doc_update function'\n});\n\nvar INVALID_REV = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Invalid rev format'\n});\n\nvar FILE_EXISTS = new PouchError({\n  status: 412,\n  error: 'file_exists',\n  reason: 'The database could not be created, the file already exists.'\n});\n\nvar MISSING_STUB = new PouchError({\n  status: 412,\n  error: 'missing_stub'\n});\n\nvar INVALID_URL = new PouchError({\n  status: 413,\n  error: 'invalid_url',\n  reason: 'Provided URL is invalid'\n});\n\nfunction createError(error, reason) {\n  function CustomPouchError(reason) {\n    // inherit error properties from our parent error manually\n    // so as to allow proper JSON parsing.\n    /* jshint ignore:start */\n    for (var p in error) {\n      if (typeof error[p] !== 'function') {\n        this[p] = error[p];\n      }\n    }\n    /* jshint ignore:end */\n    if (reason !== undefined) {\n      this.reason = reason;\n    }\n  }\n  CustomPouchError.prototype = PouchError.prototype;\n  return new CustomPouchError(reason);\n}\n\nfunction generateErrorFromResponse(err) {\n\n  if (typeof err !== 'object') {\n    var data = err;\n    err = UNKNOWN_ERROR;\n    err.data = data;\n  }\n\n  if ('error' in err && err.error === 'conflict') {\n    err.name = 'conflict';\n    err.status = 409;\n  }\n\n  if (!('name' in err)) {\n    err.name = err.error || 'unknown';\n  }\n\n  if (!('status' in err)) {\n    err.status = 500;\n  }\n\n  if (!('message' in err)) {\n    err.message = err.message || err.reason;\n  }\n\n  return err;\n}\n\nfunction tryFilter(filter, doc, req) {\n  try {\n    return !filter(doc, req);\n  } catch (err) {\n    var msg = 'Filter function threw: ' + err.toString();\n    return createError(BAD_REQUEST, msg);\n  }\n}\n\nfunction filterChange(opts) {\n  var req = {};\n  var hasFilter = opts.filter && typeof opts.filter === 'function';\n  req.query = opts.query_params;\n\n  return function filter(change) {\n    if (!change.doc) {\n      // CSG sends events on the changes feed that don't have documents,\n      // this hack makes a whole lot of existing code robust.\n      change.doc = {};\n    }\n\n    var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);\n\n    if (typeof filterReturn === 'object') {\n      return filterReturn;\n    }\n\n    if (filterReturn) {\n      return false;\n    }\n\n    if (!opts.include_docs) {\n      delete change.doc;\n    } else if (!opts.attachments) {\n      for (var att in change.doc._attachments) {\n        /* istanbul ignore else */\n        if (change.doc._attachments.hasOwnProperty(att)) {\n          change.doc._attachments[att].stub = true;\n        }\n      }\n    }\n    return true;\n  };\n}\n\nfunction flatten(arrs) {\n  var res = [];\n  for (var i = 0, len = arrs.length; i < len; i++) {\n    res = res.concat(arrs[i]);\n  }\n  return res;\n}\n\n// Determine id an ID is valid\n//   - invalid IDs begin with an underescore that does not begin '_design' or\n//     '_local'\n//   - any other string value is a valid id\n// Returns the specific error object for each case\nfunction invalidIdError(id) {\n  var err;\n  if (!id) {\n    err = createError(MISSING_ID);\n  } else if (typeof id !== 'string') {\n    err = createError(INVALID_ID);\n  } else if (/^_/.test(id) && !(/^_(design|local)/).test(id)) {\n    err = createError(RESERVED_ID);\n  }\n  if (err) {\n    throw err;\n  }\n}\n\nfunction listenerCount(ee, type) {\n  return 'listenerCount' in ee ? ee.listenerCount(type) :\n                                 events.EventEmitter.listenerCount(ee, type);\n}\n\nfunction parseDesignDocFunctionName(s) {\n  if (!s) {\n    return null;\n  }\n  var parts = s.split('/');\n  if (parts.length === 2) {\n    return parts;\n  }\n  if (parts.length === 1) {\n    return [s, s];\n  }\n  return null;\n}\n\nfunction normalizeDesignDocFunctionName(s) {\n  var normalized = parseDesignDocFunctionName(s);\n  return normalized ? normalized.join('/') : null;\n}\n\n// originally parseUri 1.2.2, now patched by us\n// (c) Steven Levithan <stevenlevithan.com>\n// MIT License\nvar keys = [\"source\", \"protocol\", \"authority\", \"userInfo\", \"user\", \"password\",\n    \"host\", \"port\", \"relative\", \"path\", \"directory\", \"file\", \"query\", \"anchor\"];\nvar qName =\"queryKey\";\nvar qParser = /(?:^|&)([^&=]*)=?([^&]*)/g;\n\n// use the \"loose\" parser\n/* jshint maxlen: false */\nvar parser = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nfunction parseUri(str) {\n  var m = parser.exec(str);\n  var uri = {};\n  var i = 14;\n\n  while (i--) {\n    var key = keys[i];\n    var value = m[i] || \"\";\n    var encoded = ['user', 'password'].indexOf(key) !== -1;\n    uri[key] = encoded ? decodeURIComponent(value) : value;\n  }\n\n  uri[qName] = {};\n  uri[keys[12]].replace(qParser, function ($0, $1, $2) {\n    if ($1) {\n      uri[qName][$1] = $2;\n    }\n  });\n\n  return uri;\n}\n\n// this is essentially the \"update sugar\" function from daleharvey/pouchdb#1388\n// the diffFun tells us what delta to apply to the doc.  it either returns\n// the doc, or false if it doesn't need to do an update after all\nfunction upsert(db, docId, diffFun) {\n  return new PouchPromise(function (fulfill, reject) {\n    db.get(docId, function (err, doc) {\n      if (err) {\n        /* istanbul ignore next */\n        if (err.status !== 404) {\n          return reject(err);\n        }\n        doc = {};\n      }\n\n      // the user might change the _rev, so save it for posterity\n      var docRev = doc._rev;\n      var newDoc = diffFun(doc);\n\n      if (!newDoc) {\n        // if the diffFun returns falsy, we short-circuit as\n        // an optimization\n        return fulfill({updated: false, rev: docRev});\n      }\n\n      // users aren't allowed to modify these values,\n      // so reset them here\n      newDoc._id = docId;\n      newDoc._rev = docRev;\n      fulfill(tryAndPut(db, newDoc, diffFun));\n    });\n  });\n}\n\nfunction tryAndPut(db, doc, diffFun) {\n  return db.put(doc).then(function (res) {\n    return {\n      updated: true,\n      rev: res.rev\n    };\n  }, function (err) {\n    /* istanbul ignore next */\n    if (err.status !== 409) {\n      throw err;\n    }\n    return upsert(db, doc._id, diffFun);\n  });\n}\n\n// BEGIN Math.uuid.js\n\n/*!\nMath.uuid.js (v1.4)\nhttp://www.broofa.com\nmailto:robert@broofa.com\n\nCopyright (c) 2010 Robert Kieffer\nDual licensed under the MIT and GPL licenses.\n*/\n\n/*\n * Generate a random uuid.\n *\n * USAGE: Math.uuid(length, radix)\n *   length - the desired number of characters\n *   radix  - the number of allowable values for each character.\n *\n * EXAMPLES:\n *   // No arguments  - returns RFC4122, version 4 ID\n *   >>> Math.uuid()\n *   \"92329D39-6F5C-4520-ABFC-AAB64544E172\"\n *\n *   // One argument - returns ID of the specified length\n *   >>> Math.uuid(15)     // 15 character ID (default base=62)\n *   \"VcydxgltxrVZSTV\"\n *\n *   // Two arguments - returns ID of the specified length, and radix. \n *   // (Radix must be <= 62)\n *   >>> Math.uuid(8, 2)  // 8 character ID (base=2)\n *   \"01001010\"\n *   >>> Math.uuid(8, 10) // 8 character ID (base=10)\n *   \"47473046\"\n *   >>> Math.uuid(8, 16) // 8 character ID (base=16)\n *   \"098F4D35\"\n */\nvar chars = (\n  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' +\n  'abcdefghijklmnopqrstuvwxyz'\n).split('');\nfunction getValue(radix) {\n  return 0 | Math.random() * radix;\n}\nfunction uuid(len, radix) {\n  radix = radix || chars.length;\n  var out = '';\n  var i = -1;\n\n  if (len) {\n    // Compact form\n    while (++i < len) {\n      out += chars[getValue(radix)];\n    }\n    return out;\n  }\n    // rfc4122, version 4 form\n    // Fill in random data.  At i==19 set the high bits of clock sequence as\n    // per rfc4122, sec. 4.1.5\n  while (++i < 36) {\n    switch (i) {\n      case 8:\n      case 13:\n      case 18:\n      case 23:\n        out += '-';\n        break;\n      case 19:\n        out += chars[(getValue(16) & 0x3) | 0x8];\n        break;\n      default:\n        out += chars[getValue(16)];\n    }\n  }\n\n  return out;\n}\n\n// We fetch all leafs of the revision tree, and sort them based on tree length\n// and whether they were deleted, undeleted documents with the longest revision\n// tree (most edits) win\n// The final sort algorithm is slightly documented in a sidebar here:\n// http://guide.couchdb.org/draft/conflicts.html\nfunction winningRev(metadata) {\n  var winningId;\n  var winningPos;\n  var winningDeleted;\n  var toVisit = metadata.rev_tree.slice();\n  var node;\n  while ((node = toVisit.pop())) {\n    var tree = node.ids;\n    var branches = tree[2];\n    var pos = node.pos;\n    if (branches.length) { // non-leaf\n      for (var i = 0, len = branches.length; i < len; i++) {\n        toVisit.push({pos: pos + 1, ids: branches[i]});\n      }\n      continue;\n    }\n    var deleted = !!tree[1].deleted;\n    var id = tree[0];\n    // sort by deleted, then pos, then id\n    if (!winningId || (winningDeleted !== deleted ? winningDeleted :\n        winningPos !== pos ? winningPos < pos : winningId < id)) {\n      winningId = id;\n      winningPos = pos;\n      winningDeleted = deleted;\n    }\n  }\n\n  return winningPos + '-' + winningId;\n}\n\n// Pretty much all below can be combined into a higher order function to\n// traverse revisions\n// The return value from the callback will be passed as context to all\n// children of that node\nfunction traverseRevTree(revs, callback) {\n  var toVisit = revs.slice();\n\n  var node;\n  while ((node = toVisit.pop())) {\n    var pos = node.pos;\n    var tree = node.ids;\n    var branches = tree[2];\n    var newCtx =\n      callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);\n    for (var i = 0, len = branches.length; i < len; i++) {\n      toVisit.push({pos: pos + 1, ids: branches[i], ctx: newCtx});\n    }\n  }\n}\n\nfunction sortByPos(a, b) {\n  return a.pos - b.pos;\n}\n\nfunction collectLeaves(revs) {\n  var leaves = [];\n  traverseRevTree(revs, function (isLeaf, pos, id, acc, opts) {\n    if (isLeaf) {\n      leaves.push({rev: pos + \"-\" + id, pos: pos, opts: opts});\n    }\n  });\n  leaves.sort(sortByPos).reverse();\n  for (var i = 0, len = leaves.length; i < len; i++) {\n    delete leaves[i].pos;\n  }\n  return leaves;\n}\n\n// returns revs of all conflicts that is leaves such that\n// 1. are not deleted and\n// 2. are different than winning revision\nfunction collectConflicts(metadata) {\n  var win = winningRev(metadata);\n  var leaves = collectLeaves(metadata.rev_tree);\n  var conflicts = [];\n  for (var i = 0, len = leaves.length; i < len; i++) {\n    var leaf = leaves[i];\n    if (leaf.rev !== win && !leaf.opts.deleted) {\n      conflicts.push(leaf.rev);\n    }\n  }\n  return conflicts;\n}\n\n// compact a tree by marking its non-leafs as missing,\n// and return a list of revs to delete\nfunction compactTree(metadata) {\n  var revs = [];\n  traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n                                               revHash, ctx, opts) {\n    if (opts.status === 'available' && !isLeaf) {\n      revs.push(pos + '-' + revHash);\n      opts.status = 'missing';\n    }\n  });\n  return revs;\n}\n\n// build up a list of all the paths to the leafs in this revision tree\nfunction rootToLeaf(revs) {\n  var paths = [];\n  var toVisit = revs.slice();\n  var node;\n  while ((node = toVisit.pop())) {\n    var pos = node.pos;\n    var tree = node.ids;\n    var id = tree[0];\n    var opts = tree[1];\n    var branches = tree[2];\n    var isLeaf = branches.length === 0;\n\n    var history = node.history ? node.history.slice() : [];\n    history.push({id: id, opts: opts});\n    if (isLeaf) {\n      paths.push({pos: (pos + 1 - history.length), ids: history});\n    }\n    for (var i = 0, len = branches.length; i < len; i++) {\n      toVisit.push({pos: pos + 1, ids: branches[i], history: history});\n    }\n  }\n  return paths.reverse();\n}\n\n// for a better overview of what this is doing, read:\n// https://github.com/apache/couchdb-couch/blob/master/src/couch_key_tree.erl\n//\n// But for a quick intro, CouchDB uses a revision tree to store a documents\n// history, A -> B -> C, when a document has conflicts, that is a branch in the\n// tree, A -> (B1 | B2 -> C), We store these as a nested array in the format\n//\n// KeyTree = [Path ... ]\n// Path = {pos: position_from_root, ids: Tree}\n// Tree = [Key, Opts, [Tree, ...]], in particular single node: [Key, []]\n\nfunction sortByPos$1(a, b) {\n  return a.pos - b.pos;\n}\n\n// classic binary search\nfunction binarySearch(arr, item, comparator) {\n  var low = 0;\n  var high = arr.length;\n  var mid;\n  while (low < high) {\n    mid = (low + high) >>> 1;\n    if (comparator(arr[mid], item) < 0) {\n      low = mid + 1;\n    } else {\n      high = mid;\n    }\n  }\n  return low;\n}\n\n// assuming the arr is sorted, insert the item in the proper place\nfunction insertSorted(arr, item, comparator) {\n  var idx = binarySearch(arr, item, comparator);\n  arr.splice(idx, 0, item);\n}\n\n// Turn a path as a flat array into a tree with a single branch.\n// If any should be stemmed from the beginning of the array, that's passed\n// in as the second argument\nfunction pathToTree(path, numStemmed) {\n  var root;\n  var leaf;\n  for (var i = numStemmed, len = path.length; i < len; i++) {\n    var node = path[i];\n    var currentLeaf = [node.id, node.opts, []];\n    if (leaf) {\n      leaf[2].push(currentLeaf);\n      leaf = currentLeaf;\n    } else {\n      root = leaf = currentLeaf;\n    }\n  }\n  return root;\n}\n\n// compare the IDs of two trees\nfunction compareTree(a, b) {\n  return a[0] < b[0] ? -1 : 1;\n}\n\n// Merge two trees together\n// The roots of tree1 and tree2 must be the same revision\nfunction mergeTree(in_tree1, in_tree2) {\n  var queue = [{tree1: in_tree1, tree2: in_tree2}];\n  var conflicts = false;\n  while (queue.length > 0) {\n    var item = queue.pop();\n    var tree1 = item.tree1;\n    var tree2 = item.tree2;\n\n    if (tree1[1].status || tree2[1].status) {\n      tree1[1].status =\n        (tree1[1].status ===  'available' ||\n        tree2[1].status === 'available') ? 'available' : 'missing';\n    }\n\n    for (var i = 0; i < tree2[2].length; i++) {\n      if (!tree1[2][0]) {\n        conflicts = 'new_leaf';\n        tree1[2][0] = tree2[2][i];\n        continue;\n      }\n\n      var merged = false;\n      for (var j = 0; j < tree1[2].length; j++) {\n        if (tree1[2][j][0] === tree2[2][i][0]) {\n          queue.push({tree1: tree1[2][j], tree2: tree2[2][i]});\n          merged = true;\n        }\n      }\n      if (!merged) {\n        conflicts = 'new_branch';\n        insertSorted(tree1[2], tree2[2][i], compareTree);\n      }\n    }\n  }\n  return {conflicts: conflicts, tree: in_tree1};\n}\n\nfunction doMerge(tree, path, dontExpand) {\n  var restree = [];\n  var conflicts = false;\n  var merged = false;\n  var res;\n\n  if (!tree.length) {\n    return {tree: [path], conflicts: 'new_leaf'};\n  }\n\n  for (var i = 0, len = tree.length; i < len; i++) {\n    var branch = tree[i];\n    if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {\n      // Paths start at the same position and have the same root, so they need\n      // merged\n      res = mergeTree(branch.ids, path.ids);\n      restree.push({pos: branch.pos, ids: res.tree});\n      conflicts = conflicts || res.conflicts;\n      merged = true;\n    } else if (dontExpand !== true) {\n      // The paths start at a different position, take the earliest path and\n      // traverse up until it as at the same point from root as the path we\n      // want to merge.  If the keys match we return the longer path with the\n      // other merged After stemming we dont want to expand the trees\n\n      var t1 = branch.pos < path.pos ? branch : path;\n      var t2 = branch.pos < path.pos ? path : branch;\n      var diff = t2.pos - t1.pos;\n\n      var candidateParents = [];\n\n      var trees = [];\n      trees.push({ids: t1.ids, diff: diff, parent: null, parentIdx: null});\n      while (trees.length > 0) {\n        var item = trees.pop();\n        if (item.diff === 0) {\n          if (item.ids[0] === t2.ids[0]) {\n            candidateParents.push(item);\n          }\n          continue;\n        }\n        var elements = item.ids[2];\n        for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {\n          trees.push({\n            ids: elements[j],\n            diff: item.diff - 1,\n            parent: item.ids,\n            parentIdx: j\n          });\n        }\n      }\n\n      var el = candidateParents[0];\n\n      if (!el) {\n        restree.push(branch);\n      } else {\n        res = mergeTree(el.ids, t2.ids);\n        el.parent[2][el.parentIdx] = res.tree;\n        restree.push({pos: t1.pos, ids: t1.ids});\n        conflicts = conflicts || res.conflicts;\n        merged = true;\n      }\n    } else {\n      restree.push(branch);\n    }\n  }\n\n  // We didnt find\n  if (!merged) {\n    restree.push(path);\n  }\n\n  restree.sort(sortByPos$1);\n\n  return {\n    tree: restree,\n    conflicts: conflicts || 'internal_node'\n  };\n}\n\n// To ensure we dont grow the revision tree infinitely, we stem old revisions\nfunction stem(tree, depth) {\n  // First we break out the tree into a complete list of root to leaf paths\n  var paths = rootToLeaf(tree);\n  var maybeStem = {};\n\n  var result;\n  for (var i = 0, len = paths.length; i < len; i++) {\n    // Then for each path, we cut off the start of the path based on the\n    // `depth` to stem to, and generate a new set of flat trees\n    var path = paths[i];\n    var stemmed = path.ids;\n    var numStemmed = Math.max(0, stemmed.length - depth);\n    var stemmedNode = {\n      pos: path.pos + numStemmed,\n      ids: pathToTree(stemmed, numStemmed)\n    };\n\n    for (var s = 0; s < numStemmed; s++) {\n      var rev = (path.pos + s) + '-' + stemmed[s].id;\n      maybeStem[rev] = true;\n    }\n\n    // Then we remerge all those flat trees together, ensuring that we dont\n    // connect trees that would go beyond the depth limit\n    if (result) {\n      result = doMerge(result, stemmedNode, true).tree;\n    } else {\n      result = [stemmedNode];\n    }\n  }\n\n  traverseRevTree(result, function (isLeaf, pos, revHash) {\n    // some revisions may have been removed in a branch but not in another\n    delete maybeStem[pos + '-' + revHash];\n  });\n\n  return {\n    tree: result,\n    revs: Object.keys(maybeStem)\n  };\n}\n\nfunction merge(tree, path, depth) {\n  var newTree = doMerge(tree, path);\n  var stemmed = stem(newTree.tree, depth);\n  return {\n    tree: stemmed.tree,\n    stemmedRevs: stemmed.revs,\n    conflicts: newTree.conflicts\n  };\n}\n\n// return true if a rev exists in the rev tree, false otherwise\nfunction revExists(revs, rev) {\n  var toVisit = revs.slice();\n  var splitRev = rev.split('-');\n  var targetPos = parseInt(splitRev[0], 10);\n  var targetId = splitRev[1];\n\n  var node;\n  while ((node = toVisit.pop())) {\n    if (node.pos === targetPos && node.ids[0] === targetId) {\n      return true;\n    }\n    var branches = node.ids[2];\n    for (var i = 0, len = branches.length; i < len; i++) {\n      toVisit.push({pos: node.pos + 1, ids: branches[i]});\n    }\n  }\n  return false;\n}\n\nfunction getTrees(node) {\n  return node.ids;\n}\n\n// check if a specific revision of a doc has been deleted\n//  - metadata: the metadata object from the doc store\n//  - rev: (optional) the revision to check. defaults to winning revision\nfunction isDeleted(metadata, rev) {\n  if (!rev) {\n    rev = winningRev(metadata);\n  }\n  var id = rev.substring(rev.indexOf('-') + 1);\n  var toVisit = metadata.rev_tree.map(getTrees);\n\n  var tree;\n  while ((tree = toVisit.pop())) {\n    if (tree[0] === id) {\n      return !!tree[1].deleted;\n    }\n    toVisit = toVisit.concat(tree[2]);\n  }\n}\n\nfunction isLocalId(id) {\n  return (/^_local/).test(id);\n}\n\nfunction evalFilter(input) {\n  return scopedEval('\"use strict\";\\nreturn ' + input + ';', {});\n}\n\nfunction evalView(input) {\n  var code = [\n    'return function(doc) {',\n    '  \"use strict\";',\n    '  var emitted = false;',\n    '  var emit = function (a, b) {',\n    '    emitted = true;',\n    '  };',\n    '  var view = ' + input + ';',\n    '  view(doc);',\n    '  if (emitted) {',\n    '    return true;',\n    '  }',\n    '};'\n  ].join('\\n');\n\n  return scopedEval(code, {});\n}\n\ninherits(Changes, events.EventEmitter);\n\nfunction tryCatchInChangeListener(self, change) {\n  // isolate try/catches to avoid V8 deoptimizations\n  try {\n    self.emit('change', change);\n  } catch (e) {\n    guardedConsole('error', 'Error in .on(\"change\", function):', e);\n  }\n}\n\nfunction Changes(db, opts, callback) {\n  events.EventEmitter.call(this);\n  var self = this;\n  this.db = db;\n  opts = opts ? clone(opts) : {};\n  var complete = opts.complete = once(function (err, resp) {\n    if (err) {\n      if (listenerCount(self, 'error') > 0) {\n        self.emit('error', err);\n      }\n    } else {\n      self.emit('complete', resp);\n    }\n    self.removeAllListeners();\n    db.removeListener('destroyed', onDestroy);\n  });\n  if (callback) {\n    self.on('complete', function (resp) {\n      callback(null, resp);\n    });\n    self.on('error', callback);\n  }\n  function onDestroy() {\n    self.cancel();\n  }\n  db.once('destroyed', onDestroy);\n\n  opts.onChange = function (change) {\n    /* istanbul ignore if */\n    if (opts.isCancelled) {\n      return;\n    }\n    tryCatchInChangeListener(self, change);\n  };\n\n  var promise = new PouchPromise(function (fulfill, reject) {\n    opts.complete = function (err, res) {\n      if (err) {\n        reject(err);\n      } else {\n        fulfill(res);\n      }\n    };\n  });\n  self.once('cancel', function () {\n    db.removeListener('destroyed', onDestroy);\n    opts.complete(null, {status: 'cancelled'});\n  });\n  this.then = promise.then.bind(promise);\n  this['catch'] = promise['catch'].bind(promise);\n  this.then(function (result) {\n    complete(null, result);\n  }, complete);\n\n\n\n  if (!db.taskqueue.isReady) {\n    db.taskqueue.addTask(function (failed) {\n      if (failed) {\n        opts.complete(failed);\n      } else if (self.isCancelled) {\n        self.emit('cancel');\n      } else {\n        self.doChanges(opts);\n      }\n    });\n  } else {\n    self.doChanges(opts);\n  }\n}\nChanges.prototype.cancel = function () {\n  this.isCancelled = true;\n  if (this.db.taskqueue.isReady) {\n    this.emit('cancel');\n  }\n};\nfunction processChange(doc, metadata, opts) {\n  var changeList = [{rev: doc._rev}];\n  if (opts.style === 'all_docs') {\n    changeList = collectLeaves(metadata.rev_tree)\n    .map(function (x) { return {rev: x.rev}; });\n  }\n  var change = {\n    id: metadata.id,\n    changes: changeList,\n    doc: doc\n  };\n\n  if (isDeleted(metadata, doc._rev)) {\n    change.deleted = true;\n  }\n  if (opts.conflicts) {\n    change.doc._conflicts = collectConflicts(metadata);\n    if (!change.doc._conflicts.length) {\n      delete change.doc._conflicts;\n    }\n  }\n  return change;\n}\n\nChanges.prototype.doChanges = function (opts) {\n  var self = this;\n  var callback = opts.complete;\n\n  opts = clone(opts);\n  if ('live' in opts && !('continuous' in opts)) {\n    opts.continuous = opts.live;\n  }\n  opts.processChange = processChange;\n\n  if (opts.since === 'latest') {\n    opts.since = 'now';\n  }\n  if (!opts.since) {\n    opts.since = 0;\n  }\n  if (opts.since === 'now') {\n    this.db.info().then(function (info) {\n      /* istanbul ignore if */\n      if (self.isCancelled) {\n        callback(null, {status: 'cancelled'});\n        return;\n      }\n      opts.since = info.update_seq;\n      self.doChanges(opts);\n    }, callback);\n    return;\n  }\n\n\n  if (opts.view && !opts.filter) {\n    opts.filter = '_view';\n  }\n\n  if (opts.filter && typeof opts.filter === 'string') {\n    if (opts.filter === '_view') {\n      opts.view = normalizeDesignDocFunctionName(opts.view);\n    } else {\n      opts.filter = normalizeDesignDocFunctionName(opts.filter);\n    }\n\n    if (this.db.type() !== 'http' && !opts.doc_ids) {\n      return this.filterChanges(opts);\n    }\n  }\n\n  if (!('descending' in opts)) {\n    opts.descending = false;\n  }\n\n  // 0 and 1 should return 1 document\n  opts.limit = opts.limit === 0 ? 1 : opts.limit;\n  opts.complete = callback;\n  var newPromise = this.db._changes(opts);\n  /* istanbul ignore else */\n  if (newPromise && typeof newPromise.cancel === 'function') {\n    var cancel = self.cancel;\n    self.cancel = getArguments(function (args) {\n      newPromise.cancel();\n      cancel.apply(this, args);\n    });\n  }\n};\n\nChanges.prototype.filterChanges = function (opts) {\n  var self = this;\n  var callback = opts.complete;\n  if (opts.filter === '_view') {\n    if (!opts.view || typeof opts.view !== 'string') {\n      var err = createError(BAD_REQUEST,\n        '`view` filter parameter not found or invalid.');\n      return callback(err);\n    }\n    // fetch a view from a design doc, make it behave like a filter\n    var viewName = parseDesignDocFunctionName(opts.view);\n    this.db.get('_design/' + viewName[0], function (err, ddoc) {\n      /* istanbul ignore if */\n      if (self.isCancelled) {\n        return callback(null, {status: 'cancelled'});\n      }\n      /* istanbul ignore next */\n      if (err) {\n        return callback(generateErrorFromResponse(err));\n      }\n      var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&\n        ddoc.views[viewName[1]].map;\n      if (!mapFun) {\n        return callback(createError(MISSING_DOC,\n          (ddoc.views ? 'missing json key: ' + viewName[1] :\n            'missing json key: views')));\n      }\n      opts.filter = evalView(mapFun);\n      self.doChanges(opts);\n    });\n  } else {\n    // fetch a filter from a design doc\n    var filterName = parseDesignDocFunctionName(opts.filter);\n    if (!filterName) {\n      return self.doChanges(opts);\n    }\n    this.db.get('_design/' + filterName[0], function (err, ddoc) {\n      /* istanbul ignore if */\n      if (self.isCancelled) {\n        return callback(null, {status: 'cancelled'});\n      }\n      /* istanbul ignore next */\n      if (err) {\n        return callback(generateErrorFromResponse(err));\n      }\n      var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];\n      if (!filterFun) {\n        return callback(createError(MISSING_DOC,\n          ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]\n            : 'missing json key: filters')));\n      }\n      opts.filter = evalFilter(filterFun);\n      self.doChanges(opts);\n    });\n  }\n};\n\n/*\n * A generic pouch adapter\n */\n\nfunction compare(left, right) {\n  return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// returns first element of arr satisfying callback predicate\nfunction arrayFirst(arr, callback) {\n  for (var i = 0; i < arr.length; i++) {\n    if (callback(arr[i], i) === true) {\n      return arr[i];\n    }\n  }\n}\n\n// Wrapper for functions that call the bulkdocs api with a single doc,\n// if the first result is an error, return an error\nfunction yankError(callback) {\n  return function (err, results) {\n    if (err || (results[0] && results[0].error)) {\n      callback(err || results[0]);\n    } else {\n      callback(null, results.length ? results[0]  : results);\n    }\n  };\n}\n\n// clean docs given to us by the user\nfunction cleanDocs(docs) {\n  for (var i = 0; i < docs.length; i++) {\n    var doc = docs[i];\n    if (doc._deleted) {\n      delete doc._attachments; // ignore atts for deleted docs\n    } else if (doc._attachments) {\n      // filter out extraneous keys from _attachments\n      var atts = Object.keys(doc._attachments);\n      for (var j = 0; j < atts.length; j++) {\n        var att = atts[j];\n        doc._attachments[att] = pick(doc._attachments[att],\n          ['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);\n      }\n    }\n  }\n}\n\n// compare two docs, first by _id then by _rev\nfunction compareByIdThenRev(a, b) {\n  var idCompare = compare(a._id, b._id);\n  if (idCompare !== 0) {\n    return idCompare;\n  }\n  var aStart = a._revisions ? a._revisions.start : 0;\n  var bStart = b._revisions ? b._revisions.start : 0;\n  return compare(aStart, bStart);\n}\n\n// for every node in a revision tree computes its distance from the closest\n// leaf\nfunction computeHeight(revs) {\n  var height = {};\n  var edges = [];\n  traverseRevTree(revs, function (isLeaf, pos, id, prnt) {\n    var rev = pos + \"-\" + id;\n    if (isLeaf) {\n      height[rev] = 0;\n    }\n    if (prnt !== undefined) {\n      edges.push({from: prnt, to: rev});\n    }\n    return rev;\n  });\n\n  edges.reverse();\n  edges.forEach(function (edge) {\n    if (height[edge.from] === undefined) {\n      height[edge.from] = 1 + height[edge.to];\n    } else {\n      height[edge.from] = Math.min(height[edge.from], 1 + height[edge.to]);\n    }\n  });\n  return height;\n}\n\nfunction allDocsKeysQuery(api, opts, callback) {\n  var keys =  ('limit' in opts) ?\n      opts.keys.slice(opts.skip, opts.limit + opts.skip) :\n      (opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;\n  if (opts.descending) {\n    keys.reverse();\n  }\n  if (!keys.length) {\n    return api._allDocs({limit: 0}, callback);\n  }\n  var finalResults = {\n    offset: opts.skip\n  };\n  return PouchPromise.all(keys.map(function (key) {\n    var subOpts = jsExtend.extend({key: key, deleted: 'ok'}, opts);\n    ['limit', 'skip', 'keys'].forEach(function (optKey) {\n      delete subOpts[optKey];\n    });\n    return new PouchPromise(function (resolve, reject) {\n      api._allDocs(subOpts, function (err, res) {\n        /* istanbul ignore if */\n        if (err) {\n          return reject(err);\n        }\n        finalResults.total_rows = res.total_rows;\n        resolve(res.rows[0] || {key: key, error: 'not_found'});\n      });\n    });\n  })).then(function (results) {\n    finalResults.rows = results;\n    return finalResults;\n  });\n}\n\n// all compaction is done in a queue, to avoid attaching\n// too many listeners at once\nfunction doNextCompaction(self) {\n  var task = self._compactionQueue[0];\n  var opts = task.opts;\n  var callback = task.callback;\n  self.get('_local/compaction').catch(function () {\n    return false;\n  }).then(function (doc) {\n    if (doc && doc.last_seq) {\n      opts.last_seq = doc.last_seq;\n    }\n    self._compact(opts, function (err, res) {\n      /* istanbul ignore if */\n      if (err) {\n        callback(err);\n      } else {\n        callback(null, res);\n      }\n      process.nextTick(function () {\n        self._compactionQueue.shift();\n        if (self._compactionQueue.length) {\n          doNextCompaction(self);\n        }\n      });\n    });\n  });\n}\n\nfunction attachmentNameError(name) {\n  if (name.charAt(0) === '_') {\n    return name + 'is not a valid attachment name, attachment ' +\n      'names cannot start with \\'_\\'';\n  }\n  return false;\n}\n\ninherits(AbstractPouchDB, events.EventEmitter);\n\nfunction AbstractPouchDB() {\n  events.EventEmitter.call(this);\n}\n\nAbstractPouchDB.prototype.post =\n  adapterFun('post', function (doc, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  if (typeof doc !== 'object' || Array.isArray(doc)) {\n    return callback(createError(NOT_AN_OBJECT));\n  }\n  this.bulkDocs({docs: [doc]}, opts, yankError(callback));\n});\n\nAbstractPouchDB.prototype.put = adapterFun('put', function (doc, opts, cb) {\n  if (typeof opts === 'function') {\n    cb = opts;\n    opts = {};\n  }\n  if (typeof doc !== 'object' || Array.isArray(doc)) {\n    return cb(createError(NOT_AN_OBJECT));\n  }\n  invalidIdError(doc._id);\n  if (isLocalId(doc._id) && typeof this._putLocal === 'function') {\n    if (doc._deleted) {\n      return this._removeLocal(doc, cb);\n    } else {\n      return this._putLocal(doc, cb);\n    }\n  }\n  if (typeof this._put === 'function' && opts.new_edits !== false) {\n    this._put(doc, opts, cb);\n  } else {\n    this.bulkDocs({docs: [doc]}, opts, yankError(cb));\n  }\n});\n\nAbstractPouchDB.prototype.putAttachment =\n  adapterFun('putAttachment', function (docId, attachmentId, rev,\n                                              blob, type) {\n  var api = this;\n  if (typeof type === 'function') {\n    type = blob;\n    blob = rev;\n    rev = null;\n  }\n  // Lets fix in https://github.com/pouchdb/pouchdb/issues/3267\n  /* istanbul ignore if */\n  if (typeof type === 'undefined') {\n    type = blob;\n    blob = rev;\n    rev = null;\n  }\n\n  function createAttachment(doc) {\n    var prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;\n    doc._attachments = doc._attachments || {};\n    doc._attachments[attachmentId] = {\n      content_type: type,\n      data: blob,\n      revpos: ++prevrevpos\n    };\n    return api.put(doc);\n  }\n\n  return api.get(docId).then(function (doc) {\n    if (doc._rev !== rev) {\n      throw createError(REV_CONFLICT);\n    }\n\n    return createAttachment(doc);\n  }, function (err) {\n     // create new doc\n    /* istanbul ignore else */\n    if (err.reason === MISSING_DOC.message) {\n      return createAttachment({_id: docId});\n    } else {\n      throw err;\n    }\n  });\n});\n\nAbstractPouchDB.prototype.removeAttachment =\n  adapterFun('removeAttachment', function (docId, attachmentId, rev,\n                                                 callback) {\n  var self = this;\n  self.get(docId, function (err, obj) {\n    /* istanbul ignore if */\n    if (err) {\n      callback(err);\n      return;\n    }\n    if (obj._rev !== rev) {\n      callback(createError(REV_CONFLICT));\n      return;\n    }\n    /* istanbul ignore if */\n    if (!obj._attachments) {\n      return callback();\n    }\n    delete obj._attachments[attachmentId];\n    if (Object.keys(obj._attachments).length === 0) {\n      delete obj._attachments;\n    }\n    self.put(obj, callback);\n  });\n});\n\nAbstractPouchDB.prototype.remove =\n  adapterFun('remove', function (docOrId, optsOrRev, opts, callback) {\n  var doc;\n  if (typeof optsOrRev === 'string') {\n    // id, rev, opts, callback style\n    doc = {\n      _id: docOrId,\n      _rev: optsOrRev\n    };\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n  } else {\n    // doc, opts, callback style\n    doc = docOrId;\n    if (typeof optsOrRev === 'function') {\n      callback = optsOrRev;\n      opts = {};\n    } else {\n      callback = opts;\n      opts = optsOrRev;\n    }\n  }\n  opts = opts || {};\n  opts.was_delete = true;\n  var newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};\n  newDoc._deleted = true;\n  if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {\n    return this._removeLocal(doc, callback);\n  }\n  this.bulkDocs({docs: [newDoc]}, opts, yankError(callback));\n});\n\nAbstractPouchDB.prototype.revsDiff =\n  adapterFun('revsDiff', function (req, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  var ids = Object.keys(req);\n\n  if (!ids.length) {\n    return callback(null, {});\n  }\n\n  var count = 0;\n  var missing = new _Map();\n\n  function addToMissing(id, revId) {\n    if (!missing.has(id)) {\n      missing.set(id, {missing: []});\n    }\n    missing.get(id).missing.push(revId);\n  }\n\n  function processDoc(id, rev_tree) {\n    // Is this fast enough? Maybe we should switch to a set simulated by a map\n    var missingForId = req[id].slice(0);\n    traverseRevTree(rev_tree, function (isLeaf, pos, revHash, ctx,\n      opts) {\n        var rev = pos + '-' + revHash;\n        var idx = missingForId.indexOf(rev);\n        if (idx === -1) {\n          return;\n        }\n\n        missingForId.splice(idx, 1);\n        /* istanbul ignore if */\n        if (opts.status !== 'available') {\n          addToMissing(id, rev);\n        }\n      });\n\n    // Traversing the tree is synchronous, so now `missingForId` contains\n    // revisions that were not found in the tree\n    missingForId.forEach(function (rev) {\n      addToMissing(id, rev);\n    });\n  }\n\n  ids.map(function (id) {\n    this._getRevisionTree(id, function (err, rev_tree) {\n      if (err && err.status === 404 && err.message === 'missing') {\n        missing.set(id, {missing: req[id]});\n      } else if (err) {\n        /* istanbul ignore next */\n        return callback(err);\n      } else {\n        processDoc(id, rev_tree);\n      }\n\n      if (++count === ids.length) {\n        // convert LazyMap to object\n        var missingObj = {};\n        missing.forEach(function (value, key) {\n          missingObj[key] = value;\n        });\n        return callback(null, missingObj);\n      }\n    });\n  }, this);\n});\n\n// _bulk_get API for faster replication, as described in\n// https://github.com/apache/couchdb-chttpd/pull/33\n// At the \"abstract\" level, it will just run multiple get()s in\n// parallel, because this isn't much of a performance cost\n// for local databases (except the cost of multiple transactions, which is\n// small). The http adapter overrides this in order\n// to do a more efficient single HTTP request.\nAbstractPouchDB.prototype.bulkGet =\n  adapterFun('bulkGet', function (opts, callback) {\n  bulkGet(this, opts, callback);\n});\n\n// compact one document and fire callback\n// by compacting we mean removing all revisions which\n// are further from the leaf in revision tree than max_height\nAbstractPouchDB.prototype.compactDocument =\n  adapterFun('compactDocument', function (docId, maxHeight, callback) {\n  var self = this;\n  this._getRevisionTree(docId, function (err, revTree) {\n    /* istanbul ignore if */\n    if (err) {\n      return callback(err);\n    }\n    var height = computeHeight(revTree);\n    var candidates = [];\n    var revs = [];\n    Object.keys(height).forEach(function (rev) {\n      if (height[rev] > maxHeight) {\n        candidates.push(rev);\n      }\n    });\n\n    traverseRevTree(revTree, function (isLeaf, pos, revHash, ctx, opts) {\n      var rev = pos + '-' + revHash;\n      if (opts.status === 'available' && candidates.indexOf(rev) !== -1) {\n        revs.push(rev);\n      }\n    });\n    self._doCompaction(docId, revs, callback);\n  });\n});\n\n// compact the whole database using single document\n// compaction\nAbstractPouchDB.prototype.compact =\n  adapterFun('compact', function (opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n\n  var self = this;\n  opts = opts || {};\n\n  self._compactionQueue = self._compactionQueue || [];\n  self._compactionQueue.push({opts: opts, callback: callback});\n  if (self._compactionQueue.length === 1) {\n    doNextCompaction(self);\n  }\n});\nAbstractPouchDB.prototype._compact = function (opts, callback) {\n  var self = this;\n  var changesOpts = {\n    return_docs: false,\n    last_seq: opts.last_seq || 0\n  };\n  var promises = [];\n\n  function onChange(row) {\n    promises.push(self.compactDocument(row.id, 0));\n  }\n  function onComplete(resp) {\n    var lastSeq = resp.last_seq;\n    PouchPromise.all(promises).then(function () {\n      return upsert(self, '_local/compaction', function deltaFunc(doc) {\n        if (!doc.last_seq || doc.last_seq < lastSeq) {\n          doc.last_seq = lastSeq;\n          return doc;\n        }\n        return false; // somebody else got here first, don't update\n      });\n    }).then(function () {\n      callback(null, {ok: true});\n    }).catch(callback);\n  }\n  self.changes(changesOpts)\n    .on('change', onChange)\n    .on('complete', onComplete)\n    .on('error', callback);\n};\n\n/* Begin api wrappers. Specific functionality to storage belongs in the\n   _[method] */\nAbstractPouchDB.prototype.get = adapterFun('get', function (id, opts, cb) {\n  if (typeof opts === 'function') {\n    cb = opts;\n    opts = {};\n  }\n  if (typeof id !== 'string') {\n    return cb(createError(INVALID_ID));\n  }\n  if (isLocalId(id) && typeof this._getLocal === 'function') {\n    return this._getLocal(id, cb);\n  }\n  var leaves = [], self = this;\n\n  function finishOpenRevs() {\n    var result = [];\n    var count = leaves.length;\n    /* istanbul ignore if */\n    if (!count) {\n      return cb(null, result);\n    }\n    // order with open_revs is unspecified\n    leaves.forEach(function (leaf) {\n      self.get(id, {\n        rev: leaf,\n        revs: opts.revs,\n        attachments: opts.attachments\n      }, function (err, doc) {\n        if (!err) {\n          result.push({ok: doc});\n        } else {\n          result.push({missing: leaf});\n        }\n        count--;\n        if (!count) {\n          cb(null, result);\n        }\n      });\n    });\n  }\n\n  if (opts.open_revs) {\n    if (opts.open_revs === \"all\") {\n      this._getRevisionTree(id, function (err, rev_tree) {\n        if (err) {\n          return cb(err);\n        }\n        leaves = collectLeaves(rev_tree).map(function (leaf) {\n          return leaf.rev;\n        });\n        finishOpenRevs();\n      });\n    } else {\n      if (Array.isArray(opts.open_revs)) {\n        leaves = opts.open_revs;\n        for (var i = 0; i < leaves.length; i++) {\n          var l = leaves[i];\n          // looks like it's the only thing couchdb checks\n          if (!(typeof (l) === \"string\" && /^\\d+-/.test(l))) {\n            return cb(createError(INVALID_REV));\n          }\n        }\n        finishOpenRevs();\n      } else {\n        return cb(createError(UNKNOWN_ERROR, 'function_clause'));\n      }\n    }\n    return; // open_revs does not like other options\n  }\n\n  return this._get(id, opts, function (err, result) {\n    if (err) {\n      return cb(err);\n    }\n\n    var doc = result.doc;\n    var metadata = result.metadata;\n    var ctx = result.ctx;\n\n    if (opts.conflicts) {\n      var conflicts = collectConflicts(metadata);\n      if (conflicts.length) {\n        doc._conflicts = conflicts;\n      }\n    }\n\n    if (isDeleted(metadata, doc._rev)) {\n      doc._deleted = true;\n    }\n\n    if (opts.revs || opts.revs_info) {\n      var paths = rootToLeaf(metadata.rev_tree);\n      var path = arrayFirst(paths, function (arr) {\n        return arr.ids.map(function (x) { return x.id; })\n          .indexOf(doc._rev.split('-')[1]) !== -1;\n      });\n\n      var indexOfRev = path.ids.map(function (x) {return x.id; })\n        .indexOf(doc._rev.split('-')[1]) + 1;\n      var howMany = path.ids.length - indexOfRev;\n      path.ids.splice(indexOfRev, howMany);\n      path.ids.reverse();\n\n      if (opts.revs) {\n        doc._revisions = {\n          start: (path.pos + path.ids.length) - 1,\n          ids: path.ids.map(function (rev) {\n            return rev.id;\n          })\n        };\n      }\n      if (opts.revs_info) {\n        var pos =  path.pos + path.ids.length;\n        doc._revs_info = path.ids.map(function (rev) {\n          pos--;\n          return {\n            rev: pos + '-' + rev.id,\n            status: rev.opts.status\n          };\n        });\n      }\n    }\n\n    if (opts.attachments && doc._attachments) {\n      var attachments = doc._attachments;\n      var count = Object.keys(attachments).length;\n      if (count === 0) {\n        return cb(null, doc);\n      }\n      Object.keys(attachments).forEach(function (key) {\n        this._getAttachment(doc._id, key, attachments[key], {\n          // Previously the revision handling was done in adapter.js\n          // getAttachment, however since idb-next doesnt we need to\n          // pass the rev through\n          rev: doc._rev,\n          binary: opts.binary,\n          ctx: ctx\n        }, function (err, data) {\n          var att = doc._attachments[key];\n          att.data = data;\n          delete att.stub;\n          delete att.length;\n          if (!--count) {\n            cb(null, doc);\n          }\n        });\n      }, self);\n    } else {\n      if (doc._attachments) {\n        for (var key in doc._attachments) {\n          /* istanbul ignore else */\n          if (doc._attachments.hasOwnProperty(key)) {\n            doc._attachments[key].stub = true;\n          }\n        }\n      }\n      cb(null, doc);\n    }\n  });\n});\n\n// TODO: I dont like this, it forces an extra read for every\n// attachment read and enforces a confusing api between\n// adapter.js and the adapter implementation\nAbstractPouchDB.prototype.getAttachment =\n  adapterFun('getAttachment', function (docId, attachmentId, opts, callback) {\n  var self = this;\n  if (opts instanceof Function) {\n    callback = opts;\n    opts = {};\n  }\n  this._get(docId, opts, function (err, res) {\n    if (err) {\n      return callback(err);\n    }\n    if (res.doc._attachments && res.doc._attachments[attachmentId]) {\n      opts.ctx = res.ctx;\n      opts.binary = true;\n      self._getAttachment(docId, attachmentId,\n                          res.doc._attachments[attachmentId], opts, callback);\n    } else {\n      return callback(createError(MISSING_DOC));\n    }\n  });\n});\n\nAbstractPouchDB.prototype.allDocs =\n  adapterFun('allDocs', function (opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  opts.skip = typeof opts.skip !== 'undefined' ? opts.skip : 0;\n  if (opts.start_key) {\n    opts.startkey = opts.start_key;\n  }\n  if (opts.end_key) {\n    opts.endkey = opts.end_key;\n  }\n  if ('keys' in opts) {\n    if (!Array.isArray(opts.keys)) {\n      return callback(new TypeError('options.keys must be an array'));\n    }\n    var incompatibleOpt =\n      ['startkey', 'endkey', 'key'].filter(function (incompatibleOpt) {\n      return incompatibleOpt in opts;\n    })[0];\n    if (incompatibleOpt) {\n      callback(createError(QUERY_PARSE_ERROR,\n        'Query parameter `' + incompatibleOpt +\n        '` is not compatible with multi-get'\n      ));\n      return;\n    }\n    if (this.type() !== 'http') {\n      return allDocsKeysQuery(this, opts, callback);\n    }\n  }\n\n  return this._allDocs(opts, callback);\n});\n\nAbstractPouchDB.prototype.changes = function (opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return new Changes(this, opts, callback);\n};\n\nAbstractPouchDB.prototype.close = adapterFun('close', function (callback) {\n  this._closed = true;\n  return this._close(callback);\n});\n\nAbstractPouchDB.prototype.info = adapterFun('info', function (callback) {\n  var self = this;\n  this._info(function (err, info) {\n    if (err) {\n      return callback(err);\n    }\n    // assume we know better than the adapter, unless it informs us\n    info.db_name = info.db_name || self.name;\n    info.auto_compaction = !!(self.auto_compaction && self.type() !== 'http');\n    info.adapter = self.type();\n    callback(null, info);\n  });\n});\n\nAbstractPouchDB.prototype.id = adapterFun('id', function (callback) {\n  return this._id(callback);\n});\n\n/* istanbul ignore next */\nAbstractPouchDB.prototype.type = function () {\n  return (typeof this._type === 'function') ? this._type() : this.adapter;\n};\n\nAbstractPouchDB.prototype.bulkDocs =\n  adapterFun('bulkDocs', function (req, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n\n  opts = opts || {};\n\n  if (Array.isArray(req)) {\n    req = {\n      docs: req\n    };\n  }\n\n  if (!req || !req.docs || !Array.isArray(req.docs)) {\n    return callback(createError(MISSING_BULK_DOCS));\n  }\n\n  for (var i = 0; i < req.docs.length; ++i) {\n    if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {\n      return callback(createError(NOT_AN_OBJECT));\n    }\n  }\n\n  var attachmentError;\n  req.docs.forEach(function (doc) {\n    if (doc._attachments) {\n      Object.keys(doc._attachments).forEach(function (name) {\n        attachmentError = attachmentError || attachmentNameError(name);\n      });\n    }\n  });\n\n  if (attachmentError) {\n    return callback(createError(BAD_REQUEST, attachmentError));\n  }\n\n  if (!('new_edits' in opts)) {\n    if ('new_edits' in req) {\n      opts.new_edits = req.new_edits;\n    } else {\n      opts.new_edits = true;\n    }\n  }\n\n  if (!opts.new_edits && this.type() !== 'http') {\n    // ensure revisions of the same doc are sorted, so that\n    // the local adapter processes them correctly (#2935)\n    req.docs.sort(compareByIdThenRev);\n  }\n\n  cleanDocs(req.docs);\n\n  return this._bulkDocs(req, opts, function (err, res) {\n    if (err) {\n      return callback(err);\n    }\n    if (!opts.new_edits) {\n      // this is what couch does when new_edits is false\n      res = res.filter(function (x) {\n        return x.error;\n      });\n    }\n    callback(null, res);\n  });\n});\n\nAbstractPouchDB.prototype.registerDependentDatabase =\n  adapterFun('registerDependentDatabase', function (dependentDb,\n                                                          callback) {\n  var depDB = new this.constructor(dependentDb, this.__opts);\n\n  function diffFun(doc) {\n    doc.dependentDbs = doc.dependentDbs || {};\n    if (doc.dependentDbs[dependentDb]) {\n      return false; // no update required\n    }\n    doc.dependentDbs[dependentDb] = true;\n    return doc;\n  }\n  upsert(this, '_local/_pouch_dependentDbs', diffFun)\n    .then(function () {\n      callback(null, {db: depDB});\n    }).catch(callback);\n});\n\nAbstractPouchDB.prototype.destroy =\n  adapterFun('destroy', function (opts, callback) {\n\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n\n  var self = this;\n  var usePrefix = 'use_prefix' in self ? self.use_prefix : true;\n\n  function destroyDb() {\n    // call destroy method of the particular adaptor\n    self._destroy(opts, function (err, resp) {\n      if (err) {\n        return callback(err);\n      }\n      self._destroyed = true;\n      self.emit('destroyed');\n      callback(null, resp || { 'ok': true });\n    });\n  }\n\n  if (self.type() === 'http') {\n    // no need to check for dependent DBs if it's a remote DB\n    return destroyDb();\n  }\n\n  self.get('_local/_pouch_dependentDbs', function (err, localDoc) {\n    if (err) {\n      /* istanbul ignore if */\n      if (err.status !== 404) {\n        return callback(err);\n      } else { // no dependencies\n        return destroyDb();\n      }\n    }\n    var dependentDbs = localDoc.dependentDbs;\n    var PouchDB = self.constructor;\n    var deletedMap = Object.keys(dependentDbs).map(function (name) {\n      // use_prefix is only false in the browser\n      /* istanbul ignore next */\n      var trueName = usePrefix ?\n        name.replace(new RegExp('^' + PouchDB.prefix), '') : name;\n      return new PouchDB(trueName, self.__opts).destroy();\n    });\n    PouchPromise.all(deletedMap).then(destroyDb, callback);\n  });\n});\n\nfunction TaskQueue() {\n  this.isReady = false;\n  this.failed = false;\n  this.queue = [];\n}\n\nTaskQueue.prototype.execute = function () {\n  var fun;\n  if (this.failed) {\n    while ((fun = this.queue.shift())) {\n      fun(this.failed);\n    }\n  } else {\n    while ((fun = this.queue.shift())) {\n      fun();\n    }\n  }\n};\n\nTaskQueue.prototype.fail = function (err) {\n  this.failed = err;\n  this.execute();\n};\n\nTaskQueue.prototype.ready = function (db) {\n  this.isReady = true;\n  this.db = db;\n  this.execute();\n};\n\nTaskQueue.prototype.addTask = function (fun) {\n  this.queue.push(fun);\n  if (this.failed) {\n    this.execute();\n  }\n};\n\nfunction parseAdapter(name, opts) {\n  var match = name.match(/([a-z\\-]*):\\/\\/(.*)/);\n  if (match) {\n    // the http adapter expects the fully qualified name\n    name = /http(s?)/.test(match[1]) ? match[1] + '://' + match[2] : match[2];\n    return {name: name, adapter: match[1]};\n  }\n\n  // check for browsers that have been upgraded from websql-only to websql+idb\n  var skipIdb = 'idb' in PouchDB.adapters && 'websql' in PouchDB.adapters &&\n    hasLocalStorage() &&\n    localStorage['_pouch__websqldb_' + PouchDB.prefix + name];\n\n  var adapterName;\n\n  if (opts.adapter) {\n    adapterName = opts.adapter;\n  } else if (typeof opts !== 'undefined' && opts.db) {\n    adapterName = 'leveldb';\n  } else { // automatically determine adapter\n    for (var i = 0; i < PouchDB.preferredAdapters.length; ++i) {\n      adapterName = PouchDB.preferredAdapters[i];\n      /* istanbul ignore if */\n      if (skipIdb && adapterName === 'idb') {\n        // log it, because this can be confusing during development\n        guardedConsole('log', 'PouchDB is downgrading \"' + name + '\" to WebSQL to' +\n          ' avoid data loss, because it was already opened with WebSQL.');\n        continue; // keep using websql to avoid user data loss\n      }\n      break;\n    }\n  }\n\n  var adapter = PouchDB.adapters[adapterName];\n\n  // if adapter is invalid, then an error will be thrown later\n  var usePrefix = (adapter && 'use_prefix' in adapter) ?\n    adapter.use_prefix : true;\n\n  return {\n    name: usePrefix ? (PouchDB.prefix + name) : name,\n    adapter: adapterName\n  };\n}\n\n// OK, so here's the deal. Consider this code:\n//     var db1 = new PouchDB('foo');\n//     var db2 = new PouchDB('foo');\n//     db1.destroy();\n// ^ these two both need to emit 'destroyed' events,\n// as well as the PouchDB constructor itself.\n// So we have one db object (whichever one got destroy() called on it)\n// responsible for emitting the initial event, which then gets emitted\n// by the constructor, which then broadcasts it to any other dbs\n// that may have been created with the same name.\nfunction prepareForDestruction(self) {\n\n  var destructionListeners = self.constructor._destructionListeners;\n\n  function onDestroyed() {\n    self.constructor.emit('destroyed', self.name);\n  }\n\n  function onConstructorDestroyed() {\n    self.removeListener('destroyed', onDestroyed);\n    self.emit('destroyed', self);\n  }\n\n  self.once('destroyed', onDestroyed);\n\n  // in setup.js, the constructor is primed to listen for destroy events\n  if (!destructionListeners.has(self.name)) {\n    destructionListeners.set(self.name, []);\n  }\n  destructionListeners.get(self.name).push(onConstructorDestroyed);\n}\n\ninherits(PouchDB, AbstractPouchDB);\nfunction PouchDB(name, opts) {\n  // In Node our test suite only tests this for PouchAlt unfortunately\n  /* istanbul ignore if */\n  if (!(this instanceof PouchDB)) {\n    return new PouchDB(name, opts);\n  }\n\n  var self = this;\n  opts = opts || {};\n\n  if (name && typeof name === 'object') {\n    opts = name;\n    name = opts.name;\n    delete opts.name;\n  }\n\n  this.__opts = opts = clone(opts);\n\n  self.auto_compaction = opts.auto_compaction;\n  self.prefix = PouchDB.prefix;\n\n  if (typeof name !== 'string') {\n    throw new Error('Missing/invalid DB name');\n  }\n\n  var prefixedName = (opts.prefix || '') + name;\n  var backend = parseAdapter(prefixedName, opts);\n\n  opts.name = backend.name;\n  opts.adapter = opts.adapter || backend.adapter;\n\n  self.name = name;\n  self._adapter = opts.adapter;\n  debug('pouchdb:adapter')('Picked adapter: ' + opts.adapter);\n\n  if (!PouchDB.adapters[opts.adapter] ||\n      !PouchDB.adapters[opts.adapter].valid()) {\n    throw new Error('Invalid Adapter: ' + opts.adapter);\n  }\n\n  AbstractPouchDB.call(self);\n  self.taskqueue = new TaskQueue();\n\n  self.adapter = opts.adapter;\n\n  PouchDB.adapters[opts.adapter].call(self, opts, function (err) {\n    if (err) {\n      return self.taskqueue.fail(err);\n    }\n    prepareForDestruction(self);\n\n    self.emit('created', self);\n    PouchDB.emit('created', self.name);\n    self.taskqueue.ready(self);\n  });\n\n}\n\nPouchDB.debug = debug;\n\nPouchDB.adapters = {};\nPouchDB.preferredAdapters = [];\n\nPouchDB.prefix = '_pouch_';\n\nvar eventEmitter = new events.EventEmitter();\n\nfunction setUpEventEmitter(Pouch) {\n  Object.keys(events.EventEmitter.prototype).forEach(function (key) {\n    if (typeof events.EventEmitter.prototype[key] === 'function') {\n      Pouch[key] = eventEmitter[key].bind(eventEmitter);\n    }\n  });\n\n  // these are created in constructor.js, and allow us to notify each DB with\n  // the same name that it was destroyed, via the constructor object\n  var destructListeners = Pouch._destructionListeners = new _Map();\n  Pouch.on('destroyed', function onConstructorDestroyed(name) {\n    destructListeners.get(name).forEach(function (callback) {\n      callback();\n    });\n    destructListeners.delete(name);\n  });\n}\n\nsetUpEventEmitter(PouchDB);\n\nPouchDB.adapter = function (id, obj, addToPreferredAdapters) {\n  /* istanbul ignore else */\n  if (obj.valid()) {\n    PouchDB.adapters[id] = obj;\n    if (addToPreferredAdapters) {\n      PouchDB.preferredAdapters.push(id);\n    }\n  }\n};\n\nPouchDB.plugin = function (obj) {\n  if (typeof obj === 'function') { // function style for plugins\n    obj(PouchDB);\n  } else if (typeof obj !== 'object' || Object.keys(obj).length === 0){\n    throw new Error('Invalid plugin: object passed in is empty or not an object');\n  } else {\n    Object.keys(obj).forEach(function (id) { // object style for plugins\n      PouchDB.prototype[id] = obj[id];\n    });\n  }\n  return PouchDB;\n};\n\nPouchDB.defaults = function (defaultOpts) {\n  function PouchAlt(name, opts) {\n    if (!(this instanceof PouchAlt)) {\n      return new PouchAlt(name, opts);\n    }\n\n    opts = opts || {};\n\n    if (name && typeof name === 'object') {\n      opts = name;\n      name = opts.name;\n      delete opts.name;\n    }\n\n    opts = jsExtend.extend({}, defaultOpts, opts);\n    PouchDB.call(this, name, opts);\n  }\n\n  inherits(PouchAlt, PouchDB);\n\n  PouchAlt.preferredAdapters = PouchDB.preferredAdapters.slice();\n  Object.keys(PouchDB).forEach(function (key) {\n    if (!(key in PouchAlt)) {\n      PouchAlt[key] = PouchDB[key];\n    }\n  });\n\n  return PouchAlt;\n};\n\n// managed automatically by set-version.js\nvar version = \"6.1.0-prerelease\";\n\nPouchDB.version = version;\n\nfunction toObject(array) {\n  return array.reduce(function (obj, item) {\n    obj[item] = true;\n    return obj;\n  }, {});\n}\n// List of top level reserved words for doc\nvar reservedWords = toObject([\n  '_id',\n  '_rev',\n  '_attachments',\n  '_deleted',\n  '_revisions',\n  '_revs_info',\n  '_conflicts',\n  '_deleted_conflicts',\n  '_local_seq',\n  '_rev_tree',\n  //replication documents\n  '_replication_id',\n  '_replication_state',\n  '_replication_state_time',\n  '_replication_state_reason',\n  '_replication_stats',\n  // Specific to Couchbase Sync Gateway\n  '_removed'\n]);\n\n// List of reserved words that should end up the document\nvar dataWords = toObject([\n  '_attachments',\n  //replication documents\n  '_replication_id',\n  '_replication_state',\n  '_replication_state_time',\n  '_replication_state_reason',\n  '_replication_stats'\n]);\n\nfunction parseRevisionInfo(rev) {\n  if (!/^\\d+\\-./.test(rev)) {\n    return createError(INVALID_REV);\n  }\n  var idx = rev.indexOf('-');\n  var left = rev.substring(0, idx);\n  var right = rev.substring(idx + 1);\n  return {\n    prefix: parseInt(left, 10),\n    id: right\n  };\n}\n\nfunction makeRevTreeFromRevisions(revisions, opts) {\n  var pos = revisions.start - revisions.ids.length + 1;\n\n  var revisionIds = revisions.ids;\n  var ids = [revisionIds[0], opts, []];\n\n  for (var i = 1, len = revisionIds.length; i < len; i++) {\n    ids = [revisionIds[i], {status: 'missing'}, [ids]];\n  }\n\n  return [{\n    pos: pos,\n    ids: ids\n  }];\n}\n\n// Preprocess documents, parse their revisions, assign an id and a\n// revision for new writes that are missing them, etc\nfunction parseDoc(doc, newEdits) {\n\n  var nRevNum;\n  var newRevId;\n  var revInfo;\n  var opts = {status: 'available'};\n  if (doc._deleted) {\n    opts.deleted = true;\n  }\n\n  if (newEdits) {\n    if (!doc._id) {\n      doc._id = uuid();\n    }\n    newRevId = uuid(32, 16).toLowerCase();\n    if (doc._rev) {\n      revInfo = parseRevisionInfo(doc._rev);\n      if (revInfo.error) {\n        return revInfo;\n      }\n      doc._rev_tree = [{\n        pos: revInfo.prefix,\n        ids: [revInfo.id, {status: 'missing'}, [[newRevId, opts, []]]]\n      }];\n      nRevNum = revInfo.prefix + 1;\n    } else {\n      doc._rev_tree = [{\n        pos: 1,\n        ids : [newRevId, opts, []]\n      }];\n      nRevNum = 1;\n    }\n  } else {\n    if (doc._revisions) {\n      doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);\n      nRevNum = doc._revisions.start;\n      newRevId = doc._revisions.ids[0];\n    }\n    if (!doc._rev_tree) {\n      revInfo = parseRevisionInfo(doc._rev);\n      if (revInfo.error) {\n        return revInfo;\n      }\n      nRevNum = revInfo.prefix;\n      newRevId = revInfo.id;\n      doc._rev_tree = [{\n        pos: nRevNum,\n        ids: [newRevId, opts, []]\n      }];\n    }\n  }\n\n  invalidIdError(doc._id);\n\n  doc._rev = nRevNum + '-' + newRevId;\n\n  var result = {metadata : {}, data : {}};\n  for (var key in doc) {\n    /* istanbul ignore else */\n    if (Object.prototype.hasOwnProperty.call(doc, key)) {\n      var specialKey = key[0] === '_';\n      if (specialKey && !reservedWords[key]) {\n        var error = createError(DOC_VALIDATION, key);\n        error.message = DOC_VALIDATION.message + ': ' + key;\n        throw error;\n      } else if (specialKey && !dataWords[key]) {\n        result.metadata[key.slice(1)] = doc[key];\n      } else {\n        result.data[key] = doc[key];\n      }\n    }\n  }\n  return result;\n}\n\nvar atob$1 = function (str) {\n  return atob(str);\n};\n\nvar btoa$1 = function (str) {\n  return btoa(str);\n};\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor (e.g.\n// old QtWebKit versions, Android < 4.4).\nfunction createBlob(parts, properties) {\n  /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n  parts = parts || [];\n  properties = properties || {};\n  try {\n    return new Blob(parts, properties);\n  } catch (e) {\n    if (e.name !== \"TypeError\") {\n      throw e;\n    }\n    var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\n                  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\n                  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :\n                  WebKitBlobBuilder;\n    var builder = new Builder();\n    for (var i = 0; i < parts.length; i += 1) {\n      builder.append(parts[i]);\n    }\n    return builder.getBlob(properties.type);\n  }\n}\n\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction binaryStringToArrayBuffer(bin) {\n  var length = bin.length;\n  var buf = new ArrayBuffer(length);\n  var arr = new Uint8Array(buf);\n  for (var i = 0; i < length; i++) {\n    arr[i] = bin.charCodeAt(i);\n  }\n  return buf;\n}\n\nfunction binStringToBluffer(binString, type) {\n  return createBlob([binaryStringToArrayBuffer(binString)], {type: type});\n}\n\nfunction b64ToBluffer(b64, type) {\n  return binStringToBluffer(atob$1(b64), type);\n}\n\n//Can't find original post, but this is close\n//http://stackoverflow.com/questions/6965107/ (continues on next line)\n//converting-between-strings-and-arraybuffers\nfunction arrayBufferToBinaryString(buffer) {\n  var binary = '';\n  var bytes = new Uint8Array(buffer);\n  var length = bytes.byteLength;\n  for (var i = 0; i < length; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return binary;\n}\n\n// shim for browsers that don't support it\nfunction readAsBinaryString(blob, callback) {\n  if (typeof FileReader === 'undefined') {\n    // fix for Firefox in a web worker\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=901097\n    return callback(arrayBufferToBinaryString(\n      new FileReaderSync().readAsArrayBuffer(blob)));\n  }\n\n  var reader = new FileReader();\n  var hasBinaryString = typeof reader.readAsBinaryString === 'function';\n  reader.onloadend = function (e) {\n    var result = e.target.result || '';\n    if (hasBinaryString) {\n      return callback(result);\n    }\n    callback(arrayBufferToBinaryString(result));\n  };\n  if (hasBinaryString) {\n    reader.readAsBinaryString(blob);\n  } else {\n    reader.readAsArrayBuffer(blob);\n  }\n}\n\nfunction blobToBinaryString(blobOrBuffer, callback) {\n  readAsBinaryString(blobOrBuffer, function (bin) {\n    callback(bin);\n  });\n}\n\nfunction blobToBase64(blobOrBuffer, callback) {\n  blobToBinaryString(blobOrBuffer, function (base64) {\n    callback(btoa$1(base64));\n  });\n}\n\n// simplified API. universal browser support is assumed\nfunction readAsArrayBuffer(blob, callback) {\n  if (typeof FileReader === 'undefined') {\n    // fix for Firefox in a web worker:\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=901097\n    return callback(new FileReaderSync().readAsArrayBuffer(blob));\n  }\n\n  var reader = new FileReader();\n  reader.onloadend = function (e) {\n    var result = e.target.result || new ArrayBuffer(0);\n    callback(result);\n  };\n  reader.readAsArrayBuffer(blob);\n}\n\nvar setImmediateShim = global.setImmediate || global.setTimeout;\nvar MD5_CHUNK_SIZE = 32768;\n\nfunction rawToBase64(raw) {\n  return btoa$1(raw);\n}\n\nfunction sliceBlob(blob, start, end) {\n  if (blob.webkitSlice) {\n    return blob.webkitSlice(start, end);\n  }\n  return blob.slice(start, end);\n}\n\nfunction appendBlob(buffer, blob, start, end, callback) {\n  if (start > 0 || end < blob.size) {\n    // only slice blob if we really need to\n    blob = sliceBlob(blob, start, end);\n  }\n  readAsArrayBuffer(blob, function (arrayBuffer) {\n    buffer.append(arrayBuffer);\n    callback();\n  });\n}\n\nfunction appendString(buffer, string, start, end, callback) {\n  if (start > 0 || end < string.length) {\n    // only create a substring if we really need to\n    string = string.substring(start, end);\n  }\n  buffer.appendBinary(string);\n  callback();\n}\n\nfunction binaryMd5(data, callback) {\n  var inputIsString = typeof data === 'string';\n  var len = inputIsString ? data.length : data.size;\n  var chunkSize = Math.min(MD5_CHUNK_SIZE, len);\n  var chunks = Math.ceil(len / chunkSize);\n  var currentChunk = 0;\n  var buffer = inputIsString ? new Md5() : new Md5.ArrayBuffer();\n\n  var append = inputIsString ? appendString : appendBlob;\n\n  function next() {\n    setImmediateShim(loadNextChunk);\n  }\n\n  function done() {\n    var raw = buffer.end(true);\n    var base64 = rawToBase64(raw);\n    callback(base64);\n    buffer.destroy();\n  }\n\n  function loadNextChunk() {\n    var start = currentChunk * chunkSize;\n    var end = start + chunkSize;\n    currentChunk++;\n    if (currentChunk < chunks) {\n      append(buffer, data, start, end, next);\n    } else {\n      append(buffer, data, start, end, done);\n    }\n  }\n  loadNextChunk();\n}\n\nfunction stringMd5(string) {\n  return Md5.hash(string);\n}\n\nfunction parseBase64(data) {\n  try {\n    return atob$1(data);\n  } catch (e) {\n    var err = createError(BAD_ARG,\n      'Attachment is not a valid base64 string');\n    return {error: err};\n  }\n}\n\nfunction preprocessString(att, blobType, callback) {\n  var asBinary = parseBase64(att.data);\n  if (asBinary.error) {\n    return callback(asBinary.error);\n  }\n\n  att.length = asBinary.length;\n  if (blobType === 'blob') {\n    att.data = binStringToBluffer(asBinary, att.content_type);\n  } else if (blobType === 'base64') {\n    att.data = btoa$1(asBinary);\n  } else { // binary\n    att.data = asBinary;\n  }\n  binaryMd5(asBinary, function (result) {\n    att.digest = 'md5-' + result;\n    callback();\n  });\n}\n\nfunction preprocessBlob(att, blobType, callback) {\n  binaryMd5(att.data, function (md5) {\n    att.digest = 'md5-' + md5;\n    // size is for blobs (browser), length is for buffers (node)\n    att.length = att.data.size || att.data.length || 0;\n    if (blobType === 'binary') {\n      blobToBinaryString(att.data, function (binString) {\n        att.data = binString;\n        callback();\n      });\n    } else if (blobType === 'base64') {\n      blobToBase64(att.data, function (b64) {\n        att.data = b64;\n        callback();\n      });\n    } else {\n      callback();\n    }\n  });\n}\n\nfunction preprocessAttachment(att, blobType, callback) {\n  if (att.stub) {\n    return callback();\n  }\n  if (typeof att.data === 'string') { // input is a base64 string\n    preprocessString(att, blobType, callback);\n  } else { // input is a blob\n    preprocessBlob(att, blobType, callback);\n  }\n}\n\nfunction preprocessAttachments(docInfos, blobType, callback) {\n\n  if (!docInfos.length) {\n    return callback();\n  }\n\n  var docv = 0;\n  var overallErr;\n\n  docInfos.forEach(function (docInfo) {\n    var attachments = docInfo.data && docInfo.data._attachments ?\n      Object.keys(docInfo.data._attachments) : [];\n    var recv = 0;\n\n    if (!attachments.length) {\n      return done();\n    }\n\n    function processedAttachment(err) {\n      overallErr = err;\n      recv++;\n      if (recv === attachments.length) {\n        done();\n      }\n    }\n\n    for (var key in docInfo.data._attachments) {\n      if (docInfo.data._attachments.hasOwnProperty(key)) {\n        preprocessAttachment(docInfo.data._attachments[key],\n          blobType, processedAttachment);\n      }\n    }\n  });\n\n  function done() {\n    docv++;\n    if (docInfos.length === docv) {\n      if (overallErr) {\n        callback(overallErr);\n      } else {\n        callback();\n      }\n    }\n  }\n}\n\nfunction updateDoc(revLimit, prev, docInfo, results,\n                   i, cb, writeDoc, newEdits) {\n\n  if (revExists(prev.rev_tree, docInfo.metadata.rev)) {\n    results[i] = docInfo;\n    return cb();\n  }\n\n  // sometimes this is pre-calculated. historically not always\n  var previousWinningRev = prev.winningRev || winningRev(prev);\n  var previouslyDeleted = 'deleted' in prev ? prev.deleted :\n    isDeleted(prev, previousWinningRev);\n  var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :\n    isDeleted(docInfo.metadata);\n  var isRoot = /^1-/.test(docInfo.metadata.rev);\n\n  if (previouslyDeleted && !deleted && newEdits && isRoot) {\n    var newDoc = docInfo.data;\n    newDoc._rev = previousWinningRev;\n    newDoc._id = docInfo.metadata.id;\n    docInfo = parseDoc(newDoc, newEdits);\n  }\n\n  var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);\n\n  var inConflict = newEdits && (((previouslyDeleted && deleted) ||\n    (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||\n    (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));\n\n  if (inConflict) {\n    var err = createError(REV_CONFLICT);\n    results[i] = err;\n    return cb();\n  }\n\n  var newRev = docInfo.metadata.rev;\n  docInfo.metadata.rev_tree = merged.tree;\n  docInfo.stemmedRevs = merged.stemmedRevs || [];\n  /* istanbul ignore else */\n  if (prev.rev_map) {\n    docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb\n  }\n\n  // recalculate\n  var winningRev$$ = winningRev(docInfo.metadata);\n  var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$);\n\n  // calculate the total number of documents that were added/removed,\n  // from the perspective of total_rows/doc_count\n  var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :\n    previouslyDeleted < winningRevIsDeleted ? -1 : 1;\n\n  var newRevIsDeleted;\n  if (newRev === winningRev$$) {\n    // if the new rev is the same as the winning rev, we can reuse that value\n    newRevIsDeleted = winningRevIsDeleted;\n  } else {\n    // if they're not the same, then we need to recalculate\n    newRevIsDeleted = isDeleted(docInfo.metadata, newRev);\n  }\n\n  writeDoc(docInfo, winningRev$$, winningRevIsDeleted, newRevIsDeleted,\n    true, delta, i, cb);\n}\n\nfunction rootIsMissing(docInfo) {\n  return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';\n}\n\nfunction processDocs(revLimit, docInfos, api, fetchedDocs, tx, results,\n                     writeDoc, opts, overallCallback) {\n\n  // Default to 1000 locally\n  revLimit = revLimit || 1000;\n\n  function insertDoc(docInfo, resultsIdx, callback) {\n    // Cant insert new deleted documents\n    var winningRev$$ = winningRev(docInfo.metadata);\n    var deleted = isDeleted(docInfo.metadata, winningRev$$);\n    if ('was_delete' in opts && deleted) {\n      results[resultsIdx] = createError(MISSING_DOC, 'deleted');\n      return callback();\n    }\n\n    // 4712 - detect whether a new document was inserted with a _rev\n    var inConflict = newEdits && rootIsMissing(docInfo);\n\n    if (inConflict) {\n      var err = createError(REV_CONFLICT);\n      results[resultsIdx] = err;\n      return callback();\n    }\n\n    var delta = deleted ? 0 : 1;\n\n    writeDoc(docInfo, winningRev$$, deleted, deleted, false,\n      delta, resultsIdx, callback);\n  }\n\n  var newEdits = opts.new_edits;\n  var idsToDocs = new _Map();\n\n  var docsDone = 0;\n  var docsToDo = docInfos.length;\n\n  function checkAllDocsDone() {\n    if (++docsDone === docsToDo && overallCallback) {\n      overallCallback();\n    }\n  }\n\n  docInfos.forEach(function (currentDoc, resultsIdx) {\n\n    if (currentDoc._id && isLocalId(currentDoc._id)) {\n      var fun = currentDoc._deleted ? '_removeLocal' : '_putLocal';\n      api[fun](currentDoc, {ctx: tx}, function (err, res) {\n        results[resultsIdx] = err || res;\n        checkAllDocsDone();\n      });\n      return;\n    }\n\n    var id = currentDoc.metadata.id;\n    if (idsToDocs.has(id)) {\n      docsToDo--; // duplicate\n      idsToDocs.get(id).push([currentDoc, resultsIdx]);\n    } else {\n      idsToDocs.set(id, [[currentDoc, resultsIdx]]);\n    }\n  });\n\n  // in the case of new_edits, the user can provide multiple docs\n  // with the same id. these need to be processed sequentially\n  idsToDocs.forEach(function (docs, id) {\n    var numDone = 0;\n\n    function docWritten() {\n      if (++numDone < docs.length) {\n        nextDoc();\n      } else {\n        checkAllDocsDone();\n      }\n    }\n    function nextDoc() {\n      var value = docs[numDone];\n      var currentDoc = value[0];\n      var resultsIdx = value[1];\n\n      if (fetchedDocs.has(id)) {\n        updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,\n          resultsIdx, docWritten, writeDoc, newEdits);\n      } else {\n        // Ensure stemming applies to new writes as well\n        var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);\n        currentDoc.metadata.rev_tree = merged.tree;\n        currentDoc.stemmedRevs = merged.stemmedRevs || [];\n        insertDoc(currentDoc, resultsIdx, docWritten);\n      }\n    }\n    nextDoc();\n  });\n}\n\n// IndexedDB requires a versioned database structure, so we use the\n// version here to manage migrations.\nvar ADAPTER_VERSION = 5;\n\n// The object stores created for each database\n// DOC_STORE stores the document meta data, its revision history and state\n// Keyed by document id\nvar DOC_STORE = 'document-store';\n// BY_SEQ_STORE stores a particular version of a document, keyed by its\n// sequence id\nvar BY_SEQ_STORE = 'by-sequence';\n// Where we store attachments\nvar ATTACH_STORE = 'attach-store';\n// Where we store many-to-many relations\n// between attachment digests and seqs\nvar ATTACH_AND_SEQ_STORE = 'attach-seq-store';\n\n// Where we store database-wide meta data in a single record\n// keyed by id: META_STORE\nvar META_STORE = 'meta-store';\n// Where we store local documents\nvar LOCAL_STORE = 'local-store';\n// Where we detect blob support\nvar DETECT_BLOB_SUPPORT_STORE = 'detect-blob-support';\n\nfunction slowJsonParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch (e) {\n    /* istanbul ignore next */\n    return vuvuzela.parse(str);\n  }\n}\n\nfunction safeJsonParse(str) {\n  // try/catch is deoptimized in V8, leading to slower\n  // times than we'd like to have. Most documents are _not_\n  // huge, and do not require a slower code path just to parse them.\n  // We can be pretty sure that a document under 50000 characters\n  // will not be so deeply nested as to throw a stack overflow error\n  // (depends on the engine and available memory, though, so this is\n  // just a hunch). 50000 was chosen based on the average length\n  // of this string in our test suite, to try to find a number that covers\n  // most of our test cases (26 over this size, 26378 under it).\n  if (str.length < 50000) {\n    return JSON.parse(str);\n  }\n  return slowJsonParse(str);\n}\n\nfunction safeJsonStringify(json) {\n  try {\n    return JSON.stringify(json);\n  } catch (e) {\n    /* istanbul ignore next */\n    return vuvuzela.stringify(json);\n  }\n}\n\nfunction tryCode(fun, that, args, PouchDB) {\n  try {\n    fun.apply(that, args);\n  } catch (err) {\n    // Shouldn't happen, but in some odd cases\n    // IndexedDB implementations might throw a sync\n    // error, in which case this will at least log it.\n    PouchDB.emit('error', err);\n  }\n}\n\nvar taskQueue = {\n  running: false,\n  queue: []\n};\n\nfunction applyNext(PouchDB) {\n  if (taskQueue.running || !taskQueue.queue.length) {\n    return;\n  }\n  taskQueue.running = true;\n  var item = taskQueue.queue.shift();\n  item.action(function (err, res) {\n    tryCode(item.callback, this, [err, res], PouchDB);\n    taskQueue.running = false;\n    process.nextTick(function () {\n      applyNext(PouchDB);\n    });\n  });\n}\n\nfunction idbError(callback) {\n  return function (evt) {\n    var message = 'unknown_error';\n    if (evt.target && evt.target.error) {\n      message = evt.target.error.name || evt.target.error.message;\n    }\n    callback(createError(IDB_ERROR, message, evt.type));\n  };\n}\n\n// Unfortunately, the metadata has to be stringified\n// when it is put into the database, because otherwise\n// IndexedDB can throw errors for deeply-nested objects.\n// Originally we just used JSON.parse/JSON.stringify; now\n// we use this custom vuvuzela library that avoids recursion.\n// If we could do it all over again, we'd probably use a\n// format for the revision trees other than JSON.\nfunction encodeMetadata(metadata, winningRev, deleted) {\n  return {\n    data: safeJsonStringify(metadata),\n    winningRev: winningRev,\n    deletedOrLocal: deleted ? '1' : '0',\n    seq: metadata.seq, // highest seq for this doc\n    id: metadata.id\n  };\n}\n\nfunction decodeMetadata(storedObject) {\n  if (!storedObject) {\n    return null;\n  }\n  var metadata = safeJsonParse(storedObject.data);\n  metadata.winningRev = storedObject.winningRev;\n  metadata.deleted = storedObject.deletedOrLocal === '1';\n  metadata.seq = storedObject.seq;\n  return metadata;\n}\n\n// read the doc back out from the database. we don't store the\n// _id or _rev because we already have _doc_id_rev.\nfunction decodeDoc(doc) {\n  if (!doc) {\n    return doc;\n  }\n  var idx = doc._doc_id_rev.lastIndexOf(':');\n  doc._id = doc._doc_id_rev.substring(0, idx - 1);\n  doc._rev = doc._doc_id_rev.substring(idx + 1);\n  delete doc._doc_id_rev;\n  return doc;\n}\n\n// Read a blob from the database, encoding as necessary\n// and translating from base64 if the IDB doesn't support\n// native Blobs\nfunction readBlobData(body, type, asBlob, callback) {\n  if (asBlob) {\n    if (!body) {\n      callback(createBlob([''], {type: type}));\n    } else if (typeof body !== 'string') { // we have blob support\n      callback(body);\n    } else { // no blob support\n      callback(b64ToBluffer(body, type));\n    }\n  } else { // as base64 string\n    if (!body) {\n      callback('');\n    } else if (typeof body !== 'string') { // we have blob support\n      readAsBinaryString(body, function (binary) {\n        callback(btoa$1(binary));\n      });\n    } else { // no blob support\n      callback(body);\n    }\n  }\n}\n\nfunction fetchAttachmentsIfNecessary(doc, opts, txn, cb) {\n  var attachments = Object.keys(doc._attachments || {});\n  if (!attachments.length) {\n    return cb && cb();\n  }\n  var numDone = 0;\n\n  function checkDone() {\n    if (++numDone === attachments.length && cb) {\n      cb();\n    }\n  }\n\n  function fetchAttachment(doc, att) {\n    var attObj = doc._attachments[att];\n    var digest = attObj.digest;\n    var req = txn.objectStore(ATTACH_STORE).get(digest);\n    req.onsuccess = function (e) {\n      attObj.body = e.target.result.body;\n      checkDone();\n    };\n  }\n\n  attachments.forEach(function (att) {\n    if (opts.attachments && opts.include_docs) {\n      fetchAttachment(doc, att);\n    } else {\n      doc._attachments[att].stub = true;\n      checkDone();\n    }\n  });\n}\n\n// IDB-specific postprocessing necessary because\n// we don't know whether we stored a true Blob or\n// a base64-encoded string, and if it's a Blob it\n// needs to be read outside of the transaction context\nfunction postProcessAttachments(results, asBlob) {\n  return PouchPromise.all(results.map(function (row) {\n    if (row.doc && row.doc._attachments) {\n      var attNames = Object.keys(row.doc._attachments);\n      return PouchPromise.all(attNames.map(function (att) {\n        var attObj = row.doc._attachments[att];\n        if (!('body' in attObj)) { // already processed\n          return;\n        }\n        var body = attObj.body;\n        var type = attObj.content_type;\n        return new PouchPromise(function (resolve) {\n          readBlobData(body, type, asBlob, function (data) {\n            row.doc._attachments[att] = jsExtend.extend(\n              pick(attObj, ['digest', 'content_type']),\n              {data: data}\n            );\n            resolve();\n          });\n        });\n      }));\n    }\n  }));\n}\n\nfunction compactRevs(revs, docId, txn) {\n\n  var possiblyOrphanedDigests = [];\n  var seqStore = txn.objectStore(BY_SEQ_STORE);\n  var attStore = txn.objectStore(ATTACH_STORE);\n  var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n  var count = revs.length;\n\n  function checkDone() {\n    count--;\n    if (!count) { // done processing all revs\n      deleteOrphanedAttachments();\n    }\n  }\n\n  function deleteOrphanedAttachments() {\n    if (!possiblyOrphanedDigests.length) {\n      return;\n    }\n    possiblyOrphanedDigests.forEach(function (digest) {\n      var countReq = attAndSeqStore.index('digestSeq').count(\n        IDBKeyRange.bound(\n          digest + '::', digest + '::\\uffff', false, false));\n      countReq.onsuccess = function (e) {\n        var count = e.target.result;\n        if (!count) {\n          // orphaned\n          attStore.delete(digest);\n        }\n      };\n    });\n  }\n\n  revs.forEach(function (rev) {\n    var index = seqStore.index('_doc_id_rev');\n    var key = docId + \"::\" + rev;\n    index.getKey(key).onsuccess = function (e) {\n      var seq = e.target.result;\n      if (typeof seq !== 'number') {\n        return checkDone();\n      }\n      seqStore.delete(seq);\n\n      var cursor = attAndSeqStore.index('seq')\n        .openCursor(IDBKeyRange.only(seq));\n\n      cursor.onsuccess = function (event) {\n        var cursor = event.target.result;\n        if (cursor) {\n          var digest = cursor.value.digestSeq.split('::')[0];\n          possiblyOrphanedDigests.push(digest);\n          attAndSeqStore.delete(cursor.primaryKey);\n          cursor.continue();\n        } else { // done\n          checkDone();\n        }\n      };\n    };\n  });\n}\n\nfunction openTransactionSafely(idb, stores, mode) {\n  try {\n    return {\n      txn: idb.transaction(stores, mode)\n    };\n  } catch (err) {\n    return {\n      error: err\n    };\n  }\n}\n\nfunction idbBulkDocs(dbOpts, req, opts, api, idb, idbChanges, callback) {\n  var docInfos = req.docs;\n  var txn;\n  var docStore;\n  var bySeqStore;\n  var attachStore;\n  var attachAndSeqStore;\n  var docInfoError;\n  var docCountDelta = 0;\n\n  for (var i = 0, len = docInfos.length; i < len; i++) {\n    var doc = docInfos[i];\n    if (doc._id && isLocalId(doc._id)) {\n      continue;\n    }\n    doc = docInfos[i] = parseDoc(doc, opts.new_edits);\n    if (doc.error && !docInfoError) {\n      docInfoError = doc;\n    }\n  }\n\n  if (docInfoError) {\n    return callback(docInfoError);\n  }\n\n  var results = new Array(docInfos.length);\n  var fetchedDocs = new _Map();\n  var preconditionErrored = false;\n  var blobType = api._meta.blobSupport ? 'blob' : 'base64';\n\n  preprocessAttachments(docInfos, blobType, function (err) {\n    if (err) {\n      return callback(err);\n    }\n    startTransaction();\n  });\n\n  function startTransaction() {\n\n    var stores = [\n      DOC_STORE, BY_SEQ_STORE,\n      ATTACH_STORE,\n      LOCAL_STORE, ATTACH_AND_SEQ_STORE\n    ];\n    var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    txn = txnResult.txn;\n    txn.onabort = idbError(callback);\n    txn.ontimeout = idbError(callback);\n    txn.oncomplete = complete;\n    docStore = txn.objectStore(DOC_STORE);\n    bySeqStore = txn.objectStore(BY_SEQ_STORE);\n    attachStore = txn.objectStore(ATTACH_STORE);\n    attachAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n\n    verifyAttachments(function (err) {\n      if (err) {\n        preconditionErrored = true;\n        return callback(err);\n      }\n      fetchExistingDocs();\n    });\n  }\n\n  function idbProcessDocs() {\n    processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs,\n                txn, results, writeDoc, opts);\n  }\n\n  function fetchExistingDocs() {\n\n    if (!docInfos.length) {\n      return;\n    }\n\n    var numFetched = 0;\n\n    function checkDone() {\n      if (++numFetched === docInfos.length) {\n        idbProcessDocs();\n      }\n    }\n\n    function readMetadata(event) {\n      var metadata = decodeMetadata(event.target.result);\n\n      if (metadata) {\n        fetchedDocs.set(metadata.id, metadata);\n      }\n      checkDone();\n    }\n\n    for (var i = 0, len = docInfos.length; i < len; i++) {\n      var docInfo = docInfos[i];\n      if (docInfo._id && isLocalId(docInfo._id)) {\n        checkDone(); // skip local docs\n        continue;\n      }\n      var req = docStore.get(docInfo.metadata.id);\n      req.onsuccess = readMetadata;\n    }\n  }\n\n  function complete() {\n    if (preconditionErrored) {\n      return;\n    }\n\n    idbChanges.notify(api._meta.name);\n    api._meta.docCount += docCountDelta;\n    callback(null, results);\n  }\n\n  function verifyAttachment(digest, callback) {\n\n    var req = attachStore.get(digest);\n    req.onsuccess = function (e) {\n      if (!e.target.result) {\n        var err = createError(MISSING_STUB,\n          'unknown stub attachment with digest ' +\n          digest);\n        err.status = 412;\n        callback(err);\n      } else {\n        callback();\n      }\n    };\n  }\n\n  function verifyAttachments(finish) {\n\n\n    var digests = [];\n    docInfos.forEach(function (docInfo) {\n      if (docInfo.data && docInfo.data._attachments) {\n        Object.keys(docInfo.data._attachments).forEach(function (filename) {\n          var att = docInfo.data._attachments[filename];\n          if (att.stub) {\n            digests.push(att.digest);\n          }\n        });\n      }\n    });\n    if (!digests.length) {\n      return finish();\n    }\n    var numDone = 0;\n    var err;\n\n    function checkDone() {\n      if (++numDone === digests.length) {\n        finish(err);\n      }\n    }\n    digests.forEach(function (digest) {\n      verifyAttachment(digest, function (attErr) {\n        if (attErr && !err) {\n          err = attErr;\n        }\n        checkDone();\n      });\n    });\n  }\n\n  function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,\n                    isUpdate, delta, resultsIdx, callback) {\n\n    docCountDelta += delta;\n\n    docInfo.metadata.winningRev = winningRev;\n    docInfo.metadata.deleted = winningRevIsDeleted;\n\n    var doc = docInfo.data;\n    doc._id = docInfo.metadata.id;\n    doc._rev = docInfo.metadata.rev;\n\n    if (newRevIsDeleted) {\n      doc._deleted = true;\n    }\n\n    var hasAttachments = doc._attachments &&\n      Object.keys(doc._attachments).length;\n    if (hasAttachments) {\n      return writeAttachments(docInfo, winningRev, winningRevIsDeleted,\n        isUpdate, resultsIdx, callback);\n    }\n\n    finishDoc(docInfo, winningRev, winningRevIsDeleted,\n      isUpdate, resultsIdx, callback);\n  }\n\n  function finishDoc(docInfo, winningRev, winningRevIsDeleted,\n                     isUpdate, resultsIdx, callback) {\n\n    var doc = docInfo.data;\n    var metadata = docInfo.metadata;\n\n    doc._doc_id_rev = metadata.id + '::' + metadata.rev;\n    delete doc._id;\n    delete doc._rev;\n\n    function afterPutDoc(e) {\n      var revsToDelete = docInfo.stemmedRevs || [];\n\n      if (isUpdate && api.auto_compaction) {\n        revsToDelete = revsToDelete.concat(compactTree(docInfo.metadata));\n      }\n\n      if (revsToDelete && revsToDelete.length) {\n        compactRevs(revsToDelete, docInfo.metadata.id, txn);\n      }\n\n      metadata.seq = e.target.result;\n      // Current _rev is calculated from _rev_tree on read\n      delete metadata.rev;\n      var metadataToStore = encodeMetadata(metadata, winningRev,\n        winningRevIsDeleted);\n      var metaDataReq = docStore.put(metadataToStore);\n      metaDataReq.onsuccess = afterPutMetadata;\n    }\n\n    function afterPutDocError(e) {\n      // ConstraintError, need to update, not put (see #1638 for details)\n      e.preventDefault(); // avoid transaction abort\n      e.stopPropagation(); // avoid transaction onerror\n      var index = bySeqStore.index('_doc_id_rev');\n      var getKeyReq = index.getKey(doc._doc_id_rev);\n      getKeyReq.onsuccess = function (e) {\n        var putReq = bySeqStore.put(doc, e.target.result);\n        putReq.onsuccess = afterPutDoc;\n      };\n    }\n\n    function afterPutMetadata() {\n      results[resultsIdx] = {\n        ok: true,\n        id: metadata.id,\n        rev: winningRev\n      };\n      fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);\n      insertAttachmentMappings(docInfo, metadata.seq, callback);\n    }\n\n    var putReq = bySeqStore.put(doc);\n\n    putReq.onsuccess = afterPutDoc;\n    putReq.onerror = afterPutDocError;\n  }\n\n  function writeAttachments(docInfo, winningRev, winningRevIsDeleted,\n                            isUpdate, resultsIdx, callback) {\n\n\n    var doc = docInfo.data;\n\n    var numDone = 0;\n    var attachments = Object.keys(doc._attachments);\n\n    function collectResults() {\n      if (numDone === attachments.length) {\n        finishDoc(docInfo, winningRev, winningRevIsDeleted,\n          isUpdate, resultsIdx, callback);\n      }\n    }\n\n    function attachmentSaved() {\n      numDone++;\n      collectResults();\n    }\n\n    attachments.forEach(function (key) {\n      var att = docInfo.data._attachments[key];\n      if (!att.stub) {\n        var data = att.data;\n        delete att.data;\n        att.revpos = parseInt(winningRev, 10);\n        var digest = att.digest;\n        saveAttachment(digest, data, attachmentSaved);\n      } else {\n        numDone++;\n        collectResults();\n      }\n    });\n  }\n\n  // map seqs to attachment digests, which\n  // we will need later during compaction\n  function insertAttachmentMappings(docInfo, seq, callback) {\n\n    var attsAdded = 0;\n    var attsToAdd = Object.keys(docInfo.data._attachments || {});\n\n    if (!attsToAdd.length) {\n      return callback();\n    }\n\n    function checkDone() {\n      if (++attsAdded === attsToAdd.length) {\n        callback();\n      }\n    }\n\n    function add(att) {\n      var digest = docInfo.data._attachments[att].digest;\n      var req = attachAndSeqStore.put({\n        seq: seq,\n        digestSeq: digest + '::' + seq\n      });\n\n      req.onsuccess = checkDone;\n      req.onerror = function (e) {\n        // this callback is for a constaint error, which we ignore\n        // because this docid/rev has already been associated with\n        // the digest (e.g. when new_edits == false)\n        e.preventDefault(); // avoid transaction abort\n        e.stopPropagation(); // avoid transaction onerror\n        checkDone();\n      };\n    }\n    for (var i = 0; i < attsToAdd.length; i++) {\n      add(attsToAdd[i]); // do in parallel\n    }\n  }\n\n  function saveAttachment(digest, data, callback) {\n\n\n    var getKeyReq = attachStore.count(digest);\n    getKeyReq.onsuccess = function (e) {\n      var count = e.target.result;\n      if (count) {\n        return callback(); // already exists\n      }\n      var newAtt = {\n        digest: digest,\n        body: data\n      };\n      var putReq = attachStore.put(newAtt);\n      putReq.onsuccess = callback;\n    };\n  }\n}\n\nfunction createKeyRange(start, end, inclusiveEnd, key, descending) {\n  try {\n    if (start && end) {\n      if (descending) {\n        return IDBKeyRange.bound(end, start, !inclusiveEnd, false);\n      } else {\n        return IDBKeyRange.bound(start, end, false, !inclusiveEnd);\n      }\n    } else if (start) {\n      if (descending) {\n        return IDBKeyRange.upperBound(start);\n      } else {\n        return IDBKeyRange.lowerBound(start);\n      }\n    } else if (end) {\n      if (descending) {\n        return IDBKeyRange.lowerBound(end, !inclusiveEnd);\n      } else {\n        return IDBKeyRange.upperBound(end, !inclusiveEnd);\n      }\n    } else if (key) {\n      return IDBKeyRange.only(key);\n    }\n  } catch (e) {\n    return {error: e};\n  }\n  return null;\n}\n\nfunction handleKeyRangeError(api, opts, err, callback) {\n  if (err.name === \"DataError\" && err.code === 0) {\n    // data error, start is less than end\n    return callback(null, {\n      total_rows: api._meta.docCount,\n      offset: opts.skip,\n      rows: []\n    });\n  }\n  callback(createError(IDB_ERROR, err.name, err.message));\n}\n\nfunction idbAllDocs(opts, api, idb, callback) {\n\n  function allDocsQuery(opts, callback) {\n    var start = 'startkey' in opts ? opts.startkey : false;\n    var end = 'endkey' in opts ? opts.endkey : false;\n    var key = 'key' in opts ? opts.key : false;\n    var skip = opts.skip || 0;\n    var limit = typeof opts.limit === 'number' ? opts.limit : -1;\n    var inclusiveEnd = opts.inclusive_end !== false;\n    var descending = 'descending' in opts && opts.descending ? 'prev' : null;\n\n    var keyRange = createKeyRange(start, end, inclusiveEnd, key, descending);\n    if (keyRange && keyRange.error) {\n      return handleKeyRangeError(api, opts, keyRange.error, callback);\n    }\n\n    var stores = [DOC_STORE, BY_SEQ_STORE];\n\n    if (opts.attachments) {\n      stores.push(ATTACH_STORE);\n    }\n    var txnResult = openTransactionSafely(idb, stores, 'readonly');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    var txn = txnResult.txn;\n    var docStore = txn.objectStore(DOC_STORE);\n    var seqStore = txn.objectStore(BY_SEQ_STORE);\n    var cursor = descending ?\n      docStore.openCursor(keyRange, descending) :\n      docStore.openCursor(keyRange);\n    var docIdRevIndex = seqStore.index('_doc_id_rev');\n    var results = [];\n    var docCount = 0;\n\n    // if the user specifies include_docs=true, then we don't\n    // want to block the main cursor while we're fetching the doc\n    function fetchDocAsynchronously(metadata, row, winningRev) {\n      var key = metadata.id + \"::\" + winningRev;\n      docIdRevIndex.get(key).onsuccess =  function onGetDoc(e) {\n        row.doc = decodeDoc(e.target.result);\n        if (opts.conflicts) {\n          row.doc._conflicts = collectConflicts(metadata);\n        }\n        fetchAttachmentsIfNecessary(row.doc, opts, txn);\n      };\n    }\n\n    function allDocsInner(cursor, winningRev, metadata) {\n      var row = {\n        id: metadata.id,\n        key: metadata.id,\n        value: {\n          rev: winningRev\n        }\n      };\n      var deleted = metadata.deleted;\n      if (opts.deleted === 'ok') {\n        results.push(row);\n        // deleted docs are okay with \"keys\" requests\n        if (deleted) {\n          row.value.deleted = true;\n          row.doc = null;\n        } else if (opts.include_docs) {\n          fetchDocAsynchronously(metadata, row, winningRev);\n        }\n      } else if (!deleted && skip-- <= 0) {\n        results.push(row);\n        if (opts.include_docs) {\n          fetchDocAsynchronously(metadata, row, winningRev);\n        }\n        if (--limit === 0) {\n          return;\n        }\n      }\n      cursor.continue();\n    }\n\n    function onGetCursor(e) {\n      docCount = api._meta.docCount; // do this within the txn for consistency\n      var cursor = e.target.result;\n      if (!cursor) {\n        return;\n      }\n      var metadata = decodeMetadata(cursor.value);\n      var winningRev = metadata.winningRev;\n\n      allDocsInner(cursor, winningRev, metadata);\n    }\n\n    function onResultsReady() {\n      callback(null, {\n        total_rows: docCount,\n        offset: opts.skip,\n        rows: results\n      });\n    }\n\n    function onTxnComplete() {\n      if (opts.attachments) {\n        postProcessAttachments(results, opts.binary).then(onResultsReady);\n      } else {\n        onResultsReady();\n      }\n    }\n\n    txn.oncomplete = onTxnComplete;\n    cursor.onsuccess = onGetCursor;\n  }\n\n  function allDocs(opts, callback) {\n\n    if (opts.limit === 0) {\n      return callback(null, {\n        total_rows: api._meta.docCount,\n        offset: opts.skip,\n        rows: []\n      });\n    }\n    allDocsQuery(opts, callback);\n  }\n\n  allDocs(opts, callback);\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\nfunction checkBlobSupport(txn) {\n  return new PouchPromise(function (resolve) {\n    var blob = createBlob(['']);\n    txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n    txn.onabort = function (e) {\n      // If the transaction aborts now its due to not being able to\n      // write to the database, likely due to the disk being full\n      e.preventDefault();\n      e.stopPropagation();\n      resolve(false);\n    };\n\n    txn.oncomplete = function () {\n      var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n      var matchedEdge = navigator.userAgent.match(/Edge\\//);\n      // MS Edge pretends to be Chrome 42:\n      // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n      resolve(matchedEdge || !matchedChrome ||\n        parseInt(matchedChrome[1], 10) >= 43);\n    };\n  }).catch(function () {\n    return false; // error, so assume unsupported\n  });\n}\n\nvar cachedDBs = new _Map();\nvar blobSupportPromise;\nvar idbChanges = new Changes$1();\nvar openReqList = new _Map();\n\nfunction IdbPouch(opts, callback) {\n  var api = this;\n\n  taskQueue.queue.push({\n    action: function (thisCallback) {\n      init(api, opts, thisCallback);\n    },\n    callback: callback\n  });\n  applyNext(api.constructor);\n}\n\nfunction init(api, opts, callback) {\n\n  var dbName = opts.name;\n\n  var idb = null;\n  api._meta = null;\n\n  // called when creating a fresh new database\n  function createSchema(db) {\n    var docStore = db.createObjectStore(DOC_STORE, {keyPath : 'id'});\n    db.createObjectStore(BY_SEQ_STORE, {autoIncrement: true})\n      .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n    db.createObjectStore(ATTACH_STORE, {keyPath: 'digest'});\n    db.createObjectStore(META_STORE, {keyPath: 'id', autoIncrement: false});\n    db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n\n    // added in v2\n    docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n    // added in v3\n    db.createObjectStore(LOCAL_STORE, {keyPath: '_id'});\n\n    // added in v4\n    var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n      {autoIncrement: true});\n    attAndSeqStore.createIndex('seq', 'seq');\n    attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n  }\n\n  // migration to version 2\n  // unfortunately \"deletedOrLocal\" is a misnomer now that we no longer\n  // store local docs in the main doc-store, but whaddyagonnado\n  function addDeletedOrLocalIndex(txn, callback) {\n    var docStore = txn.objectStore(DOC_STORE);\n    docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n    docStore.openCursor().onsuccess = function (event) {\n      var cursor = event.target.result;\n      if (cursor) {\n        var metadata = cursor.value;\n        var deleted = isDeleted(metadata);\n        metadata.deletedOrLocal = deleted ? \"1\" : \"0\";\n        docStore.put(metadata);\n        cursor.continue();\n      } else {\n        callback();\n      }\n    };\n  }\n\n  // migration to version 3 (part 1)\n  function createLocalStoreSchema(db) {\n    db.createObjectStore(LOCAL_STORE, {keyPath: '_id'})\n      .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n  }\n\n  // migration to version 3 (part 2)\n  function migrateLocalStore(txn, cb) {\n    var localStore = txn.objectStore(LOCAL_STORE);\n    var docStore = txn.objectStore(DOC_STORE);\n    var seqStore = txn.objectStore(BY_SEQ_STORE);\n\n    var cursor = docStore.openCursor();\n    cursor.onsuccess = function (event) {\n      var cursor = event.target.result;\n      if (cursor) {\n        var metadata = cursor.value;\n        var docId = metadata.id;\n        var local = isLocalId(docId);\n        var rev = winningRev(metadata);\n        if (local) {\n          var docIdRev = docId + \"::\" + rev;\n          // remove all seq entries\n          // associated with this docId\n          var start = docId + \"::\";\n          var end = docId + \"::~\";\n          var index = seqStore.index('_doc_id_rev');\n          var range = IDBKeyRange.bound(start, end, false, false);\n          var seqCursor = index.openCursor(range);\n          seqCursor.onsuccess = function (e) {\n            seqCursor = e.target.result;\n            if (!seqCursor) {\n              // done\n              docStore.delete(cursor.primaryKey);\n              cursor.continue();\n            } else {\n              var data = seqCursor.value;\n              if (data._doc_id_rev === docIdRev) {\n                localStore.put(data);\n              }\n              seqStore.delete(seqCursor.primaryKey);\n              seqCursor.continue();\n            }\n          };\n        } else {\n          cursor.continue();\n        }\n      } else if (cb) {\n        cb();\n      }\n    };\n  }\n\n  // migration to version 4 (part 1)\n  function addAttachAndSeqStore(db) {\n    var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n      {autoIncrement: true});\n    attAndSeqStore.createIndex('seq', 'seq');\n    attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n  }\n\n  // migration to version 4 (part 2)\n  function migrateAttsAndSeqs(txn, callback) {\n    var seqStore = txn.objectStore(BY_SEQ_STORE);\n    var attStore = txn.objectStore(ATTACH_STORE);\n    var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n\n    // need to actually populate the table. this is the expensive part,\n    // so as an optimization, check first that this database even\n    // contains attachments\n    var req = attStore.count();\n    req.onsuccess = function (e) {\n      var count = e.target.result;\n      if (!count) {\n        return callback(); // done\n      }\n\n      seqStore.openCursor().onsuccess = function (e) {\n        var cursor = e.target.result;\n        if (!cursor) {\n          return callback(); // done\n        }\n        var doc = cursor.value;\n        var seq = cursor.primaryKey;\n        var atts = Object.keys(doc._attachments || {});\n        var digestMap = {};\n        for (var j = 0; j < atts.length; j++) {\n          var att = doc._attachments[atts[j]];\n          digestMap[att.digest] = true; // uniq digests, just in case\n        }\n        var digests = Object.keys(digestMap);\n        for (j = 0; j < digests.length; j++) {\n          var digest = digests[j];\n          attAndSeqStore.put({\n            seq: seq,\n            digestSeq: digest + '::' + seq\n          });\n        }\n        cursor.continue();\n      };\n    };\n  }\n\n  // migration to version 5\n  // Instead of relying on on-the-fly migration of metadata,\n  // this brings the doc-store to its modern form:\n  // - metadata.winningrev\n  // - metadata.seq\n  // - stringify the metadata when storing it\n  function migrateMetadata(txn) {\n\n    function decodeMetadataCompat(storedObject) {\n      if (!storedObject.data) {\n        // old format, when we didn't store it stringified\n        storedObject.deleted = storedObject.deletedOrLocal === '1';\n        return storedObject;\n      }\n      return decodeMetadata(storedObject);\n    }\n\n    // ensure that every metadata has a winningRev and seq,\n    // which was previously created on-the-fly but better to migrate\n    var bySeqStore = txn.objectStore(BY_SEQ_STORE);\n    var docStore = txn.objectStore(DOC_STORE);\n    var cursor = docStore.openCursor();\n    cursor.onsuccess = function (e) {\n      var cursor = e.target.result;\n      if (!cursor) {\n        return; // done\n      }\n      var metadata = decodeMetadataCompat(cursor.value);\n\n      metadata.winningRev = metadata.winningRev ||\n        winningRev(metadata);\n\n      function fetchMetadataSeq() {\n        // metadata.seq was added post-3.2.0, so if it's missing,\n        // we need to fetch it manually\n        var start = metadata.id + '::';\n        var end = metadata.id + '::\\uffff';\n        var req = bySeqStore.index('_doc_id_rev').openCursor(\n          IDBKeyRange.bound(start, end));\n\n        var metadataSeq = 0;\n        req.onsuccess = function (e) {\n          var cursor = e.target.result;\n          if (!cursor) {\n            metadata.seq = metadataSeq;\n            return onGetMetadataSeq();\n          }\n          var seq = cursor.primaryKey;\n          if (seq > metadataSeq) {\n            metadataSeq = seq;\n          }\n          cursor.continue();\n        };\n      }\n\n      function onGetMetadataSeq() {\n        var metadataToStore = encodeMetadata(metadata,\n          metadata.winningRev, metadata.deleted);\n\n        var req = docStore.put(metadataToStore);\n        req.onsuccess = function () {\n          cursor.continue();\n        };\n      }\n\n      if (metadata.seq) {\n        return onGetMetadataSeq();\n      }\n\n      fetchMetadataSeq();\n    };\n\n  }\n\n  api.type = function () {\n    return 'idb';\n  };\n\n  api._id = toPromise(function (callback) {\n    callback(null, api._meta.instanceId);\n  });\n\n  api._bulkDocs = function idb_bulkDocs(req, reqOpts, callback) {\n    idbBulkDocs(opts, req, reqOpts, api, idb, idbChanges, callback);\n  };\n\n  // First we look up the metadata in the ids database, then we fetch the\n  // current revision(s) from the by sequence store\n  api._get = function idb_get(id, opts, callback) {\n    var doc;\n    var metadata;\n    var err;\n    var txn = opts.ctx;\n    if (!txn) {\n      var txnResult = openTransactionSafely(idb,\n        [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n      if (txnResult.error) {\n        return callback(txnResult.error);\n      }\n      txn = txnResult.txn;\n    }\n\n    function finish() {\n      callback(err, {doc: doc, metadata: metadata, ctx: txn});\n    }\n\n    txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {\n      metadata = decodeMetadata(e.target.result);\n      // we can determine the result here if:\n      // 1. there is no such document\n      // 2. the document is deleted and we don't ask about specific rev\n      // When we ask with opts.rev we expect the answer to be either\n      // doc (possibly with _deleted=true) or missing error\n      if (!metadata) {\n        err = createError(MISSING_DOC, 'missing');\n        return finish();\n      }\n      if (isDeleted(metadata) && !opts.rev) {\n        err = createError(MISSING_DOC, \"deleted\");\n        return finish();\n      }\n      var objectStore = txn.objectStore(BY_SEQ_STORE);\n\n      var rev = opts.rev || metadata.winningRev;\n      var key = metadata.id + '::' + rev;\n\n      objectStore.index('_doc_id_rev').get(key).onsuccess = function (e) {\n        doc = e.target.result;\n        if (doc) {\n          doc = decodeDoc(doc);\n        }\n        if (!doc) {\n          err = createError(MISSING_DOC, 'missing');\n          return finish();\n        }\n        finish();\n      };\n    };\n  };\n\n  api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n    var txn;\n    if (opts.ctx) {\n      txn = opts.ctx;\n    } else {\n      var txnResult = openTransactionSafely(idb,\n        [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n      if (txnResult.error) {\n        return callback(txnResult.error);\n      }\n      txn = txnResult.txn;\n    }\n    var digest = attachment.digest;\n    var type = attachment.content_type;\n\n    txn.objectStore(ATTACH_STORE).get(digest).onsuccess = function (e) {\n      var body = e.target.result.body;\n      readBlobData(body, type, opts.binary, function (blobData) {\n        callback(null, blobData);\n      });\n    };\n  };\n\n  api._info = function idb_info(callback) {\n\n    if (idb === null || !cachedDBs.has(dbName)) {\n      var error = new Error('db isn\\'t open');\n      error.id = 'idbNull';\n      return callback(error);\n    }\n    var updateSeq;\n    var docCount;\n\n    var txnResult = openTransactionSafely(idb, [BY_SEQ_STORE], 'readonly');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    var txn = txnResult.txn;\n    var cursor = txn.objectStore(BY_SEQ_STORE).openCursor(null, 'prev');\n    cursor.onsuccess = function (event) {\n      var cursor = event.target.result;\n      updateSeq = cursor ? cursor.key : 0;\n      // count within the same txn for consistency\n      docCount = api._meta.docCount;\n    };\n\n    txn.oncomplete = function () {\n      callback(null, {\n        doc_count: docCount,\n        update_seq: updateSeq,\n        // for debugging\n        idb_attachment_format: (api._meta.blobSupport ? 'binary' : 'base64')\n      });\n    };\n  };\n\n  api._allDocs = function idb_allDocs(opts, callback) {\n    idbAllDocs(opts, api, idb, callback);\n  };\n\n  api._changes = function (opts) {\n    opts = clone(opts);\n\n    if (opts.continuous) {\n      var id = dbName + ':' + uuid();\n      idbChanges.addListener(dbName, id, api, opts);\n      idbChanges.notify(dbName);\n      return {\n        cancel: function () {\n          idbChanges.removeListener(dbName, id);\n        }\n      };\n    }\n\n    var docIds = opts.doc_ids && new _Set(opts.doc_ids);\n\n    opts.since = opts.since || 0;\n    var lastSeq = opts.since;\n\n    var limit = 'limit' in opts ? opts.limit : -1;\n    if (limit === 0) {\n      limit = 1; // per CouchDB _changes spec\n    }\n    var returnDocs;\n    if ('return_docs' in opts) {\n      returnDocs = opts.return_docs;\n    } else if ('returnDocs' in opts) {\n      // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n      returnDocs = opts.returnDocs;\n    } else {\n      returnDocs = true;\n    }\n\n    var results = [];\n    var numResults = 0;\n    var filter = filterChange(opts);\n    var docIdsToMetadata = new _Map();\n\n    var txn;\n    var bySeqStore;\n    var docStore;\n    var docIdRevIndex;\n\n    function onGetCursor(cursor) {\n\n      var doc = decodeDoc(cursor.value);\n      var seq = cursor.key;\n\n      if (docIds && !docIds.has(doc._id)) {\n        return cursor.continue();\n      }\n\n      var metadata;\n\n      function onGetMetadata() {\n        if (metadata.seq !== seq) {\n          // some other seq is later\n          return cursor.continue();\n        }\n\n        lastSeq = seq;\n\n        if (metadata.winningRev === doc._rev) {\n          return onGetWinningDoc(doc);\n        }\n\n        fetchWinningDoc();\n      }\n\n      function fetchWinningDoc() {\n        var docIdRev = doc._id + '::' + metadata.winningRev;\n        var req = docIdRevIndex.get(docIdRev);\n        req.onsuccess = function (e) {\n          onGetWinningDoc(decodeDoc(e.target.result));\n        };\n      }\n\n      function onGetWinningDoc(winningDoc) {\n\n        var change = opts.processChange(winningDoc, metadata, opts);\n        change.seq = metadata.seq;\n\n        var filtered = filter(change);\n        if (typeof filtered === 'object') {\n          return opts.complete(filtered);\n        }\n\n        if (filtered) {\n          numResults++;\n          if (returnDocs) {\n            results.push(change);\n          }\n          // process the attachment immediately\n          // for the benefit of live listeners\n          if (opts.attachments && opts.include_docs) {\n            fetchAttachmentsIfNecessary(winningDoc, opts, txn, function () {\n              postProcessAttachments([change], opts.binary).then(function () {\n                opts.onChange(change);\n              });\n            });\n          } else {\n            opts.onChange(change);\n          }\n        }\n        if (numResults !== limit) {\n          cursor.continue();\n        }\n      }\n\n      metadata = docIdsToMetadata.get(doc._id);\n      if (metadata) { // cached\n        return onGetMetadata();\n      }\n      // metadata not cached, have to go fetch it\n      docStore.get(doc._id).onsuccess = function (event) {\n        metadata = decodeMetadata(event.target.result);\n        docIdsToMetadata.set(doc._id, metadata);\n        onGetMetadata();\n      };\n    }\n\n    function onsuccess(event) {\n      var cursor = event.target.result;\n\n      if (!cursor) {\n        return;\n      }\n      onGetCursor(cursor);\n    }\n\n    function fetchChanges() {\n      var objectStores = [DOC_STORE, BY_SEQ_STORE];\n      if (opts.attachments) {\n        objectStores.push(ATTACH_STORE);\n      }\n      var txnResult = openTransactionSafely(idb, objectStores, 'readonly');\n      if (txnResult.error) {\n        return opts.complete(txnResult.error);\n      }\n      txn = txnResult.txn;\n      txn.onabort = idbError(opts.complete);\n      txn.oncomplete = onTxnComplete;\n\n      bySeqStore = txn.objectStore(BY_SEQ_STORE);\n      docStore = txn.objectStore(DOC_STORE);\n      docIdRevIndex = bySeqStore.index('_doc_id_rev');\n\n      var req;\n\n      if (opts.descending) {\n        req = bySeqStore.openCursor(null, 'prev');\n      } else {\n        req = bySeqStore.openCursor(IDBKeyRange.lowerBound(opts.since, true));\n      }\n\n      req.onsuccess = onsuccess;\n    }\n\n    fetchChanges();\n\n    function onTxnComplete() {\n\n      function finish() {\n        opts.complete(null, {\n          results: results,\n          last_seq: lastSeq\n        });\n      }\n\n      if (!opts.continuous && opts.attachments) {\n        // cannot guarantee that postProcessing was already done,\n        // so do it again\n        postProcessAttachments(results).then(finish);\n      } else {\n        finish();\n      }\n    }\n  };\n\n  api._close = function (callback) {\n    if (idb === null) {\n      return callback(createError(NOT_OPEN));\n    }\n\n    // https://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase#close\n    // \"Returns immediately and closes the connection in a separate thread...\"\n    idb.close();\n    cachedDBs.delete(dbName);\n    idb = null;\n    callback();\n  };\n\n  api._getRevisionTree = function (docId, callback) {\n    var txnResult = openTransactionSafely(idb, [DOC_STORE], 'readonly');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    var txn = txnResult.txn;\n    var req = txn.objectStore(DOC_STORE).get(docId);\n    req.onsuccess = function (event) {\n      var doc = decodeMetadata(event.target.result);\n      if (!doc) {\n        callback(createError(MISSING_DOC));\n      } else {\n        callback(null, doc.rev_tree);\n      }\n    };\n  };\n\n  // This function removes revisions of document docId\n  // which are listed in revs and sets this document\n  // revision to to rev_tree\n  api._doCompaction = function (docId, revs, callback) {\n    var stores = [\n      DOC_STORE,\n      BY_SEQ_STORE,\n      ATTACH_STORE,\n      ATTACH_AND_SEQ_STORE\n    ];\n    var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    var txn = txnResult.txn;\n\n    var docStore = txn.objectStore(DOC_STORE);\n\n    docStore.get(docId).onsuccess = function (event) {\n      var metadata = decodeMetadata(event.target.result);\n      traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n                                                         revHash, ctx, opts) {\n        var rev = pos + '-' + revHash;\n        if (revs.indexOf(rev) !== -1) {\n          opts.status = 'missing';\n        }\n      });\n      compactRevs(revs, docId, txn);\n      var winningRev = metadata.winningRev;\n      var deleted = metadata.deleted;\n      txn.objectStore(DOC_STORE).put(\n        encodeMetadata(metadata, winningRev, deleted));\n    };\n    txn.onabort = idbError(callback);\n    txn.oncomplete = function () {\n      callback();\n    };\n  };\n\n\n  api._getLocal = function (id, callback) {\n    var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readonly');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    var tx = txnResult.txn;\n    var req = tx.objectStore(LOCAL_STORE).get(id);\n\n    req.onerror = idbError(callback);\n    req.onsuccess = function (e) {\n      var doc = e.target.result;\n      if (!doc) {\n        callback(createError(MISSING_DOC));\n      } else {\n        delete doc['_doc_id_rev']; // for backwards compat\n        callback(null, doc);\n      }\n    };\n  };\n\n  api._putLocal = function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    delete doc._revisions; // ignore this, trust the rev\n    var oldRev = doc._rev;\n    var id = doc._id;\n    if (!oldRev) {\n      doc._rev = '0-1';\n    } else {\n      doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);\n    }\n\n    var tx = opts.ctx;\n    var ret;\n    if (!tx) {\n      var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n      if (txnResult.error) {\n        return callback(txnResult.error);\n      }\n      tx = txnResult.txn;\n      tx.onerror = idbError(callback);\n      tx.oncomplete = function () {\n        if (ret) {\n          callback(null, ret);\n        }\n      };\n    }\n\n    var oStore = tx.objectStore(LOCAL_STORE);\n    var req;\n    if (oldRev) {\n      req = oStore.get(id);\n      req.onsuccess = function (e) {\n        var oldDoc = e.target.result;\n        if (!oldDoc || oldDoc._rev !== oldRev) {\n          callback(createError(REV_CONFLICT));\n        } else { // update\n          var req = oStore.put(doc);\n          req.onsuccess = function () {\n            ret = {ok: true, id: doc._id, rev: doc._rev};\n            if (opts.ctx) { // return immediately\n              callback(null, ret);\n            }\n          };\n        }\n      };\n    } else { // new doc\n      req = oStore.add(doc);\n      req.onerror = function (e) {\n        // constraint error, already exists\n        callback(createError(REV_CONFLICT));\n        e.preventDefault(); // avoid transaction abort\n        e.stopPropagation(); // avoid transaction onerror\n      };\n      req.onsuccess = function () {\n        ret = {ok: true, id: doc._id, rev: doc._rev};\n        if (opts.ctx) { // return immediately\n          callback(null, ret);\n        }\n      };\n    }\n  };\n\n  api._removeLocal = function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var tx = opts.ctx;\n    if (!tx) {\n      var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n      if (txnResult.error) {\n        return callback(txnResult.error);\n      }\n      tx = txnResult.txn;\n      tx.oncomplete = function () {\n        if (ret) {\n          callback(null, ret);\n        }\n      };\n    }\n    var ret;\n    var id = doc._id;\n    var oStore = tx.objectStore(LOCAL_STORE);\n    var req = oStore.get(id);\n\n    req.onerror = idbError(callback);\n    req.onsuccess = function (e) {\n      var oldDoc = e.target.result;\n      if (!oldDoc || oldDoc._rev !== doc._rev) {\n        callback(createError(MISSING_DOC));\n      } else {\n        oStore.delete(id);\n        ret = {ok: true, id: id, rev: '0-0'};\n        if (opts.ctx) { // return immediately\n          callback(null, ret);\n        }\n      }\n    };\n  };\n\n  api._destroy = function (opts, callback) {\n    idbChanges.removeAllListeners(dbName);\n\n    //Close open request for \"dbName\" database to fix ie delay.\n    var openReq = openReqList.get(dbName);\n    if (openReq && openReq.result) {\n      openReq.result.close();\n      cachedDBs.delete(dbName);\n    }\n    var req = indexedDB.deleteDatabase(dbName);\n\n    req.onsuccess = function () {\n      //Remove open request from the list.\n      openReqList.delete(dbName);\n      if (hasLocalStorage() && (dbName in localStorage)) {\n        delete localStorage[dbName];\n      }\n      callback(null, { 'ok': true });\n    };\n\n    req.onerror = idbError(callback);\n  };\n\n  var cached = cachedDBs.get(dbName);\n\n  if (cached) {\n    idb = cached.idb;\n    api._meta = cached.global;\n    process.nextTick(function () {\n      callback(null, api);\n    });\n    return;\n  }\n\n  var req;\n  if (opts.storage) {\n    req = tryStorageOption(dbName, opts.storage);\n  } else {\n    req = indexedDB.open(dbName, ADAPTER_VERSION);\n  }\n\n  openReqList.set(dbName, req);\n\n  req.onupgradeneeded = function (e) {\n    var db = e.target.result;\n    if (e.oldVersion < 1) {\n      return createSchema(db); // new db, initial schema\n    }\n    // do migrations\n\n    var txn = e.currentTarget.transaction;\n    // these migrations have to be done in this function, before\n    // control is returned to the event loop, because IndexedDB\n\n    if (e.oldVersion < 3) {\n      createLocalStoreSchema(db); // v2 -> v3\n    }\n    if (e.oldVersion < 4) {\n      addAttachAndSeqStore(db); // v3 -> v4\n    }\n\n    var migrations = [\n      addDeletedOrLocalIndex, // v1 -> v2\n      migrateLocalStore,      // v2 -> v3\n      migrateAttsAndSeqs,     // v3 -> v4\n      migrateMetadata         // v4 -> v5\n    ];\n\n    var i = e.oldVersion;\n\n    function next() {\n      var migration = migrations[i - 1];\n      i++;\n      if (migration) {\n        migration(txn, next);\n      }\n    }\n\n    next();\n  };\n\n  req.onsuccess = function (e) {\n\n    idb = e.target.result;\n\n    idb.onversionchange = function () {\n      idb.close();\n      cachedDBs.delete(dbName);\n    };\n\n    idb.onabort = function (e) {\n      guardedConsole('error', 'Database has a global failure', e.target.error);\n      idb.close();\n      cachedDBs.delete(dbName);\n    };\n\n    var txn = idb.transaction([\n      META_STORE,\n      DETECT_BLOB_SUPPORT_STORE,\n      DOC_STORE\n    ], 'readwrite');\n\n    var req = txn.objectStore(META_STORE).get(META_STORE);\n\n    var blobSupport = null;\n    var docCount = null;\n    var instanceId = null;\n\n    req.onsuccess = function (e) {\n\n      var checkSetupComplete = function () {\n        if (blobSupport === null || docCount === null ||\n            instanceId === null) {\n          return;\n        } else {\n          api._meta = {\n            name: dbName,\n            instanceId: instanceId,\n            blobSupport: blobSupport,\n            docCount: docCount\n          };\n\n          cachedDBs.set(dbName, {\n            idb: idb,\n            global: api._meta\n          });\n          callback(null, api);\n        }\n      };\n\n      //\n      // fetch/store the id\n      //\n\n      var meta = e.target.result || {id: META_STORE};\n      if (dbName  + '_id' in meta) {\n        instanceId = meta[dbName + '_id'];\n        checkSetupComplete();\n      } else {\n        instanceId = uuid();\n        meta[dbName + '_id'] = instanceId;\n        txn.objectStore(META_STORE).put(meta).onsuccess = function () {\n          checkSetupComplete();\n        };\n      }\n\n      //\n      // check blob support\n      //\n\n      if (!blobSupportPromise) {\n        // make sure blob support is only checked once\n        blobSupportPromise = checkBlobSupport(txn);\n      }\n\n      blobSupportPromise.then(function (val) {\n        blobSupport = val;\n        checkSetupComplete();\n      });\n\n      //\n      // count docs\n      //\n\n      var index = txn.objectStore(DOC_STORE).index('deletedOrLocal');\n      index.count(IDBKeyRange.only('0')).onsuccess = function (e) {\n        docCount = e.target.result;\n        checkSetupComplete();\n      };\n\n    };\n  };\n\n  req.onerror = function () {\n    var msg = 'Failed to open indexedDB, are you in private browsing mode?';\n    guardedConsole('error', msg);\n    callback(createError(IDB_ERROR, msg));\n  };\n}\n\nIdbPouch.valid = function () {\n  // Issue #2533, we finally gave up on doing bug\n  // detection instead of browser sniffing. Safari brought us\n  // to our knees.\n  var isSafari = typeof openDatabase !== 'undefined' &&\n    /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) &&\n    !/Chrome/.test(navigator.userAgent) &&\n    !/BlackBerry/.test(navigator.platform);\n\n  // some outdated implementations of IDB that appear on Samsung\n  // and HTC Android devices <4.4 are missing IDBKeyRange\n  return !isSafari && typeof indexedDB !== 'undefined' &&\n    typeof IDBKeyRange !== 'undefined';\n};\n\nfunction tryStorageOption(dbName, storage) {\n  try { // option only available in Firefox 26+\n    return indexedDB.open(dbName, {\n      version: ADAPTER_VERSION,\n      storage: storage\n    });\n  } catch(err) {\n      return indexedDB.open(dbName, ADAPTER_VERSION);\n  }\n}\n\nfunction IDBPouch (PouchDB) {\n  PouchDB.adapter('idb', IdbPouch, true);\n}\n\n//\n// Parsing hex strings. Yeah.\n//\n// So basically we need this because of a bug in WebSQL:\n// https://code.google.com/p/chromium/issues/detail?id=422690\n// https://bugs.webkit.org/show_bug.cgi?id=137637\n//\n// UTF-8 and UTF-16 are provided as separate functions\n// for meager performance improvements\n//\n\nfunction decodeUtf8(str) {\n  return decodeURIComponent(escape(str));\n}\n\nfunction hexToInt(charCode) {\n  // '0'-'9' is 48-57\n  // 'A'-'F' is 65-70\n  // SQLite will only give us uppercase hex\n  return charCode < 65 ? (charCode - 48) : (charCode - 55);\n}\n\n\n// Example:\n// pragma encoding=utf8;\n// select hex('A');\n// returns '41'\nfunction parseHexUtf8(str, start, end) {\n  var result = '';\n  while (start < end) {\n    result += String.fromCharCode(\n      (hexToInt(str.charCodeAt(start++)) << 4) |\n        hexToInt(str.charCodeAt(start++)));\n  }\n  return result;\n}\n\n// Example:\n// pragma encoding=utf16;\n// select hex('A');\n// returns '4100'\n// notice that the 00 comes after the 41 (i.e. it's swizzled)\nfunction parseHexUtf16(str, start, end) {\n  var result = '';\n  while (start < end) {\n    // UTF-16, so swizzle the bytes\n    result += String.fromCharCode(\n      (hexToInt(str.charCodeAt(start + 2)) << 12) |\n        (hexToInt(str.charCodeAt(start + 3)) << 8) |\n        (hexToInt(str.charCodeAt(start)) << 4) |\n        hexToInt(str.charCodeAt(start + 1)));\n    start += 4;\n  }\n  return result;\n}\n\nfunction parseHexString(str, encoding) {\n  if (encoding === 'UTF-8') {\n    return decodeUtf8(parseHexUtf8(str, 0, str.length));\n  } else {\n    return parseHexUtf16(str, 0, str.length);\n  }\n}\n\nfunction quote(str) {\n  return \"'\" + str + \"'\";\n}\n\nvar ADAPTER_VERSION$1 = 7; // used to manage migrations\n\n// The object stores created for each database\n// DOC_STORE stores the document meta data, its revision history and state\nvar DOC_STORE$1 = quote('document-store');\n// BY_SEQ_STORE stores a particular version of a document, keyed by its\n// sequence id\nvar BY_SEQ_STORE$1 = quote('by-sequence');\n// Where we store attachments\nvar ATTACH_STORE$1 = quote('attach-store');\nvar LOCAL_STORE$1 = quote('local-store');\nvar META_STORE$1 = quote('metadata-store');\n// where we store many-to-many relations between attachment\n// digests and seqs\nvar ATTACH_AND_SEQ_STORE$1 = quote('attach-seq-store');\n\n// escapeBlob and unescapeBlob are workarounds for a websql bug:\n// https://code.google.com/p/chromium/issues/detail?id=422690\n// https://bugs.webkit.org/show_bug.cgi?id=137637\n// The goal is to never actually insert the \\u0000 character\n// in the database.\nfunction escapeBlob(str) {\n  return str\n    .replace(/\\u0002/g, '\\u0002\\u0002')\n    .replace(/\\u0001/g, '\\u0001\\u0002')\n    .replace(/\\u0000/g, '\\u0001\\u0001');\n}\n\nfunction unescapeBlob(str) {\n  return str\n    .replace(/\\u0001\\u0001/g, '\\u0000')\n    .replace(/\\u0001\\u0002/g, '\\u0001')\n    .replace(/\\u0002\\u0002/g, '\\u0002');\n}\n\nfunction stringifyDoc(doc) {\n  // don't bother storing the id/rev. it uses lots of space,\n  // in persistent map/reduce especially\n  delete doc._id;\n  delete doc._rev;\n  return JSON.stringify(doc);\n}\n\nfunction unstringifyDoc(doc, id, rev) {\n  doc = JSON.parse(doc);\n  doc._id = id;\n  doc._rev = rev;\n  return doc;\n}\n\n// question mark groups IN queries, e.g. 3 -> '(?,?,?)'\nfunction qMarks(num) {\n  var s = '(';\n  while (num--) {\n    s += '?';\n    if (num) {\n      s += ',';\n    }\n  }\n  return s + ')';\n}\n\nfunction select(selector, table, joiner, where, orderBy) {\n  return 'SELECT ' + selector + ' FROM ' +\n    (typeof table === 'string' ? table : table.join(' JOIN ')) +\n    (joiner ? (' ON ' + joiner) : '') +\n    (where ? (' WHERE ' +\n    (typeof where === 'string' ? where : where.join(' AND '))) : '') +\n    (orderBy ? (' ORDER BY ' + orderBy) : '');\n}\n\nfunction compactRevs$1(revs, docId, tx) {\n\n  if (!revs.length) {\n    return;\n  }\n\n  var numDone = 0;\n  var seqs = [];\n\n  function checkDone() {\n    if (++numDone === revs.length) { // done\n      deleteOrphans();\n    }\n  }\n\n  function deleteOrphans() {\n    // find orphaned attachment digests\n\n    if (!seqs.length) {\n      return;\n    }\n\n    var sql = 'SELECT DISTINCT digest AS digest FROM ' +\n      ATTACH_AND_SEQ_STORE$1 + ' WHERE seq IN ' + qMarks(seqs.length);\n\n    tx.executeSql(sql, seqs, function (tx, res) {\n\n      var digestsToCheck = [];\n      for (var i = 0; i < res.rows.length; i++) {\n        digestsToCheck.push(res.rows.item(i).digest);\n      }\n      if (!digestsToCheck.length) {\n        return;\n      }\n\n      var sql = 'DELETE FROM ' + ATTACH_AND_SEQ_STORE$1 +\n        ' WHERE seq IN (' +\n        seqs.map(function () { return '?'; }).join(',') +\n        ')';\n      tx.executeSql(sql, seqs, function (tx) {\n\n        var sql = 'SELECT digest FROM ' + ATTACH_AND_SEQ_STORE$1 +\n          ' WHERE digest IN (' +\n          digestsToCheck.map(function () { return '?'; }).join(',') +\n          ')';\n        tx.executeSql(sql, digestsToCheck, function (tx, res) {\n          var nonOrphanedDigests = new _Set();\n          for (var i = 0; i < res.rows.length; i++) {\n            nonOrphanedDigests.add(res.rows.item(i).digest);\n          }\n          digestsToCheck.forEach(function (digest) {\n            if (nonOrphanedDigests.has(digest)) {\n              return;\n            }\n            tx.executeSql(\n              'DELETE FROM ' + ATTACH_AND_SEQ_STORE$1 + ' WHERE digest=?',\n              [digest]);\n            tx.executeSql(\n              'DELETE FROM ' + ATTACH_STORE$1 + ' WHERE digest=?', [digest]);\n          });\n        });\n      });\n    });\n  }\n\n  // update by-seq and attach stores in parallel\n  revs.forEach(function (rev) {\n    var sql = 'SELECT seq FROM ' + BY_SEQ_STORE$1 +\n      ' WHERE doc_id=? AND rev=?';\n\n    tx.executeSql(sql, [docId, rev], function (tx, res) {\n      if (!res.rows.length) { // already deleted\n        return checkDone();\n      }\n      var seq = res.rows.item(0).seq;\n      seqs.push(seq);\n\n      tx.executeSql(\n        'DELETE FROM ' + BY_SEQ_STORE$1 + ' WHERE seq=?', [seq], checkDone);\n    });\n  });\n}\n\nfunction websqlError(callback) {\n  return function (event) {\n    guardedConsole('error', 'WebSQL threw an error', event);\n    // event may actually be a SQLError object, so report is as such\n    var errorNameMatch = event && event.constructor.toString()\n        .match(/function ([^\\(]+)/);\n    var errorName = (errorNameMatch && errorNameMatch[1]) || event.type;\n    var errorReason = event.target || event.message;\n    callback(createError(WSQ_ERROR, errorReason, errorName));\n  };\n}\n\nfunction getSize(opts) {\n  if ('size' in opts) {\n    // triggers immediate popup in iOS, fixes #2347\n    // e.g. 5000001 asks for 5 MB, 10000001 asks for 10 MB,\n    return opts.size * 1000000;\n  }\n  // In iOS, doesn't matter as long as it's <= 5000000.\n  // Except that if you request too much, our tests fail\n  // because of the native \"do you accept?\" popup.\n  // In Android <=4.3, this value is actually used as an\n  // honest-to-god ceiling for data, so we need to\n  // set it to a decently high number.\n  var isAndroid = typeof navigator !== 'undefined' &&\n    /Android/.test(navigator.userAgent);\n  return isAndroid ? 5000000 : 1; // in PhantomJS, if you use 0 it will crash\n}\n\nfunction websqlBulkDocs(dbOpts, req, opts, api, db, websqlChanges, callback) {\n  var newEdits = opts.new_edits;\n  var userDocs = req.docs;\n\n  // Parse the docs, give them a sequence number for the result\n  var docInfos = userDocs.map(function (doc) {\n    if (doc._id && isLocalId(doc._id)) {\n      return doc;\n    }\n    var newDoc = parseDoc(doc, newEdits);\n    return newDoc;\n  });\n\n  var docInfoErrors = docInfos.filter(function (docInfo) {\n    return docInfo.error;\n  });\n  if (docInfoErrors.length) {\n    return callback(docInfoErrors[0]);\n  }\n\n  var tx;\n  var results = new Array(docInfos.length);\n  var fetchedDocs = new _Map();\n\n  var preconditionErrored;\n  function complete() {\n    if (preconditionErrored) {\n      return callback(preconditionErrored);\n    }\n    websqlChanges.notify(api._name);\n    api._docCount = -1; // invalidate\n    callback(null, results);\n  }\n\n  function verifyAttachment(digest, callback) {\n    var sql = 'SELECT count(*) as cnt FROM ' + ATTACH_STORE$1 +\n      ' WHERE digest=?';\n    tx.executeSql(sql, [digest], function (tx, result) {\n      if (result.rows.item(0).cnt === 0) {\n        var err = createError(MISSING_STUB,\n          'unknown stub attachment with digest ' +\n          digest);\n        callback(err);\n      } else {\n        callback();\n      }\n    });\n  }\n\n  function verifyAttachments(finish) {\n    var digests = [];\n    docInfos.forEach(function (docInfo) {\n      if (docInfo.data && docInfo.data._attachments) {\n        Object.keys(docInfo.data._attachments).forEach(function (filename) {\n          var att = docInfo.data._attachments[filename];\n          if (att.stub) {\n            digests.push(att.digest);\n          }\n        });\n      }\n    });\n    if (!digests.length) {\n      return finish();\n    }\n    var numDone = 0;\n    var err;\n\n    function checkDone() {\n      if (++numDone === digests.length) {\n        finish(err);\n      }\n    }\n    digests.forEach(function (digest) {\n      verifyAttachment(digest, function (attErr) {\n        if (attErr && !err) {\n          err = attErr;\n        }\n        checkDone();\n      });\n    });\n  }\n\n  function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,\n                    isUpdate, delta, resultsIdx, callback) {\n\n    function finish() {\n      var data = docInfo.data;\n      var deletedInt = newRevIsDeleted ? 1 : 0;\n\n      var id = data._id;\n      var rev = data._rev;\n      var json = stringifyDoc(data);\n      var sql = 'INSERT INTO ' + BY_SEQ_STORE$1 +\n        ' (doc_id, rev, json, deleted) VALUES (?, ?, ?, ?);';\n      var sqlArgs = [id, rev, json, deletedInt];\n\n      // map seqs to attachment digests, which\n      // we will need later during compaction\n      function insertAttachmentMappings(seq, callback) {\n        var attsAdded = 0;\n        var attsToAdd = Object.keys(data._attachments || {});\n\n        if (!attsToAdd.length) {\n          return callback();\n        }\n        function checkDone() {\n          if (++attsAdded === attsToAdd.length) {\n            callback();\n          }\n          return false; // ack handling a constraint error\n        }\n        function add(att) {\n          var sql = 'INSERT INTO ' + ATTACH_AND_SEQ_STORE$1 +\n            ' (digest, seq) VALUES (?,?)';\n          var sqlArgs = [data._attachments[att].digest, seq];\n          tx.executeSql(sql, sqlArgs, checkDone, checkDone);\n          // second callback is for a constaint error, which we ignore\n          // because this docid/rev has already been associated with\n          // the digest (e.g. when new_edits == false)\n        }\n        for (var i = 0; i < attsToAdd.length; i++) {\n          add(attsToAdd[i]); // do in parallel\n        }\n      }\n\n      tx.executeSql(sql, sqlArgs, function (tx, result) {\n        var seq = result.insertId;\n        insertAttachmentMappings(seq, function () {\n          dataWritten(tx, seq);\n        });\n      }, function () {\n        // constraint error, recover by updating instead (see #1638)\n        var fetchSql = select('seq', BY_SEQ_STORE$1, null,\n          'doc_id=? AND rev=?');\n        tx.executeSql(fetchSql, [id, rev], function (tx, res) {\n          var seq = res.rows.item(0).seq;\n          var sql = 'UPDATE ' + BY_SEQ_STORE$1 +\n            ' SET json=?, deleted=? WHERE doc_id=? AND rev=?;';\n          var sqlArgs = [json, deletedInt, id, rev];\n          tx.executeSql(sql, sqlArgs, function (tx) {\n            insertAttachmentMappings(seq, function () {\n              dataWritten(tx, seq);\n            });\n          });\n        });\n        return false; // ack that we've handled the error\n      });\n    }\n\n    function collectResults(attachmentErr) {\n      if (!err) {\n        if (attachmentErr) {\n          err = attachmentErr;\n          callback(err);\n        } else if (recv === attachments.length) {\n          finish();\n        }\n      }\n    }\n\n    var err = null;\n    var recv = 0;\n\n    docInfo.data._id = docInfo.metadata.id;\n    docInfo.data._rev = docInfo.metadata.rev;\n    var attachments = Object.keys(docInfo.data._attachments || {});\n\n\n    if (newRevIsDeleted) {\n      docInfo.data._deleted = true;\n    }\n\n    function attachmentSaved(err) {\n      recv++;\n      collectResults(err);\n    }\n\n    attachments.forEach(function (key) {\n      var att = docInfo.data._attachments[key];\n      if (!att.stub) {\n        var data = att.data;\n        delete att.data;\n        att.revpos = parseInt(winningRev, 10);\n        var digest = att.digest;\n        saveAttachment(digest, data, attachmentSaved);\n      } else {\n        recv++;\n        collectResults();\n      }\n    });\n\n    if (!attachments.length) {\n      finish();\n    }\n\n    function dataWritten(tx, seq) {\n      var id = docInfo.metadata.id;\n\n      var revsToCompact = docInfo.stemmedRevs || [];\n      if (isUpdate && api.auto_compaction) {\n        revsToCompact = compactTree(docInfo.metadata).concat(revsToCompact);\n      }\n      if (revsToCompact.length) {\n        compactRevs$1(revsToCompact, id, tx);\n      }\n\n      docInfo.metadata.seq = seq;\n      delete docInfo.metadata.rev;\n\n      var sql = isUpdate ?\n      'UPDATE ' + DOC_STORE$1 +\n      ' SET json=?, max_seq=?, winningseq=' +\n      '(SELECT seq FROM ' + BY_SEQ_STORE$1 +\n      ' WHERE doc_id=' + DOC_STORE$1 + '.id AND rev=?) WHERE id=?'\n        : 'INSERT INTO ' + DOC_STORE$1 +\n      ' (id, winningseq, max_seq, json) VALUES (?,?,?,?);';\n      var metadataStr = safeJsonStringify(docInfo.metadata);\n      var params = isUpdate ?\n        [metadataStr, seq, winningRev, id] :\n        [id, seq, seq, metadataStr];\n      tx.executeSql(sql, params, function () {\n        results[resultsIdx] = {\n          ok: true,\n          id: docInfo.metadata.id,\n          rev: winningRev\n        };\n        fetchedDocs.set(id, docInfo.metadata);\n        callback();\n      });\n    }\n  }\n\n  function websqlProcessDocs() {\n    processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs, tx,\n                results, writeDoc, opts);\n  }\n\n  function fetchExistingDocs(callback) {\n    if (!docInfos.length) {\n      return callback();\n    }\n\n    var numFetched = 0;\n\n    function checkDone() {\n      if (++numFetched === docInfos.length) {\n        callback();\n      }\n    }\n\n    docInfos.forEach(function (docInfo) {\n      if (docInfo._id && isLocalId(docInfo._id)) {\n        return checkDone(); // skip local docs\n      }\n      var id = docInfo.metadata.id;\n      tx.executeSql('SELECT json FROM ' + DOC_STORE$1 +\n      ' WHERE id = ?', [id], function (tx, result) {\n        if (result.rows.length) {\n          var metadata = safeJsonParse(result.rows.item(0).json);\n          fetchedDocs.set(id, metadata);\n        }\n        checkDone();\n      });\n    });\n  }\n\n  function saveAttachment(digest, data, callback) {\n    var sql = 'SELECT digest FROM ' + ATTACH_STORE$1 + ' WHERE digest=?';\n    tx.executeSql(sql, [digest], function (tx, result) {\n      if (result.rows.length) { // attachment already exists\n        return callback();\n      }\n      // we could just insert before selecting and catch the error,\n      // but my hunch is that it's cheaper not to serialize the blob\n      // from JS to C if we don't have to (TODO: confirm this)\n      sql = 'INSERT INTO ' + ATTACH_STORE$1 +\n      ' (digest, body, escaped) VALUES (?,?,1)';\n      tx.executeSql(sql, [digest, escapeBlob(data)], function () {\n        callback();\n      }, function () {\n        // ignore constaint errors, means it already exists\n        callback();\n        return false; // ack we handled the error\n      });\n    });\n  }\n\n  preprocessAttachments(docInfos, 'binary', function (err) {\n    if (err) {\n      return callback(err);\n    }\n    db.transaction(function (txn) {\n      tx = txn;\n      verifyAttachments(function (err) {\n        if (err) {\n          preconditionErrored = err;\n        } else {\n          fetchExistingDocs(websqlProcessDocs);\n        }\n      });\n    }, websqlError(callback), complete);\n  });\n}\n\nvar cachedDatabases = new _Map();\n\n// openDatabase passed in through opts (e.g. for node-websql)\nfunction openDatabaseWithOpts(opts) {\n  return opts.websql(opts.name, opts.version, opts.description, opts.size);\n}\n\nfunction openDBSafely(opts) {\n  try {\n    return {\n      db: openDatabaseWithOpts(opts)\n    };\n  } catch (err) {\n    return {\n      error: err\n    };\n  }\n}\n\nfunction openDB$1(opts) {\n  var cachedResult = cachedDatabases.get(opts.name);\n  if (!cachedResult) {\n    cachedResult = openDBSafely(opts);\n    cachedDatabases.set(opts.name, cachedResult);\n  }\n  return cachedResult;\n}\n\nvar websqlChanges = new Changes$1();\n\nfunction fetchAttachmentsIfNecessary$1(doc, opts, api, txn, cb) {\n  var attachments = Object.keys(doc._attachments || {});\n  if (!attachments.length) {\n    return cb && cb();\n  }\n  var numDone = 0;\n\n  function checkDone() {\n    if (++numDone === attachments.length && cb) {\n      cb();\n    }\n  }\n\n  function fetchAttachment(doc, att) {\n    var attObj = doc._attachments[att];\n    var attOpts = {binary: opts.binary, ctx: txn};\n    api._getAttachment(doc._id, att, attObj, attOpts, function (_, data) {\n      doc._attachments[att] = jsExtend.extend(\n        pick(attObj, ['digest', 'content_type']),\n        { data: data }\n      );\n      checkDone();\n    });\n  }\n\n  attachments.forEach(function (att) {\n    if (opts.attachments && opts.include_docs) {\n      fetchAttachment(doc, att);\n    } else {\n      doc._attachments[att].stub = true;\n      checkDone();\n    }\n  });\n}\n\nvar POUCH_VERSION = 1;\n\n// these indexes cover the ground for most allDocs queries\nvar BY_SEQ_STORE_DELETED_INDEX_SQL =\n  'CREATE INDEX IF NOT EXISTS \\'by-seq-deleted-idx\\' ON ' +\n  BY_SEQ_STORE$1 + ' (seq, deleted)';\nvar BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL =\n  'CREATE UNIQUE INDEX IF NOT EXISTS \\'by-seq-doc-id-rev\\' ON ' +\n    BY_SEQ_STORE$1 + ' (doc_id, rev)';\nvar DOC_STORE_WINNINGSEQ_INDEX_SQL =\n  'CREATE INDEX IF NOT EXISTS \\'doc-winningseq-idx\\' ON ' +\n  DOC_STORE$1 + ' (winningseq)';\nvar ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL =\n  'CREATE INDEX IF NOT EXISTS \\'attach-seq-seq-idx\\' ON ' +\n    ATTACH_AND_SEQ_STORE$1 + ' (seq)';\nvar ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL =\n  'CREATE UNIQUE INDEX IF NOT EXISTS \\'attach-seq-digest-idx\\' ON ' +\n    ATTACH_AND_SEQ_STORE$1 + ' (digest, seq)';\n\nvar DOC_STORE_AND_BY_SEQ_JOINER = BY_SEQ_STORE$1 +\n  '.seq = ' + DOC_STORE$1 + '.winningseq';\n\nvar SELECT_DOCS = BY_SEQ_STORE$1 + '.seq AS seq, ' +\n  BY_SEQ_STORE$1 + '.deleted AS deleted, ' +\n  BY_SEQ_STORE$1 + '.json AS data, ' +\n  BY_SEQ_STORE$1 + '.rev AS rev, ' +\n  DOC_STORE$1 + '.json AS metadata';\n\nfunction WebSqlPouch$1(opts, callback) {\n  var api = this;\n  var instanceId = null;\n  var size = getSize(opts);\n  var idRequests = [];\n  var encoding;\n\n  api._docCount = -1; // cache sqlite count(*) for performance\n  api._name = opts.name;\n\n  // extend the options here, because sqlite plugin has a ton of options\n  // and they are constantly changing, so it's more prudent to allow anything\n  var websqlOpts = jsExtend.extend({}, opts, {\n    version: POUCH_VERSION,\n    description: opts.name,\n    size: size\n  });\n  var openDBResult = openDB$1(websqlOpts);\n  if (openDBResult.error) {\n    return websqlError(callback)(openDBResult.error);\n  }\n  var db = openDBResult.db;\n  if (typeof db.readTransaction !== 'function') {\n    // doesn't exist in sqlite plugin\n    db.readTransaction = db.transaction;\n  }\n\n  function dbCreated() {\n    // note the db name in case the browser upgrades to idb\n    if (hasLocalStorage()) {\n      window.localStorage['_pouch__websqldb_' + api._name] = true;\n    }\n    callback(null, api);\n  }\n\n  // In this migration, we added the 'deleted' and 'local' columns to the\n  // by-seq and doc store tables.\n  // To preserve existing user data, we re-process all the existing JSON\n  // and add these values.\n  // Called migration2 because it corresponds to adapter version (db_version) #2\n  function runMigration2(tx, callback) {\n    // index used for the join in the allDocs query\n    tx.executeSql(DOC_STORE_WINNINGSEQ_INDEX_SQL);\n\n    tx.executeSql('ALTER TABLE ' + BY_SEQ_STORE$1 +\n      ' ADD COLUMN deleted TINYINT(1) DEFAULT 0', [], function () {\n      tx.executeSql(BY_SEQ_STORE_DELETED_INDEX_SQL);\n      tx.executeSql('ALTER TABLE ' + DOC_STORE$1 +\n        ' ADD COLUMN local TINYINT(1) DEFAULT 0', [], function () {\n        tx.executeSql('CREATE INDEX IF NOT EXISTS \\'doc-store-local-idx\\' ON ' +\n          DOC_STORE$1 + ' (local, id)');\n\n        var sql = 'SELECT ' + DOC_STORE$1 + '.winningseq AS seq, ' + DOC_STORE$1 +\n          '.json AS metadata FROM ' + BY_SEQ_STORE$1 + ' JOIN ' + DOC_STORE$1 +\n          ' ON ' + BY_SEQ_STORE$1 + '.seq = ' + DOC_STORE$1 + '.winningseq';\n\n        tx.executeSql(sql, [], function (tx, result) {\n\n          var deleted = [];\n          var local = [];\n\n          for (var i = 0; i < result.rows.length; i++) {\n            var item = result.rows.item(i);\n            var seq = item.seq;\n            var metadata = JSON.parse(item.metadata);\n            if (isDeleted(metadata)) {\n              deleted.push(seq);\n            }\n            if (isLocalId(metadata.id)) {\n              local.push(metadata.id);\n            }\n          }\n          tx.executeSql('UPDATE ' + DOC_STORE$1 + 'SET local = 1 WHERE id IN ' +\n            qMarks(local.length), local, function () {\n            tx.executeSql('UPDATE ' + BY_SEQ_STORE$1 +\n              ' SET deleted = 1 WHERE seq IN ' +\n              qMarks(deleted.length), deleted, callback);\n          });\n        });\n      });\n    });\n  }\n\n  // in this migration, we make all the local docs unversioned\n  function runMigration3(tx, callback) {\n    var local = 'CREATE TABLE IF NOT EXISTS ' + LOCAL_STORE$1 +\n      ' (id UNIQUE, rev, json)';\n    tx.executeSql(local, [], function () {\n      var sql = 'SELECT ' + DOC_STORE$1 + '.id AS id, ' +\n        BY_SEQ_STORE$1 + '.json AS data ' +\n        'FROM ' + BY_SEQ_STORE$1 + ' JOIN ' +\n        DOC_STORE$1 + ' ON ' + BY_SEQ_STORE$1 + '.seq = ' +\n        DOC_STORE$1 + '.winningseq WHERE local = 1';\n      tx.executeSql(sql, [], function (tx, res) {\n        var rows = [];\n        for (var i = 0; i < res.rows.length; i++) {\n          rows.push(res.rows.item(i));\n        }\n        function doNext() {\n          if (!rows.length) {\n            return callback(tx);\n          }\n          var row = rows.shift();\n          var rev = JSON.parse(row.data)._rev;\n          tx.executeSql('INSERT INTO ' + LOCAL_STORE$1 +\n              ' (id, rev, json) VALUES (?,?,?)',\n              [row.id, rev, row.data], function (tx) {\n            tx.executeSql('DELETE FROM ' + DOC_STORE$1 + ' WHERE id=?',\n                [row.id], function (tx) {\n              tx.executeSql('DELETE FROM ' + BY_SEQ_STORE$1 + ' WHERE seq=?',\n                  [row.seq], function () {\n                doNext();\n              });\n            });\n          });\n        }\n        doNext();\n      });\n    });\n  }\n\n  // in this migration, we remove doc_id_rev and just use rev\n  function runMigration4(tx, callback) {\n\n    function updateRows(rows) {\n      function doNext() {\n        if (!rows.length) {\n          return callback(tx);\n        }\n        var row = rows.shift();\n        var doc_id_rev = parseHexString(row.hex, encoding);\n        var idx = doc_id_rev.lastIndexOf('::');\n        var doc_id = doc_id_rev.substring(0, idx);\n        var rev = doc_id_rev.substring(idx + 2);\n        var sql = 'UPDATE ' + BY_SEQ_STORE$1 +\n          ' SET doc_id=?, rev=? WHERE doc_id_rev=?';\n        tx.executeSql(sql, [doc_id, rev, doc_id_rev], function () {\n          doNext();\n        });\n      }\n      doNext();\n    }\n\n    var sql = 'ALTER TABLE ' + BY_SEQ_STORE$1 + ' ADD COLUMN doc_id';\n    tx.executeSql(sql, [], function (tx) {\n      var sql = 'ALTER TABLE ' + BY_SEQ_STORE$1 + ' ADD COLUMN rev';\n      tx.executeSql(sql, [], function (tx) {\n        tx.executeSql(BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL, [], function (tx) {\n          var sql = 'SELECT hex(doc_id_rev) as hex FROM ' + BY_SEQ_STORE$1;\n          tx.executeSql(sql, [], function (tx, res) {\n            var rows = [];\n            for (var i = 0; i < res.rows.length; i++) {\n              rows.push(res.rows.item(i));\n            }\n            updateRows(rows);\n          });\n        });\n      });\n    });\n  }\n\n  // in this migration, we add the attach_and_seq table\n  // for issue #2818\n  function runMigration5(tx, callback) {\n\n    function migrateAttsAndSeqs(tx) {\n      // need to actually populate the table. this is the expensive part,\n      // so as an optimization, check first that this database even\n      // contains attachments\n      var sql = 'SELECT COUNT(*) AS cnt FROM ' + ATTACH_STORE$1;\n      tx.executeSql(sql, [], function (tx, res) {\n        var count = res.rows.item(0).cnt;\n        if (!count) {\n          return callback(tx);\n        }\n\n        var offset = 0;\n        var pageSize = 10;\n        function nextPage() {\n          var sql = select(\n            SELECT_DOCS + ', ' + DOC_STORE$1 + '.id AS id',\n            [DOC_STORE$1, BY_SEQ_STORE$1],\n            DOC_STORE_AND_BY_SEQ_JOINER,\n            null,\n            DOC_STORE$1 + '.id '\n          );\n          sql += ' LIMIT ' + pageSize + ' OFFSET ' + offset;\n          offset += pageSize;\n          tx.executeSql(sql, [], function (tx, res) {\n            if (!res.rows.length) {\n              return callback(tx);\n            }\n            var digestSeqs = {};\n            function addDigestSeq(digest, seq) {\n              // uniq digest/seq pairs, just in case there are dups\n              var seqs = digestSeqs[digest] = (digestSeqs[digest] || []);\n              if (seqs.indexOf(seq) === -1) {\n                seqs.push(seq);\n              }\n            }\n            for (var i = 0; i < res.rows.length; i++) {\n              var row = res.rows.item(i);\n              var doc = unstringifyDoc(row.data, row.id, row.rev);\n              var atts = Object.keys(doc._attachments || {});\n              for (var j = 0; j < atts.length; j++) {\n                var att = doc._attachments[atts[j]];\n                addDigestSeq(att.digest, row.seq);\n              }\n            }\n            var digestSeqPairs = [];\n            Object.keys(digestSeqs).forEach(function (digest) {\n              var seqs = digestSeqs[digest];\n              seqs.forEach(function (seq) {\n                digestSeqPairs.push([digest, seq]);\n              });\n            });\n            if (!digestSeqPairs.length) {\n              return nextPage();\n            }\n            var numDone = 0;\n            digestSeqPairs.forEach(function (pair) {\n              var sql = 'INSERT INTO ' + ATTACH_AND_SEQ_STORE$1 +\n                ' (digest, seq) VALUES (?,?)';\n              tx.executeSql(sql, pair, function () {\n                if (++numDone === digestSeqPairs.length) {\n                  nextPage();\n                }\n              });\n            });\n          });\n        }\n        nextPage();\n      });\n    }\n\n    var attachAndRev = 'CREATE TABLE IF NOT EXISTS ' +\n      ATTACH_AND_SEQ_STORE$1 + ' (digest, seq INTEGER)';\n    tx.executeSql(attachAndRev, [], function (tx) {\n      tx.executeSql(\n        ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL, [], function (tx) {\n          tx.executeSql(\n            ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL, [],\n            migrateAttsAndSeqs);\n        });\n    });\n  }\n\n  // in this migration, we use escapeBlob() and unescapeBlob()\n  // instead of reading out the binary as HEX, which is slow\n  function runMigration6(tx, callback) {\n    var sql = 'ALTER TABLE ' + ATTACH_STORE$1 +\n      ' ADD COLUMN escaped TINYINT(1) DEFAULT 0';\n    tx.executeSql(sql, [], callback);\n  }\n\n  // issue #3136, in this migration we need a \"latest seq\" as well\n  // as the \"winning seq\" in the doc store\n  function runMigration7(tx, callback) {\n    var sql = 'ALTER TABLE ' + DOC_STORE$1 +\n      ' ADD COLUMN max_seq INTEGER';\n    tx.executeSql(sql, [], function (tx) {\n      var sql = 'UPDATE ' + DOC_STORE$1 + ' SET max_seq=(SELECT MAX(seq) FROM ' +\n        BY_SEQ_STORE$1 + ' WHERE doc_id=id)';\n      tx.executeSql(sql, [], function (tx) {\n        // add unique index after filling, else we'll get a constraint\n        // error when we do the ALTER TABLE\n        var sql =\n          'CREATE UNIQUE INDEX IF NOT EXISTS \\'doc-max-seq-idx\\' ON ' +\n          DOC_STORE$1 + ' (max_seq)';\n        tx.executeSql(sql, [], callback);\n      });\n    });\n  }\n\n  function checkEncoding(tx, cb) {\n    // UTF-8 on chrome/android, UTF-16 on safari < 7.1\n    tx.executeSql('SELECT HEX(\"a\") AS hex', [], function (tx, res) {\n        var hex = res.rows.item(0).hex;\n        encoding = hex.length === 2 ? 'UTF-8' : 'UTF-16';\n        cb();\n      }\n    );\n  }\n\n  function onGetInstanceId() {\n    while (idRequests.length > 0) {\n      var idCallback = idRequests.pop();\n      idCallback(null, instanceId);\n    }\n  }\n\n  function onGetVersion(tx, dbVersion) {\n    if (dbVersion === 0) {\n      // initial schema\n\n      var meta = 'CREATE TABLE IF NOT EXISTS ' + META_STORE$1 +\n        ' (dbid, db_version INTEGER)';\n      var attach = 'CREATE TABLE IF NOT EXISTS ' + ATTACH_STORE$1 +\n        ' (digest UNIQUE, escaped TINYINT(1), body BLOB)';\n      var attachAndRev = 'CREATE TABLE IF NOT EXISTS ' +\n        ATTACH_AND_SEQ_STORE$1 + ' (digest, seq INTEGER)';\n      // TODO: migrate winningseq to INTEGER\n      var doc = 'CREATE TABLE IF NOT EXISTS ' + DOC_STORE$1 +\n        ' (id unique, json, winningseq, max_seq INTEGER UNIQUE)';\n      var seq = 'CREATE TABLE IF NOT EXISTS ' + BY_SEQ_STORE$1 +\n        ' (seq INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +\n        'json, deleted TINYINT(1), doc_id, rev)';\n      var local = 'CREATE TABLE IF NOT EXISTS ' + LOCAL_STORE$1 +\n        ' (id UNIQUE, rev, json)';\n\n      // creates\n      tx.executeSql(attach);\n      tx.executeSql(local);\n      tx.executeSql(attachAndRev, [], function () {\n        tx.executeSql(ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL);\n        tx.executeSql(ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL);\n      });\n      tx.executeSql(doc, [], function () {\n        tx.executeSql(DOC_STORE_WINNINGSEQ_INDEX_SQL);\n        tx.executeSql(seq, [], function () {\n          tx.executeSql(BY_SEQ_STORE_DELETED_INDEX_SQL);\n          tx.executeSql(BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL);\n          tx.executeSql(meta, [], function () {\n            // mark the db version, and new dbid\n            var initSeq = 'INSERT INTO ' + META_STORE$1 +\n              ' (db_version, dbid) VALUES (?,?)';\n            instanceId = uuid();\n            var initSeqArgs = [ADAPTER_VERSION$1, instanceId];\n            tx.executeSql(initSeq, initSeqArgs, function () {\n              onGetInstanceId();\n            });\n          });\n        });\n      });\n    } else { // version > 0\n\n      var setupDone = function () {\n        var migrated = dbVersion < ADAPTER_VERSION$1;\n        if (migrated) {\n          // update the db version within this transaction\n          tx.executeSql('UPDATE ' + META_STORE$1 + ' SET db_version = ' +\n            ADAPTER_VERSION$1);\n        }\n        // notify db.id() callers\n        var sql = 'SELECT dbid FROM ' + META_STORE$1;\n        tx.executeSql(sql, [], function (tx, result) {\n          instanceId = result.rows.item(0).dbid;\n          onGetInstanceId();\n        });\n      };\n\n      // would love to use promises here, but then websql\n      // ends the transaction early\n      var tasks = [\n        runMigration2,\n        runMigration3,\n        runMigration4,\n        runMigration5,\n        runMigration6,\n        runMigration7,\n        setupDone\n      ];\n\n      // run each migration sequentially\n      var i = dbVersion;\n      var nextMigration = function (tx) {\n        tasks[i - 1](tx, nextMigration);\n        i++;\n      };\n      nextMigration(tx);\n    }\n  }\n\n  function setup() {\n    db.transaction(function (tx) {\n      // first check the encoding\n      checkEncoding(tx, function () {\n        // then get the version\n        fetchVersion(tx);\n      });\n    }, websqlError(callback), dbCreated);\n  }\n\n  function fetchVersion(tx) {\n    var sql = 'SELECT sql FROM sqlite_master WHERE tbl_name = ' + META_STORE$1;\n    tx.executeSql(sql, [], function (tx, result) {\n      if (!result.rows.length) {\n        // database hasn't even been created yet (version 0)\n        onGetVersion(tx, 0);\n      } else if (!/db_version/.test(result.rows.item(0).sql)) {\n        // table was created, but without the new db_version column,\n        // so add it.\n        tx.executeSql('ALTER TABLE ' + META_STORE$1 +\n          ' ADD COLUMN db_version INTEGER', [], function () {\n          // before version 2, this column didn't even exist\n          onGetVersion(tx, 1);\n        });\n      } else { // column exists, we can safely get it\n        tx.executeSql('SELECT db_version FROM ' + META_STORE$1,\n          [], function (tx, result) {\n          var dbVersion = result.rows.item(0).db_version;\n          onGetVersion(tx, dbVersion);\n        });\n      }\n    });\n  }\n\n  setup();\n\n  api.type = function () {\n    return 'websql';\n  };\n\n  api._id = toPromise(function (callback) {\n    callback(null, instanceId);\n  });\n\n  api._info = function (callback) {\n    db.readTransaction(function (tx) {\n      countDocs(tx, function (docCount) {\n        var sql = 'SELECT MAX(seq) AS seq FROM ' + BY_SEQ_STORE$1;\n        tx.executeSql(sql, [], function (tx, res) {\n          var updateSeq = res.rows.item(0).seq || 0;\n          callback(null, {\n            doc_count: docCount,\n            update_seq: updateSeq,\n            websql_encoding: encoding\n          });\n        });\n      });\n    }, websqlError(callback));\n  };\n\n  api._bulkDocs = function (req, reqOpts, callback) {\n    websqlBulkDocs(opts, req, reqOpts, api, db, websqlChanges, callback);\n  };\n\n  api._get = function (id, opts, callback) {\n    var doc;\n    var metadata;\n    var err;\n    var tx = opts.ctx;\n    if (!tx) {\n      return db.readTransaction(function (txn) {\n        api._get(id, jsExtend.extend({ctx: txn}, opts), callback);\n      });\n    }\n\n    function finish() {\n      callback(err, {doc: doc, metadata: metadata, ctx: tx});\n    }\n\n    var sql;\n    var sqlArgs;\n    if (opts.rev) {\n      sql = select(\n        SELECT_DOCS,\n        [DOC_STORE$1, BY_SEQ_STORE$1],\n        DOC_STORE$1 + '.id=' + BY_SEQ_STORE$1 + '.doc_id',\n        [BY_SEQ_STORE$1 + '.doc_id=?', BY_SEQ_STORE$1 + '.rev=?']);\n      sqlArgs = [id, opts.rev];\n    } else {\n      sql = select(\n        SELECT_DOCS,\n        [DOC_STORE$1, BY_SEQ_STORE$1],\n        DOC_STORE_AND_BY_SEQ_JOINER,\n        DOC_STORE$1 + '.id=?');\n      sqlArgs = [id];\n    }\n    tx.executeSql(sql, sqlArgs, function (a, results) {\n      if (!results.rows.length) {\n        err = createError(MISSING_DOC, 'missing');\n        return finish();\n      }\n      var item = results.rows.item(0);\n      metadata = safeJsonParse(item.metadata);\n      if (item.deleted && !opts.rev) {\n        err = createError(MISSING_DOC, 'deleted');\n        return finish();\n      }\n      doc = unstringifyDoc(item.data, metadata.id, item.rev);\n      finish();\n    });\n  };\n\n  function countDocs(tx, callback) {\n\n    if (api._docCount !== -1) {\n      return callback(api._docCount);\n    }\n\n    // count the total rows\n    var sql = select(\n      'COUNT(' + DOC_STORE$1 + '.id) AS \\'num\\'',\n      [DOC_STORE$1, BY_SEQ_STORE$1],\n      DOC_STORE_AND_BY_SEQ_JOINER,\n      BY_SEQ_STORE$1 + '.deleted=0');\n\n    tx.executeSql(sql, [], function (tx, result) {\n      api._docCount = result.rows.item(0).num;\n      callback(api._docCount);\n    });\n  }\n\n  api._allDocs = function (opts, callback) {\n    var results = [];\n    var totalRows;\n\n    var start = 'startkey' in opts ? opts.startkey : false;\n    var end = 'endkey' in opts ? opts.endkey : false;\n    var key = 'key' in opts ? opts.key : false;\n    var descending = 'descending' in opts ? opts.descending : false;\n    var limit = 'limit' in opts ? opts.limit : -1;\n    var offset = 'skip' in opts ? opts.skip : 0;\n    var inclusiveEnd = opts.inclusive_end !== false;\n\n    var sqlArgs = [];\n    var criteria = [];\n\n    if (key !== false) {\n      criteria.push(DOC_STORE$1 + '.id = ?');\n      sqlArgs.push(key);\n    } else if (start !== false || end !== false) {\n      if (start !== false) {\n        criteria.push(DOC_STORE$1 + '.id ' + (descending ? '<=' : '>=') + ' ?');\n        sqlArgs.push(start);\n      }\n      if (end !== false) {\n        var comparator = descending ? '>' : '<';\n        if (inclusiveEnd) {\n          comparator += '=';\n        }\n        criteria.push(DOC_STORE$1 + '.id ' + comparator + ' ?');\n        sqlArgs.push(end);\n      }\n      if (key !== false) {\n        criteria.push(DOC_STORE$1 + '.id = ?');\n        sqlArgs.push(key);\n      }\n    }\n\n    if (opts.deleted !== 'ok') {\n      // report deleted if keys are specified\n      criteria.push(BY_SEQ_STORE$1 + '.deleted = 0');\n    }\n\n    db.readTransaction(function (tx) {\n\n      // first count up the total rows\n      countDocs(tx, function (count) {\n        totalRows = count;\n\n        if (limit === 0) {\n          return;\n        }\n\n        // then actually fetch the documents\n        var sql = select(\n          SELECT_DOCS,\n          [DOC_STORE$1, BY_SEQ_STORE$1],\n          DOC_STORE_AND_BY_SEQ_JOINER,\n          criteria,\n          DOC_STORE$1 + '.id ' + (descending ? 'DESC' : 'ASC')\n          );\n        sql += ' LIMIT ' + limit + ' OFFSET ' + offset;\n\n        tx.executeSql(sql, sqlArgs, function (tx, result) {\n          for (var i = 0, l = result.rows.length; i < l; i++) {\n            var item = result.rows.item(i);\n            var metadata = safeJsonParse(item.metadata);\n            var id = metadata.id;\n            var data = unstringifyDoc(item.data, id, item.rev);\n            var winningRev = data._rev;\n            var doc = {\n              id: id,\n              key: id,\n              value: {rev: winningRev}\n            };\n            if (opts.include_docs) {\n              doc.doc = data;\n              doc.doc._rev = winningRev;\n              if (opts.conflicts) {\n                doc.doc._conflicts = collectConflicts(metadata);\n              }\n              fetchAttachmentsIfNecessary$1(doc.doc, opts, api, tx);\n            }\n            if (item.deleted) {\n              if (opts.deleted === 'ok') {\n                doc.value.deleted = true;\n                doc.doc = null;\n              } else {\n                continue;\n              }\n            }\n            results.push(doc);\n          }\n        });\n      });\n    }, websqlError(callback), function () {\n      callback(null, {\n        total_rows: totalRows,\n        offset: opts.skip,\n        rows: results\n      });\n    });\n  };\n\n  api._changes = function (opts) {\n    opts = clone(opts);\n\n    if (opts.continuous) {\n      var id = api._name + ':' + uuid();\n      websqlChanges.addListener(api._name, id, api, opts);\n      websqlChanges.notify(api._name);\n      return {\n        cancel: function () {\n          websqlChanges.removeListener(api._name, id);\n        }\n      };\n    }\n\n    var descending = opts.descending;\n\n    // Ignore the `since` parameter when `descending` is true\n    opts.since = opts.since && !descending ? opts.since : 0;\n\n    var limit = 'limit' in opts ? opts.limit : -1;\n    if (limit === 0) {\n      limit = 1; // per CouchDB _changes spec\n    }\n\n    var returnDocs;\n    if ('return_docs' in opts) {\n      returnDocs = opts.return_docs;\n    } else if ('returnDocs' in opts) {\n      // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n      returnDocs = opts.returnDocs;\n    } else {\n      returnDocs = true;\n    }\n    var results = [];\n    var numResults = 0;\n\n    function fetchChanges() {\n\n      var selectStmt =\n        DOC_STORE$1 + '.json AS metadata, ' +\n        DOC_STORE$1 + '.max_seq AS maxSeq, ' +\n        BY_SEQ_STORE$1 + '.json AS winningDoc, ' +\n        BY_SEQ_STORE$1 + '.rev AS winningRev ';\n\n      var from = DOC_STORE$1 + ' JOIN ' + BY_SEQ_STORE$1;\n\n      var joiner = DOC_STORE$1 + '.id=' + BY_SEQ_STORE$1 + '.doc_id' +\n        ' AND ' + DOC_STORE$1 + '.winningseq=' + BY_SEQ_STORE$1 + '.seq';\n\n      var criteria = ['maxSeq > ?'];\n      var sqlArgs = [opts.since];\n\n      if (opts.doc_ids) {\n        criteria.push(DOC_STORE$1 + '.id IN ' + qMarks(opts.doc_ids.length));\n        sqlArgs = sqlArgs.concat(opts.doc_ids);\n      }\n\n      var orderBy = 'maxSeq ' + (descending ? 'DESC' : 'ASC');\n\n      var sql = select(selectStmt, from, joiner, criteria, orderBy);\n\n      var filter = filterChange(opts);\n      if (!opts.view && !opts.filter) {\n        // we can just limit in the query\n        sql += ' LIMIT ' + limit;\n      }\n\n      var lastSeq = opts.since || 0;\n      db.readTransaction(function (tx) {\n        tx.executeSql(sql, sqlArgs, function (tx, result) {\n          function reportChange(change) {\n            return function () {\n              opts.onChange(change);\n            };\n          }\n          for (var i = 0, l = result.rows.length; i < l; i++) {\n            var item = result.rows.item(i);\n            var metadata = safeJsonParse(item.metadata);\n            lastSeq = item.maxSeq;\n\n            var doc = unstringifyDoc(item.winningDoc, metadata.id,\n              item.winningRev);\n            var change = opts.processChange(doc, metadata, opts);\n            change.seq = item.maxSeq;\n\n            var filtered = filter(change);\n            if (typeof filtered === 'object') {\n              return opts.complete(filtered);\n            }\n\n            if (filtered) {\n              numResults++;\n              if (returnDocs) {\n                results.push(change);\n              }\n              // process the attachment immediately\n              // for the benefit of live listeners\n              if (opts.attachments && opts.include_docs) {\n                fetchAttachmentsIfNecessary$1(doc, opts, api, tx,\n                  reportChange(change));\n              } else {\n                reportChange(change)();\n              }\n            }\n            if (numResults === limit) {\n              break;\n            }\n          }\n        });\n      }, websqlError(opts.complete), function () {\n        if (!opts.continuous) {\n          opts.complete(null, {\n            results: results,\n            last_seq: lastSeq\n          });\n        }\n      });\n    }\n\n    fetchChanges();\n  };\n\n  api._close = function (callback) {\n    //WebSQL databases do not need to be closed\n    callback();\n  };\n\n  api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n    var res;\n    var tx = opts.ctx;\n    var digest = attachment.digest;\n    var type = attachment.content_type;\n    var sql = 'SELECT escaped, ' +\n      'CASE WHEN escaped = 1 THEN body ELSE HEX(body) END AS body FROM ' +\n      ATTACH_STORE$1 + ' WHERE digest=?';\n    tx.executeSql(sql, [digest], function (tx, result) {\n      // websql has a bug where \\u0000 causes early truncation in strings\n      // and blobs. to work around this, we used to use the hex() function,\n      // but that's not performant. after migration 6, we remove \\u0000\n      // and add it back in afterwards\n      var item = result.rows.item(0);\n      var data = item.escaped ? unescapeBlob(item.body) :\n        parseHexString(item.body, encoding);\n      if (opts.binary) {\n        res = binStringToBluffer(data, type);\n      } else {\n        res = btoa$1(data);\n      }\n      callback(null, res);\n    });\n  };\n\n  api._getRevisionTree = function (docId, callback) {\n    db.readTransaction(function (tx) {\n      var sql = 'SELECT json AS metadata FROM ' + DOC_STORE$1 + ' WHERE id = ?';\n      tx.executeSql(sql, [docId], function (tx, result) {\n        if (!result.rows.length) {\n          callback(createError(MISSING_DOC));\n        } else {\n          var data = safeJsonParse(result.rows.item(0).metadata);\n          callback(null, data.rev_tree);\n        }\n      });\n    });\n  };\n\n  api._doCompaction = function (docId, revs, callback) {\n    if (!revs.length) {\n      return callback();\n    }\n    db.transaction(function (tx) {\n\n      // update doc store\n      var sql = 'SELECT json AS metadata FROM ' + DOC_STORE$1 + ' WHERE id = ?';\n      tx.executeSql(sql, [docId], function (tx, result) {\n        var metadata = safeJsonParse(result.rows.item(0).metadata);\n        traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n                                                           revHash, ctx, opts) {\n          var rev = pos + '-' + revHash;\n          if (revs.indexOf(rev) !== -1) {\n            opts.status = 'missing';\n          }\n        });\n\n        var sql = 'UPDATE ' + DOC_STORE$1 + ' SET json = ? WHERE id = ?';\n        tx.executeSql(sql, [safeJsonStringify(metadata), docId]);\n      });\n\n      compactRevs$1(revs, docId, tx);\n    }, websqlError(callback), function () {\n      callback();\n    });\n  };\n\n  api._getLocal = function (id, callback) {\n    db.readTransaction(function (tx) {\n      var sql = 'SELECT json, rev FROM ' + LOCAL_STORE$1 + ' WHERE id=?';\n      tx.executeSql(sql, [id], function (tx, res) {\n        if (res.rows.length) {\n          var item = res.rows.item(0);\n          var doc = unstringifyDoc(item.json, id, item.rev);\n          callback(null, doc);\n        } else {\n          callback(createError(MISSING_DOC));\n        }\n      });\n    });\n  };\n\n  api._putLocal = function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    delete doc._revisions; // ignore this, trust the rev\n    var oldRev = doc._rev;\n    var id = doc._id;\n    var newRev;\n    if (!oldRev) {\n      newRev = doc._rev = '0-1';\n    } else {\n      newRev = doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);\n    }\n    var json = stringifyDoc(doc);\n\n    var ret;\n    function putLocal(tx) {\n      var sql;\n      var values;\n      if (oldRev) {\n        sql = 'UPDATE ' + LOCAL_STORE$1 + ' SET rev=?, json=? ' +\n          'WHERE id=? AND rev=?';\n        values = [newRev, json, id, oldRev];\n      } else {\n        sql = 'INSERT INTO ' + LOCAL_STORE$1 + ' (id, rev, json) VALUES (?,?,?)';\n        values = [id, newRev, json];\n      }\n      tx.executeSql(sql, values, function (tx, res) {\n        if (res.rowsAffected) {\n          ret = {ok: true, id: id, rev: newRev};\n          if (opts.ctx) { // return immediately\n            callback(null, ret);\n          }\n        } else {\n          callback(createError(REV_CONFLICT));\n        }\n      }, function () {\n        callback(createError(REV_CONFLICT));\n        return false; // ack that we handled the error\n      });\n    }\n\n    if (opts.ctx) {\n      putLocal(opts.ctx);\n    } else {\n      db.transaction(putLocal, websqlError(callback), function () {\n        if (ret) {\n          callback(null, ret);\n        }\n      });\n    }\n  };\n\n  api._removeLocal = function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var ret;\n\n    function removeLocal(tx) {\n      var sql = 'DELETE FROM ' + LOCAL_STORE$1 + ' WHERE id=? AND rev=?';\n      var params = [doc._id, doc._rev];\n      tx.executeSql(sql, params, function (tx, res) {\n        if (!res.rowsAffected) {\n          return callback(createError(MISSING_DOC));\n        }\n        ret = {ok: true, id: doc._id, rev: '0-0'};\n        if (opts.ctx) { // return immediately\n          callback(null, ret);\n        }\n      });\n    }\n\n    if (opts.ctx) {\n      removeLocal(opts.ctx);\n    } else {\n      db.transaction(removeLocal, websqlError(callback), function () {\n        if (ret) {\n          callback(null, ret);\n        }\n      });\n    }\n  };\n\n  api._destroy = function (opts, callback) {\n    websqlChanges.removeAllListeners(api._name);\n    db.transaction(function (tx) {\n      var stores = [DOC_STORE$1, BY_SEQ_STORE$1, ATTACH_STORE$1, META_STORE$1,\n        LOCAL_STORE$1, ATTACH_AND_SEQ_STORE$1];\n      stores.forEach(function (store) {\n        tx.executeSql('DROP TABLE IF EXISTS ' + store, []);\n      });\n    }, websqlError(callback), function () {\n      if (hasLocalStorage()) {\n        delete window.localStorage['_pouch__websqldb_' + api._name];\n        delete window.localStorage[api._name];\n      }\n      callback(null, {'ok': true});\n    });\n  };\n}\n\nfunction canOpenTestDB() {\n  try {\n    openDatabase('_pouch_validate_websql', 1, '', 1);\n    return true;\n  } catch (err) {\n    return false;\n  }\n}\n\n// WKWebView had a bug where WebSQL would throw a DOM Exception 18\n// (see https://bugs.webkit.org/show_bug.cgi?id=137760 and\n// https://github.com/pouchdb/pouchdb/issues/5079)\n// This has been fixed in latest WebKit, so we try to detect it here.\nfunction isValidWebSQL() {\n  // WKWebView UA:\n  //   Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X)\n  //   AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13C75\n  // Chrome for iOS UA:\n  //   Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en)\n  //   AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60\n  //   Mobile/9B206 Safari/7534.48.3\n  // Firefox for iOS UA:\n  //   Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4\n  //   (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4\n\n  // indexedDB is null on some UIWebViews and undefined in others\n  // see: https://bugs.webkit.org/show_bug.cgi?id=137034\n  if (typeof indexedDB === 'undefined' || indexedDB === null ||\n      !/iP(hone|od|ad)/.test(navigator.userAgent)) {\n    // definitely not WKWebView, avoid creating an unnecessary database\n    return true;\n  }\n  // Cache the result in LocalStorage. Reason we do this is because if we\n  // call openDatabase() too many times, Safari craps out in SauceLabs and\n  // starts throwing DOM Exception 14s.\n  var hasLS = hasLocalStorage();\n  // Include user agent in the hash, so that if Safari is upgraded, we don't\n  // continually think it's broken.\n  var localStorageKey = '_pouch__websqldb_valid_' + navigator.userAgent;\n  if (hasLS && localStorage[localStorageKey]) {\n    return localStorage[localStorageKey] === '1';\n  }\n  var openedTestDB = canOpenTestDB();\n  if (hasLS) {\n    localStorage[localStorageKey] = openedTestDB ? '1' : '0';\n  }\n  return openedTestDB;\n}\n\nfunction valid() {\n  if (typeof openDatabase !== 'function') {\n    return false;\n  }\n  return isValidWebSQL();\n}\n\nfunction openDB(name, version, description, size) {\n  // Traditional WebSQL API\n  return openDatabase(name, version, description, size);\n}\n\nfunction WebSQLPouch(opts, callback) {\n  var _opts = jsExtend.extend({\n    websql: openDB\n  }, opts);\n\n  WebSqlPouch$1.call(this, _opts, callback);\n}\n\nWebSQLPouch.valid = valid;\n\nWebSQLPouch.use_prefix = true;\n\nfunction WebSqlPouch (PouchDB) {\n  PouchDB.adapter('websql', WebSQLPouch, true);\n}\n\n/* global fetch */\n/* global Headers */\nfunction wrappedFetch() {\n  var wrappedPromise = {};\n\n  var promise = new PouchPromise(function (resolve, reject) {\n    wrappedPromise.resolve = resolve;\n    wrappedPromise.reject = reject;\n  });\n\n  var args = new Array(arguments.length);\n\n  for (var i = 0; i < args.length; i++) {\n    args[i] = arguments[i];\n  }\n\n  wrappedPromise.promise = promise;\n\n  PouchPromise.resolve().then(function () {\n    return fetch.apply(null, args);\n  }).then(function (response) {\n    wrappedPromise.resolve(response);\n  }).catch(function (error) {\n    wrappedPromise.reject(error);\n  });\n\n  return wrappedPromise;\n}\n\nfunction fetchRequest(options, callback) {\n  var wrappedPromise, timer, response;\n\n  var headers = new Headers();\n\n  var fetchOptions = {\n    method: options.method,\n    credentials: 'include',\n    headers: headers\n  };\n\n  if (options.json) {\n    headers.set('Accept', 'application/json');\n    headers.set('Content-Type', options.headers['Content-Type'] ||\n      'application/json');\n  }\n\n  if (options.body && (options.body instanceof Blob)) {\n    readAsArrayBuffer(options.body, function (arrayBuffer) {\n      fetchOptions.body = arrayBuffer;\n    });\n  } else if (options.body &&\n             options.processData &&\n             typeof options.body !== 'string') {\n    fetchOptions.body = JSON.stringify(options.body);\n  } else if ('body' in options) {\n    fetchOptions.body = options.body;\n  } else {\n    fetchOptions.body = null;\n  }\n\n  Object.keys(options.headers).forEach(function (key) {\n    if (options.headers.hasOwnProperty(key)) {\n      headers.set(key, options.headers[key]);\n    }\n  });\n\n  wrappedPromise = wrappedFetch(options.url, fetchOptions);\n\n  if (options.timeout > 0) {\n    timer = setTimeout(function () {\n      wrappedPromise.reject(new Error('Load timeout for resource: ' +\n        options.url));\n    }, options.timeout);\n  }\n\n  wrappedPromise.promise.then(function (fetchResponse) {\n    response = {\n      statusCode: fetchResponse.status\n    };\n\n    if (options.timeout > 0) {\n      clearTimeout(timer);\n    }\n\n    if (response.statusCode >= 200 && response.statusCode < 300) {\n      return options.binary ? fetchResponse.blob() : fetchResponse.text();\n    }\n\n    return fetchResponse.json();\n  }).then(function (result) {\n    if (response.statusCode >= 200 && response.statusCode < 300) {\n      callback(null, response, result);\n    } else {\n      callback(result, response);\n    }\n  }).catch(function (error) {\n    callback(error, response);\n  });\n\n  return {abort: wrappedPromise.reject};\n}\n\nfunction xhRequest(options, callback) {\n\n  var xhr, timer;\n  var timedout = false;\n\n  var abortReq = function () {\n    xhr.abort();\n    cleanUp();\n  };\n\n  var timeoutReq = function () {\n    timedout = true;\n    xhr.abort();\n    cleanUp();\n  };\n\n  var ret = {abort: abortReq};\n\n  var cleanUp = function () {\n    clearTimeout(timer);\n    ret.abort = function () {};\n    if (xhr) {\n      xhr.onprogress = undefined;\n      if (xhr.upload) {\n        xhr.upload.onprogress = undefined;\n      }\n      xhr.onreadystatechange = undefined;\n      xhr = undefined;\n    }\n  };\n\n  if (options.xhr) {\n    xhr = new options.xhr();\n  } else {\n    xhr = new XMLHttpRequest();\n  }\n\n  try {\n    xhr.open(options.method, options.url);\n  } catch (exception) {\n    return callback(new Error(exception.name || 'Url is invalid'));\n  }\n\n  xhr.withCredentials = ('withCredentials' in options) ?\n    options.withCredentials : true;\n\n  if (options.method === 'GET') {\n    delete options.headers['Content-Type'];\n  } else if (options.json) {\n    options.headers.Accept = 'application/json';\n    options.headers['Content-Type'] = options.headers['Content-Type'] ||\n      'application/json';\n    if (options.body &&\n        options.processData &&\n        typeof options.body !== \"string\") {\n      options.body = JSON.stringify(options.body);\n    }\n  }\n\n  if (options.binary) {\n    xhr.responseType = 'arraybuffer';\n  }\n\n  if (!('body' in options)) {\n    options.body = null;\n  }\n\n  for (var key in options.headers) {\n    if (options.headers.hasOwnProperty(key)) {\n      xhr.setRequestHeader(key, options.headers[key]);\n    }\n  }\n\n  if (options.timeout > 0) {\n    timer = setTimeout(timeoutReq, options.timeout);\n    xhr.onprogress = function () {\n      clearTimeout(timer);\n      if(xhr.readyState !== 4) {\n        timer = setTimeout(timeoutReq, options.timeout);\n      }\n    };\n    if (typeof xhr.upload !== 'undefined') { // does not exist in ie9\n      xhr.upload.onprogress = xhr.onprogress;\n    }\n  }\n\n  xhr.onreadystatechange = function () {\n    if (xhr.readyState !== 4) {\n      return;\n    }\n\n    var response = {\n      statusCode: xhr.status\n    };\n\n    if (xhr.status >= 200 && xhr.status < 300) {\n      var data;\n      if (options.binary) {\n        data = createBlob([xhr.response || ''], {\n          type: xhr.getResponseHeader('Content-Type')\n        });\n      } else {\n        data = xhr.responseText;\n      }\n      callback(null, response, data);\n    } else {\n      var err = {};\n      if (timedout) {\n        err = new Error('ETIMEDOUT');\n        err.code = 'ETIMEDOUT';\n      } else if (typeof xhr.response === 'string') {\n        try {\n          err = JSON.parse(xhr.response);\n        } catch(e) {}\n      }\n      err.status = xhr.status;\n      callback(err);\n    }\n    cleanUp();\n  };\n\n  if (options.body && (options.body instanceof Blob)) {\n    readAsArrayBuffer(options.body, function (arrayBuffer) {\n      xhr.send(arrayBuffer);\n    });\n  } else {\n    xhr.send(options.body);\n  }\n\n  return ret;\n}\n\nfunction testXhr() {\n  try {\n    new XMLHttpRequest();\n    return true;\n  } catch (err) {\n    return false;\n  }\n}\n\nvar hasXhr = testXhr();\n\nfunction ajax$1(options, callback) {\n  if (hasXhr || options.xhr) {\n    return xhRequest(options, callback);\n  } else {\n    return fetchRequest(options, callback);\n  }\n}\n\n// the blob already has a type; do nothing\nvar res$2 = function () {};\n\nfunction defaultBody() {\n  return '';\n}\n\nfunction ajaxCore(options, callback) {\n\n  options = clone(options);\n\n  var defaultOptions = {\n    method : \"GET\",\n    headers: {},\n    json: true,\n    processData: true,\n    timeout: 10000,\n    cache: false\n  };\n\n  options = jsExtend.extend(defaultOptions, options);\n\n  function onSuccess(obj, resp, cb) {\n    if (!options.binary && options.json && typeof obj === 'string') {\n      /* istanbul ignore next */\n      try {\n        obj = JSON.parse(obj);\n      } catch (e) {\n        // Probably a malformed JSON from server\n        return cb(e);\n      }\n    }\n    if (Array.isArray(obj)) {\n      obj = obj.map(function (v) {\n        if (v.error || v.missing) {\n          return generateErrorFromResponse(v);\n        } else {\n          return v;\n        }\n      });\n    }\n    if (options.binary) {\n      res$2(obj, resp);\n    }\n    cb(null, obj, resp);\n  }\n\n  if (options.json) {\n    if (!options.binary) {\n      options.headers.Accept = 'application/json';\n    }\n    options.headers['Content-Type'] = options.headers['Content-Type'] ||\n      'application/json';\n  }\n\n  if (options.binary) {\n    options.encoding = null;\n    options.json = false;\n  }\n\n  if (!options.processData) {\n    options.json = false;\n  }\n\n  return ajax$1(options, function (err, response, body) {\n\n    if (err) {\n      return callback(generateErrorFromResponse(err));\n    }\n\n    var error;\n    var content_type = response.headers && response.headers['content-type'];\n    var data = body || defaultBody();\n\n    // CouchDB doesn't always return the right content-type for JSON data, so\n    // we check for ^{ and }$ (ignoring leading/trailing whitespace)\n    if (!options.binary && (options.json || !options.processData) &&\n        typeof data !== 'object' &&\n        (/json/.test(content_type) ||\n         (/^[\\s]*\\{/.test(data) && /\\}[\\s]*$/.test(data)))) {\n      try {\n        data = JSON.parse(data.toString());\n      } catch (e) {}\n    }\n\n    if (response.statusCode >= 200 && response.statusCode < 300) {\n      onSuccess(data, response, callback);\n    } else {\n      error = generateErrorFromResponse(data);\n      error.status = response.statusCode;\n      callback(error);\n    }\n  });\n}\n\nfunction ajax(opts, callback) {\n\n  // cache-buster, specifically designed to work around IE's aggressive caching\n  // see http://www.dashbay.com/2011/05/internet-explorer-caches-ajax/\n  // Also Safari caches POSTs, so we need to cache-bust those too.\n  var ua = (navigator && navigator.userAgent) ?\n    navigator.userAgent.toLowerCase() : '';\n\n  var isSafari = ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1;\n  var isIE = ua.indexOf('msie') !== -1;\n  var isEdge = ua.indexOf('edge') !== -1;\n\n  // it appears the new version of safari also caches GETs,\n  // see https://github.com/pouchdb/pouchdb/issues/5010\n  var shouldCacheBust = (isSafari ||\n    ((isIE || isEdge) && opts.method === 'GET'));\n\n  var cache = 'cache' in opts ? opts.cache : true;\n\n  var isBlobUrl = /^blob:/.test(opts.url); // don't append nonces for blob URLs\n\n  if (!isBlobUrl && (shouldCacheBust || !cache)) {\n    var hasArgs = opts.url.indexOf('?') !== -1;\n    opts.url += (hasArgs ? '&' : '?') + '_nonce=' + Date.now();\n  }\n\n  return ajaxCore(opts, callback);\n}\n\nvar CHANGES_BATCH_SIZE = 25;\nvar MAX_SIMULTANEOUS_REVS = 50;\n\nvar supportsBulkGetMap = {};\n\nvar log$1 = debug('pouchdb:http');\n\nfunction readAttachmentsAsBlobOrBuffer(row) {\n  var atts = row.doc && row.doc._attachments;\n  if (!atts) {\n    return;\n  }\n  Object.keys(atts).forEach(function (filename) {\n    var att = atts[filename];\n    att.data = b64ToBluffer(att.data, att.content_type);\n  });\n}\n\nfunction encodeDocId(id) {\n  if (/^_design/.test(id)) {\n    return '_design/' + encodeURIComponent(id.slice(8));\n  }\n  if (/^_local/.test(id)) {\n    return '_local/' + encodeURIComponent(id.slice(7));\n  }\n  return encodeURIComponent(id);\n}\n\nfunction preprocessAttachments$1(doc) {\n  if (!doc._attachments || !Object.keys(doc._attachments)) {\n    return PouchPromise.resolve();\n  }\n\n  return PouchPromise.all(Object.keys(doc._attachments).map(function (key) {\n    var attachment = doc._attachments[key];\n    if (attachment.data && typeof attachment.data !== 'string') {\n      return new PouchPromise(function (resolve) {\n        blobToBase64(attachment.data, resolve);\n      }).then(function (b64) {\n        attachment.data = b64;\n      });\n    }\n  }));\n}\n\nfunction hasUrlPrefix(opts) {\n  if (!opts.prefix) {\n    return false;\n  }\n\n  var protocol = parseUri(opts.prefix).protocol;\n\n  return protocol === 'http' || protocol === 'https';\n}\n\n// Get all the information you possibly can about the URI given by name and\n// return it as a suitable object.\nfunction getHost(name, opts) {\n\n  // encode db name if opts.prefix is a url (#5574)\n  if (hasUrlPrefix(opts)) {\n    var dbName = opts.name.substr(opts.prefix.length);\n    name = opts.prefix + encodeURIComponent(dbName);\n  }\n\n  // Prase the URI into all its little bits\n  var uri = parseUri(name);\n\n  // Store the user and password as a separate auth object\n  if (uri.user || uri.password) {\n    uri.auth = {username: uri.user, password: uri.password};\n  }\n\n  // Split the path part of the URI into parts using '/' as the delimiter\n  // after removing any leading '/' and any trailing '/'\n  var parts = uri.path.replace(/(^\\/|\\/$)/g, '').split('/');\n\n  // Store the first part as the database name and remove it from the parts\n  // array\n  uri.db = parts.pop();\n  // Prevent double encoding of URI component\n  if (uri.db.indexOf('%') === -1) {\n    uri.db = encodeURIComponent(uri.db);\n  }\n\n  // Restore the path by joining all the remaining parts (all the parts\n  // except for the database name) with '/'s\n  uri.path = parts.join('/');\n\n  return uri;\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genDBUrl(opts, path) {\n  return genUrl(opts, opts.db + '/' + path);\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genUrl(opts, path) {\n  // If the host already has a path, then we need to have a path delimiter\n  // Otherwise, the path delimiter is the empty string\n  var pathDel = !opts.path ? '' : '/';\n\n  // If the host already has a path, then we need to have a path delimiter\n  // Otherwise, the path delimiter is the empty string\n  return opts.protocol + '://' + opts.host +\n         (opts.port ? (':' + opts.port) : '') +\n         '/' + opts.path + pathDel + path;\n}\n\nfunction paramsToStr(params) {\n  return '?' + Object.keys(params).map(function (k) {\n    return k + '=' + encodeURIComponent(params[k]);\n  }).join('&');\n}\n\n// Implements the PouchDB API for dealing with CouchDB instances over HTTP\nfunction HttpPouch(opts, callback) {\n\n  // The functions that will be publicly available for HttpPouch\n  var api = this;\n\n  var host = getHost(opts.name, opts);\n  var dbUrl = genDBUrl(host, '');\n\n  opts = clone(opts);\n  var ajaxOpts = opts.ajax || {};\n\n  if (opts.auth || host.auth) {\n    var nAuth = opts.auth || host.auth;\n    var str = nAuth.username + ':' + nAuth.password;\n    var token = btoa$1(unescape(encodeURIComponent(str)));\n    ajaxOpts.headers = ajaxOpts.headers || {};\n    ajaxOpts.headers.Authorization = 'Basic ' + token;\n  }\n\n  // Not strictly necessary, but we do this because numerous tests\n  // rely on swapping ajax in and out.\n  api._ajax = ajax;\n\n  function ajax$$(userOpts, options, callback) {\n    var reqAjax = userOpts.ajax || {};\n    var reqOpts = jsExtend.extend(clone(ajaxOpts), reqAjax, options);\n    log$1(reqOpts.method + ' ' + reqOpts.url);\n    return api._ajax(reqOpts, callback);\n  }\n\n  function ajaxPromise(userOpts, opts) {\n    return new PouchPromise(function (resolve, reject) {\n      ajax$$(userOpts, opts, function (err, res) {\n        /* istanbul ignore if */\n        if (err) {\n          return reject(err);\n        }\n        resolve(res);\n      });\n    });\n  }\n\n  function adapterFun$$(name, fun) {\n    return adapterFun(name, getArguments(function (args) {\n      setup().then(function () {\n        return fun.apply(this, args);\n      }).catch(function (e) {\n        var callback = args.pop();\n        callback(e);\n      });\n    }));\n  }\n\n  var setupPromise;\n\n  function setup() {\n    // TODO: Remove `skipSetup` in favor of `skip_setup` in a future release\n    if (opts.skipSetup || opts.skip_setup) {\n      return PouchPromise.resolve();\n    }\n\n    // If there is a setup in process or previous successful setup\n    // done then we will use that\n    // If previous setups have been rejected we will try again\n    if (setupPromise) {\n      return setupPromise;\n    }\n\n    var checkExists = {method: 'GET', url: dbUrl};\n    setupPromise = ajaxPromise({}, checkExists).catch(function (err) {\n      if (err && err.status && err.status === 404) {\n        // Doesnt exist, create it\n        explainError(404, 'PouchDB is just detecting if the remote exists.');\n        return ajaxPromise({}, {method: 'PUT', url: dbUrl});\n      } else {\n        return PouchPromise.reject(err);\n      }\n    }).catch(function (err) {\n      // If we try to create a database that already exists, skipped in\n      // istanbul since its catching a race condition.\n      /* istanbul ignore if */\n      if (err && err.status && err.status === 412) {\n        return true;\n      }\n      return PouchPromise.reject(err);\n    });\n\n    setupPromise.catch(function () {\n      setupPromise = null;\n    });\n\n    return setupPromise;\n  }\n\n  setTimeout(function () {\n    callback(null, api);\n  });\n\n  api.type = function () {\n    return 'http';\n  };\n\n  api.id = adapterFun$$('id', function (callback) {\n    ajax$$({}, {method: 'GET', url: genUrl(host, '')}, function (err, result) {\n      var uuid = (result && result.uuid) ?\n        (result.uuid + host.db) : genDBUrl(host, '');\n      callback(null, uuid);\n    });\n  });\n\n  api.request = adapterFun$$('request', function (options, callback) {\n    options.url = genDBUrl(host, options.url);\n    ajax$$({}, options, callback);\n  });\n\n  // Sends a POST request to the host calling the couchdb _compact function\n  //    version: The version of CouchDB it is running\n  api.compact = adapterFun$$('compact', function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = clone(opts);\n    ajax$$(opts, {\n      url: genDBUrl(host, '_compact'),\n      method: 'POST'\n    }, function () {\n      function ping() {\n        api.info(function (err, res) {\n          if (res && !res.compact_running) {\n            callback(null, {ok: true});\n          } else {\n            setTimeout(ping, opts.interval || 200);\n          }\n        });\n      }\n      // Ping the http if it's finished compaction\n      ping();\n    });\n  });\n\n  api.bulkGet = adapterFun('bulkGet', function (opts, callback) {\n    var self = this;\n\n    function doBulkGet(cb) {\n      var params = {};\n      if (opts.revs) {\n        params.revs = true;\n      }\n      if (opts.attachments) {\n        /* istanbul ignore next */\n        params.attachments = true;\n      }\n      ajax$$({}, {\n        url: genDBUrl(host, '_bulk_get' + paramsToStr(params)),\n        method: 'POST',\n        body: { docs: opts.docs}\n      }, cb);\n    }\n\n    function doBulkGetShim() {\n      // avoid \"url too long error\" by splitting up into multiple requests\n      var batchSize = MAX_SIMULTANEOUS_REVS;\n      var numBatches = Math.ceil(opts.docs.length / batchSize);\n      var numDone = 0;\n      var results = new Array(numBatches);\n\n      function onResult(batchNum) {\n        return function (err, res) {\n          // err is impossible because shim returns a list of errs in that case\n          results[batchNum] = res.results;\n          if (++numDone === numBatches) {\n            callback(null, {results: flatten(results)});\n          }\n        };\n      }\n\n      for (var i = 0; i < numBatches; i++) {\n        var subOpts = pick(opts, ['revs', 'attachments']);\n        subOpts.ajax = ajaxOpts;\n        subOpts.docs = opts.docs.slice(i * batchSize,\n          Math.min(opts.docs.length, (i + 1) * batchSize));\n        bulkGet(self, subOpts, onResult(i));\n      }\n    }\n\n    // mark the whole database as either supporting or not supporting _bulk_get\n    var dbUrl = genUrl(host, '');\n    var supportsBulkGet = supportsBulkGetMap[dbUrl];\n\n    if (typeof supportsBulkGet !== 'boolean') {\n      // check if this database supports _bulk_get\n      doBulkGet(function (err, res) {\n        /* istanbul ignore else */\n        if (err) {\n          var status = Math.floor(err.status / 100);\n          /* istanbul ignore else */\n          if (status === 4 || status === 5) { // 40x or 50x\n            supportsBulkGetMap[dbUrl] = false;\n            explainError(\n              err.status,\n              'PouchDB is just detecting if the remote ' +\n              'supports the _bulk_get API.'\n            );\n            doBulkGetShim();\n          } else {\n            callback(err);\n          }\n        } else {\n          supportsBulkGetMap[dbUrl] = true;\n          callback(null, res);\n        }\n      });\n    } else if (supportsBulkGet) {\n      /* istanbul ignore next */\n      doBulkGet(callback);\n    } else {\n      doBulkGetShim();\n    }\n  });\n\n  // Calls GET on the host, which gets back a JSON string containing\n  //    couchdb: A welcome string\n  //    version: The version of CouchDB it is running\n  api._info = function (callback) {\n    setup().then(function () {\n      ajax$$({}, {\n        method: 'GET',\n        url: genDBUrl(host, '')\n      }, function (err, res) {\n        /* istanbul ignore next */\n        if (err) {\n        return callback(err);\n        }\n        res.host = genDBUrl(host, '');\n        callback(null, res);\n      });\n    }).catch(callback);\n  };\n\n  // Get the document with the given id from the database given by host.\n  // The id could be solely the _id in the database, or it may be a\n  // _design/ID or _local/ID path\n  api.get = adapterFun$$('get', function (id, opts, callback) {\n    // If no options were given, set the callback to the second parameter\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = clone(opts);\n\n    // List of parameters to add to the GET request\n    var params = {};\n\n    if (opts.revs) {\n      params.revs = true;\n    }\n\n    if (opts.revs_info) {\n      params.revs_info = true;\n    }\n\n    if (opts.open_revs) {\n      if (opts.open_revs !== \"all\") {\n        opts.open_revs = JSON.stringify(opts.open_revs);\n      }\n      params.open_revs = opts.open_revs;\n    }\n\n    if (opts.rev) {\n      params.rev = opts.rev;\n    }\n\n    if (opts.conflicts) {\n      params.conflicts = opts.conflicts;\n    }\n\n    id = encodeDocId(id);\n\n    // Set the options for the ajax call\n    var options = {\n      method: 'GET',\n      url: genDBUrl(host, id + paramsToStr(params))\n    };\n\n    function fetchAttachments(doc) {\n      var atts = doc._attachments;\n      var filenames = atts && Object.keys(atts);\n      if (!atts || !filenames.length) {\n        return;\n      }\n      // we fetch these manually in separate XHRs, because\n      // Sync Gateway would normally send it back as multipart/mixed,\n      // which we cannot parse. Also, this is more efficient than\n      // receiving attachments as base64-encoded strings.\n      function fetch() {\n\n        if (!filenames.length) {\n          return null;\n        }\n\n        var filename = filenames.pop();\n        var att = atts[filename];\n        var path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +\n          '?rev=' + doc._rev;\n        return ajaxPromise(opts, {\n          method: 'GET',\n          url: genDBUrl(host, path),\n          binary: true\n        }).then(function (blob) {\n          if (opts.binary) {\n            return blob;\n          }\n          return new PouchPromise(function (resolve) {\n            blobToBase64(blob, resolve);\n          });\n        }).then(function (data) {\n          delete att.stub;\n          delete att.length;\n          att.data = data;\n        });\n      }\n\n      // This limits the number of parallel xhr requests to 5 any time\n      // to avoid issues with maximum browser request limits\n      return new PromisePool(fetch, 5, {promise: PouchPromise}).start();\n    }\n\n    function fetchAllAttachments(docOrDocs) {\n      if (Array.isArray(docOrDocs)) {\n        return PouchPromise.all(docOrDocs.map(function (doc) {\n          if (doc.ok) {\n            return fetchAttachments(doc.ok);\n          }\n        }));\n      }\n      return fetchAttachments(docOrDocs);\n    }\n\n    ajaxPromise(opts, options).then(function (res) {\n      return PouchPromise.resolve().then(function () {\n        if (opts.attachments) {\n          return fetchAllAttachments(res);\n        }\n      }).then(function () {\n        callback(null, res);\n      });\n    }).catch(callback);\n  });\n\n  // Delete the document given by doc from the database given by host.\n  api.remove = adapterFun$$('remove',\n      function (docOrId, optsOrRev, opts, callback) {\n    var doc;\n    if (typeof optsOrRev === 'string') {\n      // id, rev, opts, callback style\n      doc = {\n        _id: docOrId,\n        _rev: optsOrRev\n      };\n      if (typeof opts === 'function') {\n        callback = opts;\n        opts = {};\n      }\n    } else {\n      // doc, opts, callback style\n      doc = docOrId;\n      if (typeof optsOrRev === 'function') {\n        callback = optsOrRev;\n        opts = {};\n      } else {\n        callback = opts;\n        opts = optsOrRev;\n      }\n    }\n\n    var rev = (doc._rev || opts.rev);\n\n    // Delete the document\n    ajax$$(opts, {\n      method: 'DELETE',\n      url: genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev\n    }, callback);\n  });\n\n  function encodeAttachmentId(attachmentId) {\n    return attachmentId.split(\"/\").map(encodeURIComponent).join(\"/\");\n  }\n\n  // Get the attachment\n  api.getAttachment =\n    adapterFun$$('getAttachment', function (docId, attachmentId, opts,\n                                                callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var params = opts.rev ? ('?rev=' + opts.rev) : '';\n    var url = genDBUrl(host, encodeDocId(docId)) + '/' +\n      encodeAttachmentId(attachmentId) + params;\n    ajax$$(opts, {\n      method: 'GET',\n      url: url,\n      binary: true\n    }, callback);\n  });\n\n  // Remove the attachment given by the id and rev\n  api.removeAttachment =\n    adapterFun$$('removeAttachment', function (docId, attachmentId, rev,\n                                                   callback) {\n\n    var url = genDBUrl(host, encodeDocId(docId) + '/' +\n      encodeAttachmentId(attachmentId)) + '?rev=' + rev;\n\n    ajax$$({}, {\n      method: 'DELETE',\n      url: url\n    }, callback);\n  });\n\n  // Add the attachment given by blob and its contentType property\n  // to the document with the given id, the revision given by rev, and\n  // add it to the database given by host.\n  api.putAttachment =\n    adapterFun$$('putAttachment', function (docId, attachmentId, rev, blob,\n                                                type, callback) {\n    if (typeof type === 'function') {\n      callback = type;\n      type = blob;\n      blob = rev;\n      rev = null;\n    }\n    var id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);\n    var url = genDBUrl(host, id);\n    if (rev) {\n      url += '?rev=' + rev;\n    }\n\n    if (typeof blob === 'string') {\n      // input is assumed to be a base64 string\n      var binary;\n      try {\n        binary = atob$1(blob);\n      } catch (err) {\n        return callback(createError(BAD_ARG,\n                        'Attachment is not a valid base64 string'));\n      }\n      blob = binary ? binStringToBluffer(binary, type) : '';\n    }\n\n    var opts = {\n      headers: {'Content-Type': type},\n      method: 'PUT',\n      url: url,\n      processData: false,\n      body: blob,\n      timeout: ajaxOpts.timeout || 60000\n    };\n    // Add the attachment\n    ajax$$({}, opts, callback);\n  });\n\n  // Update/create multiple documents given by req in the database\n  // given by host.\n  api._bulkDocs = function (req, opts, callback) {\n    // If new_edits=false then it prevents the database from creating\n    // new revision numbers for the documents. Instead it just uses\n    // the old ones. This is used in database replication.\n    req.new_edits = opts.new_edits;\n\n    setup().then(function () {\n      return PouchPromise.all(req.docs.map(preprocessAttachments$1));\n    }).then(function () {\n      // Update/create the documents\n      ajax$$(opts, {\n        method: 'POST',\n        url: genDBUrl(host, '_bulk_docs'),\n        timeout: opts.timeout,\n        body: req\n      }, function (err, results) {\n        if (err) {\n          return callback(err);\n        }\n        results.forEach(function (result) {\n          result.ok = true; // smooths out cloudant not adding this\n        });\n        callback(null, results);\n      });\n    }).catch(callback);\n  };\n\n\n  // Update/create document\n  api._put = function (doc, opts, callback) {\n    setup().then(function () {\n      return preprocessAttachments$1(doc);\n    }).then(function () {\n      // Update/create the document\n      ajax$$(opts, {\n        method: 'PUT',\n        url: genDBUrl(host, encodeDocId(doc._id)),\n        body: doc\n      }, function (err, result) {\n        if (err) {\n          return callback(err);\n        }\n        callback(null, result);\n      });\n    }).catch(callback);\n  };\n\n\n  // Get a listing of the documents in the database given\n  // by host and ordered by increasing id.\n  api.allDocs = adapterFun$$('allDocs', function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = clone(opts);\n\n    // List of parameters to add to the GET request\n    var params = {};\n    var body;\n    var method = 'GET';\n\n    if (opts.conflicts) {\n      params.conflicts = true;\n    }\n\n    if (opts.descending) {\n      params.descending = true;\n    }\n\n    if (opts.include_docs) {\n      params.include_docs = true;\n    }\n\n    // added in CouchDB 1.6.0\n    if (opts.attachments) {\n      params.attachments = true;\n    }\n\n    if (opts.key) {\n      params.key = JSON.stringify(opts.key);\n    }\n\n    if (opts.start_key) {\n      opts.startkey = opts.start_key;\n    }\n\n    if (opts.startkey) {\n      params.startkey = JSON.stringify(opts.startkey);\n    }\n\n    if (opts.end_key) {\n      opts.endkey = opts.end_key;\n    }\n\n    if (opts.endkey) {\n      params.endkey = JSON.stringify(opts.endkey);\n    }\n\n    if (typeof opts.inclusive_end !== 'undefined') {\n      params.inclusive_end = !!opts.inclusive_end;\n    }\n\n    if (typeof opts.limit !== 'undefined') {\n      params.limit = opts.limit;\n    }\n\n    if (typeof opts.skip !== 'undefined') {\n      params.skip = opts.skip;\n    }\n\n    var paramStr = paramsToStr(params);\n\n    if (typeof opts.keys !== 'undefined') {\n      method = 'POST';\n      body = {keys: opts.keys};\n    }\n\n    // Get the document listing\n    ajaxPromise(opts, {\n      method: method,\n      url: genDBUrl(host, '_all_docs' + paramStr),\n      body: body\n    }).then(function (res) {\n      if (opts.include_docs && opts.attachments && opts.binary) {\n        res.rows.forEach(readAttachmentsAsBlobOrBuffer);\n      }\n      callback(null, res);\n    }).catch(callback);\n  });\n\n  // Get a list of changes made to documents in the database given by host.\n  // TODO According to the README, there should be two other methods here,\n  // api.changes.addListener and api.changes.removeListener.\n  api._changes = function (opts) {\n\n    // We internally page the results of a changes request, this means\n    // if there is a large set of changes to be returned we can start\n    // processing them quicker instead of waiting on the entire\n    // set of changes to return and attempting to process them at once\n    var batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;\n\n    opts = clone(opts);\n    opts.timeout = ('timeout' in opts) ? opts.timeout :\n      ('timeout' in ajaxOpts) ? ajaxOpts.timeout :\n      30 * 1000;\n\n    // We give a 5 second buffer for CouchDB changes to respond with\n    // an ok timeout (if a timeout it set)\n    var params = opts.timeout ? {timeout: opts.timeout - (5 * 1000)} : {};\n    var limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;\n    var returnDocs;\n    if ('return_docs' in opts) {\n      returnDocs = opts.return_docs;\n    } else if ('returnDocs' in opts) {\n      // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n      returnDocs = opts.returnDocs;\n    } else {\n      returnDocs = true;\n    }\n    //\n    var leftToFetch = limit;\n\n    if (opts.style) {\n      params.style = opts.style;\n    }\n\n    if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {\n      params.include_docs = true;\n    }\n\n    if (opts.attachments) {\n      params.attachments = true;\n    }\n\n    if (opts.continuous) {\n      params.feed = 'longpoll';\n    }\n\n    if (opts.conflicts) {\n      params.conflicts = true;\n    }\n\n    if (opts.descending) {\n      params.descending = true;\n    }\n\n    if ('heartbeat' in opts) {\n      // If the heartbeat value is false, it disables the default heartbeat\n      if (opts.heartbeat) {\n        params.heartbeat = opts.heartbeat;\n      }\n    } else {\n      // Default heartbeat to 10 seconds\n      params.heartbeat = 10000;\n    }\n\n    if (opts.filter && typeof opts.filter === 'string') {\n      params.filter = opts.filter;\n    }\n\n    if (opts.view && typeof opts.view === 'string') {\n      params.filter = '_view';\n      params.view = opts.view;\n    }\n\n    // If opts.query_params exists, pass it through to the changes request.\n    // These parameters may be used by the filter on the source database.\n    if (opts.query_params && typeof opts.query_params === 'object') {\n      for (var param_name in opts.query_params) {\n        /* istanbul ignore else */\n        if (opts.query_params.hasOwnProperty(param_name)) {\n          params[param_name] = opts.query_params[param_name];\n        }\n      }\n    }\n\n    var method = 'GET';\n    var body;\n\n    if (opts.doc_ids) {\n      // set this automagically for the user; it's annoying that couchdb\n      // requires both a \"filter\" and a \"doc_ids\" param.\n      params.filter = '_doc_ids';\n      method = 'POST';\n      body = {doc_ids: opts.doc_ids };\n    }\n\n    var xhr;\n    var lastFetchedSeq;\n\n    // Get all the changes starting wtih the one immediately after the\n    // sequence number given by since.\n    var fetch = function (since, callback) {\n      if (opts.aborted) {\n        return;\n      }\n      params.since = since;\n      // \"since\" can be any kind of json object in Coudant/CouchDB 2.x\n      /* istanbul ignore next */\n      if (typeof params.since === \"object\") {\n        params.since = JSON.stringify(params.since);\n      }\n\n      if (opts.descending) {\n        if (limit) {\n          params.limit = leftToFetch;\n        }\n      } else {\n        params.limit = (!limit || leftToFetch > batchSize) ?\n          batchSize : leftToFetch;\n      }\n\n      // Set the options for the ajax call\n      var xhrOpts = {\n        method: method,\n        url: genDBUrl(host, '_changes' + paramsToStr(params)),\n        timeout: opts.timeout,\n        body: body\n      };\n      lastFetchedSeq = since;\n\n      /* istanbul ignore if */\n      if (opts.aborted) {\n        return;\n      }\n\n      // Get the changes\n      setup().then(function () {\n        xhr = ajax$$(opts, xhrOpts, callback);\n      }).catch(callback);\n    };\n\n    // If opts.since exists, get all the changes from the sequence\n    // number given by opts.since. Otherwise, get all the changes\n    // from the sequence number 0.\n    var results = {results: []};\n\n    var fetched = function (err, res) {\n      if (opts.aborted) {\n        return;\n      }\n      var raw_results_length = 0;\n      // If the result of the ajax call (res) contains changes (res.results)\n      if (res && res.results) {\n        raw_results_length = res.results.length;\n        results.last_seq = res.last_seq;\n        // For each change\n        var req = {};\n        req.query = opts.query_params;\n        res.results = res.results.filter(function (c) {\n          leftToFetch--;\n          var ret = filterChange(opts)(c);\n          if (ret) {\n            if (opts.include_docs && opts.attachments && opts.binary) {\n              readAttachmentsAsBlobOrBuffer(c);\n            }\n            if (returnDocs) {\n              results.results.push(c);\n            }\n            opts.onChange(c);\n          }\n          return ret;\n        });\n      } else if (err) {\n        // In case of an error, stop listening for changes and call\n        // opts.complete\n        opts.aborted = true;\n        opts.complete(err);\n        return;\n      }\n\n      // The changes feed may have timed out with no results\n      // if so reuse last update sequence\n      if (res && res.last_seq) {\n        lastFetchedSeq = res.last_seq;\n      }\n\n      var finished = (limit && leftToFetch <= 0) ||\n        (res && raw_results_length < batchSize) ||\n        (opts.descending);\n\n      if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {\n        // Queue a call to fetch again with the newest sequence number\n        setTimeout(function () { fetch(lastFetchedSeq, fetched); }, 0);\n      } else {\n        // We're done, call the callback\n        opts.complete(null, results);\n      }\n    };\n\n    fetch(opts.since || 0, fetched);\n\n    // Return a method to cancel this method from processing any more\n    return {\n      cancel: function () {\n        opts.aborted = true;\n        if (xhr) {\n          xhr.abort();\n        }\n      }\n    };\n  };\n\n  // Given a set of document/revision IDs (given by req), tets the subset of\n  // those that do NOT correspond to revisions stored in the database.\n  // See http://wiki.apache.org/couchdb/HttpPostRevsDiff\n  api.revsDiff = adapterFun$$('revsDiff', function (req, opts, callback) {\n    // If no options were given, set the callback to be the second parameter\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n\n    // Get the missing document/revision IDs\n    ajax$$(opts, {\n      method: 'POST',\n      url: genDBUrl(host, '_revs_diff'),\n      body: req\n    }, callback);\n  });\n\n  api._close = function (callback) {\n    callback();\n  };\n\n  api._destroy = function (options, callback) {\n    ajax$$(options, {\n      url: genDBUrl(host, ''),\n      method: 'DELETE'\n    }, function (err, resp) {\n      if (err && err.status && err.status !== 404) {\n        return callback(err);\n      }\n      callback(null, resp);\n    });\n  };\n}\n\n// HttpPouch is a valid adapter.\nHttpPouch.valid = function () {\n  return true;\n};\n\nfunction HttpPouch$1 (PouchDB) {\n  PouchDB.adapter('http', HttpPouch, false);\n  PouchDB.adapter('https', HttpPouch, false);\n}\n\nfunction pad(str, padWith, upToLength) {\n  var padding = '';\n  var targetLength = upToLength - str.length;\n  /* istanbul ignore next */\n  while (padding.length < targetLength) {\n    padding += padWith;\n  }\n  return padding;\n}\n\nfunction padLeft(str, padWith, upToLength) {\n  var padding = pad(str, padWith, upToLength);\n  return padding + str;\n}\n\nvar MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE\nvar MAGNITUDE_DIGITS = 3; // ditto\nvar SEP = ''; // set to '_' for easier debugging \n\nfunction collate(a, b) {\n\n  if (a === b) {\n    return 0;\n  }\n\n  a = normalizeKey(a);\n  b = normalizeKey(b);\n\n  var ai = collationIndex(a);\n  var bi = collationIndex(b);\n  if ((ai - bi) !== 0) {\n    return ai - bi;\n  }\n  if (a === null) {\n    return 0;\n  }\n  switch (typeof a) {\n    case 'number':\n      return a - b;\n    case 'boolean':\n      return a === b ? 0 : (a < b ? -1 : 1);\n    case 'string':\n      return stringCollate(a, b);\n  }\n  return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b);\n}\n\n// couch considers null/NaN/Infinity/-Infinity === undefined,\n// for the purposes of mapreduce indexes. also, dates get stringified.\nfunction normalizeKey(key) {\n  switch (typeof key) {\n    case 'undefined':\n      return null;\n    case 'number':\n      if (key === Infinity || key === -Infinity || isNaN(key)) {\n        return null;\n      }\n      return key;\n    case 'object':\n      var origKey = key;\n      if (Array.isArray(key)) {\n        var len = key.length;\n        key = new Array(len);\n        for (var i = 0; i < len; i++) {\n          key[i] = normalizeKey(origKey[i]);\n        }\n      /* istanbul ignore next */\n      } else if (key instanceof Date) {\n        return key.toJSON();\n      } else if (key !== null) { // generic object\n        key = {};\n        for (var k in origKey) {\n          if (origKey.hasOwnProperty(k)) {\n            var val = origKey[k];\n            if (typeof val !== 'undefined') {\n              key[k] = normalizeKey(val);\n            }\n          }\n        }\n      }\n  }\n  return key;\n}\n\nfunction indexify(key) {\n  if (key !== null) {\n    switch (typeof key) {\n      case 'boolean':\n        return key ? 1 : 0;\n      case 'number':\n        return numToIndexableString(key);\n      case 'string':\n        // We've to be sure that key does not contain \\u0000\n        // Do order-preserving replacements:\n        // 0 -> 1, 1\n        // 1 -> 1, 2\n        // 2 -> 2, 2\n        return key\n          .replace(/\\u0002/g, '\\u0002\\u0002')\n          .replace(/\\u0001/g, '\\u0001\\u0002')\n          .replace(/\\u0000/g, '\\u0001\\u0001');\n      case 'object':\n        var isArray = Array.isArray(key);\n        var arr = isArray ? key : Object.keys(key);\n        var i = -1;\n        var len = arr.length;\n        var result = '';\n        if (isArray) {\n          while (++i < len) {\n            result += toIndexableString(arr[i]);\n          }\n        } else {\n          while (++i < len) {\n            var objKey = arr[i];\n            result += toIndexableString(objKey) +\n                toIndexableString(key[objKey]);\n          }\n        }\n        return result;\n    }\n  }\n  return '';\n}\n\n// convert the given key to a string that would be appropriate\n// for lexical sorting, e.g. within a database, where the\n// sorting is the same given by the collate() function.\nfunction toIndexableString(key) {\n  var zero = '\\u0000';\n  key = normalizeKey(key);\n  return collationIndex(key) + SEP + indexify(key) + zero;\n}\n\nfunction parseNumber(str, i) {\n  var originalIdx = i;\n  var num;\n  var zero = str[i] === '1';\n  if (zero) {\n    num = 0;\n    i++;\n  } else {\n    var neg = str[i] === '0';\n    i++;\n    var numAsString = '';\n    var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);\n    var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;\n    /* istanbul ignore next */\n    if (neg) {\n      magnitude = -magnitude;\n    }\n    i += MAGNITUDE_DIGITS;\n    while (true) {\n      var ch = str[i];\n      if (ch === '\\u0000') {\n        break;\n      } else {\n        numAsString += ch;\n      }\n      i++;\n    }\n    numAsString = numAsString.split('.');\n    if (numAsString.length === 1) {\n      num = parseInt(numAsString, 10);\n    } else {\n      /* istanbul ignore next */\n      num = parseFloat(numAsString[0] + '.' + numAsString[1]);\n    }\n    /* istanbul ignore next */\n    if (neg) {\n      num = num - 10;\n    }\n    /* istanbul ignore next */\n    if (magnitude !== 0) {\n      // parseFloat is more reliable than pow due to rounding errors\n      // e.g. Number.MAX_VALUE would return Infinity if we did\n      // num * Math.pow(10, magnitude);\n      num = parseFloat(num + 'e' + magnitude);\n    }\n  }\n  return {num: num, length : i - originalIdx};\n}\n\n// move up the stack while parsing\n// this function moved outside of parseIndexableString for performance\nfunction pop(stack, metaStack) {\n  var obj = stack.pop();\n\n  if (metaStack.length) {\n    var lastMetaElement = metaStack[metaStack.length - 1];\n    if (obj === lastMetaElement.element) {\n      // popping a meta-element, e.g. an object whose value is another object\n      metaStack.pop();\n      lastMetaElement = metaStack[metaStack.length - 1];\n    }\n    var element = lastMetaElement.element;\n    var lastElementIndex = lastMetaElement.index;\n    if (Array.isArray(element)) {\n      element.push(obj);\n    } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n      var key = stack.pop();\n      element[key] = obj;\n    } else {\n      stack.push(obj); // obj with key only\n    }\n  }\n}\n\nfunction parseIndexableString(str) {\n  var stack = [];\n  var metaStack = []; // stack for arrays and objects\n  var i = 0;\n\n  /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n  while (true) {\n    var collationIndex = str[i++];\n    if (collationIndex === '\\u0000') {\n      if (stack.length === 1) {\n        return stack.pop();\n      } else {\n        pop(stack, metaStack);\n        continue;\n      }\n    }\n    switch (collationIndex) {\n      case '1':\n        stack.push(null);\n        break;\n      case '2':\n        stack.push(str[i] === '1');\n        i++;\n        break;\n      case '3':\n        var parsedNum = parseNumber(str, i);\n        stack.push(parsedNum.num);\n        i += parsedNum.length;\n        break;\n      case '4':\n        var parsedStr = '';\n        /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n        while (true) {\n          var ch = str[i];\n          if (ch === '\\u0000') {\n            break;\n          }\n          parsedStr += ch;\n          i++;\n        }\n        // perform the reverse of the order-preserving replacement\n        // algorithm (see above)\n        parsedStr = parsedStr.replace(/\\u0001\\u0001/g, '\\u0000')\n          .replace(/\\u0001\\u0002/g, '\\u0001')\n          .replace(/\\u0002\\u0002/g, '\\u0002');\n        stack.push(parsedStr);\n        break;\n      case '5':\n        var arrayElement = { element: [], index: stack.length };\n        stack.push(arrayElement.element);\n        metaStack.push(arrayElement);\n        break;\n      case '6':\n        var objElement = { element: {}, index: stack.length };\n        stack.push(objElement.element);\n        metaStack.push(objElement);\n        break;\n      /* istanbul ignore next */\n      default:\n        throw new Error(\n          'bad collationIndex or unexpectedly reached end of input: ' +\n            collationIndex);\n    }\n  }\n}\n\nfunction arrayCollate(a, b) {\n  var len = Math.min(a.length, b.length);\n  for (var i = 0; i < len; i++) {\n    var sort = collate(a[i], b[i]);\n    if (sort !== 0) {\n      return sort;\n    }\n  }\n  return (a.length === b.length) ? 0 :\n    (a.length > b.length) ? 1 : -1;\n}\nfunction stringCollate(a, b) {\n  // See: https://github.com/daleharvey/pouchdb/issues/40\n  // This is incompatible with the CouchDB implementation, but its the\n  // best we can do for now\n  return (a === b) ? 0 : ((a > b) ? 1 : -1);\n}\nfunction objectCollate(a, b) {\n  var ak = Object.keys(a), bk = Object.keys(b);\n  var len = Math.min(ak.length, bk.length);\n  for (var i = 0; i < len; i++) {\n    // First sort the keys\n    var sort = collate(ak[i], bk[i]);\n    if (sort !== 0) {\n      return sort;\n    }\n    // if the keys are equal sort the values\n    sort = collate(a[ak[i]], b[bk[i]]);\n    if (sort !== 0) {\n      return sort;\n    }\n\n  }\n  return (ak.length === bk.length) ? 0 :\n    (ak.length > bk.length) ? 1 : -1;\n}\n// The collation is defined by erlangs ordered terms\n// the atoms null, true, false come first, then numbers, strings,\n// arrays, then objects\n// null/undefined/NaN/Infinity/-Infinity are all considered null\nfunction collationIndex(x) {\n  var id = ['boolean', 'number', 'string', 'object'];\n  var idx = id.indexOf(typeof x);\n  //false if -1 otherwise true, but fast!!!!1\n  if (~idx) {\n    if (x === null) {\n      return 1;\n    }\n    if (Array.isArray(x)) {\n      return 5;\n    }\n    return idx < 3 ? (idx + 2) : (idx + 3);\n  }\n  /* istanbul ignore next */\n  if (Array.isArray(x)) {\n    return 5;\n  }\n}\n\n// conversion:\n// x yyy zz...zz\n// x = 0 for negative, 1 for 0, 2 for positive\n// y = exponent (for negative numbers negated) moved so that it's >= 0\n// z = mantisse\nfunction numToIndexableString(num) {\n\n  if (num === 0) {\n    return '1';\n  }\n\n  // convert number to exponential format for easier and\n  // more succinct string sorting\n  var expFormat = num.toExponential().split(/e\\+?/);\n  var magnitude = parseInt(expFormat[1], 10);\n\n  var neg = num < 0;\n\n  var result = neg ? '0' : '2';\n\n  // first sort by magnitude\n  // it's easier if all magnitudes are positive\n  var magForComparison = ((neg ? -magnitude : magnitude) - MIN_MAGNITUDE);\n  var magString = padLeft((magForComparison).toString(), '0', MAGNITUDE_DIGITS);\n\n  result += SEP + magString;\n\n  // then sort by the factor\n  var factor = Math.abs(parseFloat(expFormat[0])); // [1..10)\n  /* istanbul ignore next */\n  if (neg) { // for negative reverse ordering\n    factor = 10 - factor;\n  }\n\n  var factorStr = factor.toFixed(20);\n\n  // strip zeros from the end\n  factorStr = factorStr.replace(/\\.?0+$/, '');\n\n  result += SEP + factorStr;\n\n  return result;\n}\n\n/*\n * Simple task queue to sequentialize actions. Assumes\n * callbacks will eventually fire (once).\n */\n\nfunction TaskQueue$1() {\n  this.promise = new PouchPromise(function (fulfill) {fulfill(); });\n}\nTaskQueue$1.prototype.add = function (promiseFactory) {\n  this.promise = this.promise.catch(function () {\n    // just recover\n  }).then(function () {\n    return promiseFactory();\n  });\n  return this.promise;\n};\nTaskQueue$1.prototype.finish = function () {\n  return this.promise;\n};\n\nfunction createView(opts) {\n  var sourceDB = opts.db;\n  var viewName = opts.viewName;\n  var mapFun = opts.map;\n  var reduceFun = opts.reduce;\n  var temporary = opts.temporary;\n\n  // the \"undefined\" part is for backwards compatibility\n  var viewSignature = mapFun.toString() + (reduceFun && reduceFun.toString()) +\n    'undefined';\n\n  var cachedViews;\n  if (!temporary) {\n    // cache this to ensure we don't try to update the same view twice\n    cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};\n    if (cachedViews[viewSignature]) {\n      return cachedViews[viewSignature];\n    }\n  }\n\n  var promiseForView = sourceDB.info().then(function (info) {\n\n    var depDbName = info.db_name + '-mrview-' +\n      (temporary ? 'temp' : stringMd5(viewSignature));\n\n    // save the view name in the source db so it can be cleaned up if necessary\n    // (e.g. when the _design doc is deleted, remove all associated view data)\n    function diffFunction(doc) {\n      doc.views = doc.views || {};\n      var fullViewName = viewName;\n      if (fullViewName.indexOf('/') === -1) {\n        fullViewName = viewName + '/' + viewName;\n      }\n      var depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};\n      /* istanbul ignore if */\n      if (depDbs[depDbName]) {\n        return; // no update necessary\n      }\n      depDbs[depDbName] = true;\n      return doc;\n    }\n    return upsert(sourceDB, '_local/mrviews', diffFunction).then(function () {\n      return sourceDB.registerDependentDatabase(depDbName).then(function (res) {\n        var db = res.db;\n        db.auto_compaction = true;\n        var view = {\n          name: depDbName,\n          db: db,\n          sourceDB: sourceDB,\n          adapter: sourceDB.adapter,\n          mapFun: mapFun,\n          reduceFun: reduceFun\n        };\n        return view.db.get('_local/lastSeq').catch(function (err) {\n          /* istanbul ignore if */\n          if (err.status !== 404) {\n            throw err;\n          }\n        }).then(function (lastSeqDoc) {\n          view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;\n          if (cachedViews) {\n            view.db.once('destroyed', function () {\n              delete cachedViews[viewSignature];\n            });\n          }\n          return view;\n        });\n      });\n    });\n  });\n\n  if (cachedViews) {\n    cachedViews[viewSignature] = promiseForView;\n  }\n  return promiseForView;\n}\n\nfunction evalfunc(func, emit, sum, log, isArray, toJSON) {\n  return scopedEval(\n    \"return (\" + func.replace(/;\\s*$/, \"\") + \");\",\n    {\n      emit: emit,\n      sum: sum,\n      log: log,\n      isArray: isArray,\n      toJSON: toJSON\n    }\n  );\n}\n\nvar promisedCallback = function (promise, callback) {\n  if (callback) {\n    promise.then(function (res) {\n      process.nextTick(function () {\n        callback(null, res);\n      });\n    }, function (reason) {\n      process.nextTick(function () {\n        callback(reason);\n      });\n    });\n  }\n  return promise;\n};\n\nvar callbackify = function (fun) {\n  return getArguments(function (args) {\n    var cb = args.pop();\n    var promise = fun.apply(this, args);\n    if (typeof cb === 'function') {\n      promisedCallback(promise, cb);\n    }\n    return promise;\n  });\n};\n\n// Promise finally util similar to Q.finally\nvar fin = function (promise, finalPromiseFactory) {\n  return promise.then(function (res) {\n    return finalPromiseFactory().then(function () {\n      return res;\n    });\n  }, function (reason) {\n    return finalPromiseFactory().then(function () {\n      throw reason;\n    });\n  });\n};\n\nvar sequentialize = function (queue, promiseFactory) {\n  return function () {\n    var args = arguments;\n    var that = this;\n    return queue.add(function () {\n      return promiseFactory.apply(that, args);\n    });\n  };\n};\n\n// uniq an array of strings, order not guaranteed\n// similar to underscore/lodash _.uniq\nvar uniq = function (arr) {\n  var map = {};\n\n  for (var i = 0, len = arr.length; i < len; i++) {\n    map['$' + arr[i]] = true;\n  }\n\n  var keys = Object.keys(map);\n  var output = new Array(keys.length);\n\n  for (i = 0, len = keys.length; i < len; i++) {\n    output[i] = keys[i].substring(1);\n  }\n  return output;\n};\n\nvar persistentQueues = {};\nvar tempViewQueue = new TaskQueue$1();\nvar CHANGES_BATCH_SIZE$1 = 50;\n\nvar log$2 = guardedConsole.bind(null, 'log');\n\nfunction parseViewName(name) {\n  // can be either 'ddocname/viewname' or just 'viewname'\n  // (where the ddoc name is the same)\n  return name.indexOf('/') === -1 ? [name, name] : name.split('/');\n}\n\nfunction isGenOne(changes) {\n  // only return true if the current change is 1-\n  // and there are no other leafs\n  return changes.length === 1 && /^1-/.test(changes[0].rev);\n}\n\nfunction emitError(db, e) {\n  try {\n    db.emit('error', e);\n  } catch (err) {\n    guardedConsole('error',\n      'The user\\'s map/reduce function threw an uncaught error.\\n' +\n      'You can debug this error by doing:\\n' +\n      'myDatabase.on(\\'error\\', function (err) { debugger; });\\n' +\n      'Please double-check your map/reduce function.');\n    guardedConsole('error', e);\n  }\n}\n\nfunction tryCode$1(db, fun, args) {\n  // emit an event if there was an error thrown by a map/reduce function.\n  // putting try/catches in a single function also avoids deoptimizations.\n  try {\n    return {\n      output : fun.apply(null, args)\n    };\n  } catch (e) {\n    emitError(db, e);\n    return {error: e};\n  }\n}\n\nfunction sortByKeyThenValue(x, y) {\n  var keyCompare = collate(x.key, y.key);\n  return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);\n}\n\nfunction sliceResults(results, limit, skip) {\n  skip = skip || 0;\n  if (typeof limit === 'number') {\n    return results.slice(skip, limit + skip);\n  } else if (skip > 0) {\n    return results.slice(skip);\n  }\n  return results;\n}\n\nfunction rowToDocId(row) {\n  var val = row.value;\n  // Users can explicitly specify a joined doc _id, or it\n  // defaults to the doc _id that emitted the key/value.\n  var docId = (val && typeof val === 'object' && val._id) || row.id;\n  return docId;\n}\n\nfunction readAttachmentsAsBlobOrBuffer$1(res) {\n  res.rows.forEach(function (row) {\n    var atts = row.doc && row.doc._attachments;\n    if (!atts) {\n      return;\n    }\n    Object.keys(atts).forEach(function (filename) {\n      var att = atts[filename];\n      atts[filename].data = b64ToBluffer(att.data, att.content_type);\n    });\n  });\n}\n\nfunction postprocessAttachments(opts) {\n  return function (res) {\n    if (opts.include_docs && opts.attachments && opts.binary) {\n      readAttachmentsAsBlobOrBuffer$1(res);\n    }\n    return res;\n  };\n}\n\nfunction createBuiltInError(name) {\n  var message = 'builtin ' + name +\n    ' function requires map values to be numbers' +\n    ' or number arrays';\n  return new BuiltInError(message);\n}\n\nfunction sum(values) {\n  var result = 0;\n  for (var i = 0, len = values.length; i < len; i++) {\n    var num = values[i];\n    if (typeof num !== 'number') {\n      if (Array.isArray(num)) {\n        // lists of numbers are also allowed, sum them separately\n        result = typeof result === 'number' ? [result] : result;\n        for (var j = 0, jLen = num.length; j < jLen; j++) {\n          var jNum = num[j];\n          if (typeof jNum !== 'number') {\n            throw createBuiltInError('_sum');\n          } else if (typeof result[j] === 'undefined') {\n            result.push(jNum);\n          } else {\n            result[j] += jNum;\n          }\n        }\n      } else { // not array/number\n        throw createBuiltInError('_sum');\n      }\n    } else if (typeof result === 'number') {\n      result += num;\n    } else { // add number to array\n      result[0] += num;\n    }\n  }\n  return result;\n}\n\nvar builtInReduce = {\n  _sum: function (keys, values) {\n    return sum(values);\n  },\n\n  _count: function (keys, values) {\n    return values.length;\n  },\n\n  _stats: function (keys, values) {\n    // no need to implement rereduce=true, because Pouch\n    // will never call it\n    function sumsqr(values) {\n      var _sumsqr = 0;\n      for (var i = 0, len = values.length; i < len; i++) {\n        var num = values[i];\n        _sumsqr += (num * num);\n      }\n      return _sumsqr;\n    }\n    return {\n      sum     : sum(values),\n      min     : Math.min.apply(null, values),\n      max     : Math.max.apply(null, values),\n      count   : values.length,\n      sumsqr : sumsqr(values)\n    };\n  }\n};\n\nfunction addHttpParam(paramName, opts, params, asJson) {\n  // add an http param from opts to params, optionally json-encoded\n  var val = opts[paramName];\n  if (typeof val !== 'undefined') {\n    if (asJson) {\n      val = encodeURIComponent(JSON.stringify(val));\n    }\n    params.push(paramName + '=' + val);\n  }\n}\n\nfunction coerceInteger(integerCandidate) {\n  if (typeof integerCandidate !== 'undefined') {\n    var asNumber = Number(integerCandidate);\n    // prevents e.g. '1foo' or '1.1' being coerced to 1\n    if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {\n      return asNumber;\n    } else {\n      return integerCandidate;\n    }\n  }\n}\n\nfunction coerceOptions(opts) {\n  opts.group_level = coerceInteger(opts.group_level);\n  opts.limit = coerceInteger(opts.limit);\n  opts.skip = coerceInteger(opts.skip);\n  return opts;\n}\n\nfunction checkPositiveInteger(number) {\n  if (number) {\n    if (typeof number !== 'number') {\n      return  new QueryParseError('Invalid value for integer: \"' +\n      number + '\"');\n    }\n    if (number < 0) {\n      return new QueryParseError('Invalid value for positive integer: ' +\n        '\"' + number + '\"');\n    }\n  }\n}\n\nfunction checkQueryParseError(options, fun) {\n  var startkeyName = options.descending ? 'endkey' : 'startkey';\n  var endkeyName = options.descending ? 'startkey' : 'endkey';\n\n  if (typeof options[startkeyName] !== 'undefined' &&\n    typeof options[endkeyName] !== 'undefined' &&\n    collate(options[startkeyName], options[endkeyName]) > 0) {\n    throw new QueryParseError('No rows can match your key range, ' +\n    'reverse your start_key and end_key or set {descending : true}');\n  } else if (fun.reduce && options.reduce !== false) {\n    if (options.include_docs) {\n      throw new QueryParseError('{include_docs:true} is invalid for reduce');\n    } else if (options.keys && options.keys.length > 1 &&\n        !options.group && !options.group_level) {\n      throw new QueryParseError('Multi-key fetches for reduce views must use ' +\n      '{group: true}');\n    }\n  }\n  ['group_level', 'limit', 'skip'].forEach(function (optionName) {\n    var error = checkPositiveInteger(options[optionName]);\n    if (error) {\n      throw error;\n    }\n  });\n}\n\nfunction httpQuery(db, fun, opts) {\n  // List of parameters to add to the PUT request\n  var params = [];\n  var body;\n  var method = 'GET';\n\n  // If opts.reduce exists and is defined, then add it to the list\n  // of parameters.\n  // If reduce=false then the results are that of only the map function\n  // not the final result of map and reduce.\n  addHttpParam('reduce', opts, params);\n  addHttpParam('include_docs', opts, params);\n  addHttpParam('attachments', opts, params);\n  addHttpParam('limit', opts, params);\n  addHttpParam('descending', opts, params);\n  addHttpParam('group', opts, params);\n  addHttpParam('group_level', opts, params);\n  addHttpParam('skip', opts, params);\n  addHttpParam('stale', opts, params);\n  addHttpParam('conflicts', opts, params);\n  addHttpParam('startkey', opts, params, true);\n  addHttpParam('start_key', opts, params, true);\n  addHttpParam('endkey', opts, params, true);\n  addHttpParam('end_key', opts, params, true);\n  addHttpParam('inclusive_end', opts, params);\n  addHttpParam('key', opts, params, true);\n\n  // Format the list of parameters into a valid URI query string\n  params = params.join('&');\n  params = params === '' ? '' : '?' + params;\n\n  // If keys are supplied, issue a POST to circumvent GET query string limits\n  // see http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options\n  if (typeof opts.keys !== 'undefined') {\n    var MAX_URL_LENGTH = 2000;\n    // according to http://stackoverflow.com/a/417184/680742,\n    // the de facto URL length limit is 2000 characters\n\n    var keysAsString =\n      'keys=' + encodeURIComponent(JSON.stringify(opts.keys));\n    if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {\n      // If the keys are short enough, do a GET. we do this to work around\n      // Safari not understanding 304s on POSTs (see pouchdb/pouchdb#1239)\n      params += (params[0] === '?' ? '&' : '?') + keysAsString;\n    } else {\n      method = 'POST';\n      if (typeof fun === 'string') {\n        body = {keys: opts.keys};\n      } else { // fun is {map : mapfun}, so append to this\n        fun.keys = opts.keys;\n      }\n    }\n  }\n\n  // We are referencing a query defined in the design doc\n  if (typeof fun === 'string') {\n    var parts = parseViewName(fun);\n    return db.request({\n      method: method,\n      url: '_design/' + parts[0] + '/_view/' + parts[1] + params,\n      body: body\n    }).then(postprocessAttachments(opts));\n  }\n\n  // We are using a temporary view, terrible for performance, good for testing\n  body = body || {};\n  Object.keys(fun).forEach(function (key) {\n    if (Array.isArray(fun[key])) {\n      body[key] = fun[key];\n    } else {\n      body[key] = fun[key].toString();\n    }\n  });\n  return db.request({\n    method: 'POST',\n    url: '_temp_view' + params,\n    body: body\n  }).then(postprocessAttachments(opts));\n}\n\n// custom adapters can define their own api._query\n// and override the default behavior\n/* istanbul ignore next */\nfunction customQuery(db, fun, opts) {\n  return new PouchPromise(function (resolve, reject) {\n    db._query(fun, opts, function (err, res) {\n      if (err) {\n        return reject(err);\n      }\n      resolve(res);\n    });\n  });\n}\n\n// custom adapters can define their own api._viewCleanup\n// and override the default behavior\n/* istanbul ignore next */\nfunction customViewCleanup(db) {\n  return new PouchPromise(function (resolve, reject) {\n    db._viewCleanup(function (err, res) {\n      if (err) {\n        return reject(err);\n      }\n      resolve(res);\n    });\n  });\n}\n\nfunction defaultsTo(value) {\n  return function (reason) {\n    /* istanbul ignore else */\n    if (reason.status === 404) {\n      return value;\n    } else {\n      throw reason;\n    }\n  };\n}\n\n// returns a promise for a list of docs to update, based on the input docId.\n// the order doesn't matter, because post-3.2.0, bulkDocs\n// is an atomic operation in all three adapters.\nfunction getDocsToPersist(docId, view, docIdsToChangesAndEmits) {\n  var metaDocId = '_local/doc_' + docId;\n  var defaultMetaDoc = {_id: metaDocId, keys: []};\n  var docData = docIdsToChangesAndEmits[docId];\n  var indexableKeysToKeyValues = docData.indexableKeysToKeyValues;\n  var changes = docData.changes;\n\n  function getMetaDoc() {\n    if (isGenOne(changes)) {\n      // generation 1, so we can safely assume initial state\n      // for performance reasons (avoids unnecessary GETs)\n      return PouchPromise.resolve(defaultMetaDoc);\n    }\n    return view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc));\n  }\n\n  function getKeyValueDocs(metaDoc) {\n    if (!metaDoc.keys.length) {\n      // no keys, no need for a lookup\n      return PouchPromise.resolve({rows: []});\n    }\n    return view.db.allDocs({\n      keys: metaDoc.keys,\n      include_docs: true\n    });\n  }\n\n  function processKvDocs(metaDoc, kvDocsRes) {\n    var kvDocs = [];\n    var oldKeysMap = {};\n\n    for (var i = 0, len = kvDocsRes.rows.length; i < len; i++) {\n      var row = kvDocsRes.rows[i];\n      var doc = row.doc;\n      if (!doc) { // deleted\n        continue;\n      }\n      kvDocs.push(doc);\n      oldKeysMap[doc._id] = true;\n      doc._deleted = !indexableKeysToKeyValues[doc._id];\n      if (!doc._deleted) {\n        var keyValue = indexableKeysToKeyValues[doc._id];\n        if ('value' in keyValue) {\n          doc.value = keyValue.value;\n        }\n      }\n    }\n\n    var newKeys = Object.keys(indexableKeysToKeyValues);\n    newKeys.forEach(function (key) {\n      if (!oldKeysMap[key]) {\n        // new doc\n        var kvDoc = {\n          _id: key\n        };\n        var keyValue = indexableKeysToKeyValues[key];\n        if ('value' in keyValue) {\n          kvDoc.value = keyValue.value;\n        }\n        kvDocs.push(kvDoc);\n      }\n    });\n    metaDoc.keys = uniq(newKeys.concat(metaDoc.keys));\n    kvDocs.push(metaDoc);\n\n    return kvDocs;\n  }\n\n  return getMetaDoc().then(function (metaDoc) {\n    return getKeyValueDocs(metaDoc).then(function (kvDocsRes) {\n      return processKvDocs(metaDoc, kvDocsRes);\n    });\n  });\n}\n\n// updates all emitted key/value docs and metaDocs in the mrview database\n// for the given batch of documents from the source database\nfunction saveKeyValues(view, docIdsToChangesAndEmits, seq) {\n  var seqDocId = '_local/lastSeq';\n  return view.db.get(seqDocId)\n  .catch(defaultsTo({_id: seqDocId, seq: 0}))\n  .then(function (lastSeqDoc) {\n    var docIds = Object.keys(docIdsToChangesAndEmits);\n    return PouchPromise.all(docIds.map(function (docId) {\n      return getDocsToPersist(docId, view, docIdsToChangesAndEmits);\n    })).then(function (listOfDocsToPersist) {\n      var docsToPersist = flatten(listOfDocsToPersist);\n      lastSeqDoc.seq = seq;\n      docsToPersist.push(lastSeqDoc);\n      // write all docs in a single operation, update the seq once\n      return view.db.bulkDocs({docs : docsToPersist});\n    });\n  });\n}\n\nfunction getQueue(view) {\n  var viewName = typeof view === 'string' ? view : view.name;\n  var queue = persistentQueues[viewName];\n  if (!queue) {\n    queue = persistentQueues[viewName] = new TaskQueue$1();\n  }\n  return queue;\n}\n\nfunction updateView(view) {\n  return sequentialize(getQueue(view), function () {\n    return updateViewInQueue(view);\n  })();\n}\n\nfunction updateViewInQueue(view) {\n  // bind the emit function once\n  var mapResults;\n  var doc;\n\n  function emit(key, value) {\n    var output = {id: doc._id, key: normalizeKey(key)};\n    // Don't explicitly store the value unless it's defined and non-null.\n    // This saves on storage space, because often people don't use it.\n    if (typeof value !== 'undefined' && value !== null) {\n      output.value = normalizeKey(value);\n    }\n    mapResults.push(output);\n  }\n\n  var mapFun;\n  // for temp_views one can use emit(doc, emit), see #38\n  if (typeof view.mapFun === \"function\" && view.mapFun.length === 2) {\n    var origMap = view.mapFun;\n    mapFun = function (doc) {\n      return origMap(doc, emit);\n    };\n  } else {\n    mapFun = evalfunc(view.mapFun.toString(), emit, sum, log$2, Array.isArray,\n      JSON.parse);\n  }\n\n  var currentSeq = view.seq || 0;\n\n  function processChange(docIdsToChangesAndEmits, seq) {\n    return function () {\n      return saveKeyValues(view, docIdsToChangesAndEmits, seq);\n    };\n  }\n\n  var queue = new TaskQueue$1();\n  // TODO(neojski): https://github.com/daleharvey/pouchdb/issues/1521\n\n  return new PouchPromise(function (resolve, reject) {\n\n    function complete() {\n      queue.finish().then(function () {\n        view.seq = currentSeq;\n        resolve();\n      });\n    }\n\n    function processNextBatch() {\n      view.sourceDB.changes({\n        conflicts: true,\n        include_docs: true,\n        style: 'all_docs',\n        since: currentSeq,\n        limit: CHANGES_BATCH_SIZE$1\n      }).on('complete', function (response) {\n        var results = response.results;\n        if (!results.length) {\n          return complete();\n        }\n        var docIdsToChangesAndEmits = {};\n        for (var i = 0, l = results.length; i < l; i++) {\n          var change = results[i];\n          if (change.doc._id[0] !== '_') {\n            mapResults = [];\n            doc = change.doc;\n\n            if (!doc._deleted) {\n              tryCode$1(view.sourceDB, mapFun, [doc]);\n            }\n            mapResults.sort(sortByKeyThenValue);\n\n            var indexableKeysToKeyValues = {};\n            var lastKey;\n            for (var j = 0, jl = mapResults.length; j < jl; j++) {\n              var obj = mapResults[j];\n              var complexKey = [obj.key, obj.id];\n              if (collate(obj.key, lastKey) === 0) {\n                complexKey.push(j); // dup key+id, so make it unique\n              }\n              var indexableKey = toIndexableString(complexKey);\n              indexableKeysToKeyValues[indexableKey] = obj;\n              lastKey = obj.key;\n            }\n            docIdsToChangesAndEmits[change.doc._id] = {\n              indexableKeysToKeyValues: indexableKeysToKeyValues,\n              changes: change.changes\n            };\n          }\n          currentSeq = change.seq;\n        }\n        queue.add(processChange(docIdsToChangesAndEmits, currentSeq));\n        if (results.length < CHANGES_BATCH_SIZE$1) {\n          return complete();\n        }\n        return processNextBatch();\n      }).on('error', onError);\n      /* istanbul ignore next */\n      function onError(err) {\n        reject(err);\n      }\n    }\n\n    processNextBatch();\n  });\n}\n\nfunction reduceView(view, results, options) {\n  if (options.group_level === 0) {\n    delete options.group_level;\n  }\n\n  var shouldGroup = options.group || options.group_level;\n\n  var reduceFun;\n  if (builtInReduce[view.reduceFun]) {\n    reduceFun = builtInReduce[view.reduceFun];\n  } else {\n    reduceFun = evalfunc(\n      view.reduceFun.toString(), null, sum, log$2, Array.isArray, JSON.parse);\n  }\n\n  var groups = [];\n  var lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY :\n    options.group_level;\n  results.forEach(function (e) {\n    var last = groups[groups.length - 1];\n    var groupKey = shouldGroup ? e.key : null;\n\n    // only set group_level for array keys\n    if (shouldGroup && Array.isArray(groupKey)) {\n      groupKey = groupKey.slice(0, lvl);\n    }\n\n    if (last && collate(last.groupKey, groupKey) === 0) {\n      last.keys.push([e.key, e.id]);\n      last.values.push(e.value);\n      return;\n    }\n    groups.push({\n      keys: [[e.key, e.id]],\n      values: [e.value],\n      groupKey: groupKey\n    });\n  });\n  results = [];\n  for (var i = 0, len = groups.length; i < len; i++) {\n    var e = groups[i];\n    var reduceTry = tryCode$1(view.sourceDB, reduceFun,\n      [e.keys, e.values, false]);\n    if (reduceTry.error && reduceTry.error instanceof BuiltInError) {\n      // CouchDB returns an error if a built-in errors out\n      throw reduceTry.error;\n    }\n    results.push({\n      // CouchDB just sets the value to null if a non-built-in errors out\n      value: reduceTry.error ? null : reduceTry.output,\n      key: e.groupKey\n    });\n  }\n  // no total_rows/offset when reducing\n  return {rows: sliceResults(results, options.limit, options.skip)};\n}\n\nfunction queryView(view, opts) {\n  return sequentialize(getQueue(view), function () {\n    return queryViewInQueue(view, opts);\n  })();\n}\n\nfunction queryViewInQueue(view, opts) {\n  var totalRows;\n  var shouldReduce = view.reduceFun && opts.reduce !== false;\n  var skip = opts.skip || 0;\n  if (typeof opts.keys !== 'undefined' && !opts.keys.length) {\n    // equivalent query\n    opts.limit = 0;\n    delete opts.keys;\n  }\n\n  function fetchFromView(viewOpts) {\n    viewOpts.include_docs = true;\n    return view.db.allDocs(viewOpts).then(function (res) {\n      totalRows = res.total_rows;\n      return res.rows.map(function (result) {\n\n        // implicit migration - in older versions of PouchDB,\n        // we explicitly stored the doc as {id: ..., key: ..., value: ...}\n        // this is tested in a migration test\n        /* istanbul ignore next */\n        if ('value' in result.doc && typeof result.doc.value === 'object' &&\n            result.doc.value !== null) {\n          var keys = Object.keys(result.doc.value).sort();\n          // this detection method is not perfect, but it's unlikely the user\n          // emitted a value which was an object with these 3 exact keys\n          var expectedKeys = ['id', 'key', 'value'];\n          if (!(keys < expectedKeys || keys > expectedKeys)) {\n            return result.doc.value;\n          }\n        }\n\n        var parsedKeyAndDocId = parseIndexableString(result.doc._id);\n        return {\n          key: parsedKeyAndDocId[0],\n          id: parsedKeyAndDocId[1],\n          value: ('value' in result.doc ? result.doc.value : null)\n        };\n      });\n    });\n  }\n\n  function onMapResultsReady(rows) {\n    var finalResults;\n    if (shouldReduce) {\n      finalResults = reduceView(view, rows, opts);\n    } else {\n      finalResults = {\n        total_rows: totalRows,\n        offset: skip,\n        rows: rows\n      };\n    }\n    if (opts.include_docs) {\n      var docIds = uniq(rows.map(rowToDocId));\n\n      return view.sourceDB.allDocs({\n        keys: docIds,\n        include_docs: true,\n        conflicts: opts.conflicts,\n        attachments: opts.attachments,\n        binary: opts.binary\n      }).then(function (allDocsRes) {\n        var docIdsToDocs = {};\n        allDocsRes.rows.forEach(function (row) {\n          if (row.doc) {\n            docIdsToDocs['$' + row.id] = row.doc;\n          }\n        });\n        rows.forEach(function (row) {\n          var docId = rowToDocId(row);\n          var doc = docIdsToDocs['$' + docId];\n          if (doc) {\n            row.doc = doc;\n          }\n        });\n        return finalResults;\n      });\n    } else {\n      return finalResults;\n    }\n  }\n\n  if (typeof opts.keys !== 'undefined') {\n    var keys = opts.keys;\n    var fetchPromises = keys.map(function (key) {\n      var viewOpts = {\n        startkey : toIndexableString([key]),\n        endkey   : toIndexableString([key, {}])\n      };\n      return fetchFromView(viewOpts);\n    });\n    return PouchPromise.all(fetchPromises).then(flatten).then(onMapResultsReady);\n  } else { // normal query, no 'keys'\n    var viewOpts = {\n      descending : opts.descending\n    };\n    if (opts.start_key) {\n        opts.startkey = opts.start_key;\n    }\n    if (opts.end_key) {\n        opts.endkey = opts.end_key;\n    }\n    if (typeof opts.startkey !== 'undefined') {\n      viewOpts.startkey = opts.descending ?\n        toIndexableString([opts.startkey, {}]) :\n        toIndexableString([opts.startkey]);\n    }\n    if (typeof opts.endkey !== 'undefined') {\n      var inclusiveEnd = opts.inclusive_end !== false;\n      if (opts.descending) {\n        inclusiveEnd = !inclusiveEnd;\n      }\n\n      viewOpts.endkey = toIndexableString(\n        inclusiveEnd ? [opts.endkey, {}] : [opts.endkey]);\n    }\n    if (typeof opts.key !== 'undefined') {\n      var keyStart = toIndexableString([opts.key]);\n      var keyEnd = toIndexableString([opts.key, {}]);\n      if (viewOpts.descending) {\n        viewOpts.endkey = keyStart;\n        viewOpts.startkey = keyEnd;\n      } else {\n        viewOpts.startkey = keyStart;\n        viewOpts.endkey = keyEnd;\n      }\n    }\n    if (!shouldReduce) {\n      if (typeof opts.limit === 'number') {\n        viewOpts.limit = opts.limit;\n      }\n      viewOpts.skip = skip;\n    }\n    return fetchFromView(viewOpts).then(onMapResultsReady);\n  }\n}\n\nfunction httpViewCleanup(db) {\n  return db.request({\n    method: 'POST',\n    url: '_view_cleanup'\n  });\n}\n\nfunction localViewCleanup(db) {\n  return db.get('_local/mrviews').then(function (metaDoc) {\n    var docsToViews = {};\n    Object.keys(metaDoc.views).forEach(function (fullViewName) {\n      var parts = parseViewName(fullViewName);\n      var designDocName = '_design/' + parts[0];\n      var viewName = parts[1];\n      docsToViews[designDocName] = docsToViews[designDocName] || {};\n      docsToViews[designDocName][viewName] = true;\n    });\n    var opts = {\n      keys : Object.keys(docsToViews),\n      include_docs : true\n    };\n    return db.allDocs(opts).then(function (res) {\n      var viewsToStatus = {};\n      res.rows.forEach(function (row) {\n        var ddocName = row.key.substring(8);\n        Object.keys(docsToViews[row.key]).forEach(function (viewName) {\n          var fullViewName = ddocName + '/' + viewName;\n          /* istanbul ignore if */\n          if (!metaDoc.views[fullViewName]) {\n            // new format, without slashes, to support PouchDB 2.2.0\n            // migration test in pouchdb's browser.migration.js verifies this\n            fullViewName = viewName;\n          }\n          var viewDBNames = Object.keys(metaDoc.views[fullViewName]);\n          // design doc deleted, or view function nonexistent\n          var statusIsGood = row.doc && row.doc.views &&\n            row.doc.views[viewName];\n          viewDBNames.forEach(function (viewDBName) {\n            viewsToStatus[viewDBName] =\n              viewsToStatus[viewDBName] || statusIsGood;\n          });\n        });\n      });\n      var dbsToDelete = Object.keys(viewsToStatus).filter(\n        function (viewDBName) { return !viewsToStatus[viewDBName]; });\n      var destroyPromises = dbsToDelete.map(function (viewDBName) {\n        return sequentialize(getQueue(viewDBName), function () {\n          return new db.constructor(viewDBName, db.__opts).destroy();\n        })();\n      });\n      return PouchPromise.all(destroyPromises).then(function () {\n        return {ok: true};\n      });\n    });\n  }, defaultsTo({ok: true}));\n}\n\nvar viewCleanup = callbackify(function () {\n  var db = this;\n  if (db.type() === 'http') {\n    return httpViewCleanup(db);\n  }\n  /* istanbul ignore next */\n  if (typeof db._viewCleanup === 'function') {\n    return customViewCleanup(db);\n  }\n  return localViewCleanup(db);\n});\n\nfunction queryPromised(db, fun, opts) {\n  if (db.type() === 'http') {\n    return httpQuery(db, fun, opts);\n  }\n\n  /* istanbul ignore next */\n  if (typeof db._query === 'function') {\n    return customQuery(db, fun, opts);\n  }\n\n  if (typeof fun !== 'string') {\n    // temp_view\n    checkQueryParseError(opts, fun);\n\n    var createViewOpts = {\n      db : db,\n      viewName : 'temp_view/temp_view',\n      map : fun.map,\n      reduce : fun.reduce,\n      temporary : true\n    };\n    tempViewQueue.add(function () {\n      return createView(createViewOpts).then(function (view) {\n        function cleanup() {\n          return view.db.destroy();\n        }\n        return fin(updateView(view).then(function () {\n          return queryView(view, opts);\n        }), cleanup);\n      });\n    });\n    return tempViewQueue.finish();\n  } else {\n    // persistent view\n    var fullViewName = fun;\n    var parts = parseViewName(fullViewName);\n    var designDocName = parts[0];\n    var viewName = parts[1];\n    return db.get('_design/' + designDocName).then(function (doc) {\n      var fun = doc.views && doc.views[viewName];\n\n      if (!fun || typeof fun.map !== 'string') {\n        throw new NotFoundError('ddoc ' + designDocName +\n        ' has no view named ' + viewName);\n      }\n      checkQueryParseError(opts, fun);\n\n      var createViewOpts = {\n        db : db,\n        viewName : fullViewName,\n        map : fun.map,\n        reduce : fun.reduce\n      };\n      return createView(createViewOpts).then(function (view) {\n        if (opts.stale === 'ok' || opts.stale === 'update_after') {\n          if (opts.stale === 'update_after') {\n            process.nextTick(function () {\n              updateView(view);\n            });\n          }\n          return queryView(view, opts);\n        } else { // stale not ok\n          return updateView(view).then(function () {\n            return queryView(view, opts);\n          });\n        }\n      });\n    });\n  }\n}\n\nvar query = function (fun, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  opts = opts ? coerceOptions(opts) : {};\n\n  if (typeof fun === 'function') {\n    fun = {map : fun};\n  }\n\n  var db = this;\n  var promise = PouchPromise.resolve().then(function () {\n    return queryPromised(db, fun, opts);\n  });\n  promisedCallback(promise, callback);\n  return promise;\n};\n\nfunction QueryParseError(message) {\n  this.status = 400;\n  this.name = 'query_parse_error';\n  this.message = message;\n  this.error = true;\n  try {\n    Error.captureStackTrace(this, QueryParseError);\n  } catch (e) {}\n}\n\ninherits(QueryParseError, Error);\n\nfunction NotFoundError(message) {\n  this.status = 404;\n  this.name = 'not_found';\n  this.message = message;\n  this.error = true;\n  try {\n    Error.captureStackTrace(this, NotFoundError);\n  } catch (e) {}\n}\n\ninherits(NotFoundError, Error);\n\nfunction BuiltInError(message) {\n  this.status = 500;\n  this.name = 'invalid_value';\n  this.message = message;\n  this.error = true;\n  try {\n    Error.captureStackTrace(this, BuiltInError);\n  } catch (e) {}\n}\n\ninherits(BuiltInError, Error);\n\nvar mapreduce = {\n  query: query,\n  viewCleanup: viewCleanup\n};\n\nfunction isGenOne$1(rev) {\n  return /^1-/.test(rev);\n}\n\nfunction fileHasChanged(localDoc, remoteDoc, filename) {\n  return !localDoc._attachments ||\n         !localDoc._attachments[filename] ||\n         localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;\n}\n\nfunction getDocAttachments(db, doc) {\n  var filenames = Object.keys(doc._attachments);\n  return PouchPromise.all(filenames.map(function (filename) {\n    return db.getAttachment(doc._id, filename, {rev: doc._rev});\n  }));\n}\n\nfunction getDocAttachmentsFromTargetOrSource(target, src, doc) {\n  var doCheckForLocalAttachments = src.type() === 'http' && target.type() !== 'http';\n  var filenames = Object.keys(doc._attachments);\n\n  if (!doCheckForLocalAttachments) {\n    return getDocAttachments(src, doc);\n  }\n\n  return target.get(doc._id).then(function (localDoc) {\n    return PouchPromise.all(filenames.map(function (filename) {\n      if (fileHasChanged(localDoc, doc, filename)) {\n        return src.getAttachment(doc._id, filename);\n      }\n\n      return target.getAttachment(localDoc._id, filename);\n    }));\n  }).catch(function (error) {\n    /* istanbul ignore if */\n    if (error.status !== 404) {\n      throw error;\n    }\n\n    return getDocAttachments(src, doc);\n  });\n}\n\nfunction createBulkGetOpts(diffs) {\n  var requests = [];\n  Object.keys(diffs).forEach(function (id) {\n    var missingRevs = diffs[id].missing;\n    missingRevs.forEach(function (missingRev) {\n      requests.push({\n        id: id,\n        rev: missingRev\n      });\n    });\n  });\n\n  return {\n    docs: requests,\n    revs: true\n  };\n}\n\n//\n// Fetch all the documents from the src as described in the \"diffs\",\n// which is a mapping of docs IDs to revisions. If the state ever\n// changes to \"cancelled\", then the returned promise will be rejected.\n// Else it will be resolved with a list of fetched documents.\n//\nfunction getDocs(src, target, diffs, state) {\n  diffs = clone(diffs); // we do not need to modify this\n\n  var resultDocs = [],\n      ok = true;\n\n  function getAllDocs() {\n\n    var bulkGetOpts = createBulkGetOpts(diffs);\n\n    if (!bulkGetOpts.docs.length) { // optimization: skip empty requests\n      return;\n    }\n\n    return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {\n      /* istanbul ignore if */\n      if (state.cancelled) {\n        throw new Error('cancelled');\n      }\n      return PouchPromise.all(bulkGetResponse.results.map(function (bulkGetInfo) {\n        return PouchPromise.all(bulkGetInfo.docs.map(function (doc) {\n          var remoteDoc = doc.ok;\n\n          if (doc.error) {\n            // when AUTO_COMPACTION is set, docs can be returned which look\n            // like this: {\"missing\":\"1-7c3ac256b693c462af8442f992b83696\"}\n            ok = false;\n          }\n\n          if (!remoteDoc || !remoteDoc._attachments) {\n            return remoteDoc;\n          }\n\n          return getDocAttachmentsFromTargetOrSource(target, src, remoteDoc).then(function (attachments) {\n            var filenames = Object.keys(remoteDoc._attachments);\n            attachments.forEach(function (attachment, i) {\n              var att = remoteDoc._attachments[filenames[i]];\n              delete att.stub;\n              delete att.length;\n              att.data = attachment;\n            });\n\n            return remoteDoc;\n          });\n        }));\n      }))\n\n      .then(function (results) {\n        resultDocs = resultDocs.concat(flatten(results).filter(Boolean));\n      });\n    });\n  }\n\n  function hasAttachments(doc) {\n    return doc._attachments && Object.keys(doc._attachments).length > 0;\n  }\n\n  function fetchRevisionOneDocs(ids) {\n    // Optimization: fetch gen-1 docs and attachments in\n    // a single request using _all_docs\n    return src.allDocs({\n      keys: ids,\n      include_docs: true\n    }).then(function (res) {\n      if (state.cancelled) {\n        throw new Error('cancelled');\n      }\n      res.rows.forEach(function (row) {\n        if (row.deleted || !row.doc || !isGenOne$1(row.value.rev) ||\n            hasAttachments(row.doc)) {\n          // if any of these conditions apply, we need to fetch using get()\n          return;\n        }\n\n        // the doc we got back from allDocs() is sufficient\n        resultDocs.push(row.doc);\n        delete diffs[row.id];\n      });\n    });\n  }\n\n  function getRevisionOneDocs() {\n    // filter out the generation 1 docs and get them\n    // leaving the non-generation one docs to be got otherwise\n    var ids = Object.keys(diffs).filter(function (id) {\n      var missing = diffs[id].missing;\n      return missing.length === 1 && isGenOne$1(missing[0]);\n    });\n    if (ids.length > 0) {\n      return fetchRevisionOneDocs(ids);\n    }\n  }\n\n  function returnResult() {\n    return { ok:ok, docs:resultDocs };\n  }\n\n  return PouchPromise.resolve()\n    .then(getRevisionOneDocs)\n    .then(getAllDocs)\n    .then(returnResult);\n}\n\nvar CHECKPOINT_VERSION = 1;\nvar REPLICATOR = \"pouchdb\";\n// This is an arbitrary number to limit the\n// amount of replication history we save in the checkpoint.\n// If we save too much, the checkpoing docs will become very big,\n// if we save fewer, we'll run a greater risk of having to\n// read all the changes from 0 when checkpoint PUTs fail\n// CouchDB 2.0 has a more involved history pruning,\n// but let's go for the simple version for now.\nvar CHECKPOINT_HISTORY_SIZE = 5;\nvar LOWEST_SEQ = 0;\n\nfunction updateCheckpoint(db, id, checkpoint, session, returnValue) {\n  return db.get(id).catch(function (err) {\n    if (err.status === 404) {\n      if (db.type() === 'http') {\n        explainError(\n          404, 'PouchDB is just checking if a remote checkpoint exists.'\n        );\n      }\n      return {\n        session_id: session,\n        _id: id,\n        history: [],\n        replicator: REPLICATOR,\n        version: CHECKPOINT_VERSION\n      };\n    }\n    throw err;\n  }).then(function (doc) {\n    if (returnValue.cancelled) {\n      return;\n    }\n\n    // if the checkpoint has not changed, do not update\n    if (doc.last_seq === checkpoint) {\n      return;\n    }\n\n    // Filter out current entry for this replication\n    doc.history = (doc.history || []).filter(function (item) {\n      return item.session_id !== session;\n    });\n\n    // Add the latest checkpoint to history\n    doc.history.unshift({\n      last_seq: checkpoint,\n      session_id: session\n    });\n\n    // Just take the last pieces in history, to\n    // avoid really big checkpoint docs.\n    // see comment on history size above\n    doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);\n\n    doc.version = CHECKPOINT_VERSION;\n    doc.replicator = REPLICATOR;\n\n    doc.session_id = session;\n    doc.last_seq = checkpoint;\n\n    return db.put(doc).catch(function (err) {\n      if (err.status === 409) {\n        // retry; someone is trying to write a checkpoint simultaneously\n        return updateCheckpoint(db, id, checkpoint, session, returnValue);\n      }\n      throw err;\n    });\n  });\n}\n\nfunction Checkpointer(src, target, id, returnValue) {\n  this.src = src;\n  this.target = target;\n  this.id = id;\n  this.returnValue = returnValue;\n}\n\nCheckpointer.prototype.writeCheckpoint = function (checkpoint, session) {\n  var self = this;\n  return this.updateTarget(checkpoint, session).then(function () {\n    return self.updateSource(checkpoint, session);\n  });\n};\n\nCheckpointer.prototype.updateTarget = function (checkpoint, session) {\n  return updateCheckpoint(this.target, this.id, checkpoint,\n    session, this.returnValue);\n};\n\nCheckpointer.prototype.updateSource = function (checkpoint, session) {\n  var self = this;\n  if (this.readOnlySource) {\n    return PouchPromise.resolve(true);\n  }\n  return updateCheckpoint(this.src, this.id, checkpoint,\n    session, this.returnValue)\n    .catch(function (err) {\n      if (isForbiddenError(err)) {\n        self.readOnlySource = true;\n        return true;\n      }\n      throw err;\n    });\n};\n\nvar comparisons = {\n  \"undefined\": function (targetDoc, sourceDoc) {\n    // This is the previous comparison function\n    if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) {\n      return sourceDoc.last_seq;\n    }\n    /* istanbul ignore next */\n    return 0;\n  },\n  \"1\": function (targetDoc, sourceDoc) {\n    // This is the comparison function ported from CouchDB\n    return compareReplicationLogs(sourceDoc, targetDoc).last_seq;\n  }\n};\n\nCheckpointer.prototype.getCheckpoint = function () {\n  var self = this;\n  return self.target.get(self.id).then(function (targetDoc) {\n    if (self.readOnlySource) {\n      return PouchPromise.resolve(targetDoc.last_seq);\n    }\n\n    return self.src.get(self.id).then(function (sourceDoc) {\n      // Since we can't migrate an old version doc to a new one\n      // (no session id), we just go with the lowest seq in this case\n      /* istanbul ignore if */\n      if (targetDoc.version !== sourceDoc.version) {\n        return LOWEST_SEQ;\n      }\n\n      var version;\n      if (targetDoc.version) {\n        version = targetDoc.version.toString();\n      } else {\n        version = \"undefined\";\n      }\n\n      if (version in comparisons) {\n        return comparisons[version](targetDoc, sourceDoc);\n      }\n      /* istanbul ignore next */\n      return LOWEST_SEQ;\n    }, function (err) {\n      if (err.status === 404 && targetDoc.last_seq) {\n        return self.src.put({\n          _id: self.id,\n          last_seq: LOWEST_SEQ\n        }).then(function () {\n          return LOWEST_SEQ;\n        }, function (err) {\n          if (isForbiddenError(err)) {\n            self.readOnlySource = true;\n            return targetDoc.last_seq;\n          }\n          /* istanbul ignore next */\n          return LOWEST_SEQ;\n        });\n      }\n      throw err;\n    });\n  }).catch(function (err) {\n    if (err.status !== 404) {\n      throw err;\n    }\n    return LOWEST_SEQ;\n  });\n};\n// This checkpoint comparison is ported from CouchDBs source\n// they come from here:\n// https://github.com/apache/couchdb-couch-replicator/blob/master/src/couch_replicator.erl#L863-L906\n\nfunction compareReplicationLogs(srcDoc, tgtDoc) {\n  if (srcDoc.session_id === tgtDoc.session_id) {\n    return {\n      last_seq: srcDoc.last_seq,\n      history: srcDoc.history\n    };\n  }\n\n  return compareReplicationHistory(srcDoc.history, tgtDoc.history);\n}\n\nfunction compareReplicationHistory(sourceHistory, targetHistory) {\n  // the erlang loop via function arguments is not so easy to repeat in JS\n  // therefore, doing this as recursion\n  var S = sourceHistory[0];\n  var sourceRest = sourceHistory.slice(1);\n  var T = targetHistory[0];\n  var targetRest = targetHistory.slice(1);\n\n  if (!S || targetHistory.length === 0) {\n    return {\n      last_seq: LOWEST_SEQ,\n      history: []\n    };\n  }\n\n  var sourceId = S.session_id;\n  /* istanbul ignore if */\n  if (hasSessionId(sourceId, targetHistory)) {\n    return {\n      last_seq: S.last_seq,\n      history: sourceHistory\n    };\n  }\n\n  var targetId = T.session_id;\n  if (hasSessionId(targetId, sourceRest)) {\n    return {\n      last_seq: T.last_seq,\n      history: targetRest\n    };\n  }\n\n  return compareReplicationHistory(sourceRest, targetRest);\n}\n\nfunction hasSessionId(sessionId, history) {\n  var props = history[0];\n  var rest = history.slice(1);\n\n  if (!sessionId || history.length === 0) {\n    return false;\n  }\n\n  if (sessionId === props.session_id) {\n    return true;\n  }\n\n  return hasSessionId(sessionId, rest);\n}\n\nfunction isForbiddenError(err) {\n  return typeof err.status === 'number' && Math.floor(err.status / 100) === 4;\n}\n\nvar STARTING_BACK_OFF = 0;\n\nfunction backOff(opts, returnValue, error, callback) {\n  if (opts.retry === false) {\n    returnValue.emit('error', error);\n    returnValue.removeAllListeners();\n    return;\n  }\n  if (typeof opts.back_off_function !== 'function') {\n    opts.back_off_function = defaultBackOff;\n  }\n  returnValue.emit('requestError', error);\n  if (returnValue.state === 'active' || returnValue.state === 'pending') {\n    returnValue.emit('paused', error);\n    returnValue.state = 'stopped';\n    var backOffSet = function backoffTimeSet() {\n      opts.current_back_off = STARTING_BACK_OFF;\n    };\n    var removeBackOffSetter = function removeBackOffTimeSet() {\n      returnValue.removeListener('active', backOffSet);\n    };\n    returnValue.once('paused', removeBackOffSetter);\n    returnValue.once('active', backOffSet);\n  }\n\n  opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;\n  opts.current_back_off = opts.back_off_function(opts.current_back_off);\n  setTimeout(callback, opts.current_back_off);\n}\n\nfunction sortObjectPropertiesByKey(queryParams) {\n  return Object.keys(queryParams).sort(collate).reduce(function (result, key) {\n    result[key] = queryParams[key];\n    return result;\n  }, {});\n}\n\n// Generate a unique id particular to this replication.\n// Not guaranteed to align perfectly with CouchDB's rep ids.\nfunction generateReplicationId(src, target, opts) {\n  var docIds = opts.doc_ids ? opts.doc_ids.sort(collate) : '';\n  var filterFun = opts.filter ? opts.filter.toString() : '';\n  var queryParams = '';\n  var filterViewName =  '';\n\n  if (opts.filter && opts.query_params) {\n    queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));\n  }\n\n  if (opts.filter && opts.filter === '_view') {\n    filterViewName = opts.view.toString();\n  }\n\n  return PouchPromise.all([src.id(), target.id()]).then(function (res) {\n    var queryData = res[0] + res[1] + filterFun + filterViewName +\n      queryParams + docIds;\n    return new PouchPromise(function (resolve) {\n      binaryMd5(queryData, resolve);\n    });\n  }).then(function (md5sum) {\n    // can't use straight-up md5 alphabet, because\n    // the char '/' is interpreted as being for attachments,\n    // and + is also not url-safe\n    md5sum = md5sum.replace(/\\//g, '.').replace(/\\+/g, '_');\n    return '_local/' + md5sum;\n  });\n}\n\nfunction replicate$1(src, target, opts, returnValue, result) {\n  var batches = [];               // list of batches to be processed\n  var currentBatch;               // the batch currently being processed\n  var pendingBatch = {\n    seq: 0,\n    changes: [],\n    docs: []\n  }; // next batch, not yet ready to be processed\n  var writingCheckpoint = false;  // true while checkpoint is being written\n  var changesCompleted = false;   // true when all changes received\n  var replicationCompleted = false; // true when replication has completed\n  var last_seq = 0;\n  var continuous = opts.continuous || opts.live || false;\n  var batch_size = opts.batch_size || 100;\n  var batches_limit = opts.batches_limit || 10;\n  var changesPending = false;     // true while src.changes is running\n  var doc_ids = opts.doc_ids;\n  var repId;\n  var checkpointer;\n  var changedDocs = [];\n  // Like couchdb, every replication gets a unique session id\n  var session = uuid();\n\n  result = result || {\n    ok: true,\n    start_time: new Date(),\n    docs_read: 0,\n    docs_written: 0,\n    doc_write_failures: 0,\n    errors: []\n  };\n\n  var changesOpts = {};\n  returnValue.ready(src, target);\n\n  function initCheckpointer() {\n    if (checkpointer) {\n      return PouchPromise.resolve();\n    }\n    return generateReplicationId(src, target, opts).then(function (res) {\n      repId = res;\n      checkpointer = new Checkpointer(src, target, repId, returnValue);\n    });\n  }\n\n  function writeDocs() {\n    changedDocs = [];\n\n    if (currentBatch.docs.length === 0) {\n      return;\n    }\n    var docs = currentBatch.docs;\n    var bulkOpts = {timeout: opts.timeout};\n    return target.bulkDocs({docs: docs, new_edits: false}, bulkOpts).then(function (res) {\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        throw new Error('cancelled');\n      }\n\n      // `res` doesn't include full documents (which live in `docs`), so we create a map of \n      // (id -> error), and check for errors while iterating over `docs`\n      var errorsById = Object.create(null);\n      res.forEach(function (res) {\n        if (res.error) {\n          errorsById[res.id] = res;\n        }\n      });\n\n      var errorsNo = Object.keys(errorsById).length;\n      result.doc_write_failures += errorsNo;\n      result.docs_written += docs.length - errorsNo;\n\n      docs.forEach(function (doc) {\n        var error = errorsById[doc._id];\n        if (error) {\n          result.errors.push(error);\n          if (error.name === 'unauthorized' || error.name === 'forbidden') {\n            returnValue.emit('denied', clone(error));\n          } else {\n            throw error;\n          }\n        } else {\n          changedDocs.push(doc);\n        }\n      });\n\n    }, function (err) {\n      result.doc_write_failures += docs.length;\n      throw err;\n    });\n  }\n\n  function finishBatch() {\n    if (currentBatch.error) {\n      throw new Error('There was a problem getting docs.');\n    }\n    result.last_seq = last_seq = currentBatch.seq;\n    var outResult = clone(result);\n    if (changedDocs.length) {\n      outResult.docs = changedDocs;\n      returnValue.emit('change', outResult);\n    }\n    writingCheckpoint = true;\n    return checkpointer.writeCheckpoint(currentBatch.seq,\n        session).then(function () {\n      writingCheckpoint = false;\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        throw new Error('cancelled');\n      }\n      currentBatch = undefined;\n      getChanges();\n    }).catch(function (err) {\n      onCheckpointError(err);\n      throw err;\n    });\n  }\n\n  function getDiffs() {\n    var diff = {};\n    currentBatch.changes.forEach(function (change) {\n      // Couchbase Sync Gateway emits these, but we can ignore them\n      /* istanbul ignore if */\n      if (change.id === \"_user/\") {\n        return;\n      }\n      diff[change.id] = change.changes.map(function (x) {\n        return x.rev;\n      });\n    });\n    return target.revsDiff(diff).then(function (diffs) {\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        throw new Error('cancelled');\n      }\n      // currentBatch.diffs elements are deleted as the documents are written\n      currentBatch.diffs = diffs;\n    });\n  }\n\n  function getBatchDocs() {\n    return getDocs(src, target, currentBatch.diffs, returnValue).then(function (got) {\n      currentBatch.error = !got.ok;\n      got.docs.forEach(function (doc) {\n        delete currentBatch.diffs[doc._id];\n        result.docs_read++;\n        currentBatch.docs.push(doc);\n      });\n    });\n  }\n\n  function startNextBatch() {\n    if (returnValue.cancelled || currentBatch) {\n      return;\n    }\n    if (batches.length === 0) {\n      processPendingBatch(true);\n      return;\n    }\n    currentBatch = batches.shift();\n    getDiffs()\n      .then(getBatchDocs)\n      .then(writeDocs)\n      .then(finishBatch)\n      .then(startNextBatch)\n      .catch(function (err) {\n        abortReplication('batch processing terminated with error', err);\n      });\n  }\n\n\n  function processPendingBatch(immediate) {\n    if (pendingBatch.changes.length === 0) {\n      if (batches.length === 0 && !currentBatch) {\n        if ((continuous && changesOpts.live) || changesCompleted) {\n          returnValue.state = 'pending';\n          returnValue.emit('paused');\n        }\n        if (changesCompleted) {\n          completeReplication();\n        }\n      }\n      return;\n    }\n    if (\n      immediate ||\n      changesCompleted ||\n      pendingBatch.changes.length >= batch_size\n    ) {\n      batches.push(pendingBatch);\n      pendingBatch = {\n        seq: 0,\n        changes: [],\n        docs: []\n      };\n      if (returnValue.state === 'pending' || returnValue.state === 'stopped') {\n        returnValue.state = 'active';\n        returnValue.emit('active');\n      }\n      startNextBatch();\n    }\n  }\n\n\n  function abortReplication(reason, err) {\n    if (replicationCompleted) {\n      return;\n    }\n    if (!err.message) {\n      err.message = reason;\n    }\n    result.ok = false;\n    result.status = 'aborting';\n    batches = [];\n    pendingBatch = {\n      seq: 0,\n      changes: [],\n      docs: []\n    };\n    completeReplication(err);\n  }\n\n\n  function completeReplication(fatalError) {\n    if (replicationCompleted) {\n      return;\n    }\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      result.status = 'cancelled';\n      if (writingCheckpoint) {\n        return;\n      }\n    }\n    result.status = result.status || 'complete';\n    result.end_time = new Date();\n    result.last_seq = last_seq;\n    replicationCompleted = true;\n\n    if (fatalError) {\n      fatalError.result = result;\n\n      if (fatalError.name === 'unauthorized' || fatalError.name === 'forbidden') {\n        returnValue.emit('error', fatalError);\n        returnValue.removeAllListeners();\n      } else {\n        backOff(opts, returnValue, fatalError, function () {\n          replicate$1(src, target, opts, returnValue);\n        });\n      }\n    } else {\n      returnValue.emit('complete', result);\n      returnValue.removeAllListeners();\n    }\n  }\n\n\n  function onChange(change) {\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      return completeReplication();\n    }\n    var filter = filterChange(opts)(change);\n    if (!filter) {\n      return;\n    }\n    pendingBatch.seq = change.seq;\n    pendingBatch.changes.push(change);\n    processPendingBatch(batches.length === 0 && changesOpts.live);\n  }\n\n\n  function onChangesComplete(changes) {\n    changesPending = false;\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      return completeReplication();\n    }\n\n    // if no results were returned then we're done,\n    // else fetch more\n    if (changes.results.length > 0) {\n      changesOpts.since = changes.last_seq;\n      getChanges();\n      processPendingBatch(true);\n    } else {\n\n      var complete = function () {\n        if (continuous) {\n          changesOpts.live = true;\n          getChanges();\n        } else {\n          changesCompleted = true;\n        }\n        processPendingBatch(true);\n      };\n\n      // update the checkpoint so we start from the right seq next time\n      if (!currentBatch && changes.results.length === 0) {\n        writingCheckpoint = true;\n        checkpointer.writeCheckpoint(changes.last_seq,\n            session).then(function () {\n          writingCheckpoint = false;\n          result.last_seq = last_seq = changes.last_seq;\n          complete();\n        })\n        .catch(onCheckpointError);\n      } else {\n        complete();\n      }\n    }\n  }\n\n\n  function onChangesError(err) {\n    changesPending = false;\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      return completeReplication();\n    }\n    abortReplication('changes rejected', err);\n  }\n\n\n  function getChanges() {\n    if (!(\n      !changesPending &&\n      !changesCompleted &&\n      batches.length < batches_limit\n      )) {\n      return;\n    }\n    changesPending = true;\n    function abortChanges() {\n      changes.cancel();\n    }\n    function removeListener() {\n      returnValue.removeListener('cancel', abortChanges);\n    }\n\n    if (returnValue._changes) { // remove old changes() and listeners\n      returnValue.removeListener('cancel', returnValue._abortChanges);\n      returnValue._changes.cancel();\n    }\n    returnValue.once('cancel', abortChanges);\n\n    var changes = src.changes(changesOpts)\n      .on('change', onChange);\n    changes.then(removeListener, removeListener);\n    changes.then(onChangesComplete)\n      .catch(onChangesError);\n\n    if (opts.retry) {\n      // save for later so we can cancel if necessary\n      returnValue._changes = changes;\n      returnValue._abortChanges = abortChanges;\n    }\n  }\n\n\n  function startChanges() {\n    initCheckpointer().then(function () {\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        return;\n      }\n      return checkpointer.getCheckpoint().then(function (checkpoint) {\n        last_seq = checkpoint;\n        changesOpts = {\n          since: last_seq,\n          limit: batch_size,\n          batch_size: batch_size,\n          style: 'all_docs',\n          doc_ids: doc_ids,\n          return_docs: true // required so we know when we're done\n        };\n        if (opts.filter) {\n          if (typeof opts.filter !== 'string') {\n            // required for the client-side filter in onChange\n            changesOpts.include_docs = true;\n          } else { // ddoc filter\n            changesOpts.filter = opts.filter;\n          }\n        }\n        if ('heartbeat' in opts) {\n          changesOpts.heartbeat = opts.heartbeat;\n        }\n        if ('timeout' in opts) {\n          changesOpts.timeout = opts.timeout;\n        }\n        if (opts.query_params) {\n          changesOpts.query_params = opts.query_params;\n        }\n        if (opts.view) {\n          changesOpts.view = opts.view;\n        }\n        getChanges();\n      });\n    }).catch(function (err) {\n      abortReplication('getCheckpoint rejected with ', err);\n    });\n  }\n\n  /* istanbul ignore next */\n  function onCheckpointError(err) {\n    writingCheckpoint = false;\n    abortReplication('writeCheckpoint completed with error', err);\n  }\n\n  /* istanbul ignore if */\n  if (returnValue.cancelled) { // cancelled immediately\n    completeReplication();\n    return;\n  }\n\n  if (!returnValue._addedListeners) {\n    returnValue.once('cancel', completeReplication);\n\n    if (typeof opts.complete === 'function') {\n      returnValue.once('error', opts.complete);\n      returnValue.once('complete', function (result) {\n        opts.complete(null, result);\n      });\n    }\n    returnValue._addedListeners = true;\n  }\n\n  if (typeof opts.since === 'undefined') {\n    startChanges();\n  } else {\n    initCheckpointer().then(function () {\n      writingCheckpoint = true;\n      return checkpointer.writeCheckpoint(opts.since, session);\n    }).then(function () {\n      writingCheckpoint = false;\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        return;\n      }\n      last_seq = opts.since;\n      startChanges();\n    }).catch(onCheckpointError);\n  }\n}\n\n// We create a basic promise so the caller can cancel the replication possibly\n// before we have actually started listening to changes etc\ninherits(Replication, events.EventEmitter);\nfunction Replication() {\n  events.EventEmitter.call(this);\n  this.cancelled = false;\n  this.state = 'pending';\n  var self = this;\n  var promise = new PouchPromise(function (fulfill, reject) {\n    self.once('complete', fulfill);\n    self.once('error', reject);\n  });\n  self.then = function (resolve, reject) {\n    return promise.then(resolve, reject);\n  };\n  self.catch = function (reject) {\n    return promise.catch(reject);\n  };\n  // As we allow error handling via \"error\" event as well,\n  // put a stub in here so that rejecting never throws UnhandledError.\n  self.catch(function () {});\n}\n\nReplication.prototype.cancel = function () {\n  this.cancelled = true;\n  this.state = 'cancelled';\n  this.emit('cancel');\n};\n\nReplication.prototype.ready = function (src, target) {\n  var self = this;\n  if (self._readyCalled) {\n    return;\n  }\n  self._readyCalled = true;\n\n  function onDestroy() {\n    self.cancel();\n  }\n  src.once('destroyed', onDestroy);\n  target.once('destroyed', onDestroy);\n  function cleanup() {\n    src.removeListener('destroyed', onDestroy);\n    target.removeListener('destroyed', onDestroy);\n  }\n  self.once('complete', cleanup);\n};\n\nfunction toPouch(db, opts) {\n  var PouchConstructor = opts.PouchConstructor;\n  if (typeof db === 'string') {\n    return new PouchConstructor(db, opts);\n  } else {\n    return db;\n  }\n}\n\nfunction replicate(src, target, opts, callback) {\n\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  if (typeof opts === 'undefined') {\n    opts = {};\n  }\n\n  if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {\n    throw createError(BAD_REQUEST,\n                       \"`doc_ids` filter parameter is not a list.\");\n  }\n\n  opts.complete = callback;\n  opts = clone(opts);\n  opts.continuous = opts.continuous || opts.live;\n  opts.retry = ('retry' in opts) ? opts.retry : false;\n  /*jshint validthis:true */\n  opts.PouchConstructor = opts.PouchConstructor || this;\n  var replicateRet = new Replication(opts);\n  var srcPouch = toPouch(src, opts);\n  var targetPouch = toPouch(target, opts);\n  replicate$1(srcPouch, targetPouch, opts, replicateRet);\n  return replicateRet;\n}\n\ninherits(Sync, events.EventEmitter);\nfunction sync(src, target, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  if (typeof opts === 'undefined') {\n    opts = {};\n  }\n  opts = clone(opts);\n  /*jshint validthis:true */\n  opts.PouchConstructor = opts.PouchConstructor || this;\n  src = toPouch(src, opts);\n  target = toPouch(target, opts);\n  return new Sync(src, target, opts, callback);\n}\n\nfunction Sync(src, target, opts, callback) {\n  var self = this;\n  this.canceled = false;\n\n  var optsPush = opts.push ? jsExtend.extend({}, opts, opts.push) : opts;\n  var optsPull = opts.pull ? jsExtend.extend({}, opts, opts.pull) : opts;\n\n  this.push = replicate(src, target, optsPush);\n  this.pull = replicate(target, src, optsPull);\n\n  this.pushPaused = true;\n  this.pullPaused = true;\n\n  function pullChange(change) {\n    self.emit('change', {\n      direction: 'pull',\n      change: change\n    });\n  }\n  function pushChange(change) {\n    self.emit('change', {\n      direction: 'push',\n      change: change\n    });\n  }\n  function pushDenied(doc) {\n    self.emit('denied', {\n      direction: 'push',\n      doc: doc\n    });\n  }\n  function pullDenied(doc) {\n    self.emit('denied', {\n      direction: 'pull',\n      doc: doc\n    });\n  }\n  function pushPaused() {\n    self.pushPaused = true;\n    /* istanbul ignore if */\n    if (self.pullPaused) {\n      self.emit('paused');\n    }\n  }\n  function pullPaused() {\n    self.pullPaused = true;\n    /* istanbul ignore if */\n    if (self.pushPaused) {\n      self.emit('paused');\n    }\n  }\n  function pushActive() {\n    self.pushPaused = false;\n    /* istanbul ignore if */\n    if (self.pullPaused) {\n      self.emit('active', {\n        direction: 'push'\n      });\n    }\n  }\n  function pullActive() {\n    self.pullPaused = false;\n    /* istanbul ignore if */\n    if (self.pushPaused) {\n      self.emit('active', {\n        direction: 'pull'\n      });\n    }\n  }\n\n  var removed = {};\n\n  function removeAll(type) { // type is 'push' or 'pull'\n    return function (event, func) {\n      var isChange = event === 'change' &&\n        (func === pullChange || func === pushChange);\n      var isDenied = event === 'denied' &&\n        (func === pullDenied || func === pushDenied);\n      var isPaused = event === 'paused' &&\n        (func === pullPaused || func === pushPaused);\n      var isActive = event === 'active' &&\n        (func === pullActive || func === pushActive);\n\n      if (isChange || isDenied || isPaused || isActive) {\n        if (!(event in removed)) {\n          removed[event] = {};\n        }\n        removed[event][type] = true;\n        if (Object.keys(removed[event]).length === 2) {\n          // both push and pull have asked to be removed\n          self.removeAllListeners(event);\n        }\n      }\n    };\n  }\n\n  if (opts.live) {\n    this.push.on('complete', self.pull.cancel.bind(self.pull));\n    this.pull.on('complete', self.push.cancel.bind(self.push));\n  }\n\n  this.on('newListener', function (event) {\n    if (event === 'change') {\n      self.pull.on('change', pullChange);\n      self.push.on('change', pushChange);\n    } else if (event === 'denied') {\n      self.pull.on('denied', pullDenied);\n      self.push.on('denied', pushDenied);\n    } else if (event === 'active') {\n      self.pull.on('active', pullActive);\n      self.push.on('active', pushActive);\n    } else if (event === 'paused') {\n      self.pull.on('paused', pullPaused);\n      self.push.on('paused', pushPaused);\n    }\n  });\n\n  this.on('removeListener', function (event) {\n    if (event === 'change') {\n      self.pull.removeListener('change', pullChange);\n      self.push.removeListener('change', pushChange);\n    } else if (event === 'denied') {\n      self.pull.removeListener('denied', pullDenied);\n      self.push.removeListener('denied', pushDenied);\n    } else if (event === 'active') {\n      self.pull.removeListener('active', pullActive);\n      self.push.removeListener('active', pushActive);\n    } else if (event === 'paused') {\n      self.pull.removeListener('paused', pullPaused);\n      self.push.removeListener('paused', pushPaused);\n    }\n  });\n\n  this.pull.on('removeListener', removeAll('pull'));\n  this.push.on('removeListener', removeAll('push'));\n\n  var promise = PouchPromise.all([\n    this.push,\n    this.pull\n  ]).then(function (resp) {\n    var out = {\n      push: resp[0],\n      pull: resp[1]\n    };\n    self.emit('complete', out);\n    if (callback) {\n      callback(null, out);\n    }\n    self.removeAllListeners();\n    return out;\n  }, function (err) {\n    self.cancel();\n    if (callback) {\n      // if there's a callback, then the callback can receive\n      // the error event\n      callback(err);\n    } else {\n      // if there's no callback, then we're safe to emit an error\n      // event, which would otherwise throw an unhandled error\n      // due to 'error' being a special event in EventEmitters\n      self.emit('error', err);\n    }\n    self.removeAllListeners();\n    if (callback) {\n      // no sense throwing if we're already emitting an 'error' event\n      throw err;\n    }\n  });\n\n  this.then = function (success, err) {\n    return promise.then(success, err);\n  };\n\n  this.catch = function (err) {\n    return promise.catch(err);\n  };\n}\n\nSync.prototype.cancel = function () {\n  if (!this.canceled) {\n    this.canceled = true;\n    this.push.cancel();\n    this.pull.cancel();\n  }\n};\n\nfunction replication(PouchDB) {\n  PouchDB.replicate = replicate;\n  PouchDB.sync = sync;\n\n  Object.defineProperty(PouchDB.prototype, 'replicate', {\n    get: function () {\n      var self = this;\n      return {\n        from: function (other, opts, callback) {\n          return self.constructor.replicate(other, self, opts, callback);\n        },\n        to: function (other, opts, callback) {\n          return self.constructor.replicate(self, other, opts, callback);\n        }\n      };\n    }\n  });\n\n  PouchDB.prototype.sync = function (dbName, opts, callback) {\n    return this.constructor.sync(this, dbName, opts, callback);\n  };\n}\n\nPouchDB.plugin(IDBPouch)\n  .plugin(WebSqlPouch)\n  .plugin(HttpPouch$1)\n  .plugin(mapreduce)\n  .plugin(replication);\n\n//\n// PouchDB.utils is basically a throwback to the pre-Browserify days,\n// when this was the easiest way to access global utilities from anywhere\n// in the project. For code cleanliness, we're trying to remove this file,\n// but for practical reasons (legacy code, test code, etc.) this is still here.\n//\n\nvar utils = {\n  ajax: ajax,\n  blob: createBlob,\n  parseUri: parseUri,\n  uuid: uuid,\n  Promise: PouchPromise,\n  atob: atob$1,\n  btoa: btoa$1,\n  binaryStringToBlobOrBuffer: binStringToBluffer,\n  clone: clone,\n  extend: jsExtend.extend,\n  createError: createError,\n  generateErrorFromResponse: generateErrorFromResponse,\n  generateReplicationId: generateReplicationId,\n  parseDdocFunctionName: parseDesignDocFunctionName,\n  normalizeDdocFunctionName: normalizeDesignDocFunctionName,\n  once: once,\n  merge: merge,\n  winningRev: winningRev,\n  upsert: upsert,\n  toPromise: toPromise,\n  checkpointer: Checkpointer,\n  defaultBackOff: defaultBackOff,\n  mapReduceUtils: {\n    uniq: uniq,\n    sequentialize: sequentialize,\n    fin: fin,\n    callbackify: callbackify,\n    promisedCallback: promisedCallback\n  }\n};\n\nvar errors = {\n  UNAUTHORIZED: UNAUTHORIZED,\n  MISSING_BULK_DOCS: MISSING_BULK_DOCS,\n  MISSING_DOC: MISSING_DOC,\n  REV_CONFLICT: REV_CONFLICT,\n  INVALID_ID: INVALID_ID,\n  MISSING_ID: MISSING_ID,\n  RESERVED_ID: RESERVED_ID,\n  NOT_OPEN: NOT_OPEN,\n  UNKNOWN_ERROR: UNKNOWN_ERROR,\n  BAD_ARG: BAD_ARG,\n  INVALID_REQUEST: INVALID_REQUEST,\n  QUERY_PARSE_ERROR: QUERY_PARSE_ERROR,\n  DOC_VALIDATION: DOC_VALIDATION,\n  BAD_REQUEST: BAD_REQUEST,\n  NOT_AN_OBJECT: NOT_AN_OBJECT,\n  DB_MISSING: DB_MISSING,\n  WSQ_ERROR: WSQ_ERROR,\n  LDB_ERROR: LDB_ERROR,\n  FORBIDDEN: FORBIDDEN,\n  INVALID_REV: INVALID_REV,\n  FILE_EXISTS: FILE_EXISTS,\n  MISSING_STUB: MISSING_STUB,\n  IDB_ERROR: IDB_ERROR,\n  INVALID_URL: INVALID_URL\n};\n\nPouchDB.ajax = ajax;\nPouchDB.utils = utils;\nPouchDB.Errors = errors;\n\nmodule.exports = PouchDB;\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":18,\"argsarray\":1,\"debug\":5,\"es6-promise-pool\":7,\"events\":8,\"inherits\":11,\"js-extend\":13,\"lie\":14,\"scope-eval\":19,\"spark-md5\":20,\"vuvuzela\":21}],23:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar jsExtend = require('js-extend');\nvar debug = _interopDefault(require('debug'));\nvar inherits = _interopDefault(require('inherits'));\nvar lie = _interopDefault(require('lie'));\nvar events = require('events');\nvar getArguments = _interopDefault(require('argsarray'));\nvar scopedEval = _interopDefault(require('scope-eval'));\nvar Md5 = _interopDefault(require('spark-md5'));\nvar vuvuzela = _interopDefault(require('vuvuzela'));\nvar PromisePool = _interopDefault(require('es6-promise-pool'));\n\n/* istanbul ignore next */\nvar PouchPromise = typeof Promise === 'function' ? Promise : lie;\n\n// based on https://github.com/montagejs/collections\nfunction mangle(key) {\n  return '$' + key;\n}\nfunction unmangle(key) {\n  return key.substring(1);\n}\nfunction _Map() {\n  this.store = {};\n}\n_Map.prototype.get = function (key) {\n  var mangled = mangle(key);\n  return this.store[mangled];\n};\n_Map.prototype.set = function (key, value) {\n  var mangled = mangle(key);\n  this.store[mangled] = value;\n  return true;\n};\n_Map.prototype.has = function (key) {\n  var mangled = mangle(key);\n  return mangled in this.store;\n};\n_Map.prototype.delete = function (key) {\n  var mangled = mangle(key);\n  var res = mangled in this.store;\n  delete this.store[mangled];\n  return res;\n};\n_Map.prototype.forEach = function (cb) {\n  var keys = Object.keys(this.store);\n  for (var i = 0, len = keys.length; i < len; i++) {\n    var key = keys[i];\n    var value = this.store[key];\n    key = unmangle(key);\n    cb(value, key);\n  }\n};\n\nfunction _Set(array) {\n  this.store = new _Map();\n\n  // init with an array\n  if (array && Array.isArray(array)) {\n    for (var i = 0, len = array.length; i < len; i++) {\n      this.add(array[i]);\n    }\n  }\n}\n_Set.prototype.add = function (key) {\n  return this.store.set(key, true);\n};\n_Set.prototype.has = function (key) {\n  return this.store.has(key);\n};\n\nfunction isBinaryObject(object) {\n  return (typeof ArrayBuffer !== 'undefined' && object instanceof ArrayBuffer) ||\n    (typeof Blob !== 'undefined' && object instanceof Blob);\n}\n\nfunction cloneArrayBuffer(buff) {\n  if (typeof buff.slice === 'function') {\n    return buff.slice(0);\n  }\n  // IE10-11 slice() polyfill\n  var target = new ArrayBuffer(buff.byteLength);\n  var targetArray = new Uint8Array(target);\n  var sourceArray = new Uint8Array(buff);\n  targetArray.set(sourceArray);\n  return target;\n}\n\nfunction cloneBinaryObject(object) {\n  if (object instanceof ArrayBuffer) {\n    return cloneArrayBuffer(object);\n  }\n  var size = object.size;\n  var type = object.type;\n  // Blob\n  if (typeof object.slice === 'function') {\n    return object.slice(0, size, type);\n  }\n  // PhantomJS slice() replacement\n  return object.webkitSlice(0, size, type);\n}\n\n// most of this is borrowed from lodash.isPlainObject:\n// https://github.com/fis-components/lodash.isplainobject/\n// blob/29c358140a74f252aeb08c9eb28bef86f2217d4a/index.js\n\nvar funcToString = Function.prototype.toString;\nvar objectCtorString = funcToString.call(Object);\n\nfunction isPlainObject(value) {\n  var proto = Object.getPrototypeOf(value);\n  /* istanbul ignore if */\n  if (proto === null) { // not sure when this happens, but I guess it can\n    return true;\n  }\n  var Ctor = proto.constructor;\n  return (typeof Ctor == 'function' &&\n    Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nfunction clone(object) {\n  var newObject;\n  var i;\n  var len;\n\n  if (!object || typeof object !== 'object') {\n    return object;\n  }\n\n  if (Array.isArray(object)) {\n    newObject = [];\n    for (i = 0, len = object.length; i < len; i++) {\n      newObject[i] = clone(object[i]);\n    }\n    return newObject;\n  }\n\n  // special case: to avoid inconsistencies between IndexedDB\n  // and other backends, we automatically stringify Dates\n  if (object instanceof Date) {\n    return object.toISOString();\n  }\n\n  if (isBinaryObject(object)) {\n    return cloneBinaryObject(object);\n  }\n\n  if (!isPlainObject(object)) {\n    return object; // don't clone objects like Workers\n  }\n\n  newObject = {};\n  for (i in object) {\n    /* istanbul ignore else */\n    if (Object.prototype.hasOwnProperty.call(object, i)) {\n      var value = clone(object[i]);\n      if (typeof value !== 'undefined') {\n        newObject[i] = value;\n      }\n    }\n  }\n  return newObject;\n}\n\nfunction once(fun) {\n  var called = false;\n  return getArguments(function (args) {\n    /* istanbul ignore if */\n    if (called) {\n      // this is a smoke test and should never actually happen\n      throw new Error('once called more than once');\n    } else {\n      called = true;\n      fun.apply(this, args);\n    }\n  });\n}\n\nfunction toPromise(func) {\n  //create the function we will be returning\n  return getArguments(function (args) {\n    // Clone arguments\n    args = clone(args);\n    var self = this;\n    var tempCB =\n      (typeof args[args.length - 1] === 'function') ? args.pop() : false;\n    // if the last argument is a function, assume its a callback\n    var usedCB;\n    if (tempCB) {\n      // if it was a callback, create a new callback which calls it,\n      // but do so async so we don't trap any errors\n      usedCB = function (err, resp) {\n        process.nextTick(function () {\n          tempCB(err, resp);\n        });\n      };\n    }\n    var promise = new PouchPromise(function (fulfill, reject) {\n      var resp;\n      try {\n        var callback = once(function (err, mesg) {\n          if (err) {\n            reject(err);\n          } else {\n            fulfill(mesg);\n          }\n        });\n        // create a callback for this invocation\n        // apply the function in the orig context\n        args.push(callback);\n        resp = func.apply(self, args);\n        if (resp && typeof resp.then === 'function') {\n          fulfill(resp);\n        }\n      } catch (e) {\n        reject(e);\n      }\n    });\n    // if there is a callback, call it back\n    if (usedCB) {\n      promise.then(function (result) {\n        usedCB(null, result);\n      }, usedCB);\n    }\n    return promise;\n  });\n}\n\nvar log = debug('pouchdb:api');\n\nfunction adapterFun(name, callback) {\n  function logApiCall(self, name, args) {\n    /* istanbul ignore if */\n    if (log.enabled) {\n      var logArgs = [self.name, name];\n      for (var i = 0; i < args.length - 1; i++) {\n        logArgs.push(args[i]);\n      }\n      log.apply(null, logArgs);\n\n      // override the callback itself to log the response\n      var origCallback = args[args.length - 1];\n      args[args.length - 1] = function (err, res) {\n        var responseArgs = [self.name, name];\n        responseArgs = responseArgs.concat(\n          err ? ['error', err] : ['success', res]\n        );\n        log.apply(null, responseArgs);\n        origCallback(err, res);\n      };\n    }\n  }\n\n  return toPromise(getArguments(function (args) {\n    if (this._closed) {\n      return PouchPromise.reject(new Error('database is closed'));\n    }\n    if (this._destroyed) {\n      return PouchPromise.reject(new Error('database is destroyed'));\n    }\n    var self = this;\n    logApiCall(self, name, args);\n    if (!this.taskqueue.isReady) {\n      return new PouchPromise(function (fulfill, reject) {\n        self.taskqueue.addTask(function (failed) {\n          if (failed) {\n            reject(failed);\n          } else {\n            fulfill(self[name].apply(self, args));\n          }\n        });\n      });\n    }\n    return callback.apply(this, args);\n  }));\n}\n\n// like underscore/lodash _.pick()\nfunction pick(obj, arr) {\n  var res = {};\n  for (var i = 0, len = arr.length; i < len; i++) {\n    var prop = arr[i];\n    if (prop in obj) {\n      res[prop] = obj[prop];\n    }\n  }\n  return res;\n}\n\n// Most browsers throttle concurrent requests at 6, so it's silly\n// to shim _bulk_get by trying to launch potentially hundreds of requests\n// and then letting the majority time out. We can handle this ourselves.\nvar MAX_NUM_CONCURRENT_REQUESTS = 6;\n\nfunction identityFunction(x) {\n  return x;\n}\n\nfunction formatResultForOpenRevsGet(result) {\n  return [{\n    ok: result\n  }];\n}\n\n// shim for P/CouchDB adapters that don't directly implement _bulk_get\nfunction bulkGet(db, opts, callback) {\n  var requests = opts.docs;\n\n  // consolidate into one request per doc if possible\n  var requestsById = {};\n  requests.forEach(function (request) {\n    if (request.id in requestsById) {\n      requestsById[request.id].push(request);\n    } else {\n      requestsById[request.id] = [request];\n    }\n  });\n\n  var numDocs = Object.keys(requestsById).length;\n  var numDone = 0;\n  var perDocResults = new Array(numDocs);\n\n  function collapseResultsAndFinish() {\n    var results = [];\n    perDocResults.forEach(function (res) {\n      res.docs.forEach(function (info) {\n        results.push({\n          id: res.id,\n          docs: [info]\n        });\n      });\n    });\n    callback(null, {results: results});\n  }\n\n  function checkDone() {\n    if (++numDone === numDocs) {\n      collapseResultsAndFinish();\n    }\n  }\n\n  function gotResult(docIndex, id, docs) {\n    perDocResults[docIndex] = {id: id, docs: docs};\n    checkDone();\n  }\n\n  var allRequests = Object.keys(requestsById);\n\n  var i = 0;\n\n  function nextBatch() {\n\n    if (i >= allRequests.length) {\n      return;\n    }\n\n    var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);\n    var batch = allRequests.slice(i, upTo);\n    processBatch(batch, i);\n    i += batch.length;\n  }\n\n  function processBatch(batch, offset) {\n    batch.forEach(function (docId, j) {\n      var docIdx = offset + j;\n      var docRequests = requestsById[docId];\n\n      // just use the first request as the \"template\"\n      // TODO: The _bulk_get API allows for more subtle use cases than this,\n      // but for now it is unlikely that there will be a mix of different\n      // \"atts_since\" or \"attachments\" in the same request, since it's just\n      // replicate.js that is using this for the moment.\n      // Also, atts_since is aspirational, since we don't support it yet.\n      var docOpts = pick(docRequests[0], ['atts_since', 'attachments']);\n      docOpts.open_revs = docRequests.map(function (request) {\n        // rev is optional, open_revs disallowed\n        return request.rev;\n      });\n\n      // remove falsey / undefined revisions\n      docOpts.open_revs = docOpts.open_revs.filter(identityFunction);\n\n      var formatResult = identityFunction;\n\n      if (docOpts.open_revs.length === 0) {\n        delete docOpts.open_revs;\n\n        // when fetching only the \"winning\" leaf,\n        // transform the result so it looks like an open_revs\n        // request\n        formatResult = formatResultForOpenRevsGet;\n      }\n\n      // globally-supplied options\n      ['revs', 'attachments', 'binary', 'ajax'].forEach(function (param) {\n        if (param in opts) {\n          docOpts[param] = opts[param];\n        }\n      });\n      db.get(docId, docOpts, function (err, res) {\n        var result;\n        /* istanbul ignore if */\n        if (err) {\n          result = [{error: err}];\n        } else {\n          result = formatResult(res);\n        }\n        gotResult(docIdx, docId, result);\n        nextBatch();\n      });\n    });\n  }\n\n  nextBatch();\n\n}\n\nfunction isChromeApp() {\n  return (typeof chrome !== \"undefined\" &&\n    typeof chrome.storage !== \"undefined\" &&\n    typeof chrome.storage.local !== \"undefined\");\n}\n\nvar hasLocal;\n\nif (isChromeApp()) {\n  hasLocal = false;\n} else {\n  try {\n    localStorage.setItem('_pouch_check_localstorage', 1);\n    hasLocal = !!localStorage.getItem('_pouch_check_localstorage');\n  } catch (e) {\n    hasLocal = false;\n  }\n}\n\nfunction hasLocalStorage() {\n  return hasLocal;\n}\n\ninherits(Changes$1, events.EventEmitter);\n\n/* istanbul ignore next */\nfunction attachBrowserEvents(self) {\n  if (isChromeApp()) {\n    chrome.storage.onChanged.addListener(function (e) {\n      // make sure it's event addressed to us\n      if (e.db_name != null) {\n        //object only has oldValue, newValue members\n        self.emit(e.dbName.newValue);\n      }\n    });\n  } else if (hasLocalStorage()) {\n    if (typeof addEventListener !== 'undefined') {\n      addEventListener(\"storage\", function (e) {\n        self.emit(e.key);\n      });\n    } else { // old IE\n      window.attachEvent(\"storage\", function (e) {\n        self.emit(e.key);\n      });\n    }\n  }\n}\n\nfunction Changes$1() {\n  events.EventEmitter.call(this);\n  this._listeners = {};\n\n  attachBrowserEvents(this);\n}\nChanges$1.prototype.addListener = function (dbName, id, db, opts) {\n  /* istanbul ignore if */\n  if (this._listeners[id]) {\n    return;\n  }\n  var self = this;\n  var inprogress = false;\n  function eventFunction() {\n    /* istanbul ignore if */\n    if (!self._listeners[id]) {\n      return;\n    }\n    if (inprogress) {\n      inprogress = 'waiting';\n      return;\n    }\n    inprogress = true;\n    var changesOpts = pick(opts, [\n      'style', 'include_docs', 'attachments', 'conflicts', 'filter',\n      'doc_ids', 'view', 'since', 'query_params', 'binary'\n    ]);\n\n    /* istanbul ignore next */\n    function onError() {\n      inprogress = false;\n    }\n\n    db.changes(changesOpts).on('change', function (c) {\n      if (c.seq > opts.since && !opts.cancelled) {\n        opts.since = c.seq;\n        opts.onChange(c);\n      }\n    }).on('complete', function () {\n      if (inprogress === 'waiting') {\n        setTimeout(function (){\n          eventFunction();\n        },0);\n      }\n      inprogress = false;\n    }).on('error', onError);\n  }\n  this._listeners[id] = eventFunction;\n  this.on(dbName, eventFunction);\n};\n\nChanges$1.prototype.removeListener = function (dbName, id) {\n  /* istanbul ignore if */\n  if (!(id in this._listeners)) {\n    return;\n  }\n  events.EventEmitter.prototype.removeListener.call(this, dbName,\n    this._listeners[id]);\n  delete this._listeners[id];\n};\n\n\n/* istanbul ignore next */\nChanges$1.prototype.notifyLocalWindows = function (dbName) {\n  //do a useless change on a storage thing\n  //in order to get other windows's listeners to activate\n  if (isChromeApp()) {\n    chrome.storage.local.set({dbName: dbName});\n  } else if (hasLocalStorage()) {\n    localStorage[dbName] = (localStorage[dbName] === \"a\") ? \"b\" : \"a\";\n  }\n};\n\nChanges$1.prototype.notify = function (dbName) {\n  this.emit(dbName);\n  this.notifyLocalWindows(dbName);\n};\n\nfunction guardedConsole(method) {\n  /* istanbul ignore else */\n  if (console !== 'undefined' && method in console) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    console[method].apply(console, args);\n  }\n}\n\nfunction randomNumber(min, max) {\n  var maxTimeout = 600000; // Hard-coded default of 10 minutes\n  min = parseInt(min, 10) || 0;\n  max = parseInt(max, 10);\n  if (max !== max || max <= min) {\n    max = (min || 1) << 1; //doubling\n  } else {\n    max = max + 1;\n  }\n  // In order to not exceed maxTimeout, pick a random value between half of maxTimeout and maxTimeout\n  if(max > maxTimeout) {\n    min = maxTimeout >> 1; // divide by two\n    max = maxTimeout;\n  }\n  var ratio = Math.random();\n  var range = max - min;\n\n  return ~~(range * ratio + min); // ~~ coerces to an int, but fast.\n}\n\nfunction defaultBackOff(min) {\n  var max = 0;\n  if (!min) {\n    max = 2000;\n  }\n  return randomNumber(min, max);\n}\n\n// designed to give info to browser users, who are disturbed\n// when they see http errors in the console\nfunction explainError(status, str) {\n  guardedConsole('info', 'The above ' + status + ' is totally normal. ' + str);\n}\n\ninherits(PouchError, Error);\n\nfunction PouchError(opts) {\n  Error.call(this, opts.reason);\n  this.status = opts.status;\n  this.name = opts.error;\n  this.message = opts.reason;\n  this.error = true;\n}\n\nPouchError.prototype.toString = function () {\n  return JSON.stringify({\n    status: this.status,\n    name: this.name,\n    message: this.message,\n    reason: this.reason\n  });\n};\n\nvar UNAUTHORIZED = new PouchError({\n  status: 401,\n  error: 'unauthorized',\n  reason: \"Name or password is incorrect.\"\n});\n\nvar MISSING_BULK_DOCS = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: \"Missing JSON list of 'docs'\"\n});\n\nvar MISSING_DOC = new PouchError({\n  status: 404,\n  error: 'not_found',\n  reason: 'missing'\n});\n\nvar REV_CONFLICT = new PouchError({\n  status: 409,\n  error: 'conflict',\n  reason: 'Document update conflict'\n});\n\nvar INVALID_ID = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: '_id field must contain a string'\n});\n\nvar MISSING_ID = new PouchError({\n  status: 412,\n  error: 'missing_id',\n  reason: '_id is required for puts'\n});\n\nvar RESERVED_ID = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Only reserved document ids may start with underscore.'\n});\n\nvar NOT_OPEN = new PouchError({\n  status: 412,\n  error: 'precondition_failed',\n  reason: 'Database not open'\n});\n\nvar UNKNOWN_ERROR = new PouchError({\n  status: 500,\n  error: 'unknown_error',\n  reason: 'Database encountered an unknown error'\n});\n\nvar BAD_ARG = new PouchError({\n  status: 500,\n  error: 'badarg',\n  reason: 'Some query argument is invalid'\n});\n\nvar INVALID_REQUEST = new PouchError({\n  status: 400,\n  error: 'invalid_request',\n  reason: 'Request was invalid'\n});\n\nvar QUERY_PARSE_ERROR = new PouchError({\n  status: 400,\n  error: 'query_parse_error',\n  reason: 'Some query parameter is invalid'\n});\n\nvar DOC_VALIDATION = new PouchError({\n  status: 500,\n  error: 'doc_validation',\n  reason: 'Bad special document member'\n});\n\nvar BAD_REQUEST = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Something wrong with the request'\n});\n\nvar NOT_AN_OBJECT = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Document must be a JSON object'\n});\n\nvar DB_MISSING = new PouchError({\n  status: 404,\n  error: 'not_found',\n  reason: 'Database not found'\n});\n\nvar IDB_ERROR = new PouchError({\n  status: 500,\n  error: 'indexed_db_went_bad',\n  reason: 'unknown'\n});\n\nvar WSQ_ERROR = new PouchError({\n  status: 500,\n  error: 'web_sql_went_bad',\n  reason: 'unknown'\n});\n\nvar LDB_ERROR = new PouchError({\n  status: 500,\n  error: 'levelDB_went_went_bad',\n  reason: 'unknown'\n});\n\nvar FORBIDDEN = new PouchError({\n  status: 403,\n  error: 'forbidden',\n  reason: 'Forbidden by design doc validate_doc_update function'\n});\n\nvar INVALID_REV = new PouchError({\n  status: 400,\n  error: 'bad_request',\n  reason: 'Invalid rev format'\n});\n\nvar FILE_EXISTS = new PouchError({\n  status: 412,\n  error: 'file_exists',\n  reason: 'The database could not be created, the file already exists.'\n});\n\nvar MISSING_STUB = new PouchError({\n  status: 412,\n  error: 'missing_stub'\n});\n\nvar INVALID_URL = new PouchError({\n  status: 413,\n  error: 'invalid_url',\n  reason: 'Provided URL is invalid'\n});\n\nfunction createError(error, reason) {\n  function CustomPouchError(reason) {\n    // inherit error properties from our parent error manually\n    // so as to allow proper JSON parsing.\n    /* jshint ignore:start */\n    for (var p in error) {\n      if (typeof error[p] !== 'function') {\n        this[p] = error[p];\n      }\n    }\n    /* jshint ignore:end */\n    if (reason !== undefined) {\n      this.reason = reason;\n    }\n  }\n  CustomPouchError.prototype = PouchError.prototype;\n  return new CustomPouchError(reason);\n}\n\nfunction generateErrorFromResponse(err) {\n\n  if (typeof err !== 'object') {\n    var data = err;\n    err = UNKNOWN_ERROR;\n    err.data = data;\n  }\n\n  if ('error' in err && err.error === 'conflict') {\n    err.name = 'conflict';\n    err.status = 409;\n  }\n\n  if (!('name' in err)) {\n    err.name = err.error || 'unknown';\n  }\n\n  if (!('status' in err)) {\n    err.status = 500;\n  }\n\n  if (!('message' in err)) {\n    err.message = err.message || err.reason;\n  }\n\n  return err;\n}\n\nfunction tryFilter(filter, doc, req) {\n  try {\n    return !filter(doc, req);\n  } catch (err) {\n    var msg = 'Filter function threw: ' + err.toString();\n    return createError(BAD_REQUEST, msg);\n  }\n}\n\nfunction filterChange(opts) {\n  var req = {};\n  var hasFilter = opts.filter && typeof opts.filter === 'function';\n  req.query = opts.query_params;\n\n  return function filter(change) {\n    if (!change.doc) {\n      // CSG sends events on the changes feed that don't have documents,\n      // this hack makes a whole lot of existing code robust.\n      change.doc = {};\n    }\n\n    var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);\n\n    if (typeof filterReturn === 'object') {\n      return filterReturn;\n    }\n\n    if (filterReturn) {\n      return false;\n    }\n\n    if (!opts.include_docs) {\n      delete change.doc;\n    } else if (!opts.attachments) {\n      for (var att in change.doc._attachments) {\n        /* istanbul ignore else */\n        if (change.doc._attachments.hasOwnProperty(att)) {\n          change.doc._attachments[att].stub = true;\n        }\n      }\n    }\n    return true;\n  };\n}\n\nfunction flatten(arrs) {\n  var res = [];\n  for (var i = 0, len = arrs.length; i < len; i++) {\n    res = res.concat(arrs[i]);\n  }\n  return res;\n}\n\n// Determine id an ID is valid\n//   - invalid IDs begin with an underescore that does not begin '_design' or\n//     '_local'\n//   - any other string value is a valid id\n// Returns the specific error object for each case\nfunction invalidIdError(id) {\n  var err;\n  if (!id) {\n    err = createError(MISSING_ID);\n  } else if (typeof id !== 'string') {\n    err = createError(INVALID_ID);\n  } else if (/^_/.test(id) && !(/^_(design|local)/).test(id)) {\n    err = createError(RESERVED_ID);\n  }\n  if (err) {\n    throw err;\n  }\n}\n\nfunction listenerCount(ee, type) {\n  return 'listenerCount' in ee ? ee.listenerCount(type) :\n                                 events.EventEmitter.listenerCount(ee, type);\n}\n\nfunction parseDesignDocFunctionName(s) {\n  if (!s) {\n    return null;\n  }\n  var parts = s.split('/');\n  if (parts.length === 2) {\n    return parts;\n  }\n  if (parts.length === 1) {\n    return [s, s];\n  }\n  return null;\n}\n\nfunction normalizeDesignDocFunctionName(s) {\n  var normalized = parseDesignDocFunctionName(s);\n  return normalized ? normalized.join('/') : null;\n}\n\n// originally parseUri 1.2.2, now patched by us\n// (c) Steven Levithan <stevenlevithan.com>\n// MIT License\nvar keys = [\"source\", \"protocol\", \"authority\", \"userInfo\", \"user\", \"password\",\n    \"host\", \"port\", \"relative\", \"path\", \"directory\", \"file\", \"query\", \"anchor\"];\nvar qName =\"queryKey\";\nvar qParser = /(?:^|&)([^&=]*)=?([^&]*)/g;\n\n// use the \"loose\" parser\n/* jshint maxlen: false */\nvar parser = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nfunction parseUri(str) {\n  var m = parser.exec(str);\n  var uri = {};\n  var i = 14;\n\n  while (i--) {\n    var key = keys[i];\n    var value = m[i] || \"\";\n    var encoded = ['user', 'password'].indexOf(key) !== -1;\n    uri[key] = encoded ? decodeURIComponent(value) : value;\n  }\n\n  uri[qName] = {};\n  uri[keys[12]].replace(qParser, function ($0, $1, $2) {\n    if ($1) {\n      uri[qName][$1] = $2;\n    }\n  });\n\n  return uri;\n}\n\n// this is essentially the \"update sugar\" function from daleharvey/pouchdb#1388\n// the diffFun tells us what delta to apply to the doc.  it either returns\n// the doc, or false if it doesn't need to do an update after all\nfunction upsert(db, docId, diffFun) {\n  return new PouchPromise(function (fulfill, reject) {\n    db.get(docId, function (err, doc) {\n      if (err) {\n        /* istanbul ignore next */\n        if (err.status !== 404) {\n          return reject(err);\n        }\n        doc = {};\n      }\n\n      // the user might change the _rev, so save it for posterity\n      var docRev = doc._rev;\n      var newDoc = diffFun(doc);\n\n      if (!newDoc) {\n        // if the diffFun returns falsy, we short-circuit as\n        // an optimization\n        return fulfill({updated: false, rev: docRev});\n      }\n\n      // users aren't allowed to modify these values,\n      // so reset them here\n      newDoc._id = docId;\n      newDoc._rev = docRev;\n      fulfill(tryAndPut(db, newDoc, diffFun));\n    });\n  });\n}\n\nfunction tryAndPut(db, doc, diffFun) {\n  return db.put(doc).then(function (res) {\n    return {\n      updated: true,\n      rev: res.rev\n    };\n  }, function (err) {\n    /* istanbul ignore next */\n    if (err.status !== 409) {\n      throw err;\n    }\n    return upsert(db, doc._id, diffFun);\n  });\n}\n\n// BEGIN Math.uuid.js\n\n/*!\nMath.uuid.js (v1.4)\nhttp://www.broofa.com\nmailto:robert@broofa.com\n\nCopyright (c) 2010 Robert Kieffer\nDual licensed under the MIT and GPL licenses.\n*/\n\n/*\n * Generate a random uuid.\n *\n * USAGE: Math.uuid(length, radix)\n *   length - the desired number of characters\n *   radix  - the number of allowable values for each character.\n *\n * EXAMPLES:\n *   // No arguments  - returns RFC4122, version 4 ID\n *   >>> Math.uuid()\n *   \"92329D39-6F5C-4520-ABFC-AAB64544E172\"\n *\n *   // One argument - returns ID of the specified length\n *   >>> Math.uuid(15)     // 15 character ID (default base=62)\n *   \"VcydxgltxrVZSTV\"\n *\n *   // Two arguments - returns ID of the specified length, and radix. \n *   // (Radix must be <= 62)\n *   >>> Math.uuid(8, 2)  // 8 character ID (base=2)\n *   \"01001010\"\n *   >>> Math.uuid(8, 10) // 8 character ID (base=10)\n *   \"47473046\"\n *   >>> Math.uuid(8, 16) // 8 character ID (base=16)\n *   \"098F4D35\"\n */\nvar chars = (\n  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' +\n  'abcdefghijklmnopqrstuvwxyz'\n).split('');\nfunction getValue(radix) {\n  return 0 | Math.random() * radix;\n}\nfunction uuid(len, radix) {\n  radix = radix || chars.length;\n  var out = '';\n  var i = -1;\n\n  if (len) {\n    // Compact form\n    while (++i < len) {\n      out += chars[getValue(radix)];\n    }\n    return out;\n  }\n    // rfc4122, version 4 form\n    // Fill in random data.  At i==19 set the high bits of clock sequence as\n    // per rfc4122, sec. 4.1.5\n  while (++i < 36) {\n    switch (i) {\n      case 8:\n      case 13:\n      case 18:\n      case 23:\n        out += '-';\n        break;\n      case 19:\n        out += chars[(getValue(16) & 0x3) | 0x8];\n        break;\n      default:\n        out += chars[getValue(16)];\n    }\n  }\n\n  return out;\n}\n\n// We fetch all leafs of the revision tree, and sort them based on tree length\n// and whether they were deleted, undeleted documents with the longest revision\n// tree (most edits) win\n// The final sort algorithm is slightly documented in a sidebar here:\n// http://guide.couchdb.org/draft/conflicts.html\nfunction winningRev(metadata) {\n  var winningId;\n  var winningPos;\n  var winningDeleted;\n  var toVisit = metadata.rev_tree.slice();\n  var node;\n  while ((node = toVisit.pop())) {\n    var tree = node.ids;\n    var branches = tree[2];\n    var pos = node.pos;\n    if (branches.length) { // non-leaf\n      for (var i = 0, len = branches.length; i < len; i++) {\n        toVisit.push({pos: pos + 1, ids: branches[i]});\n      }\n      continue;\n    }\n    var deleted = !!tree[1].deleted;\n    var id = tree[0];\n    // sort by deleted, then pos, then id\n    if (!winningId || (winningDeleted !== deleted ? winningDeleted :\n        winningPos !== pos ? winningPos < pos : winningId < id)) {\n      winningId = id;\n      winningPos = pos;\n      winningDeleted = deleted;\n    }\n  }\n\n  return winningPos + '-' + winningId;\n}\n\n// Pretty much all below can be combined into a higher order function to\n// traverse revisions\n// The return value from the callback will be passed as context to all\n// children of that node\nfunction traverseRevTree(revs, callback) {\n  var toVisit = revs.slice();\n\n  var node;\n  while ((node = toVisit.pop())) {\n    var pos = node.pos;\n    var tree = node.ids;\n    var branches = tree[2];\n    var newCtx =\n      callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);\n    for (var i = 0, len = branches.length; i < len; i++) {\n      toVisit.push({pos: pos + 1, ids: branches[i], ctx: newCtx});\n    }\n  }\n}\n\nfunction sortByPos(a, b) {\n  return a.pos - b.pos;\n}\n\nfunction collectLeaves(revs) {\n  var leaves = [];\n  traverseRevTree(revs, function (isLeaf, pos, id, acc, opts) {\n    if (isLeaf) {\n      leaves.push({rev: pos + \"-\" + id, pos: pos, opts: opts});\n    }\n  });\n  leaves.sort(sortByPos).reverse();\n  for (var i = 0, len = leaves.length; i < len; i++) {\n    delete leaves[i].pos;\n  }\n  return leaves;\n}\n\n// returns revs of all conflicts that is leaves such that\n// 1. are not deleted and\n// 2. are different than winning revision\nfunction collectConflicts(metadata) {\n  var win = winningRev(metadata);\n  var leaves = collectLeaves(metadata.rev_tree);\n  var conflicts = [];\n  for (var i = 0, len = leaves.length; i < len; i++) {\n    var leaf = leaves[i];\n    if (leaf.rev !== win && !leaf.opts.deleted) {\n      conflicts.push(leaf.rev);\n    }\n  }\n  return conflicts;\n}\n\n// compact a tree by marking its non-leafs as missing,\n// and return a list of revs to delete\nfunction compactTree(metadata) {\n  var revs = [];\n  traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n                                               revHash, ctx, opts) {\n    if (opts.status === 'available' && !isLeaf) {\n      revs.push(pos + '-' + revHash);\n      opts.status = 'missing';\n    }\n  });\n  return revs;\n}\n\n// build up a list of all the paths to the leafs in this revision tree\nfunction rootToLeaf(revs) {\n  var paths = [];\n  var toVisit = revs.slice();\n  var node;\n  while ((node = toVisit.pop())) {\n    var pos = node.pos;\n    var tree = node.ids;\n    var id = tree[0];\n    var opts = tree[1];\n    var branches = tree[2];\n    var isLeaf = branches.length === 0;\n\n    var history = node.history ? node.history.slice() : [];\n    history.push({id: id, opts: opts});\n    if (isLeaf) {\n      paths.push({pos: (pos + 1 - history.length), ids: history});\n    }\n    for (var i = 0, len = branches.length; i < len; i++) {\n      toVisit.push({pos: pos + 1, ids: branches[i], history: history});\n    }\n  }\n  return paths.reverse();\n}\n\n// for a better overview of what this is doing, read:\n// https://github.com/apache/couchdb-couch/blob/master/src/couch_key_tree.erl\n//\n// But for a quick intro, CouchDB uses a revision tree to store a documents\n// history, A -> B -> C, when a document has conflicts, that is a branch in the\n// tree, A -> (B1 | B2 -> C), We store these as a nested array in the format\n//\n// KeyTree = [Path ... ]\n// Path = {pos: position_from_root, ids: Tree}\n// Tree = [Key, Opts, [Tree, ...]], in particular single node: [Key, []]\n\nfunction sortByPos$1(a, b) {\n  return a.pos - b.pos;\n}\n\n// classic binary search\nfunction binarySearch(arr, item, comparator) {\n  var low = 0;\n  var high = arr.length;\n  var mid;\n  while (low < high) {\n    mid = (low + high) >>> 1;\n    if (comparator(arr[mid], item) < 0) {\n      low = mid + 1;\n    } else {\n      high = mid;\n    }\n  }\n  return low;\n}\n\n// assuming the arr is sorted, insert the item in the proper place\nfunction insertSorted(arr, item, comparator) {\n  var idx = binarySearch(arr, item, comparator);\n  arr.splice(idx, 0, item);\n}\n\n// Turn a path as a flat array into a tree with a single branch.\n// If any should be stemmed from the beginning of the array, that's passed\n// in as the second argument\nfunction pathToTree(path, numStemmed) {\n  var root;\n  var leaf;\n  for (var i = numStemmed, len = path.length; i < len; i++) {\n    var node = path[i];\n    var currentLeaf = [node.id, node.opts, []];\n    if (leaf) {\n      leaf[2].push(currentLeaf);\n      leaf = currentLeaf;\n    } else {\n      root = leaf = currentLeaf;\n    }\n  }\n  return root;\n}\n\n// compare the IDs of two trees\nfunction compareTree(a, b) {\n  return a[0] < b[0] ? -1 : 1;\n}\n\n// Merge two trees together\n// The roots of tree1 and tree2 must be the same revision\nfunction mergeTree(in_tree1, in_tree2) {\n  var queue = [{tree1: in_tree1, tree2: in_tree2}];\n  var conflicts = false;\n  while (queue.length > 0) {\n    var item = queue.pop();\n    var tree1 = item.tree1;\n    var tree2 = item.tree2;\n\n    if (tree1[1].status || tree2[1].status) {\n      tree1[1].status =\n        (tree1[1].status ===  'available' ||\n        tree2[1].status === 'available') ? 'available' : 'missing';\n    }\n\n    for (var i = 0; i < tree2[2].length; i++) {\n      if (!tree1[2][0]) {\n        conflicts = 'new_leaf';\n        tree1[2][0] = tree2[2][i];\n        continue;\n      }\n\n      var merged = false;\n      for (var j = 0; j < tree1[2].length; j++) {\n        if (tree1[2][j][0] === tree2[2][i][0]) {\n          queue.push({tree1: tree1[2][j], tree2: tree2[2][i]});\n          merged = true;\n        }\n      }\n      if (!merged) {\n        conflicts = 'new_branch';\n        insertSorted(tree1[2], tree2[2][i], compareTree);\n      }\n    }\n  }\n  return {conflicts: conflicts, tree: in_tree1};\n}\n\nfunction doMerge(tree, path, dontExpand) {\n  var restree = [];\n  var conflicts = false;\n  var merged = false;\n  var res;\n\n  if (!tree.length) {\n    return {tree: [path], conflicts: 'new_leaf'};\n  }\n\n  for (var i = 0, len = tree.length; i < len; i++) {\n    var branch = tree[i];\n    if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {\n      // Paths start at the same position and have the same root, so they need\n      // merged\n      res = mergeTree(branch.ids, path.ids);\n      restree.push({pos: branch.pos, ids: res.tree});\n      conflicts = conflicts || res.conflicts;\n      merged = true;\n    } else if (dontExpand !== true) {\n      // The paths start at a different position, take the earliest path and\n      // traverse up until it as at the same point from root as the path we\n      // want to merge.  If the keys match we return the longer path with the\n      // other merged After stemming we dont want to expand the trees\n\n      var t1 = branch.pos < path.pos ? branch : path;\n      var t2 = branch.pos < path.pos ? path : branch;\n      var diff = t2.pos - t1.pos;\n\n      var candidateParents = [];\n\n      var trees = [];\n      trees.push({ids: t1.ids, diff: diff, parent: null, parentIdx: null});\n      while (trees.length > 0) {\n        var item = trees.pop();\n        if (item.diff === 0) {\n          if (item.ids[0] === t2.ids[0]) {\n            candidateParents.push(item);\n          }\n          continue;\n        }\n        var elements = item.ids[2];\n        for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {\n          trees.push({\n            ids: elements[j],\n            diff: item.diff - 1,\n            parent: item.ids,\n            parentIdx: j\n          });\n        }\n      }\n\n      var el = candidateParents[0];\n\n      if (!el) {\n        restree.push(branch);\n      } else {\n        res = mergeTree(el.ids, t2.ids);\n        el.parent[2][el.parentIdx] = res.tree;\n        restree.push({pos: t1.pos, ids: t1.ids});\n        conflicts = conflicts || res.conflicts;\n        merged = true;\n      }\n    } else {\n      restree.push(branch);\n    }\n  }\n\n  // We didnt find\n  if (!merged) {\n    restree.push(path);\n  }\n\n  restree.sort(sortByPos$1);\n\n  return {\n    tree: restree,\n    conflicts: conflicts || 'internal_node'\n  };\n}\n\n// To ensure we dont grow the revision tree infinitely, we stem old revisions\nfunction stem(tree, depth) {\n  // First we break out the tree into a complete list of root to leaf paths\n  var paths = rootToLeaf(tree);\n  var maybeStem = {};\n\n  var result;\n  for (var i = 0, len = paths.length; i < len; i++) {\n    // Then for each path, we cut off the start of the path based on the\n    // `depth` to stem to, and generate a new set of flat trees\n    var path = paths[i];\n    var stemmed = path.ids;\n    var numStemmed = Math.max(0, stemmed.length - depth);\n    var stemmedNode = {\n      pos: path.pos + numStemmed,\n      ids: pathToTree(stemmed, numStemmed)\n    };\n\n    for (var s = 0; s < numStemmed; s++) {\n      var rev = (path.pos + s) + '-' + stemmed[s].id;\n      maybeStem[rev] = true;\n    }\n\n    // Then we remerge all those flat trees together, ensuring that we dont\n    // connect trees that would go beyond the depth limit\n    if (result) {\n      result = doMerge(result, stemmedNode, true).tree;\n    } else {\n      result = [stemmedNode];\n    }\n  }\n\n  traverseRevTree(result, function (isLeaf, pos, revHash) {\n    // some revisions may have been removed in a branch but not in another\n    delete maybeStem[pos + '-' + revHash];\n  });\n\n  return {\n    tree: result,\n    revs: Object.keys(maybeStem)\n  };\n}\n\nfunction merge(tree, path, depth) {\n  var newTree = doMerge(tree, path);\n  var stemmed = stem(newTree.tree, depth);\n  return {\n    tree: stemmed.tree,\n    stemmedRevs: stemmed.revs,\n    conflicts: newTree.conflicts\n  };\n}\n\n// return true if a rev exists in the rev tree, false otherwise\nfunction revExists(revs, rev) {\n  var toVisit = revs.slice();\n  var splitRev = rev.split('-');\n  var targetPos = parseInt(splitRev[0], 10);\n  var targetId = splitRev[1];\n\n  var node;\n  while ((node = toVisit.pop())) {\n    if (node.pos === targetPos && node.ids[0] === targetId) {\n      return true;\n    }\n    var branches = node.ids[2];\n    for (var i = 0, len = branches.length; i < len; i++) {\n      toVisit.push({pos: node.pos + 1, ids: branches[i]});\n    }\n  }\n  return false;\n}\n\nfunction getTrees(node) {\n  return node.ids;\n}\n\n// check if a specific revision of a doc has been deleted\n//  - metadata: the metadata object from the doc store\n//  - rev: (optional) the revision to check. defaults to winning revision\nfunction isDeleted(metadata, rev) {\n  if (!rev) {\n    rev = winningRev(metadata);\n  }\n  var id = rev.substring(rev.indexOf('-') + 1);\n  var toVisit = metadata.rev_tree.map(getTrees);\n\n  var tree;\n  while ((tree = toVisit.pop())) {\n    if (tree[0] === id) {\n      return !!tree[1].deleted;\n    }\n    toVisit = toVisit.concat(tree[2]);\n  }\n}\n\nfunction isLocalId(id) {\n  return (/^_local/).test(id);\n}\n\nfunction evalFilter(input) {\n  return scopedEval('\"use strict\";\\nreturn ' + input + ';', {});\n}\n\nfunction evalView(input) {\n  var code = [\n    'return function(doc) {',\n    '  \"use strict\";',\n    '  var emitted = false;',\n    '  var emit = function (a, b) {',\n    '    emitted = true;',\n    '  };',\n    '  var view = ' + input + ';',\n    '  view(doc);',\n    '  if (emitted) {',\n    '    return true;',\n    '  }',\n    '};'\n  ].join('\\n');\n\n  return scopedEval(code, {});\n}\n\ninherits(Changes, events.EventEmitter);\n\nfunction tryCatchInChangeListener(self, change) {\n  // isolate try/catches to avoid V8 deoptimizations\n  try {\n    self.emit('change', change);\n  } catch (e) {\n    guardedConsole('error', 'Error in .on(\"change\", function):', e);\n  }\n}\n\nfunction Changes(db, opts, callback) {\n  events.EventEmitter.call(this);\n  var self = this;\n  this.db = db;\n  opts = opts ? clone(opts) : {};\n  var complete = opts.complete = once(function (err, resp) {\n    if (err) {\n      if (listenerCount(self, 'error') > 0) {\n        self.emit('error', err);\n      }\n    } else {\n      self.emit('complete', resp);\n    }\n    self.removeAllListeners();\n    db.removeListener('destroyed', onDestroy);\n  });\n  if (callback) {\n    self.on('complete', function (resp) {\n      callback(null, resp);\n    });\n    self.on('error', callback);\n  }\n  function onDestroy() {\n    self.cancel();\n  }\n  db.once('destroyed', onDestroy);\n\n  opts.onChange = function (change) {\n    /* istanbul ignore if */\n    if (opts.isCancelled) {\n      return;\n    }\n    tryCatchInChangeListener(self, change);\n  };\n\n  var promise = new PouchPromise(function (fulfill, reject) {\n    opts.complete = function (err, res) {\n      if (err) {\n        reject(err);\n      } else {\n        fulfill(res);\n      }\n    };\n  });\n  self.once('cancel', function () {\n    db.removeListener('destroyed', onDestroy);\n    opts.complete(null, {status: 'cancelled'});\n  });\n  this.then = promise.then.bind(promise);\n  this['catch'] = promise['catch'].bind(promise);\n  this.then(function (result) {\n    complete(null, result);\n  }, complete);\n\n\n\n  if (!db.taskqueue.isReady) {\n    db.taskqueue.addTask(function (failed) {\n      if (failed) {\n        opts.complete(failed);\n      } else if (self.isCancelled) {\n        self.emit('cancel');\n      } else {\n        self.doChanges(opts);\n      }\n    });\n  } else {\n    self.doChanges(opts);\n  }\n}\nChanges.prototype.cancel = function () {\n  this.isCancelled = true;\n  if (this.db.taskqueue.isReady) {\n    this.emit('cancel');\n  }\n};\nfunction processChange(doc, metadata, opts) {\n  var changeList = [{rev: doc._rev}];\n  if (opts.style === 'all_docs') {\n    changeList = collectLeaves(metadata.rev_tree)\n    .map(function (x) { return {rev: x.rev}; });\n  }\n  var change = {\n    id: metadata.id,\n    changes: changeList,\n    doc: doc\n  };\n\n  if (isDeleted(metadata, doc._rev)) {\n    change.deleted = true;\n  }\n  if (opts.conflicts) {\n    change.doc._conflicts = collectConflicts(metadata);\n    if (!change.doc._conflicts.length) {\n      delete change.doc._conflicts;\n    }\n  }\n  return change;\n}\n\nChanges.prototype.doChanges = function (opts) {\n  var self = this;\n  var callback = opts.complete;\n\n  opts = clone(opts);\n  if ('live' in opts && !('continuous' in opts)) {\n    opts.continuous = opts.live;\n  }\n  opts.processChange = processChange;\n\n  if (opts.since === 'latest') {\n    opts.since = 'now';\n  }\n  if (!opts.since) {\n    opts.since = 0;\n  }\n  if (opts.since === 'now') {\n    this.db.info().then(function (info) {\n      /* istanbul ignore if */\n      if (self.isCancelled) {\n        callback(null, {status: 'cancelled'});\n        return;\n      }\n      opts.since = info.update_seq;\n      self.doChanges(opts);\n    }, callback);\n    return;\n  }\n\n\n  if (opts.view && !opts.filter) {\n    opts.filter = '_view';\n  }\n\n  if (opts.filter && typeof opts.filter === 'string') {\n    if (opts.filter === '_view') {\n      opts.view = normalizeDesignDocFunctionName(opts.view);\n    } else {\n      opts.filter = normalizeDesignDocFunctionName(opts.filter);\n    }\n\n    if (this.db.type() !== 'http' && !opts.doc_ids) {\n      return this.filterChanges(opts);\n    }\n  }\n\n  if (!('descending' in opts)) {\n    opts.descending = false;\n  }\n\n  // 0 and 1 should return 1 document\n  opts.limit = opts.limit === 0 ? 1 : opts.limit;\n  opts.complete = callback;\n  var newPromise = this.db._changes(opts);\n  /* istanbul ignore else */\n  if (newPromise && typeof newPromise.cancel === 'function') {\n    var cancel = self.cancel;\n    self.cancel = getArguments(function (args) {\n      newPromise.cancel();\n      cancel.apply(this, args);\n    });\n  }\n};\n\nChanges.prototype.filterChanges = function (opts) {\n  var self = this;\n  var callback = opts.complete;\n  if (opts.filter === '_view') {\n    if (!opts.view || typeof opts.view !== 'string') {\n      var err = createError(BAD_REQUEST,\n        '`view` filter parameter not found or invalid.');\n      return callback(err);\n    }\n    // fetch a view from a design doc, make it behave like a filter\n    var viewName = parseDesignDocFunctionName(opts.view);\n    this.db.get('_design/' + viewName[0], function (err, ddoc) {\n      /* istanbul ignore if */\n      if (self.isCancelled) {\n        return callback(null, {status: 'cancelled'});\n      }\n      /* istanbul ignore next */\n      if (err) {\n        return callback(generateErrorFromResponse(err));\n      }\n      var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&\n        ddoc.views[viewName[1]].map;\n      if (!mapFun) {\n        return callback(createError(MISSING_DOC,\n          (ddoc.views ? 'missing json key: ' + viewName[1] :\n            'missing json key: views')));\n      }\n      opts.filter = evalView(mapFun);\n      self.doChanges(opts);\n    });\n  } else {\n    // fetch a filter from a design doc\n    var filterName = parseDesignDocFunctionName(opts.filter);\n    if (!filterName) {\n      return self.doChanges(opts);\n    }\n    this.db.get('_design/' + filterName[0], function (err, ddoc) {\n      /* istanbul ignore if */\n      if (self.isCancelled) {\n        return callback(null, {status: 'cancelled'});\n      }\n      /* istanbul ignore next */\n      if (err) {\n        return callback(generateErrorFromResponse(err));\n      }\n      var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];\n      if (!filterFun) {\n        return callback(createError(MISSING_DOC,\n          ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]\n            : 'missing json key: filters')));\n      }\n      opts.filter = evalFilter(filterFun);\n      self.doChanges(opts);\n    });\n  }\n};\n\n/*\n * A generic pouch adapter\n */\n\nfunction compare(left, right) {\n  return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// returns first element of arr satisfying callback predicate\nfunction arrayFirst(arr, callback) {\n  for (var i = 0; i < arr.length; i++) {\n    if (callback(arr[i], i) === true) {\n      return arr[i];\n    }\n  }\n}\n\n// Wrapper for functions that call the bulkdocs api with a single doc,\n// if the first result is an error, return an error\nfunction yankError(callback) {\n  return function (err, results) {\n    if (err || (results[0] && results[0].error)) {\n      callback(err || results[0]);\n    } else {\n      callback(null, results.length ? results[0]  : results);\n    }\n  };\n}\n\n// clean docs given to us by the user\nfunction cleanDocs(docs) {\n  for (var i = 0; i < docs.length; i++) {\n    var doc = docs[i];\n    if (doc._deleted) {\n      delete doc._attachments; // ignore atts for deleted docs\n    } else if (doc._attachments) {\n      // filter out extraneous keys from _attachments\n      var atts = Object.keys(doc._attachments);\n      for (var j = 0; j < atts.length; j++) {\n        var att = atts[j];\n        doc._attachments[att] = pick(doc._attachments[att],\n          ['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);\n      }\n    }\n  }\n}\n\n// compare two docs, first by _id then by _rev\nfunction compareByIdThenRev(a, b) {\n  var idCompare = compare(a._id, b._id);\n  if (idCompare !== 0) {\n    return idCompare;\n  }\n  var aStart = a._revisions ? a._revisions.start : 0;\n  var bStart = b._revisions ? b._revisions.start : 0;\n  return compare(aStart, bStart);\n}\n\n// for every node in a revision tree computes its distance from the closest\n// leaf\nfunction computeHeight(revs) {\n  var height = {};\n  var edges = [];\n  traverseRevTree(revs, function (isLeaf, pos, id, prnt) {\n    var rev = pos + \"-\" + id;\n    if (isLeaf) {\n      height[rev] = 0;\n    }\n    if (prnt !== undefined) {\n      edges.push({from: prnt, to: rev});\n    }\n    return rev;\n  });\n\n  edges.reverse();\n  edges.forEach(function (edge) {\n    if (height[edge.from] === undefined) {\n      height[edge.from] = 1 + height[edge.to];\n    } else {\n      height[edge.from] = Math.min(height[edge.from], 1 + height[edge.to]);\n    }\n  });\n  return height;\n}\n\nfunction allDocsKeysQuery(api, opts, callback) {\n  var keys =  ('limit' in opts) ?\n      opts.keys.slice(opts.skip, opts.limit + opts.skip) :\n      (opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;\n  if (opts.descending) {\n    keys.reverse();\n  }\n  if (!keys.length) {\n    return api._allDocs({limit: 0}, callback);\n  }\n  var finalResults = {\n    offset: opts.skip\n  };\n  return PouchPromise.all(keys.map(function (key) {\n    var subOpts = jsExtend.extend({key: key, deleted: 'ok'}, opts);\n    ['limit', 'skip', 'keys'].forEach(function (optKey) {\n      delete subOpts[optKey];\n    });\n    return new PouchPromise(function (resolve, reject) {\n      api._allDocs(subOpts, function (err, res) {\n        /* istanbul ignore if */\n        if (err) {\n          return reject(err);\n        }\n        finalResults.total_rows = res.total_rows;\n        resolve(res.rows[0] || {key: key, error: 'not_found'});\n      });\n    });\n  })).then(function (results) {\n    finalResults.rows = results;\n    return finalResults;\n  });\n}\n\n// all compaction is done in a queue, to avoid attaching\n// too many listeners at once\nfunction doNextCompaction(self) {\n  var task = self._compactionQueue[0];\n  var opts = task.opts;\n  var callback = task.callback;\n  self.get('_local/compaction').catch(function () {\n    return false;\n  }).then(function (doc) {\n    if (doc && doc.last_seq) {\n      opts.last_seq = doc.last_seq;\n    }\n    self._compact(opts, function (err, res) {\n      /* istanbul ignore if */\n      if (err) {\n        callback(err);\n      } else {\n        callback(null, res);\n      }\n      process.nextTick(function () {\n        self._compactionQueue.shift();\n        if (self._compactionQueue.length) {\n          doNextCompaction(self);\n        }\n      });\n    });\n  });\n}\n\nfunction attachmentNameError(name) {\n  if (name.charAt(0) === '_') {\n    return name + 'is not a valid attachment name, attachment ' +\n      'names cannot start with \\'_\\'';\n  }\n  return false;\n}\n\ninherits(AbstractPouchDB, events.EventEmitter);\n\nfunction AbstractPouchDB() {\n  events.EventEmitter.call(this);\n}\n\nAbstractPouchDB.prototype.post =\n  adapterFun('post', function (doc, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  if (typeof doc !== 'object' || Array.isArray(doc)) {\n    return callback(createError(NOT_AN_OBJECT));\n  }\n  this.bulkDocs({docs: [doc]}, opts, yankError(callback));\n});\n\nAbstractPouchDB.prototype.put = adapterFun('put', function (doc, opts, cb) {\n  if (typeof opts === 'function') {\n    cb = opts;\n    opts = {};\n  }\n  if (typeof doc !== 'object' || Array.isArray(doc)) {\n    return cb(createError(NOT_AN_OBJECT));\n  }\n  invalidIdError(doc._id);\n  if (isLocalId(doc._id) && typeof this._putLocal === 'function') {\n    if (doc._deleted) {\n      return this._removeLocal(doc, cb);\n    } else {\n      return this._putLocal(doc, cb);\n    }\n  }\n  if (typeof this._put === 'function' && opts.new_edits !== false) {\n    this._put(doc, opts, cb);\n  } else {\n    this.bulkDocs({docs: [doc]}, opts, yankError(cb));\n  }\n});\n\nAbstractPouchDB.prototype.putAttachment =\n  adapterFun('putAttachment', function (docId, attachmentId, rev,\n                                              blob, type) {\n  var api = this;\n  if (typeof type === 'function') {\n    type = blob;\n    blob = rev;\n    rev = null;\n  }\n  // Lets fix in https://github.com/pouchdb/pouchdb/issues/3267\n  /* istanbul ignore if */\n  if (typeof type === 'undefined') {\n    type = blob;\n    blob = rev;\n    rev = null;\n  }\n\n  function createAttachment(doc) {\n    var prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;\n    doc._attachments = doc._attachments || {};\n    doc._attachments[attachmentId] = {\n      content_type: type,\n      data: blob,\n      revpos: ++prevrevpos\n    };\n    return api.put(doc);\n  }\n\n  return api.get(docId).then(function (doc) {\n    if (doc._rev !== rev) {\n      throw createError(REV_CONFLICT);\n    }\n\n    return createAttachment(doc);\n  }, function (err) {\n     // create new doc\n    /* istanbul ignore else */\n    if (err.reason === MISSING_DOC.message) {\n      return createAttachment({_id: docId});\n    } else {\n      throw err;\n    }\n  });\n});\n\nAbstractPouchDB.prototype.removeAttachment =\n  adapterFun('removeAttachment', function (docId, attachmentId, rev,\n                                                 callback) {\n  var self = this;\n  self.get(docId, function (err, obj) {\n    /* istanbul ignore if */\n    if (err) {\n      callback(err);\n      return;\n    }\n    if (obj._rev !== rev) {\n      callback(createError(REV_CONFLICT));\n      return;\n    }\n    /* istanbul ignore if */\n    if (!obj._attachments) {\n      return callback();\n    }\n    delete obj._attachments[attachmentId];\n    if (Object.keys(obj._attachments).length === 0) {\n      delete obj._attachments;\n    }\n    self.put(obj, callback);\n  });\n});\n\nAbstractPouchDB.prototype.remove =\n  adapterFun('remove', function (docOrId, optsOrRev, opts, callback) {\n  var doc;\n  if (typeof optsOrRev === 'string') {\n    // id, rev, opts, callback style\n    doc = {\n      _id: docOrId,\n      _rev: optsOrRev\n    };\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n  } else {\n    // doc, opts, callback style\n    doc = docOrId;\n    if (typeof optsOrRev === 'function') {\n      callback = optsOrRev;\n      opts = {};\n    } else {\n      callback = opts;\n      opts = optsOrRev;\n    }\n  }\n  opts = opts || {};\n  opts.was_delete = true;\n  var newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};\n  newDoc._deleted = true;\n  if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {\n    return this._removeLocal(doc, callback);\n  }\n  this.bulkDocs({docs: [newDoc]}, opts, yankError(callback));\n});\n\nAbstractPouchDB.prototype.revsDiff =\n  adapterFun('revsDiff', function (req, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  var ids = Object.keys(req);\n\n  if (!ids.length) {\n    return callback(null, {});\n  }\n\n  var count = 0;\n  var missing = new _Map();\n\n  function addToMissing(id, revId) {\n    if (!missing.has(id)) {\n      missing.set(id, {missing: []});\n    }\n    missing.get(id).missing.push(revId);\n  }\n\n  function processDoc(id, rev_tree) {\n    // Is this fast enough? Maybe we should switch to a set simulated by a map\n    var missingForId = req[id].slice(0);\n    traverseRevTree(rev_tree, function (isLeaf, pos, revHash, ctx,\n      opts) {\n        var rev = pos + '-' + revHash;\n        var idx = missingForId.indexOf(rev);\n        if (idx === -1) {\n          return;\n        }\n\n        missingForId.splice(idx, 1);\n        /* istanbul ignore if */\n        if (opts.status !== 'available') {\n          addToMissing(id, rev);\n        }\n      });\n\n    // Traversing the tree is synchronous, so now `missingForId` contains\n    // revisions that were not found in the tree\n    missingForId.forEach(function (rev) {\n      addToMissing(id, rev);\n    });\n  }\n\n  ids.map(function (id) {\n    this._getRevisionTree(id, function (err, rev_tree) {\n      if (err && err.status === 404 && err.message === 'missing') {\n        missing.set(id, {missing: req[id]});\n      } else if (err) {\n        /* istanbul ignore next */\n        return callback(err);\n      } else {\n        processDoc(id, rev_tree);\n      }\n\n      if (++count === ids.length) {\n        // convert LazyMap to object\n        var missingObj = {};\n        missing.forEach(function (value, key) {\n          missingObj[key] = value;\n        });\n        return callback(null, missingObj);\n      }\n    });\n  }, this);\n});\n\n// _bulk_get API for faster replication, as described in\n// https://github.com/apache/couchdb-chttpd/pull/33\n// At the \"abstract\" level, it will just run multiple get()s in\n// parallel, because this isn't much of a performance cost\n// for local databases (except the cost of multiple transactions, which is\n// small). The http adapter overrides this in order\n// to do a more efficient single HTTP request.\nAbstractPouchDB.prototype.bulkGet =\n  adapterFun('bulkGet', function (opts, callback) {\n  bulkGet(this, opts, callback);\n});\n\n// compact one document and fire callback\n// by compacting we mean removing all revisions which\n// are further from the leaf in revision tree than max_height\nAbstractPouchDB.prototype.compactDocument =\n  adapterFun('compactDocument', function (docId, maxHeight, callback) {\n  var self = this;\n  this._getRevisionTree(docId, function (err, revTree) {\n    /* istanbul ignore if */\n    if (err) {\n      return callback(err);\n    }\n    var height = computeHeight(revTree);\n    var candidates = [];\n    var revs = [];\n    Object.keys(height).forEach(function (rev) {\n      if (height[rev] > maxHeight) {\n        candidates.push(rev);\n      }\n    });\n\n    traverseRevTree(revTree, function (isLeaf, pos, revHash, ctx, opts) {\n      var rev = pos + '-' + revHash;\n      if (opts.status === 'available' && candidates.indexOf(rev) !== -1) {\n        revs.push(rev);\n      }\n    });\n    self._doCompaction(docId, revs, callback);\n  });\n});\n\n// compact the whole database using single document\n// compaction\nAbstractPouchDB.prototype.compact =\n  adapterFun('compact', function (opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n\n  var self = this;\n  opts = opts || {};\n\n  self._compactionQueue = self._compactionQueue || [];\n  self._compactionQueue.push({opts: opts, callback: callback});\n  if (self._compactionQueue.length === 1) {\n    doNextCompaction(self);\n  }\n});\nAbstractPouchDB.prototype._compact = function (opts, callback) {\n  var self = this;\n  var changesOpts = {\n    return_docs: false,\n    last_seq: opts.last_seq || 0\n  };\n  var promises = [];\n\n  function onChange(row) {\n    promises.push(self.compactDocument(row.id, 0));\n  }\n  function onComplete(resp) {\n    var lastSeq = resp.last_seq;\n    PouchPromise.all(promises).then(function () {\n      return upsert(self, '_local/compaction', function deltaFunc(doc) {\n        if (!doc.last_seq || doc.last_seq < lastSeq) {\n          doc.last_seq = lastSeq;\n          return doc;\n        }\n        return false; // somebody else got here first, don't update\n      });\n    }).then(function () {\n      callback(null, {ok: true});\n    }).catch(callback);\n  }\n  self.changes(changesOpts)\n    .on('change', onChange)\n    .on('complete', onComplete)\n    .on('error', callback);\n};\n\n/* Begin api wrappers. Specific functionality to storage belongs in the\n   _[method] */\nAbstractPouchDB.prototype.get = adapterFun('get', function (id, opts, cb) {\n  if (typeof opts === 'function') {\n    cb = opts;\n    opts = {};\n  }\n  if (typeof id !== 'string') {\n    return cb(createError(INVALID_ID));\n  }\n  if (isLocalId(id) && typeof this._getLocal === 'function') {\n    return this._getLocal(id, cb);\n  }\n  var leaves = [], self = this;\n\n  function finishOpenRevs() {\n    var result = [];\n    var count = leaves.length;\n    /* istanbul ignore if */\n    if (!count) {\n      return cb(null, result);\n    }\n    // order with open_revs is unspecified\n    leaves.forEach(function (leaf) {\n      self.get(id, {\n        rev: leaf,\n        revs: opts.revs,\n        attachments: opts.attachments\n      }, function (err, doc) {\n        if (!err) {\n          result.push({ok: doc});\n        } else {\n          result.push({missing: leaf});\n        }\n        count--;\n        if (!count) {\n          cb(null, result);\n        }\n      });\n    });\n  }\n\n  if (opts.open_revs) {\n    if (opts.open_revs === \"all\") {\n      this._getRevisionTree(id, function (err, rev_tree) {\n        if (err) {\n          return cb(err);\n        }\n        leaves = collectLeaves(rev_tree).map(function (leaf) {\n          return leaf.rev;\n        });\n        finishOpenRevs();\n      });\n    } else {\n      if (Array.isArray(opts.open_revs)) {\n        leaves = opts.open_revs;\n        for (var i = 0; i < leaves.length; i++) {\n          var l = leaves[i];\n          // looks like it's the only thing couchdb checks\n          if (!(typeof (l) === \"string\" && /^\\d+-/.test(l))) {\n            return cb(createError(INVALID_REV));\n          }\n        }\n        finishOpenRevs();\n      } else {\n        return cb(createError(UNKNOWN_ERROR, 'function_clause'));\n      }\n    }\n    return; // open_revs does not like other options\n  }\n\n  return this._get(id, opts, function (err, result) {\n    if (err) {\n      return cb(err);\n    }\n\n    var doc = result.doc;\n    var metadata = result.metadata;\n    var ctx = result.ctx;\n\n    if (opts.conflicts) {\n      var conflicts = collectConflicts(metadata);\n      if (conflicts.length) {\n        doc._conflicts = conflicts;\n      }\n    }\n\n    if (isDeleted(metadata, doc._rev)) {\n      doc._deleted = true;\n    }\n\n    if (opts.revs || opts.revs_info) {\n      var paths = rootToLeaf(metadata.rev_tree);\n      var path = arrayFirst(paths, function (arr) {\n        return arr.ids.map(function (x) { return x.id; })\n          .indexOf(doc._rev.split('-')[1]) !== -1;\n      });\n\n      var indexOfRev = path.ids.map(function (x) {return x.id; })\n        .indexOf(doc._rev.split('-')[1]) + 1;\n      var howMany = path.ids.length - indexOfRev;\n      path.ids.splice(indexOfRev, howMany);\n      path.ids.reverse();\n\n      if (opts.revs) {\n        doc._revisions = {\n          start: (path.pos + path.ids.length) - 1,\n          ids: path.ids.map(function (rev) {\n            return rev.id;\n          })\n        };\n      }\n      if (opts.revs_info) {\n        var pos =  path.pos + path.ids.length;\n        doc._revs_info = path.ids.map(function (rev) {\n          pos--;\n          return {\n            rev: pos + '-' + rev.id,\n            status: rev.opts.status\n          };\n        });\n      }\n    }\n\n    if (opts.attachments && doc._attachments) {\n      var attachments = doc._attachments;\n      var count = Object.keys(attachments).length;\n      if (count === 0) {\n        return cb(null, doc);\n      }\n      Object.keys(attachments).forEach(function (key) {\n        this._getAttachment(doc._id, key, attachments[key], {\n          // Previously the revision handling was done in adapter.js\n          // getAttachment, however since idb-next doesnt we need to\n          // pass the rev through\n          rev: doc._rev,\n          binary: opts.binary,\n          ctx: ctx\n        }, function (err, data) {\n          var att = doc._attachments[key];\n          att.data = data;\n          delete att.stub;\n          delete att.length;\n          if (!--count) {\n            cb(null, doc);\n          }\n        });\n      }, self);\n    } else {\n      if (doc._attachments) {\n        for (var key in doc._attachments) {\n          /* istanbul ignore else */\n          if (doc._attachments.hasOwnProperty(key)) {\n            doc._attachments[key].stub = true;\n          }\n        }\n      }\n      cb(null, doc);\n    }\n  });\n});\n\n// TODO: I dont like this, it forces an extra read for every\n// attachment read and enforces a confusing api between\n// adapter.js and the adapter implementation\nAbstractPouchDB.prototype.getAttachment =\n  adapterFun('getAttachment', function (docId, attachmentId, opts, callback) {\n  var self = this;\n  if (opts instanceof Function) {\n    callback = opts;\n    opts = {};\n  }\n  this._get(docId, opts, function (err, res) {\n    if (err) {\n      return callback(err);\n    }\n    if (res.doc._attachments && res.doc._attachments[attachmentId]) {\n      opts.ctx = res.ctx;\n      opts.binary = true;\n      self._getAttachment(docId, attachmentId,\n                          res.doc._attachments[attachmentId], opts, callback);\n    } else {\n      return callback(createError(MISSING_DOC));\n    }\n  });\n});\n\nAbstractPouchDB.prototype.allDocs =\n  adapterFun('allDocs', function (opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  opts.skip = typeof opts.skip !== 'undefined' ? opts.skip : 0;\n  if (opts.start_key) {\n    opts.startkey = opts.start_key;\n  }\n  if (opts.end_key) {\n    opts.endkey = opts.end_key;\n  }\n  if ('keys' in opts) {\n    if (!Array.isArray(opts.keys)) {\n      return callback(new TypeError('options.keys must be an array'));\n    }\n    var incompatibleOpt =\n      ['startkey', 'endkey', 'key'].filter(function (incompatibleOpt) {\n      return incompatibleOpt in opts;\n    })[0];\n    if (incompatibleOpt) {\n      callback(createError(QUERY_PARSE_ERROR,\n        'Query parameter `' + incompatibleOpt +\n        '` is not compatible with multi-get'\n      ));\n      return;\n    }\n    if (this.type() !== 'http') {\n      return allDocsKeysQuery(this, opts, callback);\n    }\n  }\n\n  return this._allDocs(opts, callback);\n});\n\nAbstractPouchDB.prototype.changes = function (opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return new Changes(this, opts, callback);\n};\n\nAbstractPouchDB.prototype.close = adapterFun('close', function (callback) {\n  this._closed = true;\n  return this._close(callback);\n});\n\nAbstractPouchDB.prototype.info = adapterFun('info', function (callback) {\n  var self = this;\n  this._info(function (err, info) {\n    if (err) {\n      return callback(err);\n    }\n    // assume we know better than the adapter, unless it informs us\n    info.db_name = info.db_name || self.name;\n    info.auto_compaction = !!(self.auto_compaction && self.type() !== 'http');\n    info.adapter = self.type();\n    callback(null, info);\n  });\n});\n\nAbstractPouchDB.prototype.id = adapterFun('id', function (callback) {\n  return this._id(callback);\n});\n\n/* istanbul ignore next */\nAbstractPouchDB.prototype.type = function () {\n  return (typeof this._type === 'function') ? this._type() : this.adapter;\n};\n\nAbstractPouchDB.prototype.bulkDocs =\n  adapterFun('bulkDocs', function (req, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n\n  opts = opts || {};\n\n  if (Array.isArray(req)) {\n    req = {\n      docs: req\n    };\n  }\n\n  if (!req || !req.docs || !Array.isArray(req.docs)) {\n    return callback(createError(MISSING_BULK_DOCS));\n  }\n\n  for (var i = 0; i < req.docs.length; ++i) {\n    if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {\n      return callback(createError(NOT_AN_OBJECT));\n    }\n  }\n\n  var attachmentError;\n  req.docs.forEach(function (doc) {\n    if (doc._attachments) {\n      Object.keys(doc._attachments).forEach(function (name) {\n        attachmentError = attachmentError || attachmentNameError(name);\n      });\n    }\n  });\n\n  if (attachmentError) {\n    return callback(createError(BAD_REQUEST, attachmentError));\n  }\n\n  if (!('new_edits' in opts)) {\n    if ('new_edits' in req) {\n      opts.new_edits = req.new_edits;\n    } else {\n      opts.new_edits = true;\n    }\n  }\n\n  if (!opts.new_edits && this.type() !== 'http') {\n    // ensure revisions of the same doc are sorted, so that\n    // the local adapter processes them correctly (#2935)\n    req.docs.sort(compareByIdThenRev);\n  }\n\n  cleanDocs(req.docs);\n\n  return this._bulkDocs(req, opts, function (err, res) {\n    if (err) {\n      return callback(err);\n    }\n    if (!opts.new_edits) {\n      // this is what couch does when new_edits is false\n      res = res.filter(function (x) {\n        return x.error;\n      });\n    }\n    callback(null, res);\n  });\n});\n\nAbstractPouchDB.prototype.registerDependentDatabase =\n  adapterFun('registerDependentDatabase', function (dependentDb,\n                                                          callback) {\n  var depDB = new this.constructor(dependentDb, this.__opts);\n\n  function diffFun(doc) {\n    doc.dependentDbs = doc.dependentDbs || {};\n    if (doc.dependentDbs[dependentDb]) {\n      return false; // no update required\n    }\n    doc.dependentDbs[dependentDb] = true;\n    return doc;\n  }\n  upsert(this, '_local/_pouch_dependentDbs', diffFun)\n    .then(function () {\n      callback(null, {db: depDB});\n    }).catch(callback);\n});\n\nAbstractPouchDB.prototype.destroy =\n  adapterFun('destroy', function (opts, callback) {\n\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n\n  var self = this;\n  var usePrefix = 'use_prefix' in self ? self.use_prefix : true;\n\n  function destroyDb() {\n    // call destroy method of the particular adaptor\n    self._destroy(opts, function (err, resp) {\n      if (err) {\n        return callback(err);\n      }\n      self._destroyed = true;\n      self.emit('destroyed');\n      callback(null, resp || { 'ok': true });\n    });\n  }\n\n  if (self.type() === 'http') {\n    // no need to check for dependent DBs if it's a remote DB\n    return destroyDb();\n  }\n\n  self.get('_local/_pouch_dependentDbs', function (err, localDoc) {\n    if (err) {\n      /* istanbul ignore if */\n      if (err.status !== 404) {\n        return callback(err);\n      } else { // no dependencies\n        return destroyDb();\n      }\n    }\n    var dependentDbs = localDoc.dependentDbs;\n    var PouchDB = self.constructor;\n    var deletedMap = Object.keys(dependentDbs).map(function (name) {\n      // use_prefix is only false in the browser\n      /* istanbul ignore next */\n      var trueName = usePrefix ?\n        name.replace(new RegExp('^' + PouchDB.prefix), '') : name;\n      return new PouchDB(trueName, self.__opts).destroy();\n    });\n    PouchPromise.all(deletedMap).then(destroyDb, callback);\n  });\n});\n\nfunction TaskQueue() {\n  this.isReady = false;\n  this.failed = false;\n  this.queue = [];\n}\n\nTaskQueue.prototype.execute = function () {\n  var fun;\n  if (this.failed) {\n    while ((fun = this.queue.shift())) {\n      fun(this.failed);\n    }\n  } else {\n    while ((fun = this.queue.shift())) {\n      fun();\n    }\n  }\n};\n\nTaskQueue.prototype.fail = function (err) {\n  this.failed = err;\n  this.execute();\n};\n\nTaskQueue.prototype.ready = function (db) {\n  this.isReady = true;\n  this.db = db;\n  this.execute();\n};\n\nTaskQueue.prototype.addTask = function (fun) {\n  this.queue.push(fun);\n  if (this.failed) {\n    this.execute();\n  }\n};\n\nfunction parseAdapter(name, opts) {\n  var match = name.match(/([a-z\\-]*):\\/\\/(.*)/);\n  if (match) {\n    // the http adapter expects the fully qualified name\n    name = /http(s?)/.test(match[1]) ? match[1] + '://' + match[2] : match[2];\n    return {name: name, adapter: match[1]};\n  }\n\n  // check for browsers that have been upgraded from websql-only to websql+idb\n  var skipIdb = 'idb' in PouchDB.adapters && 'websql' in PouchDB.adapters &&\n    hasLocalStorage() &&\n    localStorage['_pouch__websqldb_' + PouchDB.prefix + name];\n\n  var adapterName;\n\n  if (opts.adapter) {\n    adapterName = opts.adapter;\n  } else if (typeof opts !== 'undefined' && opts.db) {\n    adapterName = 'leveldb';\n  } else { // automatically determine adapter\n    for (var i = 0; i < PouchDB.preferredAdapters.length; ++i) {\n      adapterName = PouchDB.preferredAdapters[i];\n      /* istanbul ignore if */\n      if (skipIdb && adapterName === 'idb') {\n        // log it, because this can be confusing during development\n        guardedConsole('log', 'PouchDB is downgrading \"' + name + '\" to WebSQL to' +\n          ' avoid data loss, because it was already opened with WebSQL.');\n        continue; // keep using websql to avoid user data loss\n      }\n      break;\n    }\n  }\n\n  var adapter = PouchDB.adapters[adapterName];\n\n  // if adapter is invalid, then an error will be thrown later\n  var usePrefix = (adapter && 'use_prefix' in adapter) ?\n    adapter.use_prefix : true;\n\n  return {\n    name: usePrefix ? (PouchDB.prefix + name) : name,\n    adapter: adapterName\n  };\n}\n\n// OK, so here's the deal. Consider this code:\n//     var db1 = new PouchDB('foo');\n//     var db2 = new PouchDB('foo');\n//     db1.destroy();\n// ^ these two both need to emit 'destroyed' events,\n// as well as the PouchDB constructor itself.\n// So we have one db object (whichever one got destroy() called on it)\n// responsible for emitting the initial event, which then gets emitted\n// by the constructor, which then broadcasts it to any other dbs\n// that may have been created with the same name.\nfunction prepareForDestruction(self) {\n\n  var destructionListeners = self.constructor._destructionListeners;\n\n  function onDestroyed() {\n    self.constructor.emit('destroyed', self.name);\n  }\n\n  function onConstructorDestroyed() {\n    self.removeListener('destroyed', onDestroyed);\n    self.emit('destroyed', self);\n  }\n\n  self.once('destroyed', onDestroyed);\n\n  // in setup.js, the constructor is primed to listen for destroy events\n  if (!destructionListeners.has(self.name)) {\n    destructionListeners.set(self.name, []);\n  }\n  destructionListeners.get(self.name).push(onConstructorDestroyed);\n}\n\ninherits(PouchDB, AbstractPouchDB);\nfunction PouchDB(name, opts) {\n  // In Node our test suite only tests this for PouchAlt unfortunately\n  /* istanbul ignore if */\n  if (!(this instanceof PouchDB)) {\n    return new PouchDB(name, opts);\n  }\n\n  var self = this;\n  opts = opts || {};\n\n  if (name && typeof name === 'object') {\n    opts = name;\n    name = opts.name;\n    delete opts.name;\n  }\n\n  this.__opts = opts = clone(opts);\n\n  self.auto_compaction = opts.auto_compaction;\n  self.prefix = PouchDB.prefix;\n\n  if (typeof name !== 'string') {\n    throw new Error('Missing/invalid DB name');\n  }\n\n  var prefixedName = (opts.prefix || '') + name;\n  var backend = parseAdapter(prefixedName, opts);\n\n  opts.name = backend.name;\n  opts.adapter = opts.adapter || backend.adapter;\n\n  self.name = name;\n  self._adapter = opts.adapter;\n  debug('pouchdb:adapter')('Picked adapter: ' + opts.adapter);\n\n  if (!PouchDB.adapters[opts.adapter] ||\n      !PouchDB.adapters[opts.adapter].valid()) {\n    throw new Error('Invalid Adapter: ' + opts.adapter);\n  }\n\n  AbstractPouchDB.call(self);\n  self.taskqueue = new TaskQueue();\n\n  self.adapter = opts.adapter;\n\n  PouchDB.adapters[opts.adapter].call(self, opts, function (err) {\n    if (err) {\n      return self.taskqueue.fail(err);\n    }\n    prepareForDestruction(self);\n\n    self.emit('created', self);\n    PouchDB.emit('created', self.name);\n    self.taskqueue.ready(self);\n  });\n\n}\n\nPouchDB.debug = debug;\n\nPouchDB.adapters = {};\nPouchDB.preferredAdapters = [];\n\nPouchDB.prefix = '_pouch_';\n\nvar eventEmitter = new events.EventEmitter();\n\nfunction setUpEventEmitter(Pouch) {\n  Object.keys(events.EventEmitter.prototype).forEach(function (key) {\n    if (typeof events.EventEmitter.prototype[key] === 'function') {\n      Pouch[key] = eventEmitter[key].bind(eventEmitter);\n    }\n  });\n\n  // these are created in constructor.js, and allow us to notify each DB with\n  // the same name that it was destroyed, via the constructor object\n  var destructListeners = Pouch._destructionListeners = new _Map();\n  Pouch.on('destroyed', function onConstructorDestroyed(name) {\n    destructListeners.get(name).forEach(function (callback) {\n      callback();\n    });\n    destructListeners.delete(name);\n  });\n}\n\nsetUpEventEmitter(PouchDB);\n\nPouchDB.adapter = function (id, obj, addToPreferredAdapters) {\n  /* istanbul ignore else */\n  if (obj.valid()) {\n    PouchDB.adapters[id] = obj;\n    if (addToPreferredAdapters) {\n      PouchDB.preferredAdapters.push(id);\n    }\n  }\n};\n\nPouchDB.plugin = function (obj) {\n  if (typeof obj === 'function') { // function style for plugins\n    obj(PouchDB);\n  } else if (typeof obj !== 'object' || Object.keys(obj).length === 0){\n    throw new Error('Invalid plugin: object passed in is empty or not an object');\n  } else {\n    Object.keys(obj).forEach(function (id) { // object style for plugins\n      PouchDB.prototype[id] = obj[id];\n    });\n  }\n  return PouchDB;\n};\n\nPouchDB.defaults = function (defaultOpts) {\n  function PouchAlt(name, opts) {\n    if (!(this instanceof PouchAlt)) {\n      return new PouchAlt(name, opts);\n    }\n\n    opts = opts || {};\n\n    if (name && typeof name === 'object') {\n      opts = name;\n      name = opts.name;\n      delete opts.name;\n    }\n\n    opts = jsExtend.extend({}, defaultOpts, opts);\n    PouchDB.call(this, name, opts);\n  }\n\n  inherits(PouchAlt, PouchDB);\n\n  PouchAlt.preferredAdapters = PouchDB.preferredAdapters.slice();\n  Object.keys(PouchDB).forEach(function (key) {\n    if (!(key in PouchAlt)) {\n      PouchAlt[key] = PouchDB[key];\n    }\n  });\n\n  return PouchAlt;\n};\n\n// managed automatically by set-version.js\nvar version = \"6.1.0-prerelease\";\n\nPouchDB.version = version;\n\nfunction toObject(array) {\n  return array.reduce(function (obj, item) {\n    obj[item] = true;\n    return obj;\n  }, {});\n}\n// List of top level reserved words for doc\nvar reservedWords = toObject([\n  '_id',\n  '_rev',\n  '_attachments',\n  '_deleted',\n  '_revisions',\n  '_revs_info',\n  '_conflicts',\n  '_deleted_conflicts',\n  '_local_seq',\n  '_rev_tree',\n  //replication documents\n  '_replication_id',\n  '_replication_state',\n  '_replication_state_time',\n  '_replication_state_reason',\n  '_replication_stats',\n  // Specific to Couchbase Sync Gateway\n  '_removed'\n]);\n\n// List of reserved words that should end up the document\nvar dataWords = toObject([\n  '_attachments',\n  //replication documents\n  '_replication_id',\n  '_replication_state',\n  '_replication_state_time',\n  '_replication_state_reason',\n  '_replication_stats'\n]);\n\nfunction parseRevisionInfo(rev) {\n  if (!/^\\d+\\-./.test(rev)) {\n    return createError(INVALID_REV);\n  }\n  var idx = rev.indexOf('-');\n  var left = rev.substring(0, idx);\n  var right = rev.substring(idx + 1);\n  return {\n    prefix: parseInt(left, 10),\n    id: right\n  };\n}\n\nfunction makeRevTreeFromRevisions(revisions, opts) {\n  var pos = revisions.start - revisions.ids.length + 1;\n\n  var revisionIds = revisions.ids;\n  var ids = [revisionIds[0], opts, []];\n\n  for (var i = 1, len = revisionIds.length; i < len; i++) {\n    ids = [revisionIds[i], {status: 'missing'}, [ids]];\n  }\n\n  return [{\n    pos: pos,\n    ids: ids\n  }];\n}\n\n// Preprocess documents, parse their revisions, assign an id and a\n// revision for new writes that are missing them, etc\nfunction parseDoc(doc, newEdits) {\n\n  var nRevNum;\n  var newRevId;\n  var revInfo;\n  var opts = {status: 'available'};\n  if (doc._deleted) {\n    opts.deleted = true;\n  }\n\n  if (newEdits) {\n    if (!doc._id) {\n      doc._id = uuid();\n    }\n    newRevId = uuid(32, 16).toLowerCase();\n    if (doc._rev) {\n      revInfo = parseRevisionInfo(doc._rev);\n      if (revInfo.error) {\n        return revInfo;\n      }\n      doc._rev_tree = [{\n        pos: revInfo.prefix,\n        ids: [revInfo.id, {status: 'missing'}, [[newRevId, opts, []]]]\n      }];\n      nRevNum = revInfo.prefix + 1;\n    } else {\n      doc._rev_tree = [{\n        pos: 1,\n        ids : [newRevId, opts, []]\n      }];\n      nRevNum = 1;\n    }\n  } else {\n    if (doc._revisions) {\n      doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);\n      nRevNum = doc._revisions.start;\n      newRevId = doc._revisions.ids[0];\n    }\n    if (!doc._rev_tree) {\n      revInfo = parseRevisionInfo(doc._rev);\n      if (revInfo.error) {\n        return revInfo;\n      }\n      nRevNum = revInfo.prefix;\n      newRevId = revInfo.id;\n      doc._rev_tree = [{\n        pos: nRevNum,\n        ids: [newRevId, opts, []]\n      }];\n    }\n  }\n\n  invalidIdError(doc._id);\n\n  doc._rev = nRevNum + '-' + newRevId;\n\n  var result = {metadata : {}, data : {}};\n  for (var key in doc) {\n    /* istanbul ignore else */\n    if (Object.prototype.hasOwnProperty.call(doc, key)) {\n      var specialKey = key[0] === '_';\n      if (specialKey && !reservedWords[key]) {\n        var error = createError(DOC_VALIDATION, key);\n        error.message = DOC_VALIDATION.message + ': ' + key;\n        throw error;\n      } else if (specialKey && !dataWords[key]) {\n        result.metadata[key.slice(1)] = doc[key];\n      } else {\n        result.data[key] = doc[key];\n      }\n    }\n  }\n  return result;\n}\n\nvar atob$1 = function (str) {\n  return atob(str);\n};\n\nvar btoa$1 = function (str) {\n  return btoa(str);\n};\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor (e.g.\n// old QtWebKit versions, Android < 4.4).\nfunction createBlob(parts, properties) {\n  /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n  parts = parts || [];\n  properties = properties || {};\n  try {\n    return new Blob(parts, properties);\n  } catch (e) {\n    if (e.name !== \"TypeError\") {\n      throw e;\n    }\n    var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\n                  typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\n                  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :\n                  WebKitBlobBuilder;\n    var builder = new Builder();\n    for (var i = 0; i < parts.length; i += 1) {\n      builder.append(parts[i]);\n    }\n    return builder.getBlob(properties.type);\n  }\n}\n\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction binaryStringToArrayBuffer(bin) {\n  var length = bin.length;\n  var buf = new ArrayBuffer(length);\n  var arr = new Uint8Array(buf);\n  for (var i = 0; i < length; i++) {\n    arr[i] = bin.charCodeAt(i);\n  }\n  return buf;\n}\n\nfunction binStringToBluffer(binString, type) {\n  return createBlob([binaryStringToArrayBuffer(binString)], {type: type});\n}\n\nfunction b64ToBluffer(b64, type) {\n  return binStringToBluffer(atob$1(b64), type);\n}\n\n//Can't find original post, but this is close\n//http://stackoverflow.com/questions/6965107/ (continues on next line)\n//converting-between-strings-and-arraybuffers\nfunction arrayBufferToBinaryString(buffer) {\n  var binary = '';\n  var bytes = new Uint8Array(buffer);\n  var length = bytes.byteLength;\n  for (var i = 0; i < length; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return binary;\n}\n\n// shim for browsers that don't support it\nfunction readAsBinaryString(blob, callback) {\n  if (typeof FileReader === 'undefined') {\n    // fix for Firefox in a web worker\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=901097\n    return callback(arrayBufferToBinaryString(\n      new FileReaderSync().readAsArrayBuffer(blob)));\n  }\n\n  var reader = new FileReader();\n  var hasBinaryString = typeof reader.readAsBinaryString === 'function';\n  reader.onloadend = function (e) {\n    var result = e.target.result || '';\n    if (hasBinaryString) {\n      return callback(result);\n    }\n    callback(arrayBufferToBinaryString(result));\n  };\n  if (hasBinaryString) {\n    reader.readAsBinaryString(blob);\n  } else {\n    reader.readAsArrayBuffer(blob);\n  }\n}\n\nfunction blobToBinaryString(blobOrBuffer, callback) {\n  readAsBinaryString(blobOrBuffer, function (bin) {\n    callback(bin);\n  });\n}\n\nfunction blobToBase64(blobOrBuffer, callback) {\n  blobToBinaryString(blobOrBuffer, function (base64) {\n    callback(btoa$1(base64));\n  });\n}\n\n// simplified API. universal browser support is assumed\nfunction readAsArrayBuffer(blob, callback) {\n  if (typeof FileReader === 'undefined') {\n    // fix for Firefox in a web worker:\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=901097\n    return callback(new FileReaderSync().readAsArrayBuffer(blob));\n  }\n\n  var reader = new FileReader();\n  reader.onloadend = function (e) {\n    var result = e.target.result || new ArrayBuffer(0);\n    callback(result);\n  };\n  reader.readAsArrayBuffer(blob);\n}\n\nvar setImmediateShim = global.setImmediate || global.setTimeout;\nvar MD5_CHUNK_SIZE = 32768;\n\nfunction rawToBase64(raw) {\n  return btoa$1(raw);\n}\n\nfunction sliceBlob(blob, start, end) {\n  if (blob.webkitSlice) {\n    return blob.webkitSlice(start, end);\n  }\n  return blob.slice(start, end);\n}\n\nfunction appendBlob(buffer, blob, start, end, callback) {\n  if (start > 0 || end < blob.size) {\n    // only slice blob if we really need to\n    blob = sliceBlob(blob, start, end);\n  }\n  readAsArrayBuffer(blob, function (arrayBuffer) {\n    buffer.append(arrayBuffer);\n    callback();\n  });\n}\n\nfunction appendString(buffer, string, start, end, callback) {\n  if (start > 0 || end < string.length) {\n    // only create a substring if we really need to\n    string = string.substring(start, end);\n  }\n  buffer.appendBinary(string);\n  callback();\n}\n\nfunction binaryMd5(data, callback) {\n  var inputIsString = typeof data === 'string';\n  var len = inputIsString ? data.length : data.size;\n  var chunkSize = Math.min(MD5_CHUNK_SIZE, len);\n  var chunks = Math.ceil(len / chunkSize);\n  var currentChunk = 0;\n  var buffer = inputIsString ? new Md5() : new Md5.ArrayBuffer();\n\n  var append = inputIsString ? appendString : appendBlob;\n\n  function next() {\n    setImmediateShim(loadNextChunk);\n  }\n\n  function done() {\n    var raw = buffer.end(true);\n    var base64 = rawToBase64(raw);\n    callback(base64);\n    buffer.destroy();\n  }\n\n  function loadNextChunk() {\n    var start = currentChunk * chunkSize;\n    var end = start + chunkSize;\n    currentChunk++;\n    if (currentChunk < chunks) {\n      append(buffer, data, start, end, next);\n    } else {\n      append(buffer, data, start, end, done);\n    }\n  }\n  loadNextChunk();\n}\n\nfunction stringMd5(string) {\n  return Md5.hash(string);\n}\n\nfunction parseBase64(data) {\n  try {\n    return atob$1(data);\n  } catch (e) {\n    var err = createError(BAD_ARG,\n      'Attachment is not a valid base64 string');\n    return {error: err};\n  }\n}\n\nfunction preprocessString(att, blobType, callback) {\n  var asBinary = parseBase64(att.data);\n  if (asBinary.error) {\n    return callback(asBinary.error);\n  }\n\n  att.length = asBinary.length;\n  if (blobType === 'blob') {\n    att.data = binStringToBluffer(asBinary, att.content_type);\n  } else if (blobType === 'base64') {\n    att.data = btoa$1(asBinary);\n  } else { // binary\n    att.data = asBinary;\n  }\n  binaryMd5(asBinary, function (result) {\n    att.digest = 'md5-' + result;\n    callback();\n  });\n}\n\nfunction preprocessBlob(att, blobType, callback) {\n  binaryMd5(att.data, function (md5) {\n    att.digest = 'md5-' + md5;\n    // size is for blobs (browser), length is for buffers (node)\n    att.length = att.data.size || att.data.length || 0;\n    if (blobType === 'binary') {\n      blobToBinaryString(att.data, function (binString) {\n        att.data = binString;\n        callback();\n      });\n    } else if (blobType === 'base64') {\n      blobToBase64(att.data, function (b64) {\n        att.data = b64;\n        callback();\n      });\n    } else {\n      callback();\n    }\n  });\n}\n\nfunction preprocessAttachment(att, blobType, callback) {\n  if (att.stub) {\n    return callback();\n  }\n  if (typeof att.data === 'string') { // input is a base64 string\n    preprocessString(att, blobType, callback);\n  } else { // input is a blob\n    preprocessBlob(att, blobType, callback);\n  }\n}\n\nfunction preprocessAttachments(docInfos, blobType, callback) {\n\n  if (!docInfos.length) {\n    return callback();\n  }\n\n  var docv = 0;\n  var overallErr;\n\n  docInfos.forEach(function (docInfo) {\n    var attachments = docInfo.data && docInfo.data._attachments ?\n      Object.keys(docInfo.data._attachments) : [];\n    var recv = 0;\n\n    if (!attachments.length) {\n      return done();\n    }\n\n    function processedAttachment(err) {\n      overallErr = err;\n      recv++;\n      if (recv === attachments.length) {\n        done();\n      }\n    }\n\n    for (var key in docInfo.data._attachments) {\n      if (docInfo.data._attachments.hasOwnProperty(key)) {\n        preprocessAttachment(docInfo.data._attachments[key],\n          blobType, processedAttachment);\n      }\n    }\n  });\n\n  function done() {\n    docv++;\n    if (docInfos.length === docv) {\n      if (overallErr) {\n        callback(overallErr);\n      } else {\n        callback();\n      }\n    }\n  }\n}\n\nfunction updateDoc(revLimit, prev, docInfo, results,\n                   i, cb, writeDoc, newEdits) {\n\n  if (revExists(prev.rev_tree, docInfo.metadata.rev)) {\n    results[i] = docInfo;\n    return cb();\n  }\n\n  // sometimes this is pre-calculated. historically not always\n  var previousWinningRev = prev.winningRev || winningRev(prev);\n  var previouslyDeleted = 'deleted' in prev ? prev.deleted :\n    isDeleted(prev, previousWinningRev);\n  var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :\n    isDeleted(docInfo.metadata);\n  var isRoot = /^1-/.test(docInfo.metadata.rev);\n\n  if (previouslyDeleted && !deleted && newEdits && isRoot) {\n    var newDoc = docInfo.data;\n    newDoc._rev = previousWinningRev;\n    newDoc._id = docInfo.metadata.id;\n    docInfo = parseDoc(newDoc, newEdits);\n  }\n\n  var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);\n\n  var inConflict = newEdits && (((previouslyDeleted && deleted) ||\n    (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||\n    (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));\n\n  if (inConflict) {\n    var err = createError(REV_CONFLICT);\n    results[i] = err;\n    return cb();\n  }\n\n  var newRev = docInfo.metadata.rev;\n  docInfo.metadata.rev_tree = merged.tree;\n  docInfo.stemmedRevs = merged.stemmedRevs || [];\n  /* istanbul ignore else */\n  if (prev.rev_map) {\n    docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb\n  }\n\n  // recalculate\n  var winningRev$$ = winningRev(docInfo.metadata);\n  var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$);\n\n  // calculate the total number of documents that were added/removed,\n  // from the perspective of total_rows/doc_count\n  var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :\n    previouslyDeleted < winningRevIsDeleted ? -1 : 1;\n\n  var newRevIsDeleted;\n  if (newRev === winningRev$$) {\n    // if the new rev is the same as the winning rev, we can reuse that value\n    newRevIsDeleted = winningRevIsDeleted;\n  } else {\n    // if they're not the same, then we need to recalculate\n    newRevIsDeleted = isDeleted(docInfo.metadata, newRev);\n  }\n\n  writeDoc(docInfo, winningRev$$, winningRevIsDeleted, newRevIsDeleted,\n    true, delta, i, cb);\n}\n\nfunction rootIsMissing(docInfo) {\n  return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';\n}\n\nfunction processDocs(revLimit, docInfos, api, fetchedDocs, tx, results,\n                     writeDoc, opts, overallCallback) {\n\n  // Default to 1000 locally\n  revLimit = revLimit || 1000;\n\n  function insertDoc(docInfo, resultsIdx, callback) {\n    // Cant insert new deleted documents\n    var winningRev$$ = winningRev(docInfo.metadata);\n    var deleted = isDeleted(docInfo.metadata, winningRev$$);\n    if ('was_delete' in opts && deleted) {\n      results[resultsIdx] = createError(MISSING_DOC, 'deleted');\n      return callback();\n    }\n\n    // 4712 - detect whether a new document was inserted with a _rev\n    var inConflict = newEdits && rootIsMissing(docInfo);\n\n    if (inConflict) {\n      var err = createError(REV_CONFLICT);\n      results[resultsIdx] = err;\n      return callback();\n    }\n\n    var delta = deleted ? 0 : 1;\n\n    writeDoc(docInfo, winningRev$$, deleted, deleted, false,\n      delta, resultsIdx, callback);\n  }\n\n  var newEdits = opts.new_edits;\n  var idsToDocs = new _Map();\n\n  var docsDone = 0;\n  var docsToDo = docInfos.length;\n\n  function checkAllDocsDone() {\n    if (++docsDone === docsToDo && overallCallback) {\n      overallCallback();\n    }\n  }\n\n  docInfos.forEach(function (currentDoc, resultsIdx) {\n\n    if (currentDoc._id && isLocalId(currentDoc._id)) {\n      var fun = currentDoc._deleted ? '_removeLocal' : '_putLocal';\n      api[fun](currentDoc, {ctx: tx}, function (err, res) {\n        results[resultsIdx] = err || res;\n        checkAllDocsDone();\n      });\n      return;\n    }\n\n    var id = currentDoc.metadata.id;\n    if (idsToDocs.has(id)) {\n      docsToDo--; // duplicate\n      idsToDocs.get(id).push([currentDoc, resultsIdx]);\n    } else {\n      idsToDocs.set(id, [[currentDoc, resultsIdx]]);\n    }\n  });\n\n  // in the case of new_edits, the user can provide multiple docs\n  // with the same id. these need to be processed sequentially\n  idsToDocs.forEach(function (docs, id) {\n    var numDone = 0;\n\n    function docWritten() {\n      if (++numDone < docs.length) {\n        nextDoc();\n      } else {\n        checkAllDocsDone();\n      }\n    }\n    function nextDoc() {\n      var value = docs[numDone];\n      var currentDoc = value[0];\n      var resultsIdx = value[1];\n\n      if (fetchedDocs.has(id)) {\n        updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,\n          resultsIdx, docWritten, writeDoc, newEdits);\n      } else {\n        // Ensure stemming applies to new writes as well\n        var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);\n        currentDoc.metadata.rev_tree = merged.tree;\n        currentDoc.stemmedRevs = merged.stemmedRevs || [];\n        insertDoc(currentDoc, resultsIdx, docWritten);\n      }\n    }\n    nextDoc();\n  });\n}\n\n// IndexedDB requires a versioned database structure, so we use the\n// version here to manage migrations.\nvar ADAPTER_VERSION = 5;\n\n// The object stores created for each database\n// DOC_STORE stores the document meta data, its revision history and state\n// Keyed by document id\nvar DOC_STORE = 'document-store';\n// BY_SEQ_STORE stores a particular version of a document, keyed by its\n// sequence id\nvar BY_SEQ_STORE = 'by-sequence';\n// Where we store attachments\nvar ATTACH_STORE = 'attach-store';\n// Where we store many-to-many relations\n// between attachment digests and seqs\nvar ATTACH_AND_SEQ_STORE = 'attach-seq-store';\n\n// Where we store database-wide meta data in a single record\n// keyed by id: META_STORE\nvar META_STORE = 'meta-store';\n// Where we store local documents\nvar LOCAL_STORE = 'local-store';\n// Where we detect blob support\nvar DETECT_BLOB_SUPPORT_STORE = 'detect-blob-support';\n\nfunction slowJsonParse(str) {\n  try {\n    return JSON.parse(str);\n  } catch (e) {\n    /* istanbul ignore next */\n    return vuvuzela.parse(str);\n  }\n}\n\nfunction safeJsonParse(str) {\n  // try/catch is deoptimized in V8, leading to slower\n  // times than we'd like to have. Most documents are _not_\n  // huge, and do not require a slower code path just to parse them.\n  // We can be pretty sure that a document under 50000 characters\n  // will not be so deeply nested as to throw a stack overflow error\n  // (depends on the engine and available memory, though, so this is\n  // just a hunch). 50000 was chosen based on the average length\n  // of this string in our test suite, to try to find a number that covers\n  // most of our test cases (26 over this size, 26378 under it).\n  if (str.length < 50000) {\n    return JSON.parse(str);\n  }\n  return slowJsonParse(str);\n}\n\nfunction safeJsonStringify(json) {\n  try {\n    return JSON.stringify(json);\n  } catch (e) {\n    /* istanbul ignore next */\n    return vuvuzela.stringify(json);\n  }\n}\n\nfunction tryCode(fun, that, args, PouchDB) {\n  try {\n    fun.apply(that, args);\n  } catch (err) {\n    // Shouldn't happen, but in some odd cases\n    // IndexedDB implementations might throw a sync\n    // error, in which case this will at least log it.\n    PouchDB.emit('error', err);\n  }\n}\n\nvar taskQueue = {\n  running: false,\n  queue: []\n};\n\nfunction applyNext(PouchDB) {\n  if (taskQueue.running || !taskQueue.queue.length) {\n    return;\n  }\n  taskQueue.running = true;\n  var item = taskQueue.queue.shift();\n  item.action(function (err, res) {\n    tryCode(item.callback, this, [err, res], PouchDB);\n    taskQueue.running = false;\n    process.nextTick(function () {\n      applyNext(PouchDB);\n    });\n  });\n}\n\nfunction idbError(callback) {\n  return function (evt) {\n    var message = 'unknown_error';\n    if (evt.target && evt.target.error) {\n      message = evt.target.error.name || evt.target.error.message;\n    }\n    callback(createError(IDB_ERROR, message, evt.type));\n  };\n}\n\n// Unfortunately, the metadata has to be stringified\n// when it is put into the database, because otherwise\n// IndexedDB can throw errors for deeply-nested objects.\n// Originally we just used JSON.parse/JSON.stringify; now\n// we use this custom vuvuzela library that avoids recursion.\n// If we could do it all over again, we'd probably use a\n// format for the revision trees other than JSON.\nfunction encodeMetadata(metadata, winningRev, deleted) {\n  return {\n    data: safeJsonStringify(metadata),\n    winningRev: winningRev,\n    deletedOrLocal: deleted ? '1' : '0',\n    seq: metadata.seq, // highest seq for this doc\n    id: metadata.id\n  };\n}\n\nfunction decodeMetadata(storedObject) {\n  if (!storedObject) {\n    return null;\n  }\n  var metadata = safeJsonParse(storedObject.data);\n  metadata.winningRev = storedObject.winningRev;\n  metadata.deleted = storedObject.deletedOrLocal === '1';\n  metadata.seq = storedObject.seq;\n  return metadata;\n}\n\n// read the doc back out from the database. we don't store the\n// _id or _rev because we already have _doc_id_rev.\nfunction decodeDoc(doc) {\n  if (!doc) {\n    return doc;\n  }\n  var idx = doc._doc_id_rev.lastIndexOf(':');\n  doc._id = doc._doc_id_rev.substring(0, idx - 1);\n  doc._rev = doc._doc_id_rev.substring(idx + 1);\n  delete doc._doc_id_rev;\n  return doc;\n}\n\n// Read a blob from the database, encoding as necessary\n// and translating from base64 if the IDB doesn't support\n// native Blobs\nfunction readBlobData(body, type, asBlob, callback) {\n  if (asBlob) {\n    if (!body) {\n      callback(createBlob([''], {type: type}));\n    } else if (typeof body !== 'string') { // we have blob support\n      callback(body);\n    } else { // no blob support\n      callback(b64ToBluffer(body, type));\n    }\n  } else { // as base64 string\n    if (!body) {\n      callback('');\n    } else if (typeof body !== 'string') { // we have blob support\n      readAsBinaryString(body, function (binary) {\n        callback(btoa$1(binary));\n      });\n    } else { // no blob support\n      callback(body);\n    }\n  }\n}\n\nfunction fetchAttachmentsIfNecessary(doc, opts, txn, cb) {\n  var attachments = Object.keys(doc._attachments || {});\n  if (!attachments.length) {\n    return cb && cb();\n  }\n  var numDone = 0;\n\n  function checkDone() {\n    if (++numDone === attachments.length && cb) {\n      cb();\n    }\n  }\n\n  function fetchAttachment(doc, att) {\n    var attObj = doc._attachments[att];\n    var digest = attObj.digest;\n    var req = txn.objectStore(ATTACH_STORE).get(digest);\n    req.onsuccess = function (e) {\n      attObj.body = e.target.result.body;\n      checkDone();\n    };\n  }\n\n  attachments.forEach(function (att) {\n    if (opts.attachments && opts.include_docs) {\n      fetchAttachment(doc, att);\n    } else {\n      doc._attachments[att].stub = true;\n      checkDone();\n    }\n  });\n}\n\n// IDB-specific postprocessing necessary because\n// we don't know whether we stored a true Blob or\n// a base64-encoded string, and if it's a Blob it\n// needs to be read outside of the transaction context\nfunction postProcessAttachments(results, asBlob) {\n  return PouchPromise.all(results.map(function (row) {\n    if (row.doc && row.doc._attachments) {\n      var attNames = Object.keys(row.doc._attachments);\n      return PouchPromise.all(attNames.map(function (att) {\n        var attObj = row.doc._attachments[att];\n        if (!('body' in attObj)) { // already processed\n          return;\n        }\n        var body = attObj.body;\n        var type = attObj.content_type;\n        return new PouchPromise(function (resolve) {\n          readBlobData(body, type, asBlob, function (data) {\n            row.doc._attachments[att] = jsExtend.extend(\n              pick(attObj, ['digest', 'content_type']),\n              {data: data}\n            );\n            resolve();\n          });\n        });\n      }));\n    }\n  }));\n}\n\nfunction compactRevs(revs, docId, txn) {\n\n  var possiblyOrphanedDigests = [];\n  var seqStore = txn.objectStore(BY_SEQ_STORE);\n  var attStore = txn.objectStore(ATTACH_STORE);\n  var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n  var count = revs.length;\n\n  function checkDone() {\n    count--;\n    if (!count) { // done processing all revs\n      deleteOrphanedAttachments();\n    }\n  }\n\n  function deleteOrphanedAttachments() {\n    if (!possiblyOrphanedDigests.length) {\n      return;\n    }\n    possiblyOrphanedDigests.forEach(function (digest) {\n      var countReq = attAndSeqStore.index('digestSeq').count(\n        IDBKeyRange.bound(\n          digest + '::', digest + '::\\uffff', false, false));\n      countReq.onsuccess = function (e) {\n        var count = e.target.result;\n        if (!count) {\n          // orphaned\n          attStore.delete(digest);\n        }\n      };\n    });\n  }\n\n  revs.forEach(function (rev) {\n    var index = seqStore.index('_doc_id_rev');\n    var key = docId + \"::\" + rev;\n    index.getKey(key).onsuccess = function (e) {\n      var seq = e.target.result;\n      if (typeof seq !== 'number') {\n        return checkDone();\n      }\n      seqStore.delete(seq);\n\n      var cursor = attAndSeqStore.index('seq')\n        .openCursor(IDBKeyRange.only(seq));\n\n      cursor.onsuccess = function (event) {\n        var cursor = event.target.result;\n        if (cursor) {\n          var digest = cursor.value.digestSeq.split('::')[0];\n          possiblyOrphanedDigests.push(digest);\n          attAndSeqStore.delete(cursor.primaryKey);\n          cursor.continue();\n        } else { // done\n          checkDone();\n        }\n      };\n    };\n  });\n}\n\nfunction openTransactionSafely(idb, stores, mode) {\n  try {\n    return {\n      txn: idb.transaction(stores, mode)\n    };\n  } catch (err) {\n    return {\n      error: err\n    };\n  }\n}\n\nfunction idbBulkDocs(dbOpts, req, opts, api, idb, idbChanges, callback) {\n  var docInfos = req.docs;\n  var txn;\n  var docStore;\n  var bySeqStore;\n  var attachStore;\n  var attachAndSeqStore;\n  var docInfoError;\n  var docCountDelta = 0;\n\n  for (var i = 0, len = docInfos.length; i < len; i++) {\n    var doc = docInfos[i];\n    if (doc._id && isLocalId(doc._id)) {\n      continue;\n    }\n    doc = docInfos[i] = parseDoc(doc, opts.new_edits);\n    if (doc.error && !docInfoError) {\n      docInfoError = doc;\n    }\n  }\n\n  if (docInfoError) {\n    return callback(docInfoError);\n  }\n\n  var results = new Array(docInfos.length);\n  var fetchedDocs = new _Map();\n  var preconditionErrored = false;\n  var blobType = api._meta.blobSupport ? 'blob' : 'base64';\n\n  preprocessAttachments(docInfos, blobType, function (err) {\n    if (err) {\n      return callback(err);\n    }\n    startTransaction();\n  });\n\n  function startTransaction() {\n\n    var stores = [\n      DOC_STORE, BY_SEQ_STORE,\n      ATTACH_STORE,\n      LOCAL_STORE, ATTACH_AND_SEQ_STORE\n    ];\n    var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    txn = txnResult.txn;\n    txn.onabort = idbError(callback);\n    txn.ontimeout = idbError(callback);\n    txn.oncomplete = complete;\n    docStore = txn.objectStore(DOC_STORE);\n    bySeqStore = txn.objectStore(BY_SEQ_STORE);\n    attachStore = txn.objectStore(ATTACH_STORE);\n    attachAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n\n    verifyAttachments(function (err) {\n      if (err) {\n        preconditionErrored = true;\n        return callback(err);\n      }\n      fetchExistingDocs();\n    });\n  }\n\n  function idbProcessDocs() {\n    processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs,\n                txn, results, writeDoc, opts);\n  }\n\n  function fetchExistingDocs() {\n\n    if (!docInfos.length) {\n      return;\n    }\n\n    var numFetched = 0;\n\n    function checkDone() {\n      if (++numFetched === docInfos.length) {\n        idbProcessDocs();\n      }\n    }\n\n    function readMetadata(event) {\n      var metadata = decodeMetadata(event.target.result);\n\n      if (metadata) {\n        fetchedDocs.set(metadata.id, metadata);\n      }\n      checkDone();\n    }\n\n    for (var i = 0, len = docInfos.length; i < len; i++) {\n      var docInfo = docInfos[i];\n      if (docInfo._id && isLocalId(docInfo._id)) {\n        checkDone(); // skip local docs\n        continue;\n      }\n      var req = docStore.get(docInfo.metadata.id);\n      req.onsuccess = readMetadata;\n    }\n  }\n\n  function complete() {\n    if (preconditionErrored) {\n      return;\n    }\n\n    idbChanges.notify(api._meta.name);\n    api._meta.docCount += docCountDelta;\n    callback(null, results);\n  }\n\n  function verifyAttachment(digest, callback) {\n\n    var req = attachStore.get(digest);\n    req.onsuccess = function (e) {\n      if (!e.target.result) {\n        var err = createError(MISSING_STUB,\n          'unknown stub attachment with digest ' +\n          digest);\n        err.status = 412;\n        callback(err);\n      } else {\n        callback();\n      }\n    };\n  }\n\n  function verifyAttachments(finish) {\n\n\n    var digests = [];\n    docInfos.forEach(function (docInfo) {\n      if (docInfo.data && docInfo.data._attachments) {\n        Object.keys(docInfo.data._attachments).forEach(function (filename) {\n          var att = docInfo.data._attachments[filename];\n          if (att.stub) {\n            digests.push(att.digest);\n          }\n        });\n      }\n    });\n    if (!digests.length) {\n      return finish();\n    }\n    var numDone = 0;\n    var err;\n\n    function checkDone() {\n      if (++numDone === digests.length) {\n        finish(err);\n      }\n    }\n    digests.forEach(function (digest) {\n      verifyAttachment(digest, function (attErr) {\n        if (attErr && !err) {\n          err = attErr;\n        }\n        checkDone();\n      });\n    });\n  }\n\n  function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,\n                    isUpdate, delta, resultsIdx, callback) {\n\n    docCountDelta += delta;\n\n    docInfo.metadata.winningRev = winningRev;\n    docInfo.metadata.deleted = winningRevIsDeleted;\n\n    var doc = docInfo.data;\n    doc._id = docInfo.metadata.id;\n    doc._rev = docInfo.metadata.rev;\n\n    if (newRevIsDeleted) {\n      doc._deleted = true;\n    }\n\n    var hasAttachments = doc._attachments &&\n      Object.keys(doc._attachments).length;\n    if (hasAttachments) {\n      return writeAttachments(docInfo, winningRev, winningRevIsDeleted,\n        isUpdate, resultsIdx, callback);\n    }\n\n    finishDoc(docInfo, winningRev, winningRevIsDeleted,\n      isUpdate, resultsIdx, callback);\n  }\n\n  function finishDoc(docInfo, winningRev, winningRevIsDeleted,\n                     isUpdate, resultsIdx, callback) {\n\n    var doc = docInfo.data;\n    var metadata = docInfo.metadata;\n\n    doc._doc_id_rev = metadata.id + '::' + metadata.rev;\n    delete doc._id;\n    delete doc._rev;\n\n    function afterPutDoc(e) {\n      var revsToDelete = docInfo.stemmedRevs || [];\n\n      if (isUpdate && api.auto_compaction) {\n        revsToDelete = revsToDelete.concat(compactTree(docInfo.metadata));\n      }\n\n      if (revsToDelete && revsToDelete.length) {\n        compactRevs(revsToDelete, docInfo.metadata.id, txn);\n      }\n\n      metadata.seq = e.target.result;\n      // Current _rev is calculated from _rev_tree on read\n      delete metadata.rev;\n      var metadataToStore = encodeMetadata(metadata, winningRev,\n        winningRevIsDeleted);\n      var metaDataReq = docStore.put(metadataToStore);\n      metaDataReq.onsuccess = afterPutMetadata;\n    }\n\n    function afterPutDocError(e) {\n      // ConstraintError, need to update, not put (see #1638 for details)\n      e.preventDefault(); // avoid transaction abort\n      e.stopPropagation(); // avoid transaction onerror\n      var index = bySeqStore.index('_doc_id_rev');\n      var getKeyReq = index.getKey(doc._doc_id_rev);\n      getKeyReq.onsuccess = function (e) {\n        var putReq = bySeqStore.put(doc, e.target.result);\n        putReq.onsuccess = afterPutDoc;\n      };\n    }\n\n    function afterPutMetadata() {\n      results[resultsIdx] = {\n        ok: true,\n        id: metadata.id,\n        rev: winningRev\n      };\n      fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);\n      insertAttachmentMappings(docInfo, metadata.seq, callback);\n    }\n\n    var putReq = bySeqStore.put(doc);\n\n    putReq.onsuccess = afterPutDoc;\n    putReq.onerror = afterPutDocError;\n  }\n\n  function writeAttachments(docInfo, winningRev, winningRevIsDeleted,\n                            isUpdate, resultsIdx, callback) {\n\n\n    var doc = docInfo.data;\n\n    var numDone = 0;\n    var attachments = Object.keys(doc._attachments);\n\n    function collectResults() {\n      if (numDone === attachments.length) {\n        finishDoc(docInfo, winningRev, winningRevIsDeleted,\n          isUpdate, resultsIdx, callback);\n      }\n    }\n\n    function attachmentSaved() {\n      numDone++;\n      collectResults();\n    }\n\n    attachments.forEach(function (key) {\n      var att = docInfo.data._attachments[key];\n      if (!att.stub) {\n        var data = att.data;\n        delete att.data;\n        att.revpos = parseInt(winningRev, 10);\n        var digest = att.digest;\n        saveAttachment(digest, data, attachmentSaved);\n      } else {\n        numDone++;\n        collectResults();\n      }\n    });\n  }\n\n  // map seqs to attachment digests, which\n  // we will need later during compaction\n  function insertAttachmentMappings(docInfo, seq, callback) {\n\n    var attsAdded = 0;\n    var attsToAdd = Object.keys(docInfo.data._attachments || {});\n\n    if (!attsToAdd.length) {\n      return callback();\n    }\n\n    function checkDone() {\n      if (++attsAdded === attsToAdd.length) {\n        callback();\n      }\n    }\n\n    function add(att) {\n      var digest = docInfo.data._attachments[att].digest;\n      var req = attachAndSeqStore.put({\n        seq: seq,\n        digestSeq: digest + '::' + seq\n      });\n\n      req.onsuccess = checkDone;\n      req.onerror = function (e) {\n        // this callback is for a constaint error, which we ignore\n        // because this docid/rev has already been associated with\n        // the digest (e.g. when new_edits == false)\n        e.preventDefault(); // avoid transaction abort\n        e.stopPropagation(); // avoid transaction onerror\n        checkDone();\n      };\n    }\n    for (var i = 0; i < attsToAdd.length; i++) {\n      add(attsToAdd[i]); // do in parallel\n    }\n  }\n\n  function saveAttachment(digest, data, callback) {\n\n\n    var getKeyReq = attachStore.count(digest);\n    getKeyReq.onsuccess = function (e) {\n      var count = e.target.result;\n      if (count) {\n        return callback(); // already exists\n      }\n      var newAtt = {\n        digest: digest,\n        body: data\n      };\n      var putReq = attachStore.put(newAtt);\n      putReq.onsuccess = callback;\n    };\n  }\n}\n\nfunction createKeyRange(start, end, inclusiveEnd, key, descending) {\n  try {\n    if (start && end) {\n      if (descending) {\n        return IDBKeyRange.bound(end, start, !inclusiveEnd, false);\n      } else {\n        return IDBKeyRange.bound(start, end, false, !inclusiveEnd);\n      }\n    } else if (start) {\n      if (descending) {\n        return IDBKeyRange.upperBound(start);\n      } else {\n        return IDBKeyRange.lowerBound(start);\n      }\n    } else if (end) {\n      if (descending) {\n        return IDBKeyRange.lowerBound(end, !inclusiveEnd);\n      } else {\n        return IDBKeyRange.upperBound(end, !inclusiveEnd);\n      }\n    } else if (key) {\n      return IDBKeyRange.only(key);\n    }\n  } catch (e) {\n    return {error: e};\n  }\n  return null;\n}\n\nfunction handleKeyRangeError(api, opts, err, callback) {\n  if (err.name === \"DataError\" && err.code === 0) {\n    // data error, start is less than end\n    return callback(null, {\n      total_rows: api._meta.docCount,\n      offset: opts.skip,\n      rows: []\n    });\n  }\n  callback(createError(IDB_ERROR, err.name, err.message));\n}\n\nfunction idbAllDocs(opts, api, idb, callback) {\n\n  function allDocsQuery(opts, callback) {\n    var start = 'startkey' in opts ? opts.startkey : false;\n    var end = 'endkey' in opts ? opts.endkey : false;\n    var key = 'key' in opts ? opts.key : false;\n    var skip = opts.skip || 0;\n    var limit = typeof opts.limit === 'number' ? opts.limit : -1;\n    var inclusiveEnd = opts.inclusive_end !== false;\n    var descending = 'descending' in opts && opts.descending ? 'prev' : null;\n\n    var keyRange = createKeyRange(start, end, inclusiveEnd, key, descending);\n    if (keyRange && keyRange.error) {\n      return handleKeyRangeError(api, opts, keyRange.error, callback);\n    }\n\n    var stores = [DOC_STORE, BY_SEQ_STORE];\n\n    if (opts.attachments) {\n      stores.push(ATTACH_STORE);\n    }\n    var txnResult = openTransactionSafely(idb, stores, 'readonly');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    var txn = txnResult.txn;\n    var docStore = txn.objectStore(DOC_STORE);\n    var seqStore = txn.objectStore(BY_SEQ_STORE);\n    var cursor = descending ?\n      docStore.openCursor(keyRange, descending) :\n      docStore.openCursor(keyRange);\n    var docIdRevIndex = seqStore.index('_doc_id_rev');\n    var results = [];\n    var docCount = 0;\n\n    // if the user specifies include_docs=true, then we don't\n    // want to block the main cursor while we're fetching the doc\n    function fetchDocAsynchronously(metadata, row, winningRev) {\n      var key = metadata.id + \"::\" + winningRev;\n      docIdRevIndex.get(key).onsuccess =  function onGetDoc(e) {\n        row.doc = decodeDoc(e.target.result);\n        if (opts.conflicts) {\n          row.doc._conflicts = collectConflicts(metadata);\n        }\n        fetchAttachmentsIfNecessary(row.doc, opts, txn);\n      };\n    }\n\n    function allDocsInner(cursor, winningRev, metadata) {\n      var row = {\n        id: metadata.id,\n        key: metadata.id,\n        value: {\n          rev: winningRev\n        }\n      };\n      var deleted = metadata.deleted;\n      if (opts.deleted === 'ok') {\n        results.push(row);\n        // deleted docs are okay with \"keys\" requests\n        if (deleted) {\n          row.value.deleted = true;\n          row.doc = null;\n        } else if (opts.include_docs) {\n          fetchDocAsynchronously(metadata, row, winningRev);\n        }\n      } else if (!deleted && skip-- <= 0) {\n        results.push(row);\n        if (opts.include_docs) {\n          fetchDocAsynchronously(metadata, row, winningRev);\n        }\n        if (--limit === 0) {\n          return;\n        }\n      }\n      cursor.continue();\n    }\n\n    function onGetCursor(e) {\n      docCount = api._meta.docCount; // do this within the txn for consistency\n      var cursor = e.target.result;\n      if (!cursor) {\n        return;\n      }\n      var metadata = decodeMetadata(cursor.value);\n      var winningRev = metadata.winningRev;\n\n      allDocsInner(cursor, winningRev, metadata);\n    }\n\n    function onResultsReady() {\n      callback(null, {\n        total_rows: docCount,\n        offset: opts.skip,\n        rows: results\n      });\n    }\n\n    function onTxnComplete() {\n      if (opts.attachments) {\n        postProcessAttachments(results, opts.binary).then(onResultsReady);\n      } else {\n        onResultsReady();\n      }\n    }\n\n    txn.oncomplete = onTxnComplete;\n    cursor.onsuccess = onGetCursor;\n  }\n\n  function allDocs(opts, callback) {\n\n    if (opts.limit === 0) {\n      return callback(null, {\n        total_rows: api._meta.docCount,\n        offset: opts.skip,\n        rows: []\n      });\n    }\n    allDocsQuery(opts, callback);\n  }\n\n  allDocs(opts, callback);\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\nfunction checkBlobSupport(txn) {\n  return new PouchPromise(function (resolve) {\n    var blob = createBlob(['']);\n    txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n    txn.onabort = function (e) {\n      // If the transaction aborts now its due to not being able to\n      // write to the database, likely due to the disk being full\n      e.preventDefault();\n      e.stopPropagation();\n      resolve(false);\n    };\n\n    txn.oncomplete = function () {\n      var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n      var matchedEdge = navigator.userAgent.match(/Edge\\//);\n      // MS Edge pretends to be Chrome 42:\n      // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n      resolve(matchedEdge || !matchedChrome ||\n        parseInt(matchedChrome[1], 10) >= 43);\n    };\n  }).catch(function () {\n    return false; // error, so assume unsupported\n  });\n}\n\nvar cachedDBs = new _Map();\nvar blobSupportPromise;\nvar idbChanges = new Changes$1();\nvar openReqList = new _Map();\n\nfunction IdbPouch(opts, callback) {\n  var api = this;\n\n  taskQueue.queue.push({\n    action: function (thisCallback) {\n      init(api, opts, thisCallback);\n    },\n    callback: callback\n  });\n  applyNext(api.constructor);\n}\n\nfunction init(api, opts, callback) {\n\n  var dbName = opts.name;\n\n  var idb = null;\n  api._meta = null;\n\n  // called when creating a fresh new database\n  function createSchema(db) {\n    var docStore = db.createObjectStore(DOC_STORE, {keyPath : 'id'});\n    db.createObjectStore(BY_SEQ_STORE, {autoIncrement: true})\n      .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n    db.createObjectStore(ATTACH_STORE, {keyPath: 'digest'});\n    db.createObjectStore(META_STORE, {keyPath: 'id', autoIncrement: false});\n    db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n\n    // added in v2\n    docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n    // added in v3\n    db.createObjectStore(LOCAL_STORE, {keyPath: '_id'});\n\n    // added in v4\n    var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n      {autoIncrement: true});\n    attAndSeqStore.createIndex('seq', 'seq');\n    attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n  }\n\n  // migration to version 2\n  // unfortunately \"deletedOrLocal\" is a misnomer now that we no longer\n  // store local docs in the main doc-store, but whaddyagonnado\n  function addDeletedOrLocalIndex(txn, callback) {\n    var docStore = txn.objectStore(DOC_STORE);\n    docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n    docStore.openCursor().onsuccess = function (event) {\n      var cursor = event.target.result;\n      if (cursor) {\n        var metadata = cursor.value;\n        var deleted = isDeleted(metadata);\n        metadata.deletedOrLocal = deleted ? \"1\" : \"0\";\n        docStore.put(metadata);\n        cursor.continue();\n      } else {\n        callback();\n      }\n    };\n  }\n\n  // migration to version 3 (part 1)\n  function createLocalStoreSchema(db) {\n    db.createObjectStore(LOCAL_STORE, {keyPath: '_id'})\n      .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n  }\n\n  // migration to version 3 (part 2)\n  function migrateLocalStore(txn, cb) {\n    var localStore = txn.objectStore(LOCAL_STORE);\n    var docStore = txn.objectStore(DOC_STORE);\n    var seqStore = txn.objectStore(BY_SEQ_STORE);\n\n    var cursor = docStore.openCursor();\n    cursor.onsuccess = function (event) {\n      var cursor = event.target.result;\n      if (cursor) {\n        var metadata = cursor.value;\n        var docId = metadata.id;\n        var local = isLocalId(docId);\n        var rev = winningRev(metadata);\n        if (local) {\n          var docIdRev = docId + \"::\" + rev;\n          // remove all seq entries\n          // associated with this docId\n          var start = docId + \"::\";\n          var end = docId + \"::~\";\n          var index = seqStore.index('_doc_id_rev');\n          var range = IDBKeyRange.bound(start, end, false, false);\n          var seqCursor = index.openCursor(range);\n          seqCursor.onsuccess = function (e) {\n            seqCursor = e.target.result;\n            if (!seqCursor) {\n              // done\n              docStore.delete(cursor.primaryKey);\n              cursor.continue();\n            } else {\n              var data = seqCursor.value;\n              if (data._doc_id_rev === docIdRev) {\n                localStore.put(data);\n              }\n              seqStore.delete(seqCursor.primaryKey);\n              seqCursor.continue();\n            }\n          };\n        } else {\n          cursor.continue();\n        }\n      } else if (cb) {\n        cb();\n      }\n    };\n  }\n\n  // migration to version 4 (part 1)\n  function addAttachAndSeqStore(db) {\n    var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n      {autoIncrement: true});\n    attAndSeqStore.createIndex('seq', 'seq');\n    attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n  }\n\n  // migration to version 4 (part 2)\n  function migrateAttsAndSeqs(txn, callback) {\n    var seqStore = txn.objectStore(BY_SEQ_STORE);\n    var attStore = txn.objectStore(ATTACH_STORE);\n    var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n\n    // need to actually populate the table. this is the expensive part,\n    // so as an optimization, check first that this database even\n    // contains attachments\n    var req = attStore.count();\n    req.onsuccess = function (e) {\n      var count = e.target.result;\n      if (!count) {\n        return callback(); // done\n      }\n\n      seqStore.openCursor().onsuccess = function (e) {\n        var cursor = e.target.result;\n        if (!cursor) {\n          return callback(); // done\n        }\n        var doc = cursor.value;\n        var seq = cursor.primaryKey;\n        var atts = Object.keys(doc._attachments || {});\n        var digestMap = {};\n        for (var j = 0; j < atts.length; j++) {\n          var att = doc._attachments[atts[j]];\n          digestMap[att.digest] = true; // uniq digests, just in case\n        }\n        var digests = Object.keys(digestMap);\n        for (j = 0; j < digests.length; j++) {\n          var digest = digests[j];\n          attAndSeqStore.put({\n            seq: seq,\n            digestSeq: digest + '::' + seq\n          });\n        }\n        cursor.continue();\n      };\n    };\n  }\n\n  // migration to version 5\n  // Instead of relying on on-the-fly migration of metadata,\n  // this brings the doc-store to its modern form:\n  // - metadata.winningrev\n  // - metadata.seq\n  // - stringify the metadata when storing it\n  function migrateMetadata(txn) {\n\n    function decodeMetadataCompat(storedObject) {\n      if (!storedObject.data) {\n        // old format, when we didn't store it stringified\n        storedObject.deleted = storedObject.deletedOrLocal === '1';\n        return storedObject;\n      }\n      return decodeMetadata(storedObject);\n    }\n\n    // ensure that every metadata has a winningRev and seq,\n    // which was previously created on-the-fly but better to migrate\n    var bySeqStore = txn.objectStore(BY_SEQ_STORE);\n    var docStore = txn.objectStore(DOC_STORE);\n    var cursor = docStore.openCursor();\n    cursor.onsuccess = function (e) {\n      var cursor = e.target.result;\n      if (!cursor) {\n        return; // done\n      }\n      var metadata = decodeMetadataCompat(cursor.value);\n\n      metadata.winningRev = metadata.winningRev ||\n        winningRev(metadata);\n\n      function fetchMetadataSeq() {\n        // metadata.seq was added post-3.2.0, so if it's missing,\n        // we need to fetch it manually\n        var start = metadata.id + '::';\n        var end = metadata.id + '::\\uffff';\n        var req = bySeqStore.index('_doc_id_rev').openCursor(\n          IDBKeyRange.bound(start, end));\n\n        var metadataSeq = 0;\n        req.onsuccess = function (e) {\n          var cursor = e.target.result;\n          if (!cursor) {\n            metadata.seq = metadataSeq;\n            return onGetMetadataSeq();\n          }\n          var seq = cursor.primaryKey;\n          if (seq > metadataSeq) {\n            metadataSeq = seq;\n          }\n          cursor.continue();\n        };\n      }\n\n      function onGetMetadataSeq() {\n        var metadataToStore = encodeMetadata(metadata,\n          metadata.winningRev, metadata.deleted);\n\n        var req = docStore.put(metadataToStore);\n        req.onsuccess = function () {\n          cursor.continue();\n        };\n      }\n\n      if (metadata.seq) {\n        return onGetMetadataSeq();\n      }\n\n      fetchMetadataSeq();\n    };\n\n  }\n\n  api.type = function () {\n    return 'idb';\n  };\n\n  api._id = toPromise(function (callback) {\n    callback(null, api._meta.instanceId);\n  });\n\n  api._bulkDocs = function idb_bulkDocs(req, reqOpts, callback) {\n    idbBulkDocs(opts, req, reqOpts, api, idb, idbChanges, callback);\n  };\n\n  // First we look up the metadata in the ids database, then we fetch the\n  // current revision(s) from the by sequence store\n  api._get = function idb_get(id, opts, callback) {\n    var doc;\n    var metadata;\n    var err;\n    var txn = opts.ctx;\n    if (!txn) {\n      var txnResult = openTransactionSafely(idb,\n        [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n      if (txnResult.error) {\n        return callback(txnResult.error);\n      }\n      txn = txnResult.txn;\n    }\n\n    function finish() {\n      callback(err, {doc: doc, metadata: metadata, ctx: txn});\n    }\n\n    txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {\n      metadata = decodeMetadata(e.target.result);\n      // we can determine the result here if:\n      // 1. there is no such document\n      // 2. the document is deleted and we don't ask about specific rev\n      // When we ask with opts.rev we expect the answer to be either\n      // doc (possibly with _deleted=true) or missing error\n      if (!metadata) {\n        err = createError(MISSING_DOC, 'missing');\n        return finish();\n      }\n      if (isDeleted(metadata) && !opts.rev) {\n        err = createError(MISSING_DOC, \"deleted\");\n        return finish();\n      }\n      var objectStore = txn.objectStore(BY_SEQ_STORE);\n\n      var rev = opts.rev || metadata.winningRev;\n      var key = metadata.id + '::' + rev;\n\n      objectStore.index('_doc_id_rev').get(key).onsuccess = function (e) {\n        doc = e.target.result;\n        if (doc) {\n          doc = decodeDoc(doc);\n        }\n        if (!doc) {\n          err = createError(MISSING_DOC, 'missing');\n          return finish();\n        }\n        finish();\n      };\n    };\n  };\n\n  api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n    var txn;\n    if (opts.ctx) {\n      txn = opts.ctx;\n    } else {\n      var txnResult = openTransactionSafely(idb,\n        [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n      if (txnResult.error) {\n        return callback(txnResult.error);\n      }\n      txn = txnResult.txn;\n    }\n    var digest = attachment.digest;\n    var type = attachment.content_type;\n\n    txn.objectStore(ATTACH_STORE).get(digest).onsuccess = function (e) {\n      var body = e.target.result.body;\n      readBlobData(body, type, opts.binary, function (blobData) {\n        callback(null, blobData);\n      });\n    };\n  };\n\n  api._info = function idb_info(callback) {\n\n    if (idb === null || !cachedDBs.has(dbName)) {\n      var error = new Error('db isn\\'t open');\n      error.id = 'idbNull';\n      return callback(error);\n    }\n    var updateSeq;\n    var docCount;\n\n    var txnResult = openTransactionSafely(idb, [BY_SEQ_STORE], 'readonly');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    var txn = txnResult.txn;\n    var cursor = txn.objectStore(BY_SEQ_STORE).openCursor(null, 'prev');\n    cursor.onsuccess = function (event) {\n      var cursor = event.target.result;\n      updateSeq = cursor ? cursor.key : 0;\n      // count within the same txn for consistency\n      docCount = api._meta.docCount;\n    };\n\n    txn.oncomplete = function () {\n      callback(null, {\n        doc_count: docCount,\n        update_seq: updateSeq,\n        // for debugging\n        idb_attachment_format: (api._meta.blobSupport ? 'binary' : 'base64')\n      });\n    };\n  };\n\n  api._allDocs = function idb_allDocs(opts, callback) {\n    idbAllDocs(opts, api, idb, callback);\n  };\n\n  api._changes = function (opts) {\n    opts = clone(opts);\n\n    if (opts.continuous) {\n      var id = dbName + ':' + uuid();\n      idbChanges.addListener(dbName, id, api, opts);\n      idbChanges.notify(dbName);\n      return {\n        cancel: function () {\n          idbChanges.removeListener(dbName, id);\n        }\n      };\n    }\n\n    var docIds = opts.doc_ids && new _Set(opts.doc_ids);\n\n    opts.since = opts.since || 0;\n    var lastSeq = opts.since;\n\n    var limit = 'limit' in opts ? opts.limit : -1;\n    if (limit === 0) {\n      limit = 1; // per CouchDB _changes spec\n    }\n    var returnDocs;\n    if ('return_docs' in opts) {\n      returnDocs = opts.return_docs;\n    } else if ('returnDocs' in opts) {\n      // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n      returnDocs = opts.returnDocs;\n    } else {\n      returnDocs = true;\n    }\n\n    var results = [];\n    var numResults = 0;\n    var filter = filterChange(opts);\n    var docIdsToMetadata = new _Map();\n\n    var txn;\n    var bySeqStore;\n    var docStore;\n    var docIdRevIndex;\n\n    function onGetCursor(cursor) {\n\n      var doc = decodeDoc(cursor.value);\n      var seq = cursor.key;\n\n      if (docIds && !docIds.has(doc._id)) {\n        return cursor.continue();\n      }\n\n      var metadata;\n\n      function onGetMetadata() {\n        if (metadata.seq !== seq) {\n          // some other seq is later\n          return cursor.continue();\n        }\n\n        lastSeq = seq;\n\n        if (metadata.winningRev === doc._rev) {\n          return onGetWinningDoc(doc);\n        }\n\n        fetchWinningDoc();\n      }\n\n      function fetchWinningDoc() {\n        var docIdRev = doc._id + '::' + metadata.winningRev;\n        var req = docIdRevIndex.get(docIdRev);\n        req.onsuccess = function (e) {\n          onGetWinningDoc(decodeDoc(e.target.result));\n        };\n      }\n\n      function onGetWinningDoc(winningDoc) {\n\n        var change = opts.processChange(winningDoc, metadata, opts);\n        change.seq = metadata.seq;\n\n        var filtered = filter(change);\n        if (typeof filtered === 'object') {\n          return opts.complete(filtered);\n        }\n\n        if (filtered) {\n          numResults++;\n          if (returnDocs) {\n            results.push(change);\n          }\n          // process the attachment immediately\n          // for the benefit of live listeners\n          if (opts.attachments && opts.include_docs) {\n            fetchAttachmentsIfNecessary(winningDoc, opts, txn, function () {\n              postProcessAttachments([change], opts.binary).then(function () {\n                opts.onChange(change);\n              });\n            });\n          } else {\n            opts.onChange(change);\n          }\n        }\n        if (numResults !== limit) {\n          cursor.continue();\n        }\n      }\n\n      metadata = docIdsToMetadata.get(doc._id);\n      if (metadata) { // cached\n        return onGetMetadata();\n      }\n      // metadata not cached, have to go fetch it\n      docStore.get(doc._id).onsuccess = function (event) {\n        metadata = decodeMetadata(event.target.result);\n        docIdsToMetadata.set(doc._id, metadata);\n        onGetMetadata();\n      };\n    }\n\n    function onsuccess(event) {\n      var cursor = event.target.result;\n\n      if (!cursor) {\n        return;\n      }\n      onGetCursor(cursor);\n    }\n\n    function fetchChanges() {\n      var objectStores = [DOC_STORE, BY_SEQ_STORE];\n      if (opts.attachments) {\n        objectStores.push(ATTACH_STORE);\n      }\n      var txnResult = openTransactionSafely(idb, objectStores, 'readonly');\n      if (txnResult.error) {\n        return opts.complete(txnResult.error);\n      }\n      txn = txnResult.txn;\n      txn.onabort = idbError(opts.complete);\n      txn.oncomplete = onTxnComplete;\n\n      bySeqStore = txn.objectStore(BY_SEQ_STORE);\n      docStore = txn.objectStore(DOC_STORE);\n      docIdRevIndex = bySeqStore.index('_doc_id_rev');\n\n      var req;\n\n      if (opts.descending) {\n        req = bySeqStore.openCursor(null, 'prev');\n      } else {\n        req = bySeqStore.openCursor(IDBKeyRange.lowerBound(opts.since, true));\n      }\n\n      req.onsuccess = onsuccess;\n    }\n\n    fetchChanges();\n\n    function onTxnComplete() {\n\n      function finish() {\n        opts.complete(null, {\n          results: results,\n          last_seq: lastSeq\n        });\n      }\n\n      if (!opts.continuous && opts.attachments) {\n        // cannot guarantee that postProcessing was already done,\n        // so do it again\n        postProcessAttachments(results).then(finish);\n      } else {\n        finish();\n      }\n    }\n  };\n\n  api._close = function (callback) {\n    if (idb === null) {\n      return callback(createError(NOT_OPEN));\n    }\n\n    // https://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase#close\n    // \"Returns immediately and closes the connection in a separate thread...\"\n    idb.close();\n    cachedDBs.delete(dbName);\n    idb = null;\n    callback();\n  };\n\n  api._getRevisionTree = function (docId, callback) {\n    var txnResult = openTransactionSafely(idb, [DOC_STORE], 'readonly');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    var txn = txnResult.txn;\n    var req = txn.objectStore(DOC_STORE).get(docId);\n    req.onsuccess = function (event) {\n      var doc = decodeMetadata(event.target.result);\n      if (!doc) {\n        callback(createError(MISSING_DOC));\n      } else {\n        callback(null, doc.rev_tree);\n      }\n    };\n  };\n\n  // This function removes revisions of document docId\n  // which are listed in revs and sets this document\n  // revision to to rev_tree\n  api._doCompaction = function (docId, revs, callback) {\n    var stores = [\n      DOC_STORE,\n      BY_SEQ_STORE,\n      ATTACH_STORE,\n      ATTACH_AND_SEQ_STORE\n    ];\n    var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    var txn = txnResult.txn;\n\n    var docStore = txn.objectStore(DOC_STORE);\n\n    docStore.get(docId).onsuccess = function (event) {\n      var metadata = decodeMetadata(event.target.result);\n      traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n                                                         revHash, ctx, opts) {\n        var rev = pos + '-' + revHash;\n        if (revs.indexOf(rev) !== -1) {\n          opts.status = 'missing';\n        }\n      });\n      compactRevs(revs, docId, txn);\n      var winningRev = metadata.winningRev;\n      var deleted = metadata.deleted;\n      txn.objectStore(DOC_STORE).put(\n        encodeMetadata(metadata, winningRev, deleted));\n    };\n    txn.onabort = idbError(callback);\n    txn.oncomplete = function () {\n      callback();\n    };\n  };\n\n\n  api._getLocal = function (id, callback) {\n    var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readonly');\n    if (txnResult.error) {\n      return callback(txnResult.error);\n    }\n    var tx = txnResult.txn;\n    var req = tx.objectStore(LOCAL_STORE).get(id);\n\n    req.onerror = idbError(callback);\n    req.onsuccess = function (e) {\n      var doc = e.target.result;\n      if (!doc) {\n        callback(createError(MISSING_DOC));\n      } else {\n        delete doc['_doc_id_rev']; // for backwards compat\n        callback(null, doc);\n      }\n    };\n  };\n\n  api._putLocal = function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    delete doc._revisions; // ignore this, trust the rev\n    var oldRev = doc._rev;\n    var id = doc._id;\n    if (!oldRev) {\n      doc._rev = '0-1';\n    } else {\n      doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);\n    }\n\n    var tx = opts.ctx;\n    var ret;\n    if (!tx) {\n      var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n      if (txnResult.error) {\n        return callback(txnResult.error);\n      }\n      tx = txnResult.txn;\n      tx.onerror = idbError(callback);\n      tx.oncomplete = function () {\n        if (ret) {\n          callback(null, ret);\n        }\n      };\n    }\n\n    var oStore = tx.objectStore(LOCAL_STORE);\n    var req;\n    if (oldRev) {\n      req = oStore.get(id);\n      req.onsuccess = function (e) {\n        var oldDoc = e.target.result;\n        if (!oldDoc || oldDoc._rev !== oldRev) {\n          callback(createError(REV_CONFLICT));\n        } else { // update\n          var req = oStore.put(doc);\n          req.onsuccess = function () {\n            ret = {ok: true, id: doc._id, rev: doc._rev};\n            if (opts.ctx) { // return immediately\n              callback(null, ret);\n            }\n          };\n        }\n      };\n    } else { // new doc\n      req = oStore.add(doc);\n      req.onerror = function (e) {\n        // constraint error, already exists\n        callback(createError(REV_CONFLICT));\n        e.preventDefault(); // avoid transaction abort\n        e.stopPropagation(); // avoid transaction onerror\n      };\n      req.onsuccess = function () {\n        ret = {ok: true, id: doc._id, rev: doc._rev};\n        if (opts.ctx) { // return immediately\n          callback(null, ret);\n        }\n      };\n    }\n  };\n\n  api._removeLocal = function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var tx = opts.ctx;\n    if (!tx) {\n      var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n      if (txnResult.error) {\n        return callback(txnResult.error);\n      }\n      tx = txnResult.txn;\n      tx.oncomplete = function () {\n        if (ret) {\n          callback(null, ret);\n        }\n      };\n    }\n    var ret;\n    var id = doc._id;\n    var oStore = tx.objectStore(LOCAL_STORE);\n    var req = oStore.get(id);\n\n    req.onerror = idbError(callback);\n    req.onsuccess = function (e) {\n      var oldDoc = e.target.result;\n      if (!oldDoc || oldDoc._rev !== doc._rev) {\n        callback(createError(MISSING_DOC));\n      } else {\n        oStore.delete(id);\n        ret = {ok: true, id: id, rev: '0-0'};\n        if (opts.ctx) { // return immediately\n          callback(null, ret);\n        }\n      }\n    };\n  };\n\n  api._destroy = function (opts, callback) {\n    idbChanges.removeAllListeners(dbName);\n\n    //Close open request for \"dbName\" database to fix ie delay.\n    var openReq = openReqList.get(dbName);\n    if (openReq && openReq.result) {\n      openReq.result.close();\n      cachedDBs.delete(dbName);\n    }\n    var req = indexedDB.deleteDatabase(dbName);\n\n    req.onsuccess = function () {\n      //Remove open request from the list.\n      openReqList.delete(dbName);\n      if (hasLocalStorage() && (dbName in localStorage)) {\n        delete localStorage[dbName];\n      }\n      callback(null, { 'ok': true });\n    };\n\n    req.onerror = idbError(callback);\n  };\n\n  var cached = cachedDBs.get(dbName);\n\n  if (cached) {\n    idb = cached.idb;\n    api._meta = cached.global;\n    process.nextTick(function () {\n      callback(null, api);\n    });\n    return;\n  }\n\n  var req;\n  if (opts.storage) {\n    req = tryStorageOption(dbName, opts.storage);\n  } else {\n    req = indexedDB.open(dbName, ADAPTER_VERSION);\n  }\n\n  openReqList.set(dbName, req);\n\n  req.onupgradeneeded = function (e) {\n    var db = e.target.result;\n    if (e.oldVersion < 1) {\n      return createSchema(db); // new db, initial schema\n    }\n    // do migrations\n\n    var txn = e.currentTarget.transaction;\n    // these migrations have to be done in this function, before\n    // control is returned to the event loop, because IndexedDB\n\n    if (e.oldVersion < 3) {\n      createLocalStoreSchema(db); // v2 -> v3\n    }\n    if (e.oldVersion < 4) {\n      addAttachAndSeqStore(db); // v3 -> v4\n    }\n\n    var migrations = [\n      addDeletedOrLocalIndex, // v1 -> v2\n      migrateLocalStore,      // v2 -> v3\n      migrateAttsAndSeqs,     // v3 -> v4\n      migrateMetadata         // v4 -> v5\n    ];\n\n    var i = e.oldVersion;\n\n    function next() {\n      var migration = migrations[i - 1];\n      i++;\n      if (migration) {\n        migration(txn, next);\n      }\n    }\n\n    next();\n  };\n\n  req.onsuccess = function (e) {\n\n    idb = e.target.result;\n\n    idb.onversionchange = function () {\n      idb.close();\n      cachedDBs.delete(dbName);\n    };\n\n    idb.onabort = function (e) {\n      guardedConsole('error', 'Database has a global failure', e.target.error);\n      idb.close();\n      cachedDBs.delete(dbName);\n    };\n\n    var txn = idb.transaction([\n      META_STORE,\n      DETECT_BLOB_SUPPORT_STORE,\n      DOC_STORE\n    ], 'readwrite');\n\n    var req = txn.objectStore(META_STORE).get(META_STORE);\n\n    var blobSupport = null;\n    var docCount = null;\n    var instanceId = null;\n\n    req.onsuccess = function (e) {\n\n      var checkSetupComplete = function () {\n        if (blobSupport === null || docCount === null ||\n            instanceId === null) {\n          return;\n        } else {\n          api._meta = {\n            name: dbName,\n            instanceId: instanceId,\n            blobSupport: blobSupport,\n            docCount: docCount\n          };\n\n          cachedDBs.set(dbName, {\n            idb: idb,\n            global: api._meta\n          });\n          callback(null, api);\n        }\n      };\n\n      //\n      // fetch/store the id\n      //\n\n      var meta = e.target.result || {id: META_STORE};\n      if (dbName  + '_id' in meta) {\n        instanceId = meta[dbName + '_id'];\n        checkSetupComplete();\n      } else {\n        instanceId = uuid();\n        meta[dbName + '_id'] = instanceId;\n        txn.objectStore(META_STORE).put(meta).onsuccess = function () {\n          checkSetupComplete();\n        };\n      }\n\n      //\n      // check blob support\n      //\n\n      if (!blobSupportPromise) {\n        // make sure blob support is only checked once\n        blobSupportPromise = checkBlobSupport(txn);\n      }\n\n      blobSupportPromise.then(function (val) {\n        blobSupport = val;\n        checkSetupComplete();\n      });\n\n      //\n      // count docs\n      //\n\n      var index = txn.objectStore(DOC_STORE).index('deletedOrLocal');\n      index.count(IDBKeyRange.only('0')).onsuccess = function (e) {\n        docCount = e.target.result;\n        checkSetupComplete();\n      };\n\n    };\n  };\n\n  req.onerror = function () {\n    var msg = 'Failed to open indexedDB, are you in private browsing mode?';\n    guardedConsole('error', msg);\n    callback(createError(IDB_ERROR, msg));\n  };\n}\n\nIdbPouch.valid = function () {\n  // Issue #2533, we finally gave up on doing bug\n  // detection instead of browser sniffing. Safari brought us\n  // to our knees.\n  var isSafari = typeof openDatabase !== 'undefined' &&\n    /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) &&\n    !/Chrome/.test(navigator.userAgent) &&\n    !/BlackBerry/.test(navigator.platform);\n\n  // some outdated implementations of IDB that appear on Samsung\n  // and HTC Android devices <4.4 are missing IDBKeyRange\n  return !isSafari && typeof indexedDB !== 'undefined' &&\n    typeof IDBKeyRange !== 'undefined';\n};\n\nfunction tryStorageOption(dbName, storage) {\n  try { // option only available in Firefox 26+\n    return indexedDB.open(dbName, {\n      version: ADAPTER_VERSION,\n      storage: storage\n    });\n  } catch(err) {\n      return indexedDB.open(dbName, ADAPTER_VERSION);\n  }\n}\n\nfunction IDBPouch (PouchDB) {\n  PouchDB.adapter('idb', IdbPouch, true);\n}\n\n//\n// Parsing hex strings. Yeah.\n//\n// So basically we need this because of a bug in WebSQL:\n// https://code.google.com/p/chromium/issues/detail?id=422690\n// https://bugs.webkit.org/show_bug.cgi?id=137637\n//\n// UTF-8 and UTF-16 are provided as separate functions\n// for meager performance improvements\n//\n\nfunction decodeUtf8(str) {\n  return decodeURIComponent(escape(str));\n}\n\nfunction hexToInt(charCode) {\n  // '0'-'9' is 48-57\n  // 'A'-'F' is 65-70\n  // SQLite will only give us uppercase hex\n  return charCode < 65 ? (charCode - 48) : (charCode - 55);\n}\n\n\n// Example:\n// pragma encoding=utf8;\n// select hex('A');\n// returns '41'\nfunction parseHexUtf8(str, start, end) {\n  var result = '';\n  while (start < end) {\n    result += String.fromCharCode(\n      (hexToInt(str.charCodeAt(start++)) << 4) |\n        hexToInt(str.charCodeAt(start++)));\n  }\n  return result;\n}\n\n// Example:\n// pragma encoding=utf16;\n// select hex('A');\n// returns '4100'\n// notice that the 00 comes after the 41 (i.e. it's swizzled)\nfunction parseHexUtf16(str, start, end) {\n  var result = '';\n  while (start < end) {\n    // UTF-16, so swizzle the bytes\n    result += String.fromCharCode(\n      (hexToInt(str.charCodeAt(start + 2)) << 12) |\n        (hexToInt(str.charCodeAt(start + 3)) << 8) |\n        (hexToInt(str.charCodeAt(start)) << 4) |\n        hexToInt(str.charCodeAt(start + 1)));\n    start += 4;\n  }\n  return result;\n}\n\nfunction parseHexString(str, encoding) {\n  if (encoding === 'UTF-8') {\n    return decodeUtf8(parseHexUtf8(str, 0, str.length));\n  } else {\n    return parseHexUtf16(str, 0, str.length);\n  }\n}\n\nfunction quote(str) {\n  return \"'\" + str + \"'\";\n}\n\nvar ADAPTER_VERSION$1 = 7; // used to manage migrations\n\n// The object stores created for each database\n// DOC_STORE stores the document meta data, its revision history and state\nvar DOC_STORE$1 = quote('document-store');\n// BY_SEQ_STORE stores a particular version of a document, keyed by its\n// sequence id\nvar BY_SEQ_STORE$1 = quote('by-sequence');\n// Where we store attachments\nvar ATTACH_STORE$1 = quote('attach-store');\nvar LOCAL_STORE$1 = quote('local-store');\nvar META_STORE$1 = quote('metadata-store');\n// where we store many-to-many relations between attachment\n// digests and seqs\nvar ATTACH_AND_SEQ_STORE$1 = quote('attach-seq-store');\n\n// escapeBlob and unescapeBlob are workarounds for a websql bug:\n// https://code.google.com/p/chromium/issues/detail?id=422690\n// https://bugs.webkit.org/show_bug.cgi?id=137637\n// The goal is to never actually insert the \\u0000 character\n// in the database.\nfunction escapeBlob(str) {\n  return str\n    .replace(/\\u0002/g, '\\u0002\\u0002')\n    .replace(/\\u0001/g, '\\u0001\\u0002')\n    .replace(/\\u0000/g, '\\u0001\\u0001');\n}\n\nfunction unescapeBlob(str) {\n  return str\n    .replace(/\\u0001\\u0001/g, '\\u0000')\n    .replace(/\\u0001\\u0002/g, '\\u0001')\n    .replace(/\\u0002\\u0002/g, '\\u0002');\n}\n\nfunction stringifyDoc(doc) {\n  // don't bother storing the id/rev. it uses lots of space,\n  // in persistent map/reduce especially\n  delete doc._id;\n  delete doc._rev;\n  return JSON.stringify(doc);\n}\n\nfunction unstringifyDoc(doc, id, rev) {\n  doc = JSON.parse(doc);\n  doc._id = id;\n  doc._rev = rev;\n  return doc;\n}\n\n// question mark groups IN queries, e.g. 3 -> '(?,?,?)'\nfunction qMarks(num) {\n  var s = '(';\n  while (num--) {\n    s += '?';\n    if (num) {\n      s += ',';\n    }\n  }\n  return s + ')';\n}\n\nfunction select(selector, table, joiner, where, orderBy) {\n  return 'SELECT ' + selector + ' FROM ' +\n    (typeof table === 'string' ? table : table.join(' JOIN ')) +\n    (joiner ? (' ON ' + joiner) : '') +\n    (where ? (' WHERE ' +\n    (typeof where === 'string' ? where : where.join(' AND '))) : '') +\n    (orderBy ? (' ORDER BY ' + orderBy) : '');\n}\n\nfunction compactRevs$1(revs, docId, tx) {\n\n  if (!revs.length) {\n    return;\n  }\n\n  var numDone = 0;\n  var seqs = [];\n\n  function checkDone() {\n    if (++numDone === revs.length) { // done\n      deleteOrphans();\n    }\n  }\n\n  function deleteOrphans() {\n    // find orphaned attachment digests\n\n    if (!seqs.length) {\n      return;\n    }\n\n    var sql = 'SELECT DISTINCT digest AS digest FROM ' +\n      ATTACH_AND_SEQ_STORE$1 + ' WHERE seq IN ' + qMarks(seqs.length);\n\n    tx.executeSql(sql, seqs, function (tx, res) {\n\n      var digestsToCheck = [];\n      for (var i = 0; i < res.rows.length; i++) {\n        digestsToCheck.push(res.rows.item(i).digest);\n      }\n      if (!digestsToCheck.length) {\n        return;\n      }\n\n      var sql = 'DELETE FROM ' + ATTACH_AND_SEQ_STORE$1 +\n        ' WHERE seq IN (' +\n        seqs.map(function () { return '?'; }).join(',') +\n        ')';\n      tx.executeSql(sql, seqs, function (tx) {\n\n        var sql = 'SELECT digest FROM ' + ATTACH_AND_SEQ_STORE$1 +\n          ' WHERE digest IN (' +\n          digestsToCheck.map(function () { return '?'; }).join(',') +\n          ')';\n        tx.executeSql(sql, digestsToCheck, function (tx, res) {\n          var nonOrphanedDigests = new _Set();\n          for (var i = 0; i < res.rows.length; i++) {\n            nonOrphanedDigests.add(res.rows.item(i).digest);\n          }\n          digestsToCheck.forEach(function (digest) {\n            if (nonOrphanedDigests.has(digest)) {\n              return;\n            }\n            tx.executeSql(\n              'DELETE FROM ' + ATTACH_AND_SEQ_STORE$1 + ' WHERE digest=?',\n              [digest]);\n            tx.executeSql(\n              'DELETE FROM ' + ATTACH_STORE$1 + ' WHERE digest=?', [digest]);\n          });\n        });\n      });\n    });\n  }\n\n  // update by-seq and attach stores in parallel\n  revs.forEach(function (rev) {\n    var sql = 'SELECT seq FROM ' + BY_SEQ_STORE$1 +\n      ' WHERE doc_id=? AND rev=?';\n\n    tx.executeSql(sql, [docId, rev], function (tx, res) {\n      if (!res.rows.length) { // already deleted\n        return checkDone();\n      }\n      var seq = res.rows.item(0).seq;\n      seqs.push(seq);\n\n      tx.executeSql(\n        'DELETE FROM ' + BY_SEQ_STORE$1 + ' WHERE seq=?', [seq], checkDone);\n    });\n  });\n}\n\nfunction websqlError(callback) {\n  return function (event) {\n    guardedConsole('error', 'WebSQL threw an error', event);\n    // event may actually be a SQLError object, so report is as such\n    var errorNameMatch = event && event.constructor.toString()\n        .match(/function ([^\\(]+)/);\n    var errorName = (errorNameMatch && errorNameMatch[1]) || event.type;\n    var errorReason = event.target || event.message;\n    callback(createError(WSQ_ERROR, errorReason, errorName));\n  };\n}\n\nfunction getSize(opts) {\n  if ('size' in opts) {\n    // triggers immediate popup in iOS, fixes #2347\n    // e.g. 5000001 asks for 5 MB, 10000001 asks for 10 MB,\n    return opts.size * 1000000;\n  }\n  // In iOS, doesn't matter as long as it's <= 5000000.\n  // Except that if you request too much, our tests fail\n  // because of the native \"do you accept?\" popup.\n  // In Android <=4.3, this value is actually used as an\n  // honest-to-god ceiling for data, so we need to\n  // set it to a decently high number.\n  var isAndroid = typeof navigator !== 'undefined' &&\n    /Android/.test(navigator.userAgent);\n  return isAndroid ? 5000000 : 1; // in PhantomJS, if you use 0 it will crash\n}\n\nfunction websqlBulkDocs(dbOpts, req, opts, api, db, websqlChanges, callback) {\n  var newEdits = opts.new_edits;\n  var userDocs = req.docs;\n\n  // Parse the docs, give them a sequence number for the result\n  var docInfos = userDocs.map(function (doc) {\n    if (doc._id && isLocalId(doc._id)) {\n      return doc;\n    }\n    var newDoc = parseDoc(doc, newEdits);\n    return newDoc;\n  });\n\n  var docInfoErrors = docInfos.filter(function (docInfo) {\n    return docInfo.error;\n  });\n  if (docInfoErrors.length) {\n    return callback(docInfoErrors[0]);\n  }\n\n  var tx;\n  var results = new Array(docInfos.length);\n  var fetchedDocs = new _Map();\n\n  var preconditionErrored;\n  function complete() {\n    if (preconditionErrored) {\n      return callback(preconditionErrored);\n    }\n    websqlChanges.notify(api._name);\n    api._docCount = -1; // invalidate\n    callback(null, results);\n  }\n\n  function verifyAttachment(digest, callback) {\n    var sql = 'SELECT count(*) as cnt FROM ' + ATTACH_STORE$1 +\n      ' WHERE digest=?';\n    tx.executeSql(sql, [digest], function (tx, result) {\n      if (result.rows.item(0).cnt === 0) {\n        var err = createError(MISSING_STUB,\n          'unknown stub attachment with digest ' +\n          digest);\n        callback(err);\n      } else {\n        callback();\n      }\n    });\n  }\n\n  function verifyAttachments(finish) {\n    var digests = [];\n    docInfos.forEach(function (docInfo) {\n      if (docInfo.data && docInfo.data._attachments) {\n        Object.keys(docInfo.data._attachments).forEach(function (filename) {\n          var att = docInfo.data._attachments[filename];\n          if (att.stub) {\n            digests.push(att.digest);\n          }\n        });\n      }\n    });\n    if (!digests.length) {\n      return finish();\n    }\n    var numDone = 0;\n    var err;\n\n    function checkDone() {\n      if (++numDone === digests.length) {\n        finish(err);\n      }\n    }\n    digests.forEach(function (digest) {\n      verifyAttachment(digest, function (attErr) {\n        if (attErr && !err) {\n          err = attErr;\n        }\n        checkDone();\n      });\n    });\n  }\n\n  function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,\n                    isUpdate, delta, resultsIdx, callback) {\n\n    function finish() {\n      var data = docInfo.data;\n      var deletedInt = newRevIsDeleted ? 1 : 0;\n\n      var id = data._id;\n      var rev = data._rev;\n      var json = stringifyDoc(data);\n      var sql = 'INSERT INTO ' + BY_SEQ_STORE$1 +\n        ' (doc_id, rev, json, deleted) VALUES (?, ?, ?, ?);';\n      var sqlArgs = [id, rev, json, deletedInt];\n\n      // map seqs to attachment digests, which\n      // we will need later during compaction\n      function insertAttachmentMappings(seq, callback) {\n        var attsAdded = 0;\n        var attsToAdd = Object.keys(data._attachments || {});\n\n        if (!attsToAdd.length) {\n          return callback();\n        }\n        function checkDone() {\n          if (++attsAdded === attsToAdd.length) {\n            callback();\n          }\n          return false; // ack handling a constraint error\n        }\n        function add(att) {\n          var sql = 'INSERT INTO ' + ATTACH_AND_SEQ_STORE$1 +\n            ' (digest, seq) VALUES (?,?)';\n          var sqlArgs = [data._attachments[att].digest, seq];\n          tx.executeSql(sql, sqlArgs, checkDone, checkDone);\n          // second callback is for a constaint error, which we ignore\n          // because this docid/rev has already been associated with\n          // the digest (e.g. when new_edits == false)\n        }\n        for (var i = 0; i < attsToAdd.length; i++) {\n          add(attsToAdd[i]); // do in parallel\n        }\n      }\n\n      tx.executeSql(sql, sqlArgs, function (tx, result) {\n        var seq = result.insertId;\n        insertAttachmentMappings(seq, function () {\n          dataWritten(tx, seq);\n        });\n      }, function () {\n        // constraint error, recover by updating instead (see #1638)\n        var fetchSql = select('seq', BY_SEQ_STORE$1, null,\n          'doc_id=? AND rev=?');\n        tx.executeSql(fetchSql, [id, rev], function (tx, res) {\n          var seq = res.rows.item(0).seq;\n          var sql = 'UPDATE ' + BY_SEQ_STORE$1 +\n            ' SET json=?, deleted=? WHERE doc_id=? AND rev=?;';\n          var sqlArgs = [json, deletedInt, id, rev];\n          tx.executeSql(sql, sqlArgs, function (tx) {\n            insertAttachmentMappings(seq, function () {\n              dataWritten(tx, seq);\n            });\n          });\n        });\n        return false; // ack that we've handled the error\n      });\n    }\n\n    function collectResults(attachmentErr) {\n      if (!err) {\n        if (attachmentErr) {\n          err = attachmentErr;\n          callback(err);\n        } else if (recv === attachments.length) {\n          finish();\n        }\n      }\n    }\n\n    var err = null;\n    var recv = 0;\n\n    docInfo.data._id = docInfo.metadata.id;\n    docInfo.data._rev = docInfo.metadata.rev;\n    var attachments = Object.keys(docInfo.data._attachments || {});\n\n\n    if (newRevIsDeleted) {\n      docInfo.data._deleted = true;\n    }\n\n    function attachmentSaved(err) {\n      recv++;\n      collectResults(err);\n    }\n\n    attachments.forEach(function (key) {\n      var att = docInfo.data._attachments[key];\n      if (!att.stub) {\n        var data = att.data;\n        delete att.data;\n        att.revpos = parseInt(winningRev, 10);\n        var digest = att.digest;\n        saveAttachment(digest, data, attachmentSaved);\n      } else {\n        recv++;\n        collectResults();\n      }\n    });\n\n    if (!attachments.length) {\n      finish();\n    }\n\n    function dataWritten(tx, seq) {\n      var id = docInfo.metadata.id;\n\n      var revsToCompact = docInfo.stemmedRevs || [];\n      if (isUpdate && api.auto_compaction) {\n        revsToCompact = compactTree(docInfo.metadata).concat(revsToCompact);\n      }\n      if (revsToCompact.length) {\n        compactRevs$1(revsToCompact, id, tx);\n      }\n\n      docInfo.metadata.seq = seq;\n      delete docInfo.metadata.rev;\n\n      var sql = isUpdate ?\n      'UPDATE ' + DOC_STORE$1 +\n      ' SET json=?, max_seq=?, winningseq=' +\n      '(SELECT seq FROM ' + BY_SEQ_STORE$1 +\n      ' WHERE doc_id=' + DOC_STORE$1 + '.id AND rev=?) WHERE id=?'\n        : 'INSERT INTO ' + DOC_STORE$1 +\n      ' (id, winningseq, max_seq, json) VALUES (?,?,?,?);';\n      var metadataStr = safeJsonStringify(docInfo.metadata);\n      var params = isUpdate ?\n        [metadataStr, seq, winningRev, id] :\n        [id, seq, seq, metadataStr];\n      tx.executeSql(sql, params, function () {\n        results[resultsIdx] = {\n          ok: true,\n          id: docInfo.metadata.id,\n          rev: winningRev\n        };\n        fetchedDocs.set(id, docInfo.metadata);\n        callback();\n      });\n    }\n  }\n\n  function websqlProcessDocs() {\n    processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs, tx,\n                results, writeDoc, opts);\n  }\n\n  function fetchExistingDocs(callback) {\n    if (!docInfos.length) {\n      return callback();\n    }\n\n    var numFetched = 0;\n\n    function checkDone() {\n      if (++numFetched === docInfos.length) {\n        callback();\n      }\n    }\n\n    docInfos.forEach(function (docInfo) {\n      if (docInfo._id && isLocalId(docInfo._id)) {\n        return checkDone(); // skip local docs\n      }\n      var id = docInfo.metadata.id;\n      tx.executeSql('SELECT json FROM ' + DOC_STORE$1 +\n      ' WHERE id = ?', [id], function (tx, result) {\n        if (result.rows.length) {\n          var metadata = safeJsonParse(result.rows.item(0).json);\n          fetchedDocs.set(id, metadata);\n        }\n        checkDone();\n      });\n    });\n  }\n\n  function saveAttachment(digest, data, callback) {\n    var sql = 'SELECT digest FROM ' + ATTACH_STORE$1 + ' WHERE digest=?';\n    tx.executeSql(sql, [digest], function (tx, result) {\n      if (result.rows.length) { // attachment already exists\n        return callback();\n      }\n      // we could just insert before selecting and catch the error,\n      // but my hunch is that it's cheaper not to serialize the blob\n      // from JS to C if we don't have to (TODO: confirm this)\n      sql = 'INSERT INTO ' + ATTACH_STORE$1 +\n      ' (digest, body, escaped) VALUES (?,?,1)';\n      tx.executeSql(sql, [digest, escapeBlob(data)], function () {\n        callback();\n      }, function () {\n        // ignore constaint errors, means it already exists\n        callback();\n        return false; // ack we handled the error\n      });\n    });\n  }\n\n  preprocessAttachments(docInfos, 'binary', function (err) {\n    if (err) {\n      return callback(err);\n    }\n    db.transaction(function (txn) {\n      tx = txn;\n      verifyAttachments(function (err) {\n        if (err) {\n          preconditionErrored = err;\n        } else {\n          fetchExistingDocs(websqlProcessDocs);\n        }\n      });\n    }, websqlError(callback), complete);\n  });\n}\n\nvar cachedDatabases = new _Map();\n\n// openDatabase passed in through opts (e.g. for node-websql)\nfunction openDatabaseWithOpts(opts) {\n  return opts.websql(opts.name, opts.version, opts.description, opts.size);\n}\n\nfunction openDBSafely(opts) {\n  try {\n    return {\n      db: openDatabaseWithOpts(opts)\n    };\n  } catch (err) {\n    return {\n      error: err\n    };\n  }\n}\n\nfunction openDB$1(opts) {\n  var cachedResult = cachedDatabases.get(opts.name);\n  if (!cachedResult) {\n    cachedResult = openDBSafely(opts);\n    cachedDatabases.set(opts.name, cachedResult);\n  }\n  return cachedResult;\n}\n\nvar websqlChanges = new Changes$1();\n\nfunction fetchAttachmentsIfNecessary$1(doc, opts, api, txn, cb) {\n  var attachments = Object.keys(doc._attachments || {});\n  if (!attachments.length) {\n    return cb && cb();\n  }\n  var numDone = 0;\n\n  function checkDone() {\n    if (++numDone === attachments.length && cb) {\n      cb();\n    }\n  }\n\n  function fetchAttachment(doc, att) {\n    var attObj = doc._attachments[att];\n    var attOpts = {binary: opts.binary, ctx: txn};\n    api._getAttachment(doc._id, att, attObj, attOpts, function (_, data) {\n      doc._attachments[att] = jsExtend.extend(\n        pick(attObj, ['digest', 'content_type']),\n        { data: data }\n      );\n      checkDone();\n    });\n  }\n\n  attachments.forEach(function (att) {\n    if (opts.attachments && opts.include_docs) {\n      fetchAttachment(doc, att);\n    } else {\n      doc._attachments[att].stub = true;\n      checkDone();\n    }\n  });\n}\n\nvar POUCH_VERSION = 1;\n\n// these indexes cover the ground for most allDocs queries\nvar BY_SEQ_STORE_DELETED_INDEX_SQL =\n  'CREATE INDEX IF NOT EXISTS \\'by-seq-deleted-idx\\' ON ' +\n  BY_SEQ_STORE$1 + ' (seq, deleted)';\nvar BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL =\n  'CREATE UNIQUE INDEX IF NOT EXISTS \\'by-seq-doc-id-rev\\' ON ' +\n    BY_SEQ_STORE$1 + ' (doc_id, rev)';\nvar DOC_STORE_WINNINGSEQ_INDEX_SQL =\n  'CREATE INDEX IF NOT EXISTS \\'doc-winningseq-idx\\' ON ' +\n  DOC_STORE$1 + ' (winningseq)';\nvar ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL =\n  'CREATE INDEX IF NOT EXISTS \\'attach-seq-seq-idx\\' ON ' +\n    ATTACH_AND_SEQ_STORE$1 + ' (seq)';\nvar ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL =\n  'CREATE UNIQUE INDEX IF NOT EXISTS \\'attach-seq-digest-idx\\' ON ' +\n    ATTACH_AND_SEQ_STORE$1 + ' (digest, seq)';\n\nvar DOC_STORE_AND_BY_SEQ_JOINER = BY_SEQ_STORE$1 +\n  '.seq = ' + DOC_STORE$1 + '.winningseq';\n\nvar SELECT_DOCS = BY_SEQ_STORE$1 + '.seq AS seq, ' +\n  BY_SEQ_STORE$1 + '.deleted AS deleted, ' +\n  BY_SEQ_STORE$1 + '.json AS data, ' +\n  BY_SEQ_STORE$1 + '.rev AS rev, ' +\n  DOC_STORE$1 + '.json AS metadata';\n\nfunction WebSqlPouch$1(opts, callback) {\n  var api = this;\n  var instanceId = null;\n  var size = getSize(opts);\n  var idRequests = [];\n  var encoding;\n\n  api._docCount = -1; // cache sqlite count(*) for performance\n  api._name = opts.name;\n\n  // extend the options here, because sqlite plugin has a ton of options\n  // and they are constantly changing, so it's more prudent to allow anything\n  var websqlOpts = jsExtend.extend({}, opts, {\n    version: POUCH_VERSION,\n    description: opts.name,\n    size: size\n  });\n  var openDBResult = openDB$1(websqlOpts);\n  if (openDBResult.error) {\n    return websqlError(callback)(openDBResult.error);\n  }\n  var db = openDBResult.db;\n  if (typeof db.readTransaction !== 'function') {\n    // doesn't exist in sqlite plugin\n    db.readTransaction = db.transaction;\n  }\n\n  function dbCreated() {\n    // note the db name in case the browser upgrades to idb\n    if (hasLocalStorage()) {\n      window.localStorage['_pouch__websqldb_' + api._name] = true;\n    }\n    callback(null, api);\n  }\n\n  // In this migration, we added the 'deleted' and 'local' columns to the\n  // by-seq and doc store tables.\n  // To preserve existing user data, we re-process all the existing JSON\n  // and add these values.\n  // Called migration2 because it corresponds to adapter version (db_version) #2\n  function runMigration2(tx, callback) {\n    // index used for the join in the allDocs query\n    tx.executeSql(DOC_STORE_WINNINGSEQ_INDEX_SQL);\n\n    tx.executeSql('ALTER TABLE ' + BY_SEQ_STORE$1 +\n      ' ADD COLUMN deleted TINYINT(1) DEFAULT 0', [], function () {\n      tx.executeSql(BY_SEQ_STORE_DELETED_INDEX_SQL);\n      tx.executeSql('ALTER TABLE ' + DOC_STORE$1 +\n        ' ADD COLUMN local TINYINT(1) DEFAULT 0', [], function () {\n        tx.executeSql('CREATE INDEX IF NOT EXISTS \\'doc-store-local-idx\\' ON ' +\n          DOC_STORE$1 + ' (local, id)');\n\n        var sql = 'SELECT ' + DOC_STORE$1 + '.winningseq AS seq, ' + DOC_STORE$1 +\n          '.json AS metadata FROM ' + BY_SEQ_STORE$1 + ' JOIN ' + DOC_STORE$1 +\n          ' ON ' + BY_SEQ_STORE$1 + '.seq = ' + DOC_STORE$1 + '.winningseq';\n\n        tx.executeSql(sql, [], function (tx, result) {\n\n          var deleted = [];\n          var local = [];\n\n          for (var i = 0; i < result.rows.length; i++) {\n            var item = result.rows.item(i);\n            var seq = item.seq;\n            var metadata = JSON.parse(item.metadata);\n            if (isDeleted(metadata)) {\n              deleted.push(seq);\n            }\n            if (isLocalId(metadata.id)) {\n              local.push(metadata.id);\n            }\n          }\n          tx.executeSql('UPDATE ' + DOC_STORE$1 + 'SET local = 1 WHERE id IN ' +\n            qMarks(local.length), local, function () {\n            tx.executeSql('UPDATE ' + BY_SEQ_STORE$1 +\n              ' SET deleted = 1 WHERE seq IN ' +\n              qMarks(deleted.length), deleted, callback);\n          });\n        });\n      });\n    });\n  }\n\n  // in this migration, we make all the local docs unversioned\n  function runMigration3(tx, callback) {\n    var local = 'CREATE TABLE IF NOT EXISTS ' + LOCAL_STORE$1 +\n      ' (id UNIQUE, rev, json)';\n    tx.executeSql(local, [], function () {\n      var sql = 'SELECT ' + DOC_STORE$1 + '.id AS id, ' +\n        BY_SEQ_STORE$1 + '.json AS data ' +\n        'FROM ' + BY_SEQ_STORE$1 + ' JOIN ' +\n        DOC_STORE$1 + ' ON ' + BY_SEQ_STORE$1 + '.seq = ' +\n        DOC_STORE$1 + '.winningseq WHERE local = 1';\n      tx.executeSql(sql, [], function (tx, res) {\n        var rows = [];\n        for (var i = 0; i < res.rows.length; i++) {\n          rows.push(res.rows.item(i));\n        }\n        function doNext() {\n          if (!rows.length) {\n            return callback(tx);\n          }\n          var row = rows.shift();\n          var rev = JSON.parse(row.data)._rev;\n          tx.executeSql('INSERT INTO ' + LOCAL_STORE$1 +\n              ' (id, rev, json) VALUES (?,?,?)',\n              [row.id, rev, row.data], function (tx) {\n            tx.executeSql('DELETE FROM ' + DOC_STORE$1 + ' WHERE id=?',\n                [row.id], function (tx) {\n              tx.executeSql('DELETE FROM ' + BY_SEQ_STORE$1 + ' WHERE seq=?',\n                  [row.seq], function () {\n                doNext();\n              });\n            });\n          });\n        }\n        doNext();\n      });\n    });\n  }\n\n  // in this migration, we remove doc_id_rev and just use rev\n  function runMigration4(tx, callback) {\n\n    function updateRows(rows) {\n      function doNext() {\n        if (!rows.length) {\n          return callback(tx);\n        }\n        var row = rows.shift();\n        var doc_id_rev = parseHexString(row.hex, encoding);\n        var idx = doc_id_rev.lastIndexOf('::');\n        var doc_id = doc_id_rev.substring(0, idx);\n        var rev = doc_id_rev.substring(idx + 2);\n        var sql = 'UPDATE ' + BY_SEQ_STORE$1 +\n          ' SET doc_id=?, rev=? WHERE doc_id_rev=?';\n        tx.executeSql(sql, [doc_id, rev, doc_id_rev], function () {\n          doNext();\n        });\n      }\n      doNext();\n    }\n\n    var sql = 'ALTER TABLE ' + BY_SEQ_STORE$1 + ' ADD COLUMN doc_id';\n    tx.executeSql(sql, [], function (tx) {\n      var sql = 'ALTER TABLE ' + BY_SEQ_STORE$1 + ' ADD COLUMN rev';\n      tx.executeSql(sql, [], function (tx) {\n        tx.executeSql(BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL, [], function (tx) {\n          var sql = 'SELECT hex(doc_id_rev) as hex FROM ' + BY_SEQ_STORE$1;\n          tx.executeSql(sql, [], function (tx, res) {\n            var rows = [];\n            for (var i = 0; i < res.rows.length; i++) {\n              rows.push(res.rows.item(i));\n            }\n            updateRows(rows);\n          });\n        });\n      });\n    });\n  }\n\n  // in this migration, we add the attach_and_seq table\n  // for issue #2818\n  function runMigration5(tx, callback) {\n\n    function migrateAttsAndSeqs(tx) {\n      // need to actually populate the table. this is the expensive part,\n      // so as an optimization, check first that this database even\n      // contains attachments\n      var sql = 'SELECT COUNT(*) AS cnt FROM ' + ATTACH_STORE$1;\n      tx.executeSql(sql, [], function (tx, res) {\n        var count = res.rows.item(0).cnt;\n        if (!count) {\n          return callback(tx);\n        }\n\n        var offset = 0;\n        var pageSize = 10;\n        function nextPage() {\n          var sql = select(\n            SELECT_DOCS + ', ' + DOC_STORE$1 + '.id AS id',\n            [DOC_STORE$1, BY_SEQ_STORE$1],\n            DOC_STORE_AND_BY_SEQ_JOINER,\n            null,\n            DOC_STORE$1 + '.id '\n          );\n          sql += ' LIMIT ' + pageSize + ' OFFSET ' + offset;\n          offset += pageSize;\n          tx.executeSql(sql, [], function (tx, res) {\n            if (!res.rows.length) {\n              return callback(tx);\n            }\n            var digestSeqs = {};\n            function addDigestSeq(digest, seq) {\n              // uniq digest/seq pairs, just in case there are dups\n              var seqs = digestSeqs[digest] = (digestSeqs[digest] || []);\n              if (seqs.indexOf(seq) === -1) {\n                seqs.push(seq);\n              }\n            }\n            for (var i = 0; i < res.rows.length; i++) {\n              var row = res.rows.item(i);\n              var doc = unstringifyDoc(row.data, row.id, row.rev);\n              var atts = Object.keys(doc._attachments || {});\n              for (var j = 0; j < atts.length; j++) {\n                var att = doc._attachments[atts[j]];\n                addDigestSeq(att.digest, row.seq);\n              }\n            }\n            var digestSeqPairs = [];\n            Object.keys(digestSeqs).forEach(function (digest) {\n              var seqs = digestSeqs[digest];\n              seqs.forEach(function (seq) {\n                digestSeqPairs.push([digest, seq]);\n              });\n            });\n            if (!digestSeqPairs.length) {\n              return nextPage();\n            }\n            var numDone = 0;\n            digestSeqPairs.forEach(function (pair) {\n              var sql = 'INSERT INTO ' + ATTACH_AND_SEQ_STORE$1 +\n                ' (digest, seq) VALUES (?,?)';\n              tx.executeSql(sql, pair, function () {\n                if (++numDone === digestSeqPairs.length) {\n                  nextPage();\n                }\n              });\n            });\n          });\n        }\n        nextPage();\n      });\n    }\n\n    var attachAndRev = 'CREATE TABLE IF NOT EXISTS ' +\n      ATTACH_AND_SEQ_STORE$1 + ' (digest, seq INTEGER)';\n    tx.executeSql(attachAndRev, [], function (tx) {\n      tx.executeSql(\n        ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL, [], function (tx) {\n          tx.executeSql(\n            ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL, [],\n            migrateAttsAndSeqs);\n        });\n    });\n  }\n\n  // in this migration, we use escapeBlob() and unescapeBlob()\n  // instead of reading out the binary as HEX, which is slow\n  function runMigration6(tx, callback) {\n    var sql = 'ALTER TABLE ' + ATTACH_STORE$1 +\n      ' ADD COLUMN escaped TINYINT(1) DEFAULT 0';\n    tx.executeSql(sql, [], callback);\n  }\n\n  // issue #3136, in this migration we need a \"latest seq\" as well\n  // as the \"winning seq\" in the doc store\n  function runMigration7(tx, callback) {\n    var sql = 'ALTER TABLE ' + DOC_STORE$1 +\n      ' ADD COLUMN max_seq INTEGER';\n    tx.executeSql(sql, [], function (tx) {\n      var sql = 'UPDATE ' + DOC_STORE$1 + ' SET max_seq=(SELECT MAX(seq) FROM ' +\n        BY_SEQ_STORE$1 + ' WHERE doc_id=id)';\n      tx.executeSql(sql, [], function (tx) {\n        // add unique index after filling, else we'll get a constraint\n        // error when we do the ALTER TABLE\n        var sql =\n          'CREATE UNIQUE INDEX IF NOT EXISTS \\'doc-max-seq-idx\\' ON ' +\n          DOC_STORE$1 + ' (max_seq)';\n        tx.executeSql(sql, [], callback);\n      });\n    });\n  }\n\n  function checkEncoding(tx, cb) {\n    // UTF-8 on chrome/android, UTF-16 on safari < 7.1\n    tx.executeSql('SELECT HEX(\"a\") AS hex', [], function (tx, res) {\n        var hex = res.rows.item(0).hex;\n        encoding = hex.length === 2 ? 'UTF-8' : 'UTF-16';\n        cb();\n      }\n    );\n  }\n\n  function onGetInstanceId() {\n    while (idRequests.length > 0) {\n      var idCallback = idRequests.pop();\n      idCallback(null, instanceId);\n    }\n  }\n\n  function onGetVersion(tx, dbVersion) {\n    if (dbVersion === 0) {\n      // initial schema\n\n      var meta = 'CREATE TABLE IF NOT EXISTS ' + META_STORE$1 +\n        ' (dbid, db_version INTEGER)';\n      var attach = 'CREATE TABLE IF NOT EXISTS ' + ATTACH_STORE$1 +\n        ' (digest UNIQUE, escaped TINYINT(1), body BLOB)';\n      var attachAndRev = 'CREATE TABLE IF NOT EXISTS ' +\n        ATTACH_AND_SEQ_STORE$1 + ' (digest, seq INTEGER)';\n      // TODO: migrate winningseq to INTEGER\n      var doc = 'CREATE TABLE IF NOT EXISTS ' + DOC_STORE$1 +\n        ' (id unique, json, winningseq, max_seq INTEGER UNIQUE)';\n      var seq = 'CREATE TABLE IF NOT EXISTS ' + BY_SEQ_STORE$1 +\n        ' (seq INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +\n        'json, deleted TINYINT(1), doc_id, rev)';\n      var local = 'CREATE TABLE IF NOT EXISTS ' + LOCAL_STORE$1 +\n        ' (id UNIQUE, rev, json)';\n\n      // creates\n      tx.executeSql(attach);\n      tx.executeSql(local);\n      tx.executeSql(attachAndRev, [], function () {\n        tx.executeSql(ATTACH_AND_SEQ_STORE_SEQ_INDEX_SQL);\n        tx.executeSql(ATTACH_AND_SEQ_STORE_ATTACH_INDEX_SQL);\n      });\n      tx.executeSql(doc, [], function () {\n        tx.executeSql(DOC_STORE_WINNINGSEQ_INDEX_SQL);\n        tx.executeSql(seq, [], function () {\n          tx.executeSql(BY_SEQ_STORE_DELETED_INDEX_SQL);\n          tx.executeSql(BY_SEQ_STORE_DOC_ID_REV_INDEX_SQL);\n          tx.executeSql(meta, [], function () {\n            // mark the db version, and new dbid\n            var initSeq = 'INSERT INTO ' + META_STORE$1 +\n              ' (db_version, dbid) VALUES (?,?)';\n            instanceId = uuid();\n            var initSeqArgs = [ADAPTER_VERSION$1, instanceId];\n            tx.executeSql(initSeq, initSeqArgs, function () {\n              onGetInstanceId();\n            });\n          });\n        });\n      });\n    } else { // version > 0\n\n      var setupDone = function () {\n        var migrated = dbVersion < ADAPTER_VERSION$1;\n        if (migrated) {\n          // update the db version within this transaction\n          tx.executeSql('UPDATE ' + META_STORE$1 + ' SET db_version = ' +\n            ADAPTER_VERSION$1);\n        }\n        // notify db.id() callers\n        var sql = 'SELECT dbid FROM ' + META_STORE$1;\n        tx.executeSql(sql, [], function (tx, result) {\n          instanceId = result.rows.item(0).dbid;\n          onGetInstanceId();\n        });\n      };\n\n      // would love to use promises here, but then websql\n      // ends the transaction early\n      var tasks = [\n        runMigration2,\n        runMigration3,\n        runMigration4,\n        runMigration5,\n        runMigration6,\n        runMigration7,\n        setupDone\n      ];\n\n      // run each migration sequentially\n      var i = dbVersion;\n      var nextMigration = function (tx) {\n        tasks[i - 1](tx, nextMigration);\n        i++;\n      };\n      nextMigration(tx);\n    }\n  }\n\n  function setup() {\n    db.transaction(function (tx) {\n      // first check the encoding\n      checkEncoding(tx, function () {\n        // then get the version\n        fetchVersion(tx);\n      });\n    }, websqlError(callback), dbCreated);\n  }\n\n  function fetchVersion(tx) {\n    var sql = 'SELECT sql FROM sqlite_master WHERE tbl_name = ' + META_STORE$1;\n    tx.executeSql(sql, [], function (tx, result) {\n      if (!result.rows.length) {\n        // database hasn't even been created yet (version 0)\n        onGetVersion(tx, 0);\n      } else if (!/db_version/.test(result.rows.item(0).sql)) {\n        // table was created, but without the new db_version column,\n        // so add it.\n        tx.executeSql('ALTER TABLE ' + META_STORE$1 +\n          ' ADD COLUMN db_version INTEGER', [], function () {\n          // before version 2, this column didn't even exist\n          onGetVersion(tx, 1);\n        });\n      } else { // column exists, we can safely get it\n        tx.executeSql('SELECT db_version FROM ' + META_STORE$1,\n          [], function (tx, result) {\n          var dbVersion = result.rows.item(0).db_version;\n          onGetVersion(tx, dbVersion);\n        });\n      }\n    });\n  }\n\n  setup();\n\n  api.type = function () {\n    return 'websql';\n  };\n\n  api._id = toPromise(function (callback) {\n    callback(null, instanceId);\n  });\n\n  api._info = function (callback) {\n    db.readTransaction(function (tx) {\n      countDocs(tx, function (docCount) {\n        var sql = 'SELECT MAX(seq) AS seq FROM ' + BY_SEQ_STORE$1;\n        tx.executeSql(sql, [], function (tx, res) {\n          var updateSeq = res.rows.item(0).seq || 0;\n          callback(null, {\n            doc_count: docCount,\n            update_seq: updateSeq,\n            websql_encoding: encoding\n          });\n        });\n      });\n    }, websqlError(callback));\n  };\n\n  api._bulkDocs = function (req, reqOpts, callback) {\n    websqlBulkDocs(opts, req, reqOpts, api, db, websqlChanges, callback);\n  };\n\n  api._get = function (id, opts, callback) {\n    var doc;\n    var metadata;\n    var err;\n    var tx = opts.ctx;\n    if (!tx) {\n      return db.readTransaction(function (txn) {\n        api._get(id, jsExtend.extend({ctx: txn}, opts), callback);\n      });\n    }\n\n    function finish() {\n      callback(err, {doc: doc, metadata: metadata, ctx: tx});\n    }\n\n    var sql;\n    var sqlArgs;\n    if (opts.rev) {\n      sql = select(\n        SELECT_DOCS,\n        [DOC_STORE$1, BY_SEQ_STORE$1],\n        DOC_STORE$1 + '.id=' + BY_SEQ_STORE$1 + '.doc_id',\n        [BY_SEQ_STORE$1 + '.doc_id=?', BY_SEQ_STORE$1 + '.rev=?']);\n      sqlArgs = [id, opts.rev];\n    } else {\n      sql = select(\n        SELECT_DOCS,\n        [DOC_STORE$1, BY_SEQ_STORE$1],\n        DOC_STORE_AND_BY_SEQ_JOINER,\n        DOC_STORE$1 + '.id=?');\n      sqlArgs = [id];\n    }\n    tx.executeSql(sql, sqlArgs, function (a, results) {\n      if (!results.rows.length) {\n        err = createError(MISSING_DOC, 'missing');\n        return finish();\n      }\n      var item = results.rows.item(0);\n      metadata = safeJsonParse(item.metadata);\n      if (item.deleted && !opts.rev) {\n        err = createError(MISSING_DOC, 'deleted');\n        return finish();\n      }\n      doc = unstringifyDoc(item.data, metadata.id, item.rev);\n      finish();\n    });\n  };\n\n  function countDocs(tx, callback) {\n\n    if (api._docCount !== -1) {\n      return callback(api._docCount);\n    }\n\n    // count the total rows\n    var sql = select(\n      'COUNT(' + DOC_STORE$1 + '.id) AS \\'num\\'',\n      [DOC_STORE$1, BY_SEQ_STORE$1],\n      DOC_STORE_AND_BY_SEQ_JOINER,\n      BY_SEQ_STORE$1 + '.deleted=0');\n\n    tx.executeSql(sql, [], function (tx, result) {\n      api._docCount = result.rows.item(0).num;\n      callback(api._docCount);\n    });\n  }\n\n  api._allDocs = function (opts, callback) {\n    var results = [];\n    var totalRows;\n\n    var start = 'startkey' in opts ? opts.startkey : false;\n    var end = 'endkey' in opts ? opts.endkey : false;\n    var key = 'key' in opts ? opts.key : false;\n    var descending = 'descending' in opts ? opts.descending : false;\n    var limit = 'limit' in opts ? opts.limit : -1;\n    var offset = 'skip' in opts ? opts.skip : 0;\n    var inclusiveEnd = opts.inclusive_end !== false;\n\n    var sqlArgs = [];\n    var criteria = [];\n\n    if (key !== false) {\n      criteria.push(DOC_STORE$1 + '.id = ?');\n      sqlArgs.push(key);\n    } else if (start !== false || end !== false) {\n      if (start !== false) {\n        criteria.push(DOC_STORE$1 + '.id ' + (descending ? '<=' : '>=') + ' ?');\n        sqlArgs.push(start);\n      }\n      if (end !== false) {\n        var comparator = descending ? '>' : '<';\n        if (inclusiveEnd) {\n          comparator += '=';\n        }\n        criteria.push(DOC_STORE$1 + '.id ' + comparator + ' ?');\n        sqlArgs.push(end);\n      }\n      if (key !== false) {\n        criteria.push(DOC_STORE$1 + '.id = ?');\n        sqlArgs.push(key);\n      }\n    }\n\n    if (opts.deleted !== 'ok') {\n      // report deleted if keys are specified\n      criteria.push(BY_SEQ_STORE$1 + '.deleted = 0');\n    }\n\n    db.readTransaction(function (tx) {\n\n      // first count up the total rows\n      countDocs(tx, function (count) {\n        totalRows = count;\n\n        if (limit === 0) {\n          return;\n        }\n\n        // then actually fetch the documents\n        var sql = select(\n          SELECT_DOCS,\n          [DOC_STORE$1, BY_SEQ_STORE$1],\n          DOC_STORE_AND_BY_SEQ_JOINER,\n          criteria,\n          DOC_STORE$1 + '.id ' + (descending ? 'DESC' : 'ASC')\n          );\n        sql += ' LIMIT ' + limit + ' OFFSET ' + offset;\n\n        tx.executeSql(sql, sqlArgs, function (tx, result) {\n          for (var i = 0, l = result.rows.length; i < l; i++) {\n            var item = result.rows.item(i);\n            var metadata = safeJsonParse(item.metadata);\n            var id = metadata.id;\n            var data = unstringifyDoc(item.data, id, item.rev);\n            var winningRev = data._rev;\n            var doc = {\n              id: id,\n              key: id,\n              value: {rev: winningRev}\n            };\n            if (opts.include_docs) {\n              doc.doc = data;\n              doc.doc._rev = winningRev;\n              if (opts.conflicts) {\n                doc.doc._conflicts = collectConflicts(metadata);\n              }\n              fetchAttachmentsIfNecessary$1(doc.doc, opts, api, tx);\n            }\n            if (item.deleted) {\n              if (opts.deleted === 'ok') {\n                doc.value.deleted = true;\n                doc.doc = null;\n              } else {\n                continue;\n              }\n            }\n            results.push(doc);\n          }\n        });\n      });\n    }, websqlError(callback), function () {\n      callback(null, {\n        total_rows: totalRows,\n        offset: opts.skip,\n        rows: results\n      });\n    });\n  };\n\n  api._changes = function (opts) {\n    opts = clone(opts);\n\n    if (opts.continuous) {\n      var id = api._name + ':' + uuid();\n      websqlChanges.addListener(api._name, id, api, opts);\n      websqlChanges.notify(api._name);\n      return {\n        cancel: function () {\n          websqlChanges.removeListener(api._name, id);\n        }\n      };\n    }\n\n    var descending = opts.descending;\n\n    // Ignore the `since` parameter when `descending` is true\n    opts.since = opts.since && !descending ? opts.since : 0;\n\n    var limit = 'limit' in opts ? opts.limit : -1;\n    if (limit === 0) {\n      limit = 1; // per CouchDB _changes spec\n    }\n\n    var returnDocs;\n    if ('return_docs' in opts) {\n      returnDocs = opts.return_docs;\n    } else if ('returnDocs' in opts) {\n      // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n      returnDocs = opts.returnDocs;\n    } else {\n      returnDocs = true;\n    }\n    var results = [];\n    var numResults = 0;\n\n    function fetchChanges() {\n\n      var selectStmt =\n        DOC_STORE$1 + '.json AS metadata, ' +\n        DOC_STORE$1 + '.max_seq AS maxSeq, ' +\n        BY_SEQ_STORE$1 + '.json AS winningDoc, ' +\n        BY_SEQ_STORE$1 + '.rev AS winningRev ';\n\n      var from = DOC_STORE$1 + ' JOIN ' + BY_SEQ_STORE$1;\n\n      var joiner = DOC_STORE$1 + '.id=' + BY_SEQ_STORE$1 + '.doc_id' +\n        ' AND ' + DOC_STORE$1 + '.winningseq=' + BY_SEQ_STORE$1 + '.seq';\n\n      var criteria = ['maxSeq > ?'];\n      var sqlArgs = [opts.since];\n\n      if (opts.doc_ids) {\n        criteria.push(DOC_STORE$1 + '.id IN ' + qMarks(opts.doc_ids.length));\n        sqlArgs = sqlArgs.concat(opts.doc_ids);\n      }\n\n      var orderBy = 'maxSeq ' + (descending ? 'DESC' : 'ASC');\n\n      var sql = select(selectStmt, from, joiner, criteria, orderBy);\n\n      var filter = filterChange(opts);\n      if (!opts.view && !opts.filter) {\n        // we can just limit in the query\n        sql += ' LIMIT ' + limit;\n      }\n\n      var lastSeq = opts.since || 0;\n      db.readTransaction(function (tx) {\n        tx.executeSql(sql, sqlArgs, function (tx, result) {\n          function reportChange(change) {\n            return function () {\n              opts.onChange(change);\n            };\n          }\n          for (var i = 0, l = result.rows.length; i < l; i++) {\n            var item = result.rows.item(i);\n            var metadata = safeJsonParse(item.metadata);\n            lastSeq = item.maxSeq;\n\n            var doc = unstringifyDoc(item.winningDoc, metadata.id,\n              item.winningRev);\n            var change = opts.processChange(doc, metadata, opts);\n            change.seq = item.maxSeq;\n\n            var filtered = filter(change);\n            if (typeof filtered === 'object') {\n              return opts.complete(filtered);\n            }\n\n            if (filtered) {\n              numResults++;\n              if (returnDocs) {\n                results.push(change);\n              }\n              // process the attachment immediately\n              // for the benefit of live listeners\n              if (opts.attachments && opts.include_docs) {\n                fetchAttachmentsIfNecessary$1(doc, opts, api, tx,\n                  reportChange(change));\n              } else {\n                reportChange(change)();\n              }\n            }\n            if (numResults === limit) {\n              break;\n            }\n          }\n        });\n      }, websqlError(opts.complete), function () {\n        if (!opts.continuous) {\n          opts.complete(null, {\n            results: results,\n            last_seq: lastSeq\n          });\n        }\n      });\n    }\n\n    fetchChanges();\n  };\n\n  api._close = function (callback) {\n    //WebSQL databases do not need to be closed\n    callback();\n  };\n\n  api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n    var res;\n    var tx = opts.ctx;\n    var digest = attachment.digest;\n    var type = attachment.content_type;\n    var sql = 'SELECT escaped, ' +\n      'CASE WHEN escaped = 1 THEN body ELSE HEX(body) END AS body FROM ' +\n      ATTACH_STORE$1 + ' WHERE digest=?';\n    tx.executeSql(sql, [digest], function (tx, result) {\n      // websql has a bug where \\u0000 causes early truncation in strings\n      // and blobs. to work around this, we used to use the hex() function,\n      // but that's not performant. after migration 6, we remove \\u0000\n      // and add it back in afterwards\n      var item = result.rows.item(0);\n      var data = item.escaped ? unescapeBlob(item.body) :\n        parseHexString(item.body, encoding);\n      if (opts.binary) {\n        res = binStringToBluffer(data, type);\n      } else {\n        res = btoa$1(data);\n      }\n      callback(null, res);\n    });\n  };\n\n  api._getRevisionTree = function (docId, callback) {\n    db.readTransaction(function (tx) {\n      var sql = 'SELECT json AS metadata FROM ' + DOC_STORE$1 + ' WHERE id = ?';\n      tx.executeSql(sql, [docId], function (tx, result) {\n        if (!result.rows.length) {\n          callback(createError(MISSING_DOC));\n        } else {\n          var data = safeJsonParse(result.rows.item(0).metadata);\n          callback(null, data.rev_tree);\n        }\n      });\n    });\n  };\n\n  api._doCompaction = function (docId, revs, callback) {\n    if (!revs.length) {\n      return callback();\n    }\n    db.transaction(function (tx) {\n\n      // update doc store\n      var sql = 'SELECT json AS metadata FROM ' + DOC_STORE$1 + ' WHERE id = ?';\n      tx.executeSql(sql, [docId], function (tx, result) {\n        var metadata = safeJsonParse(result.rows.item(0).metadata);\n        traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n                                                           revHash, ctx, opts) {\n          var rev = pos + '-' + revHash;\n          if (revs.indexOf(rev) !== -1) {\n            opts.status = 'missing';\n          }\n        });\n\n        var sql = 'UPDATE ' + DOC_STORE$1 + ' SET json = ? WHERE id = ?';\n        tx.executeSql(sql, [safeJsonStringify(metadata), docId]);\n      });\n\n      compactRevs$1(revs, docId, tx);\n    }, websqlError(callback), function () {\n      callback();\n    });\n  };\n\n  api._getLocal = function (id, callback) {\n    db.readTransaction(function (tx) {\n      var sql = 'SELECT json, rev FROM ' + LOCAL_STORE$1 + ' WHERE id=?';\n      tx.executeSql(sql, [id], function (tx, res) {\n        if (res.rows.length) {\n          var item = res.rows.item(0);\n          var doc = unstringifyDoc(item.json, id, item.rev);\n          callback(null, doc);\n        } else {\n          callback(createError(MISSING_DOC));\n        }\n      });\n    });\n  };\n\n  api._putLocal = function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    delete doc._revisions; // ignore this, trust the rev\n    var oldRev = doc._rev;\n    var id = doc._id;\n    var newRev;\n    if (!oldRev) {\n      newRev = doc._rev = '0-1';\n    } else {\n      newRev = doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);\n    }\n    var json = stringifyDoc(doc);\n\n    var ret;\n    function putLocal(tx) {\n      var sql;\n      var values;\n      if (oldRev) {\n        sql = 'UPDATE ' + LOCAL_STORE$1 + ' SET rev=?, json=? ' +\n          'WHERE id=? AND rev=?';\n        values = [newRev, json, id, oldRev];\n      } else {\n        sql = 'INSERT INTO ' + LOCAL_STORE$1 + ' (id, rev, json) VALUES (?,?,?)';\n        values = [id, newRev, json];\n      }\n      tx.executeSql(sql, values, function (tx, res) {\n        if (res.rowsAffected) {\n          ret = {ok: true, id: id, rev: newRev};\n          if (opts.ctx) { // return immediately\n            callback(null, ret);\n          }\n        } else {\n          callback(createError(REV_CONFLICT));\n        }\n      }, function () {\n        callback(createError(REV_CONFLICT));\n        return false; // ack that we handled the error\n      });\n    }\n\n    if (opts.ctx) {\n      putLocal(opts.ctx);\n    } else {\n      db.transaction(putLocal, websqlError(callback), function () {\n        if (ret) {\n          callback(null, ret);\n        }\n      });\n    }\n  };\n\n  api._removeLocal = function (doc, opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var ret;\n\n    function removeLocal(tx) {\n      var sql = 'DELETE FROM ' + LOCAL_STORE$1 + ' WHERE id=? AND rev=?';\n      var params = [doc._id, doc._rev];\n      tx.executeSql(sql, params, function (tx, res) {\n        if (!res.rowsAffected) {\n          return callback(createError(MISSING_DOC));\n        }\n        ret = {ok: true, id: doc._id, rev: '0-0'};\n        if (opts.ctx) { // return immediately\n          callback(null, ret);\n        }\n      });\n    }\n\n    if (opts.ctx) {\n      removeLocal(opts.ctx);\n    } else {\n      db.transaction(removeLocal, websqlError(callback), function () {\n        if (ret) {\n          callback(null, ret);\n        }\n      });\n    }\n  };\n\n  api._destroy = function (opts, callback) {\n    websqlChanges.removeAllListeners(api._name);\n    db.transaction(function (tx) {\n      var stores = [DOC_STORE$1, BY_SEQ_STORE$1, ATTACH_STORE$1, META_STORE$1,\n        LOCAL_STORE$1, ATTACH_AND_SEQ_STORE$1];\n      stores.forEach(function (store) {\n        tx.executeSql('DROP TABLE IF EXISTS ' + store, []);\n      });\n    }, websqlError(callback), function () {\n      if (hasLocalStorage()) {\n        delete window.localStorage['_pouch__websqldb_' + api._name];\n        delete window.localStorage[api._name];\n      }\n      callback(null, {'ok': true});\n    });\n  };\n}\n\nfunction canOpenTestDB() {\n  try {\n    openDatabase('_pouch_validate_websql', 1, '', 1);\n    return true;\n  } catch (err) {\n    return false;\n  }\n}\n\n// WKWebView had a bug where WebSQL would throw a DOM Exception 18\n// (see https://bugs.webkit.org/show_bug.cgi?id=137760 and\n// https://github.com/pouchdb/pouchdb/issues/5079)\n// This has been fixed in latest WebKit, so we try to detect it here.\nfunction isValidWebSQL() {\n  // WKWebView UA:\n  //   Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X)\n  //   AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13C75\n  // Chrome for iOS UA:\n  //   Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en)\n  //   AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60\n  //   Mobile/9B206 Safari/7534.48.3\n  // Firefox for iOS UA:\n  //   Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4\n  //   (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4\n\n  // indexedDB is null on some UIWebViews and undefined in others\n  // see: https://bugs.webkit.org/show_bug.cgi?id=137034\n  if (typeof indexedDB === 'undefined' || indexedDB === null ||\n      !/iP(hone|od|ad)/.test(navigator.userAgent)) {\n    // definitely not WKWebView, avoid creating an unnecessary database\n    return true;\n  }\n  // Cache the result in LocalStorage. Reason we do this is because if we\n  // call openDatabase() too many times, Safari craps out in SauceLabs and\n  // starts throwing DOM Exception 14s.\n  var hasLS = hasLocalStorage();\n  // Include user agent in the hash, so that if Safari is upgraded, we don't\n  // continually think it's broken.\n  var localStorageKey = '_pouch__websqldb_valid_' + navigator.userAgent;\n  if (hasLS && localStorage[localStorageKey]) {\n    return localStorage[localStorageKey] === '1';\n  }\n  var openedTestDB = canOpenTestDB();\n  if (hasLS) {\n    localStorage[localStorageKey] = openedTestDB ? '1' : '0';\n  }\n  return openedTestDB;\n}\n\nfunction valid() {\n  if (typeof openDatabase !== 'function') {\n    return false;\n  }\n  return isValidWebSQL();\n}\n\nfunction openDB(name, version, description, size) {\n  // Traditional WebSQL API\n  return openDatabase(name, version, description, size);\n}\n\nfunction WebSQLPouch(opts, callback) {\n  var _opts = jsExtend.extend({\n    websql: openDB\n  }, opts);\n\n  WebSqlPouch$1.call(this, _opts, callback);\n}\n\nWebSQLPouch.valid = valid;\n\nWebSQLPouch.use_prefix = true;\n\nfunction WebSqlPouch (PouchDB) {\n  PouchDB.adapter('websql', WebSQLPouch, true);\n}\n\n/* global fetch */\n/* global Headers */\nfunction wrappedFetch() {\n  var wrappedPromise = {};\n\n  var promise = new PouchPromise(function (resolve, reject) {\n    wrappedPromise.resolve = resolve;\n    wrappedPromise.reject = reject;\n  });\n\n  var args = new Array(arguments.length);\n\n  for (var i = 0; i < args.length; i++) {\n    args[i] = arguments[i];\n  }\n\n  wrappedPromise.promise = promise;\n\n  PouchPromise.resolve().then(function () {\n    return fetch.apply(null, args);\n  }).then(function (response) {\n    wrappedPromise.resolve(response);\n  }).catch(function (error) {\n    wrappedPromise.reject(error);\n  });\n\n  return wrappedPromise;\n}\n\nfunction fetchRequest(options, callback) {\n  var wrappedPromise, timer, response;\n\n  var headers = new Headers();\n\n  var fetchOptions = {\n    method: options.method,\n    credentials: 'include',\n    headers: headers\n  };\n\n  if (options.json) {\n    headers.set('Accept', 'application/json');\n    headers.set('Content-Type', options.headers['Content-Type'] ||\n      'application/json');\n  }\n\n  if (options.body && (options.body instanceof Blob)) {\n    readAsArrayBuffer(options.body, function (arrayBuffer) {\n      fetchOptions.body = arrayBuffer;\n    });\n  } else if (options.body &&\n             options.processData &&\n             typeof options.body !== 'string') {\n    fetchOptions.body = JSON.stringify(options.body);\n  } else if ('body' in options) {\n    fetchOptions.body = options.body;\n  } else {\n    fetchOptions.body = null;\n  }\n\n  Object.keys(options.headers).forEach(function (key) {\n    if (options.headers.hasOwnProperty(key)) {\n      headers.set(key, options.headers[key]);\n    }\n  });\n\n  wrappedPromise = wrappedFetch(options.url, fetchOptions);\n\n  if (options.timeout > 0) {\n    timer = setTimeout(function () {\n      wrappedPromise.reject(new Error('Load timeout for resource: ' +\n        options.url));\n    }, options.timeout);\n  }\n\n  wrappedPromise.promise.then(function (fetchResponse) {\n    response = {\n      statusCode: fetchResponse.status\n    };\n\n    if (options.timeout > 0) {\n      clearTimeout(timer);\n    }\n\n    if (response.statusCode >= 200 && response.statusCode < 300) {\n      return options.binary ? fetchResponse.blob() : fetchResponse.text();\n    }\n\n    return fetchResponse.json();\n  }).then(function (result) {\n    if (response.statusCode >= 200 && response.statusCode < 300) {\n      callback(null, response, result);\n    } else {\n      callback(result, response);\n    }\n  }).catch(function (error) {\n    callback(error, response);\n  });\n\n  return {abort: wrappedPromise.reject};\n}\n\nfunction xhRequest(options, callback) {\n\n  var xhr, timer;\n  var timedout = false;\n\n  var abortReq = function () {\n    xhr.abort();\n    cleanUp();\n  };\n\n  var timeoutReq = function () {\n    timedout = true;\n    xhr.abort();\n    cleanUp();\n  };\n\n  var ret = {abort: abortReq};\n\n  var cleanUp = function () {\n    clearTimeout(timer);\n    ret.abort = function () {};\n    if (xhr) {\n      xhr.onprogress = undefined;\n      if (xhr.upload) {\n        xhr.upload.onprogress = undefined;\n      }\n      xhr.onreadystatechange = undefined;\n      xhr = undefined;\n    }\n  };\n\n  if (options.xhr) {\n    xhr = new options.xhr();\n  } else {\n    xhr = new XMLHttpRequest();\n  }\n\n  try {\n    xhr.open(options.method, options.url);\n  } catch (exception) {\n    return callback(new Error(exception.name || 'Url is invalid'));\n  }\n\n  xhr.withCredentials = ('withCredentials' in options) ?\n    options.withCredentials : true;\n\n  if (options.method === 'GET') {\n    delete options.headers['Content-Type'];\n  } else if (options.json) {\n    options.headers.Accept = 'application/json';\n    options.headers['Content-Type'] = options.headers['Content-Type'] ||\n      'application/json';\n    if (options.body &&\n        options.processData &&\n        typeof options.body !== \"string\") {\n      options.body = JSON.stringify(options.body);\n    }\n  }\n\n  if (options.binary) {\n    xhr.responseType = 'arraybuffer';\n  }\n\n  if (!('body' in options)) {\n    options.body = null;\n  }\n\n  for (var key in options.headers) {\n    if (options.headers.hasOwnProperty(key)) {\n      xhr.setRequestHeader(key, options.headers[key]);\n    }\n  }\n\n  if (options.timeout > 0) {\n    timer = setTimeout(timeoutReq, options.timeout);\n    xhr.onprogress = function () {\n      clearTimeout(timer);\n      if(xhr.readyState !== 4) {\n        timer = setTimeout(timeoutReq, options.timeout);\n      }\n    };\n    if (typeof xhr.upload !== 'undefined') { // does not exist in ie9\n      xhr.upload.onprogress = xhr.onprogress;\n    }\n  }\n\n  xhr.onreadystatechange = function () {\n    if (xhr.readyState !== 4) {\n      return;\n    }\n\n    var response = {\n      statusCode: xhr.status\n    };\n\n    if (xhr.status >= 200 && xhr.status < 300) {\n      var data;\n      if (options.binary) {\n        data = createBlob([xhr.response || ''], {\n          type: xhr.getResponseHeader('Content-Type')\n        });\n      } else {\n        data = xhr.responseText;\n      }\n      callback(null, response, data);\n    } else {\n      var err = {};\n      if (timedout) {\n        err = new Error('ETIMEDOUT');\n        err.code = 'ETIMEDOUT';\n      } else if (typeof xhr.response === 'string') {\n        try {\n          err = JSON.parse(xhr.response);\n        } catch(e) {}\n      }\n      err.status = xhr.status;\n      callback(err);\n    }\n    cleanUp();\n  };\n\n  if (options.body && (options.body instanceof Blob)) {\n    readAsArrayBuffer(options.body, function (arrayBuffer) {\n      xhr.send(arrayBuffer);\n    });\n  } else {\n    xhr.send(options.body);\n  }\n\n  return ret;\n}\n\nfunction testXhr() {\n  try {\n    new XMLHttpRequest();\n    return true;\n  } catch (err) {\n    return false;\n  }\n}\n\nvar hasXhr = testXhr();\n\nfunction ajax$1(options, callback) {\n  if (hasXhr || options.xhr) {\n    return xhRequest(options, callback);\n  } else {\n    return fetchRequest(options, callback);\n  }\n}\n\n// the blob already has a type; do nothing\nvar res$2 = function () {};\n\nfunction defaultBody() {\n  return '';\n}\n\nfunction ajaxCore(options, callback) {\n\n  options = clone(options);\n\n  var defaultOptions = {\n    method : \"GET\",\n    headers: {},\n    json: true,\n    processData: true,\n    timeout: 10000,\n    cache: false\n  };\n\n  options = jsExtend.extend(defaultOptions, options);\n\n  function onSuccess(obj, resp, cb) {\n    if (!options.binary && options.json && typeof obj === 'string') {\n      /* istanbul ignore next */\n      try {\n        obj = JSON.parse(obj);\n      } catch (e) {\n        // Probably a malformed JSON from server\n        return cb(e);\n      }\n    }\n    if (Array.isArray(obj)) {\n      obj = obj.map(function (v) {\n        if (v.error || v.missing) {\n          return generateErrorFromResponse(v);\n        } else {\n          return v;\n        }\n      });\n    }\n    if (options.binary) {\n      res$2(obj, resp);\n    }\n    cb(null, obj, resp);\n  }\n\n  if (options.json) {\n    if (!options.binary) {\n      options.headers.Accept = 'application/json';\n    }\n    options.headers['Content-Type'] = options.headers['Content-Type'] ||\n      'application/json';\n  }\n\n  if (options.binary) {\n    options.encoding = null;\n    options.json = false;\n  }\n\n  if (!options.processData) {\n    options.json = false;\n  }\n\n  return ajax$1(options, function (err, response, body) {\n\n    if (err) {\n      return callback(generateErrorFromResponse(err));\n    }\n\n    var error;\n    var content_type = response.headers && response.headers['content-type'];\n    var data = body || defaultBody();\n\n    // CouchDB doesn't always return the right content-type for JSON data, so\n    // we check for ^{ and }$ (ignoring leading/trailing whitespace)\n    if (!options.binary && (options.json || !options.processData) &&\n        typeof data !== 'object' &&\n        (/json/.test(content_type) ||\n         (/^[\\s]*\\{/.test(data) && /\\}[\\s]*$/.test(data)))) {\n      try {\n        data = JSON.parse(data.toString());\n      } catch (e) {}\n    }\n\n    if (response.statusCode >= 200 && response.statusCode < 300) {\n      onSuccess(data, response, callback);\n    } else {\n      error = generateErrorFromResponse(data);\n      error.status = response.statusCode;\n      callback(error);\n    }\n  });\n}\n\nfunction ajax(opts, callback) {\n\n  // cache-buster, specifically designed to work around IE's aggressive caching\n  // see http://www.dashbay.com/2011/05/internet-explorer-caches-ajax/\n  // Also Safari caches POSTs, so we need to cache-bust those too.\n  var ua = (navigator && navigator.userAgent) ?\n    navigator.userAgent.toLowerCase() : '';\n\n  var isSafari = ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1;\n  var isIE = ua.indexOf('msie') !== -1;\n  var isEdge = ua.indexOf('edge') !== -1;\n\n  // it appears the new version of safari also caches GETs,\n  // see https://github.com/pouchdb/pouchdb/issues/5010\n  var shouldCacheBust = (isSafari ||\n    ((isIE || isEdge) && opts.method === 'GET'));\n\n  var cache = 'cache' in opts ? opts.cache : true;\n\n  var isBlobUrl = /^blob:/.test(opts.url); // don't append nonces for blob URLs\n\n  if (!isBlobUrl && (shouldCacheBust || !cache)) {\n    var hasArgs = opts.url.indexOf('?') !== -1;\n    opts.url += (hasArgs ? '&' : '?') + '_nonce=' + Date.now();\n  }\n\n  return ajaxCore(opts, callback);\n}\n\nvar CHANGES_BATCH_SIZE = 25;\nvar MAX_SIMULTANEOUS_REVS = 50;\n\nvar supportsBulkGetMap = {};\n\nvar log$1 = debug('pouchdb:http');\n\nfunction readAttachmentsAsBlobOrBuffer(row) {\n  var atts = row.doc && row.doc._attachments;\n  if (!atts) {\n    return;\n  }\n  Object.keys(atts).forEach(function (filename) {\n    var att = atts[filename];\n    att.data = b64ToBluffer(att.data, att.content_type);\n  });\n}\n\nfunction encodeDocId(id) {\n  if (/^_design/.test(id)) {\n    return '_design/' + encodeURIComponent(id.slice(8));\n  }\n  if (/^_local/.test(id)) {\n    return '_local/' + encodeURIComponent(id.slice(7));\n  }\n  return encodeURIComponent(id);\n}\n\nfunction preprocessAttachments$1(doc) {\n  if (!doc._attachments || !Object.keys(doc._attachments)) {\n    return PouchPromise.resolve();\n  }\n\n  return PouchPromise.all(Object.keys(doc._attachments).map(function (key) {\n    var attachment = doc._attachments[key];\n    if (attachment.data && typeof attachment.data !== 'string') {\n      return new PouchPromise(function (resolve) {\n        blobToBase64(attachment.data, resolve);\n      }).then(function (b64) {\n        attachment.data = b64;\n      });\n    }\n  }));\n}\n\nfunction hasUrlPrefix(opts) {\n  if (!opts.prefix) {\n    return false;\n  }\n\n  var protocol = parseUri(opts.prefix).protocol;\n\n  return protocol === 'http' || protocol === 'https';\n}\n\n// Get all the information you possibly can about the URI given by name and\n// return it as a suitable object.\nfunction getHost(name, opts) {\n\n  // encode db name if opts.prefix is a url (#5574)\n  if (hasUrlPrefix(opts)) {\n    var dbName = opts.name.substr(opts.prefix.length);\n    name = opts.prefix + encodeURIComponent(dbName);\n  }\n\n  // Prase the URI into all its little bits\n  var uri = parseUri(name);\n\n  // Store the user and password as a separate auth object\n  if (uri.user || uri.password) {\n    uri.auth = {username: uri.user, password: uri.password};\n  }\n\n  // Split the path part of the URI into parts using '/' as the delimiter\n  // after removing any leading '/' and any trailing '/'\n  var parts = uri.path.replace(/(^\\/|\\/$)/g, '').split('/');\n\n  // Store the first part as the database name and remove it from the parts\n  // array\n  uri.db = parts.pop();\n  // Prevent double encoding of URI component\n  if (uri.db.indexOf('%') === -1) {\n    uri.db = encodeURIComponent(uri.db);\n  }\n\n  // Restore the path by joining all the remaining parts (all the parts\n  // except for the database name) with '/'s\n  uri.path = parts.join('/');\n\n  return uri;\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genDBUrl(opts, path) {\n  return genUrl(opts, opts.db + '/' + path);\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genUrl(opts, path) {\n  // If the host already has a path, then we need to have a path delimiter\n  // Otherwise, the path delimiter is the empty string\n  var pathDel = !opts.path ? '' : '/';\n\n  // If the host already has a path, then we need to have a path delimiter\n  // Otherwise, the path delimiter is the empty string\n  return opts.protocol + '://' + opts.host +\n         (opts.port ? (':' + opts.port) : '') +\n         '/' + opts.path + pathDel + path;\n}\n\nfunction paramsToStr(params) {\n  return '?' + Object.keys(params).map(function (k) {\n    return k + '=' + encodeURIComponent(params[k]);\n  }).join('&');\n}\n\n// Implements the PouchDB API for dealing with CouchDB instances over HTTP\nfunction HttpPouch(opts, callback) {\n\n  // The functions that will be publicly available for HttpPouch\n  var api = this;\n\n  var host = getHost(opts.name, opts);\n  var dbUrl = genDBUrl(host, '');\n\n  opts = clone(opts);\n  var ajaxOpts = opts.ajax || {};\n\n  if (opts.auth || host.auth) {\n    var nAuth = opts.auth || host.auth;\n    var str = nAuth.username + ':' + nAuth.password;\n    var token = btoa$1(unescape(encodeURIComponent(str)));\n    ajaxOpts.headers = ajaxOpts.headers || {};\n    ajaxOpts.headers.Authorization = 'Basic ' + token;\n  }\n\n  // Not strictly necessary, but we do this because numerous tests\n  // rely on swapping ajax in and out.\n  api._ajax = ajax;\n\n  function ajax$$(userOpts, options, callback) {\n    var reqAjax = userOpts.ajax || {};\n    var reqOpts = jsExtend.extend(clone(ajaxOpts), reqAjax, options);\n    log$1(reqOpts.method + ' ' + reqOpts.url);\n    return api._ajax(reqOpts, callback);\n  }\n\n  function ajaxPromise(userOpts, opts) {\n    return new PouchPromise(function (resolve, reject) {\n      ajax$$(userOpts, opts, function (err, res) {\n        /* istanbul ignore if */\n        if (err) {\n          return reject(err);\n        }\n        resolve(res);\n      });\n    });\n  }\n\n  function adapterFun$$(name, fun) {\n    return adapterFun(name, getArguments(function (args) {\n      setup().then(function () {\n        return fun.apply(this, args);\n      }).catch(function (e) {\n        var callback = args.pop();\n        callback(e);\n      });\n    }));\n  }\n\n  var setupPromise;\n\n  function setup() {\n    // TODO: Remove `skipSetup` in favor of `skip_setup` in a future release\n    if (opts.skipSetup || opts.skip_setup) {\n      return PouchPromise.resolve();\n    }\n\n    // If there is a setup in process or previous successful setup\n    // done then we will use that\n    // If previous setups have been rejected we will try again\n    if (setupPromise) {\n      return setupPromise;\n    }\n\n    var checkExists = {method: 'GET', url: dbUrl};\n    setupPromise = ajaxPromise({}, checkExists).catch(function (err) {\n      if (err && err.status && err.status === 404) {\n        // Doesnt exist, create it\n        explainError(404, 'PouchDB is just detecting if the remote exists.');\n        return ajaxPromise({}, {method: 'PUT', url: dbUrl});\n      } else {\n        return PouchPromise.reject(err);\n      }\n    }).catch(function (err) {\n      // If we try to create a database that already exists, skipped in\n      // istanbul since its catching a race condition.\n      /* istanbul ignore if */\n      if (err && err.status && err.status === 412) {\n        return true;\n      }\n      return PouchPromise.reject(err);\n    });\n\n    setupPromise.catch(function () {\n      setupPromise = null;\n    });\n\n    return setupPromise;\n  }\n\n  setTimeout(function () {\n    callback(null, api);\n  });\n\n  api.type = function () {\n    return 'http';\n  };\n\n  api.id = adapterFun$$('id', function (callback) {\n    ajax$$({}, {method: 'GET', url: genUrl(host, '')}, function (err, result) {\n      var uuid = (result && result.uuid) ?\n        (result.uuid + host.db) : genDBUrl(host, '');\n      callback(null, uuid);\n    });\n  });\n\n  api.request = adapterFun$$('request', function (options, callback) {\n    options.url = genDBUrl(host, options.url);\n    ajax$$({}, options, callback);\n  });\n\n  // Sends a POST request to the host calling the couchdb _compact function\n  //    version: The version of CouchDB it is running\n  api.compact = adapterFun$$('compact', function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = clone(opts);\n    ajax$$(opts, {\n      url: genDBUrl(host, '_compact'),\n      method: 'POST'\n    }, function () {\n      function ping() {\n        api.info(function (err, res) {\n          if (res && !res.compact_running) {\n            callback(null, {ok: true});\n          } else {\n            setTimeout(ping, opts.interval || 200);\n          }\n        });\n      }\n      // Ping the http if it's finished compaction\n      ping();\n    });\n  });\n\n  api.bulkGet = adapterFun('bulkGet', function (opts, callback) {\n    var self = this;\n\n    function doBulkGet(cb) {\n      var params = {};\n      if (opts.revs) {\n        params.revs = true;\n      }\n      if (opts.attachments) {\n        /* istanbul ignore next */\n        params.attachments = true;\n      }\n      ajax$$({}, {\n        url: genDBUrl(host, '_bulk_get' + paramsToStr(params)),\n        method: 'POST',\n        body: { docs: opts.docs}\n      }, cb);\n    }\n\n    function doBulkGetShim() {\n      // avoid \"url too long error\" by splitting up into multiple requests\n      var batchSize = MAX_SIMULTANEOUS_REVS;\n      var numBatches = Math.ceil(opts.docs.length / batchSize);\n      var numDone = 0;\n      var results = new Array(numBatches);\n\n      function onResult(batchNum) {\n        return function (err, res) {\n          // err is impossible because shim returns a list of errs in that case\n          results[batchNum] = res.results;\n          if (++numDone === numBatches) {\n            callback(null, {results: flatten(results)});\n          }\n        };\n      }\n\n      for (var i = 0; i < numBatches; i++) {\n        var subOpts = pick(opts, ['revs', 'attachments']);\n        subOpts.ajax = ajaxOpts;\n        subOpts.docs = opts.docs.slice(i * batchSize,\n          Math.min(opts.docs.length, (i + 1) * batchSize));\n        bulkGet(self, subOpts, onResult(i));\n      }\n    }\n\n    // mark the whole database as either supporting or not supporting _bulk_get\n    var dbUrl = genUrl(host, '');\n    var supportsBulkGet = supportsBulkGetMap[dbUrl];\n\n    if (typeof supportsBulkGet !== 'boolean') {\n      // check if this database supports _bulk_get\n      doBulkGet(function (err, res) {\n        /* istanbul ignore else */\n        if (err) {\n          var status = Math.floor(err.status / 100);\n          /* istanbul ignore else */\n          if (status === 4 || status === 5) { // 40x or 50x\n            supportsBulkGetMap[dbUrl] = false;\n            explainError(\n              err.status,\n              'PouchDB is just detecting if the remote ' +\n              'supports the _bulk_get API.'\n            );\n            doBulkGetShim();\n          } else {\n            callback(err);\n          }\n        } else {\n          supportsBulkGetMap[dbUrl] = true;\n          callback(null, res);\n        }\n      });\n    } else if (supportsBulkGet) {\n      /* istanbul ignore next */\n      doBulkGet(callback);\n    } else {\n      doBulkGetShim();\n    }\n  });\n\n  // Calls GET on the host, which gets back a JSON string containing\n  //    couchdb: A welcome string\n  //    version: The version of CouchDB it is running\n  api._info = function (callback) {\n    setup().then(function () {\n      ajax$$({}, {\n        method: 'GET',\n        url: genDBUrl(host, '')\n      }, function (err, res) {\n        /* istanbul ignore next */\n        if (err) {\n        return callback(err);\n        }\n        res.host = genDBUrl(host, '');\n        callback(null, res);\n      });\n    }).catch(callback);\n  };\n\n  // Get the document with the given id from the database given by host.\n  // The id could be solely the _id in the database, or it may be a\n  // _design/ID or _local/ID path\n  api.get = adapterFun$$('get', function (id, opts, callback) {\n    // If no options were given, set the callback to the second parameter\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = clone(opts);\n\n    // List of parameters to add to the GET request\n    var params = {};\n\n    if (opts.revs) {\n      params.revs = true;\n    }\n\n    if (opts.revs_info) {\n      params.revs_info = true;\n    }\n\n    if (opts.open_revs) {\n      if (opts.open_revs !== \"all\") {\n        opts.open_revs = JSON.stringify(opts.open_revs);\n      }\n      params.open_revs = opts.open_revs;\n    }\n\n    if (opts.rev) {\n      params.rev = opts.rev;\n    }\n\n    if (opts.conflicts) {\n      params.conflicts = opts.conflicts;\n    }\n\n    id = encodeDocId(id);\n\n    // Set the options for the ajax call\n    var options = {\n      method: 'GET',\n      url: genDBUrl(host, id + paramsToStr(params))\n    };\n\n    function fetchAttachments(doc) {\n      var atts = doc._attachments;\n      var filenames = atts && Object.keys(atts);\n      if (!atts || !filenames.length) {\n        return;\n      }\n      // we fetch these manually in separate XHRs, because\n      // Sync Gateway would normally send it back as multipart/mixed,\n      // which we cannot parse. Also, this is more efficient than\n      // receiving attachments as base64-encoded strings.\n      function fetch() {\n\n        if (!filenames.length) {\n          return null;\n        }\n\n        var filename = filenames.pop();\n        var att = atts[filename];\n        var path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +\n          '?rev=' + doc._rev;\n        return ajaxPromise(opts, {\n          method: 'GET',\n          url: genDBUrl(host, path),\n          binary: true\n        }).then(function (blob) {\n          if (opts.binary) {\n            return blob;\n          }\n          return new PouchPromise(function (resolve) {\n            blobToBase64(blob, resolve);\n          });\n        }).then(function (data) {\n          delete att.stub;\n          delete att.length;\n          att.data = data;\n        });\n      }\n\n      // This limits the number of parallel xhr requests to 5 any time\n      // to avoid issues with maximum browser request limits\n      return new PromisePool(fetch, 5, {promise: PouchPromise}).start();\n    }\n\n    function fetchAllAttachments(docOrDocs) {\n      if (Array.isArray(docOrDocs)) {\n        return PouchPromise.all(docOrDocs.map(function (doc) {\n          if (doc.ok) {\n            return fetchAttachments(doc.ok);\n          }\n        }));\n      }\n      return fetchAttachments(docOrDocs);\n    }\n\n    ajaxPromise(opts, options).then(function (res) {\n      return PouchPromise.resolve().then(function () {\n        if (opts.attachments) {\n          return fetchAllAttachments(res);\n        }\n      }).then(function () {\n        callback(null, res);\n      });\n    }).catch(callback);\n  });\n\n  // Delete the document given by doc from the database given by host.\n  api.remove = adapterFun$$('remove',\n      function (docOrId, optsOrRev, opts, callback) {\n    var doc;\n    if (typeof optsOrRev === 'string') {\n      // id, rev, opts, callback style\n      doc = {\n        _id: docOrId,\n        _rev: optsOrRev\n      };\n      if (typeof opts === 'function') {\n        callback = opts;\n        opts = {};\n      }\n    } else {\n      // doc, opts, callback style\n      doc = docOrId;\n      if (typeof optsOrRev === 'function') {\n        callback = optsOrRev;\n        opts = {};\n      } else {\n        callback = opts;\n        opts = optsOrRev;\n      }\n    }\n\n    var rev = (doc._rev || opts.rev);\n\n    // Delete the document\n    ajax$$(opts, {\n      method: 'DELETE',\n      url: genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev\n    }, callback);\n  });\n\n  function encodeAttachmentId(attachmentId) {\n    return attachmentId.split(\"/\").map(encodeURIComponent).join(\"/\");\n  }\n\n  // Get the attachment\n  api.getAttachment =\n    adapterFun$$('getAttachment', function (docId, attachmentId, opts,\n                                                callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    var params = opts.rev ? ('?rev=' + opts.rev) : '';\n    var url = genDBUrl(host, encodeDocId(docId)) + '/' +\n      encodeAttachmentId(attachmentId) + params;\n    ajax$$(opts, {\n      method: 'GET',\n      url: url,\n      binary: true\n    }, callback);\n  });\n\n  // Remove the attachment given by the id and rev\n  api.removeAttachment =\n    adapterFun$$('removeAttachment', function (docId, attachmentId, rev,\n                                                   callback) {\n\n    var url = genDBUrl(host, encodeDocId(docId) + '/' +\n      encodeAttachmentId(attachmentId)) + '?rev=' + rev;\n\n    ajax$$({}, {\n      method: 'DELETE',\n      url: url\n    }, callback);\n  });\n\n  // Add the attachment given by blob and its contentType property\n  // to the document with the given id, the revision given by rev, and\n  // add it to the database given by host.\n  api.putAttachment =\n    adapterFun$$('putAttachment', function (docId, attachmentId, rev, blob,\n                                                type, callback) {\n    if (typeof type === 'function') {\n      callback = type;\n      type = blob;\n      blob = rev;\n      rev = null;\n    }\n    var id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);\n    var url = genDBUrl(host, id);\n    if (rev) {\n      url += '?rev=' + rev;\n    }\n\n    if (typeof blob === 'string') {\n      // input is assumed to be a base64 string\n      var binary;\n      try {\n        binary = atob$1(blob);\n      } catch (err) {\n        return callback(createError(BAD_ARG,\n                        'Attachment is not a valid base64 string'));\n      }\n      blob = binary ? binStringToBluffer(binary, type) : '';\n    }\n\n    var opts = {\n      headers: {'Content-Type': type},\n      method: 'PUT',\n      url: url,\n      processData: false,\n      body: blob,\n      timeout: ajaxOpts.timeout || 60000\n    };\n    // Add the attachment\n    ajax$$({}, opts, callback);\n  });\n\n  // Update/create multiple documents given by req in the database\n  // given by host.\n  api._bulkDocs = function (req, opts, callback) {\n    // If new_edits=false then it prevents the database from creating\n    // new revision numbers for the documents. Instead it just uses\n    // the old ones. This is used in database replication.\n    req.new_edits = opts.new_edits;\n\n    setup().then(function () {\n      return PouchPromise.all(req.docs.map(preprocessAttachments$1));\n    }).then(function () {\n      // Update/create the documents\n      ajax$$(opts, {\n        method: 'POST',\n        url: genDBUrl(host, '_bulk_docs'),\n        timeout: opts.timeout,\n        body: req\n      }, function (err, results) {\n        if (err) {\n          return callback(err);\n        }\n        results.forEach(function (result) {\n          result.ok = true; // smooths out cloudant not adding this\n        });\n        callback(null, results);\n      });\n    }).catch(callback);\n  };\n\n\n  // Update/create document\n  api._put = function (doc, opts, callback) {\n    setup().then(function () {\n      return preprocessAttachments$1(doc);\n    }).then(function () {\n      // Update/create the document\n      ajax$$(opts, {\n        method: 'PUT',\n        url: genDBUrl(host, encodeDocId(doc._id)),\n        body: doc\n      }, function (err, result) {\n        if (err) {\n          return callback(err);\n        }\n        callback(null, result);\n      });\n    }).catch(callback);\n  };\n\n\n  // Get a listing of the documents in the database given\n  // by host and ordered by increasing id.\n  api.allDocs = adapterFun$$('allDocs', function (opts, callback) {\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n    opts = clone(opts);\n\n    // List of parameters to add to the GET request\n    var params = {};\n    var body;\n    var method = 'GET';\n\n    if (opts.conflicts) {\n      params.conflicts = true;\n    }\n\n    if (opts.descending) {\n      params.descending = true;\n    }\n\n    if (opts.include_docs) {\n      params.include_docs = true;\n    }\n\n    // added in CouchDB 1.6.0\n    if (opts.attachments) {\n      params.attachments = true;\n    }\n\n    if (opts.key) {\n      params.key = JSON.stringify(opts.key);\n    }\n\n    if (opts.start_key) {\n      opts.startkey = opts.start_key;\n    }\n\n    if (opts.startkey) {\n      params.startkey = JSON.stringify(opts.startkey);\n    }\n\n    if (opts.end_key) {\n      opts.endkey = opts.end_key;\n    }\n\n    if (opts.endkey) {\n      params.endkey = JSON.stringify(opts.endkey);\n    }\n\n    if (typeof opts.inclusive_end !== 'undefined') {\n      params.inclusive_end = !!opts.inclusive_end;\n    }\n\n    if (typeof opts.limit !== 'undefined') {\n      params.limit = opts.limit;\n    }\n\n    if (typeof opts.skip !== 'undefined') {\n      params.skip = opts.skip;\n    }\n\n    var paramStr = paramsToStr(params);\n\n    if (typeof opts.keys !== 'undefined') {\n      method = 'POST';\n      body = {keys: opts.keys};\n    }\n\n    // Get the document listing\n    ajaxPromise(opts, {\n      method: method,\n      url: genDBUrl(host, '_all_docs' + paramStr),\n      body: body\n    }).then(function (res) {\n      if (opts.include_docs && opts.attachments && opts.binary) {\n        res.rows.forEach(readAttachmentsAsBlobOrBuffer);\n      }\n      callback(null, res);\n    }).catch(callback);\n  });\n\n  // Get a list of changes made to documents in the database given by host.\n  // TODO According to the README, there should be two other methods here,\n  // api.changes.addListener and api.changes.removeListener.\n  api._changes = function (opts) {\n\n    // We internally page the results of a changes request, this means\n    // if there is a large set of changes to be returned we can start\n    // processing them quicker instead of waiting on the entire\n    // set of changes to return and attempting to process them at once\n    var batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;\n\n    opts = clone(opts);\n    opts.timeout = ('timeout' in opts) ? opts.timeout :\n      ('timeout' in ajaxOpts) ? ajaxOpts.timeout :\n      30 * 1000;\n\n    // We give a 5 second buffer for CouchDB changes to respond with\n    // an ok timeout (if a timeout it set)\n    var params = opts.timeout ? {timeout: opts.timeout - (5 * 1000)} : {};\n    var limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;\n    var returnDocs;\n    if ('return_docs' in opts) {\n      returnDocs = opts.return_docs;\n    } else if ('returnDocs' in opts) {\n      // TODO: Remove 'returnDocs' in favor of 'return_docs' in a future release\n      returnDocs = opts.returnDocs;\n    } else {\n      returnDocs = true;\n    }\n    //\n    var leftToFetch = limit;\n\n    if (opts.style) {\n      params.style = opts.style;\n    }\n\n    if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {\n      params.include_docs = true;\n    }\n\n    if (opts.attachments) {\n      params.attachments = true;\n    }\n\n    if (opts.continuous) {\n      params.feed = 'longpoll';\n    }\n\n    if (opts.conflicts) {\n      params.conflicts = true;\n    }\n\n    if (opts.descending) {\n      params.descending = true;\n    }\n\n    if ('heartbeat' in opts) {\n      // If the heartbeat value is false, it disables the default heartbeat\n      if (opts.heartbeat) {\n        params.heartbeat = opts.heartbeat;\n      }\n    } else {\n      // Default heartbeat to 10 seconds\n      params.heartbeat = 10000;\n    }\n\n    if (opts.filter && typeof opts.filter === 'string') {\n      params.filter = opts.filter;\n    }\n\n    if (opts.view && typeof opts.view === 'string') {\n      params.filter = '_view';\n      params.view = opts.view;\n    }\n\n    // If opts.query_params exists, pass it through to the changes request.\n    // These parameters may be used by the filter on the source database.\n    if (opts.query_params && typeof opts.query_params === 'object') {\n      for (var param_name in opts.query_params) {\n        /* istanbul ignore else */\n        if (opts.query_params.hasOwnProperty(param_name)) {\n          params[param_name] = opts.query_params[param_name];\n        }\n      }\n    }\n\n    var method = 'GET';\n    var body;\n\n    if (opts.doc_ids) {\n      // set this automagically for the user; it's annoying that couchdb\n      // requires both a \"filter\" and a \"doc_ids\" param.\n      params.filter = '_doc_ids';\n      method = 'POST';\n      body = {doc_ids: opts.doc_ids };\n    }\n\n    var xhr;\n    var lastFetchedSeq;\n\n    // Get all the changes starting wtih the one immediately after the\n    // sequence number given by since.\n    var fetch = function (since, callback) {\n      if (opts.aborted) {\n        return;\n      }\n      params.since = since;\n      // \"since\" can be any kind of json object in Coudant/CouchDB 2.x\n      /* istanbul ignore next */\n      if (typeof params.since === \"object\") {\n        params.since = JSON.stringify(params.since);\n      }\n\n      if (opts.descending) {\n        if (limit) {\n          params.limit = leftToFetch;\n        }\n      } else {\n        params.limit = (!limit || leftToFetch > batchSize) ?\n          batchSize : leftToFetch;\n      }\n\n      // Set the options for the ajax call\n      var xhrOpts = {\n        method: method,\n        url: genDBUrl(host, '_changes' + paramsToStr(params)),\n        timeout: opts.timeout,\n        body: body\n      };\n      lastFetchedSeq = since;\n\n      /* istanbul ignore if */\n      if (opts.aborted) {\n        return;\n      }\n\n      // Get the changes\n      setup().then(function () {\n        xhr = ajax$$(opts, xhrOpts, callback);\n      }).catch(callback);\n    };\n\n    // If opts.since exists, get all the changes from the sequence\n    // number given by opts.since. Otherwise, get all the changes\n    // from the sequence number 0.\n    var results = {results: []};\n\n    var fetched = function (err, res) {\n      if (opts.aborted) {\n        return;\n      }\n      var raw_results_length = 0;\n      // If the result of the ajax call (res) contains changes (res.results)\n      if (res && res.results) {\n        raw_results_length = res.results.length;\n        results.last_seq = res.last_seq;\n        // For each change\n        var req = {};\n        req.query = opts.query_params;\n        res.results = res.results.filter(function (c) {\n          leftToFetch--;\n          var ret = filterChange(opts)(c);\n          if (ret) {\n            if (opts.include_docs && opts.attachments && opts.binary) {\n              readAttachmentsAsBlobOrBuffer(c);\n            }\n            if (returnDocs) {\n              results.results.push(c);\n            }\n            opts.onChange(c);\n          }\n          return ret;\n        });\n      } else if (err) {\n        // In case of an error, stop listening for changes and call\n        // opts.complete\n        opts.aborted = true;\n        opts.complete(err);\n        return;\n      }\n\n      // The changes feed may have timed out with no results\n      // if so reuse last update sequence\n      if (res && res.last_seq) {\n        lastFetchedSeq = res.last_seq;\n      }\n\n      var finished = (limit && leftToFetch <= 0) ||\n        (res && raw_results_length < batchSize) ||\n        (opts.descending);\n\n      if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {\n        // Queue a call to fetch again with the newest sequence number\n        setTimeout(function () { fetch(lastFetchedSeq, fetched); }, 0);\n      } else {\n        // We're done, call the callback\n        opts.complete(null, results);\n      }\n    };\n\n    fetch(opts.since || 0, fetched);\n\n    // Return a method to cancel this method from processing any more\n    return {\n      cancel: function () {\n        opts.aborted = true;\n        if (xhr) {\n          xhr.abort();\n        }\n      }\n    };\n  };\n\n  // Given a set of document/revision IDs (given by req), tets the subset of\n  // those that do NOT correspond to revisions stored in the database.\n  // See http://wiki.apache.org/couchdb/HttpPostRevsDiff\n  api.revsDiff = adapterFun$$('revsDiff', function (req, opts, callback) {\n    // If no options were given, set the callback to be the second parameter\n    if (typeof opts === 'function') {\n      callback = opts;\n      opts = {};\n    }\n\n    // Get the missing document/revision IDs\n    ajax$$(opts, {\n      method: 'POST',\n      url: genDBUrl(host, '_revs_diff'),\n      body: req\n    }, callback);\n  });\n\n  api._close = function (callback) {\n    callback();\n  };\n\n  api._destroy = function (options, callback) {\n    ajax$$(options, {\n      url: genDBUrl(host, ''),\n      method: 'DELETE'\n    }, function (err, resp) {\n      if (err && err.status && err.status !== 404) {\n        return callback(err);\n      }\n      callback(null, resp);\n    });\n  };\n}\n\n// HttpPouch is a valid adapter.\nHttpPouch.valid = function () {\n  return true;\n};\n\nfunction HttpPouch$1 (PouchDB) {\n  PouchDB.adapter('http', HttpPouch, false);\n  PouchDB.adapter('https', HttpPouch, false);\n}\n\nfunction pad(str, padWith, upToLength) {\n  var padding = '';\n  var targetLength = upToLength - str.length;\n  /* istanbul ignore next */\n  while (padding.length < targetLength) {\n    padding += padWith;\n  }\n  return padding;\n}\n\nfunction padLeft(str, padWith, upToLength) {\n  var padding = pad(str, padWith, upToLength);\n  return padding + str;\n}\n\nvar MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE\nvar MAGNITUDE_DIGITS = 3; // ditto\nvar SEP = ''; // set to '_' for easier debugging \n\nfunction collate(a, b) {\n\n  if (a === b) {\n    return 0;\n  }\n\n  a = normalizeKey(a);\n  b = normalizeKey(b);\n\n  var ai = collationIndex(a);\n  var bi = collationIndex(b);\n  if ((ai - bi) !== 0) {\n    return ai - bi;\n  }\n  if (a === null) {\n    return 0;\n  }\n  switch (typeof a) {\n    case 'number':\n      return a - b;\n    case 'boolean':\n      return a === b ? 0 : (a < b ? -1 : 1);\n    case 'string':\n      return stringCollate(a, b);\n  }\n  return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b);\n}\n\n// couch considers null/NaN/Infinity/-Infinity === undefined,\n// for the purposes of mapreduce indexes. also, dates get stringified.\nfunction normalizeKey(key) {\n  switch (typeof key) {\n    case 'undefined':\n      return null;\n    case 'number':\n      if (key === Infinity || key === -Infinity || isNaN(key)) {\n        return null;\n      }\n      return key;\n    case 'object':\n      var origKey = key;\n      if (Array.isArray(key)) {\n        var len = key.length;\n        key = new Array(len);\n        for (var i = 0; i < len; i++) {\n          key[i] = normalizeKey(origKey[i]);\n        }\n      /* istanbul ignore next */\n      } else if (key instanceof Date) {\n        return key.toJSON();\n      } else if (key !== null) { // generic object\n        key = {};\n        for (var k in origKey) {\n          if (origKey.hasOwnProperty(k)) {\n            var val = origKey[k];\n            if (typeof val !== 'undefined') {\n              key[k] = normalizeKey(val);\n            }\n          }\n        }\n      }\n  }\n  return key;\n}\n\nfunction indexify(key) {\n  if (key !== null) {\n    switch (typeof key) {\n      case 'boolean':\n        return key ? 1 : 0;\n      case 'number':\n        return numToIndexableString(key);\n      case 'string':\n        // We've to be sure that key does not contain \\u0000\n        // Do order-preserving replacements:\n        // 0 -> 1, 1\n        // 1 -> 1, 2\n        // 2 -> 2, 2\n        return key\n          .replace(/\\u0002/g, '\\u0002\\u0002')\n          .replace(/\\u0001/g, '\\u0001\\u0002')\n          .replace(/\\u0000/g, '\\u0001\\u0001');\n      case 'object':\n        var isArray = Array.isArray(key);\n        var arr = isArray ? key : Object.keys(key);\n        var i = -1;\n        var len = arr.length;\n        var result = '';\n        if (isArray) {\n          while (++i < len) {\n            result += toIndexableString(arr[i]);\n          }\n        } else {\n          while (++i < len) {\n            var objKey = arr[i];\n            result += toIndexableString(objKey) +\n                toIndexableString(key[objKey]);\n          }\n        }\n        return result;\n    }\n  }\n  return '';\n}\n\n// convert the given key to a string that would be appropriate\n// for lexical sorting, e.g. within a database, where the\n// sorting is the same given by the collate() function.\nfunction toIndexableString(key) {\n  var zero = '\\u0000';\n  key = normalizeKey(key);\n  return collationIndex(key) + SEP + indexify(key) + zero;\n}\n\nfunction parseNumber(str, i) {\n  var originalIdx = i;\n  var num;\n  var zero = str[i] === '1';\n  if (zero) {\n    num = 0;\n    i++;\n  } else {\n    var neg = str[i] === '0';\n    i++;\n    var numAsString = '';\n    var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);\n    var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;\n    /* istanbul ignore next */\n    if (neg) {\n      magnitude = -magnitude;\n    }\n    i += MAGNITUDE_DIGITS;\n    while (true) {\n      var ch = str[i];\n      if (ch === '\\u0000') {\n        break;\n      } else {\n        numAsString += ch;\n      }\n      i++;\n    }\n    numAsString = numAsString.split('.');\n    if (numAsString.length === 1) {\n      num = parseInt(numAsString, 10);\n    } else {\n      /* istanbul ignore next */\n      num = parseFloat(numAsString[0] + '.' + numAsString[1]);\n    }\n    /* istanbul ignore next */\n    if (neg) {\n      num = num - 10;\n    }\n    /* istanbul ignore next */\n    if (magnitude !== 0) {\n      // parseFloat is more reliable than pow due to rounding errors\n      // e.g. Number.MAX_VALUE would return Infinity if we did\n      // num * Math.pow(10, magnitude);\n      num = parseFloat(num + 'e' + magnitude);\n    }\n  }\n  return {num: num, length : i - originalIdx};\n}\n\n// move up the stack while parsing\n// this function moved outside of parseIndexableString for performance\nfunction pop(stack, metaStack) {\n  var obj = stack.pop();\n\n  if (metaStack.length) {\n    var lastMetaElement = metaStack[metaStack.length - 1];\n    if (obj === lastMetaElement.element) {\n      // popping a meta-element, e.g. an object whose value is another object\n      metaStack.pop();\n      lastMetaElement = metaStack[metaStack.length - 1];\n    }\n    var element = lastMetaElement.element;\n    var lastElementIndex = lastMetaElement.index;\n    if (Array.isArray(element)) {\n      element.push(obj);\n    } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n      var key = stack.pop();\n      element[key] = obj;\n    } else {\n      stack.push(obj); // obj with key only\n    }\n  }\n}\n\nfunction parseIndexableString(str) {\n  var stack = [];\n  var metaStack = []; // stack for arrays and objects\n  var i = 0;\n\n  /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n  while (true) {\n    var collationIndex = str[i++];\n    if (collationIndex === '\\u0000') {\n      if (stack.length === 1) {\n        return stack.pop();\n      } else {\n        pop(stack, metaStack);\n        continue;\n      }\n    }\n    switch (collationIndex) {\n      case '1':\n        stack.push(null);\n        break;\n      case '2':\n        stack.push(str[i] === '1');\n        i++;\n        break;\n      case '3':\n        var parsedNum = parseNumber(str, i);\n        stack.push(parsedNum.num);\n        i += parsedNum.length;\n        break;\n      case '4':\n        var parsedStr = '';\n        /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n        while (true) {\n          var ch = str[i];\n          if (ch === '\\u0000') {\n            break;\n          }\n          parsedStr += ch;\n          i++;\n        }\n        // perform the reverse of the order-preserving replacement\n        // algorithm (see above)\n        parsedStr = parsedStr.replace(/\\u0001\\u0001/g, '\\u0000')\n          .replace(/\\u0001\\u0002/g, '\\u0001')\n          .replace(/\\u0002\\u0002/g, '\\u0002');\n        stack.push(parsedStr);\n        break;\n      case '5':\n        var arrayElement = { element: [], index: stack.length };\n        stack.push(arrayElement.element);\n        metaStack.push(arrayElement);\n        break;\n      case '6':\n        var objElement = { element: {}, index: stack.length };\n        stack.push(objElement.element);\n        metaStack.push(objElement);\n        break;\n      /* istanbul ignore next */\n      default:\n        throw new Error(\n          'bad collationIndex or unexpectedly reached end of input: ' +\n            collationIndex);\n    }\n  }\n}\n\nfunction arrayCollate(a, b) {\n  var len = Math.min(a.length, b.length);\n  for (var i = 0; i < len; i++) {\n    var sort = collate(a[i], b[i]);\n    if (sort !== 0) {\n      return sort;\n    }\n  }\n  return (a.length === b.length) ? 0 :\n    (a.length > b.length) ? 1 : -1;\n}\nfunction stringCollate(a, b) {\n  // See: https://github.com/daleharvey/pouchdb/issues/40\n  // This is incompatible with the CouchDB implementation, but its the\n  // best we can do for now\n  return (a === b) ? 0 : ((a > b) ? 1 : -1);\n}\nfunction objectCollate(a, b) {\n  var ak = Object.keys(a), bk = Object.keys(b);\n  var len = Math.min(ak.length, bk.length);\n  for (var i = 0; i < len; i++) {\n    // First sort the keys\n    var sort = collate(ak[i], bk[i]);\n    if (sort !== 0) {\n      return sort;\n    }\n    // if the keys are equal sort the values\n    sort = collate(a[ak[i]], b[bk[i]]);\n    if (sort !== 0) {\n      return sort;\n    }\n\n  }\n  return (ak.length === bk.length) ? 0 :\n    (ak.length > bk.length) ? 1 : -1;\n}\n// The collation is defined by erlangs ordered terms\n// the atoms null, true, false come first, then numbers, strings,\n// arrays, then objects\n// null/undefined/NaN/Infinity/-Infinity are all considered null\nfunction collationIndex(x) {\n  var id = ['boolean', 'number', 'string', 'object'];\n  var idx = id.indexOf(typeof x);\n  //false if -1 otherwise true, but fast!!!!1\n  if (~idx) {\n    if (x === null) {\n      return 1;\n    }\n    if (Array.isArray(x)) {\n      return 5;\n    }\n    return idx < 3 ? (idx + 2) : (idx + 3);\n  }\n  /* istanbul ignore next */\n  if (Array.isArray(x)) {\n    return 5;\n  }\n}\n\n// conversion:\n// x yyy zz...zz\n// x = 0 for negative, 1 for 0, 2 for positive\n// y = exponent (for negative numbers negated) moved so that it's >= 0\n// z = mantisse\nfunction numToIndexableString(num) {\n\n  if (num === 0) {\n    return '1';\n  }\n\n  // convert number to exponential format for easier and\n  // more succinct string sorting\n  var expFormat = num.toExponential().split(/e\\+?/);\n  var magnitude = parseInt(expFormat[1], 10);\n\n  var neg = num < 0;\n\n  var result = neg ? '0' : '2';\n\n  // first sort by magnitude\n  // it's easier if all magnitudes are positive\n  var magForComparison = ((neg ? -magnitude : magnitude) - MIN_MAGNITUDE);\n  var magString = padLeft((magForComparison).toString(), '0', MAGNITUDE_DIGITS);\n\n  result += SEP + magString;\n\n  // then sort by the factor\n  var factor = Math.abs(parseFloat(expFormat[0])); // [1..10)\n  /* istanbul ignore next */\n  if (neg) { // for negative reverse ordering\n    factor = 10 - factor;\n  }\n\n  var factorStr = factor.toFixed(20);\n\n  // strip zeros from the end\n  factorStr = factorStr.replace(/\\.?0+$/, '');\n\n  result += SEP + factorStr;\n\n  return result;\n}\n\n/*\n * Simple task queue to sequentialize actions. Assumes\n * callbacks will eventually fire (once).\n */\n\nfunction TaskQueue$1() {\n  this.promise = new PouchPromise(function (fulfill) {fulfill(); });\n}\nTaskQueue$1.prototype.add = function (promiseFactory) {\n  this.promise = this.promise.catch(function () {\n    // just recover\n  }).then(function () {\n    return promiseFactory();\n  });\n  return this.promise;\n};\nTaskQueue$1.prototype.finish = function () {\n  return this.promise;\n};\n\nfunction createView(opts) {\n  var sourceDB = opts.db;\n  var viewName = opts.viewName;\n  var mapFun = opts.map;\n  var reduceFun = opts.reduce;\n  var temporary = opts.temporary;\n\n  // the \"undefined\" part is for backwards compatibility\n  var viewSignature = mapFun.toString() + (reduceFun && reduceFun.toString()) +\n    'undefined';\n\n  var cachedViews;\n  if (!temporary) {\n    // cache this to ensure we don't try to update the same view twice\n    cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};\n    if (cachedViews[viewSignature]) {\n      return cachedViews[viewSignature];\n    }\n  }\n\n  var promiseForView = sourceDB.info().then(function (info) {\n\n    var depDbName = info.db_name + '-mrview-' +\n      (temporary ? 'temp' : stringMd5(viewSignature));\n\n    // save the view name in the source db so it can be cleaned up if necessary\n    // (e.g. when the _design doc is deleted, remove all associated view data)\n    function diffFunction(doc) {\n      doc.views = doc.views || {};\n      var fullViewName = viewName;\n      if (fullViewName.indexOf('/') === -1) {\n        fullViewName = viewName + '/' + viewName;\n      }\n      var depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};\n      /* istanbul ignore if */\n      if (depDbs[depDbName]) {\n        return; // no update necessary\n      }\n      depDbs[depDbName] = true;\n      return doc;\n    }\n    return upsert(sourceDB, '_local/mrviews', diffFunction).then(function () {\n      return sourceDB.registerDependentDatabase(depDbName).then(function (res) {\n        var db = res.db;\n        db.auto_compaction = true;\n        var view = {\n          name: depDbName,\n          db: db,\n          sourceDB: sourceDB,\n          adapter: sourceDB.adapter,\n          mapFun: mapFun,\n          reduceFun: reduceFun\n        };\n        return view.db.get('_local/lastSeq').catch(function (err) {\n          /* istanbul ignore if */\n          if (err.status !== 404) {\n            throw err;\n          }\n        }).then(function (lastSeqDoc) {\n          view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;\n          if (cachedViews) {\n            view.db.once('destroyed', function () {\n              delete cachedViews[viewSignature];\n            });\n          }\n          return view;\n        });\n      });\n    });\n  });\n\n  if (cachedViews) {\n    cachedViews[viewSignature] = promiseForView;\n  }\n  return promiseForView;\n}\n\nfunction evalfunc(func, emit, sum, log, isArray, toJSON) {\n  return scopedEval(\n    \"return (\" + func.replace(/;\\s*$/, \"\") + \");\",\n    {\n      emit: emit,\n      sum: sum,\n      log: log,\n      isArray: isArray,\n      toJSON: toJSON\n    }\n  );\n}\n\nvar promisedCallback = function (promise, callback) {\n  if (callback) {\n    promise.then(function (res) {\n      process.nextTick(function () {\n        callback(null, res);\n      });\n    }, function (reason) {\n      process.nextTick(function () {\n        callback(reason);\n      });\n    });\n  }\n  return promise;\n};\n\nvar callbackify = function (fun) {\n  return getArguments(function (args) {\n    var cb = args.pop();\n    var promise = fun.apply(this, args);\n    if (typeof cb === 'function') {\n      promisedCallback(promise, cb);\n    }\n    return promise;\n  });\n};\n\n// Promise finally util similar to Q.finally\nvar fin = function (promise, finalPromiseFactory) {\n  return promise.then(function (res) {\n    return finalPromiseFactory().then(function () {\n      return res;\n    });\n  }, function (reason) {\n    return finalPromiseFactory().then(function () {\n      throw reason;\n    });\n  });\n};\n\nvar sequentialize = function (queue, promiseFactory) {\n  return function () {\n    var args = arguments;\n    var that = this;\n    return queue.add(function () {\n      return promiseFactory.apply(that, args);\n    });\n  };\n};\n\n// uniq an array of strings, order not guaranteed\n// similar to underscore/lodash _.uniq\nvar uniq = function (arr) {\n  var map = {};\n\n  for (var i = 0, len = arr.length; i < len; i++) {\n    map['$' + arr[i]] = true;\n  }\n\n  var keys = Object.keys(map);\n  var output = new Array(keys.length);\n\n  for (i = 0, len = keys.length; i < len; i++) {\n    output[i] = keys[i].substring(1);\n  }\n  return output;\n};\n\nvar persistentQueues = {};\nvar tempViewQueue = new TaskQueue$1();\nvar CHANGES_BATCH_SIZE$1 = 50;\n\nvar log$2 = guardedConsole.bind(null, 'log');\n\nfunction parseViewName(name) {\n  // can be either 'ddocname/viewname' or just 'viewname'\n  // (where the ddoc name is the same)\n  return name.indexOf('/') === -1 ? [name, name] : name.split('/');\n}\n\nfunction isGenOne(changes) {\n  // only return true if the current change is 1-\n  // and there are no other leafs\n  return changes.length === 1 && /^1-/.test(changes[0].rev);\n}\n\nfunction emitError(db, e) {\n  try {\n    db.emit('error', e);\n  } catch (err) {\n    guardedConsole('error',\n      'The user\\'s map/reduce function threw an uncaught error.\\n' +\n      'You can debug this error by doing:\\n' +\n      'myDatabase.on(\\'error\\', function (err) { debugger; });\\n' +\n      'Please double-check your map/reduce function.');\n    guardedConsole('error', e);\n  }\n}\n\nfunction tryCode$1(db, fun, args) {\n  // emit an event if there was an error thrown by a map/reduce function.\n  // putting try/catches in a single function also avoids deoptimizations.\n  try {\n    return {\n      output : fun.apply(null, args)\n    };\n  } catch (e) {\n    emitError(db, e);\n    return {error: e};\n  }\n}\n\nfunction sortByKeyThenValue(x, y) {\n  var keyCompare = collate(x.key, y.key);\n  return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);\n}\n\nfunction sliceResults(results, limit, skip) {\n  skip = skip || 0;\n  if (typeof limit === 'number') {\n    return results.slice(skip, limit + skip);\n  } else if (skip > 0) {\n    return results.slice(skip);\n  }\n  return results;\n}\n\nfunction rowToDocId(row) {\n  var val = row.value;\n  // Users can explicitly specify a joined doc _id, or it\n  // defaults to the doc _id that emitted the key/value.\n  var docId = (val && typeof val === 'object' && val._id) || row.id;\n  return docId;\n}\n\nfunction readAttachmentsAsBlobOrBuffer$1(res) {\n  res.rows.forEach(function (row) {\n    var atts = row.doc && row.doc._attachments;\n    if (!atts) {\n      return;\n    }\n    Object.keys(atts).forEach(function (filename) {\n      var att = atts[filename];\n      atts[filename].data = b64ToBluffer(att.data, att.content_type);\n    });\n  });\n}\n\nfunction postprocessAttachments(opts) {\n  return function (res) {\n    if (opts.include_docs && opts.attachments && opts.binary) {\n      readAttachmentsAsBlobOrBuffer$1(res);\n    }\n    return res;\n  };\n}\n\nfunction createBuiltInError(name) {\n  var message = 'builtin ' + name +\n    ' function requires map values to be numbers' +\n    ' or number arrays';\n  return new BuiltInError(message);\n}\n\nfunction sum(values) {\n  var result = 0;\n  for (var i = 0, len = values.length; i < len; i++) {\n    var num = values[i];\n    if (typeof num !== 'number') {\n      if (Array.isArray(num)) {\n        // lists of numbers are also allowed, sum them separately\n        result = typeof result === 'number' ? [result] : result;\n        for (var j = 0, jLen = num.length; j < jLen; j++) {\n          var jNum = num[j];\n          if (typeof jNum !== 'number') {\n            throw createBuiltInError('_sum');\n          } else if (typeof result[j] === 'undefined') {\n            result.push(jNum);\n          } else {\n            result[j] += jNum;\n          }\n        }\n      } else { // not array/number\n        throw createBuiltInError('_sum');\n      }\n    } else if (typeof result === 'number') {\n      result += num;\n    } else { // add number to array\n      result[0] += num;\n    }\n  }\n  return result;\n}\n\nvar builtInReduce = {\n  _sum: function (keys, values) {\n    return sum(values);\n  },\n\n  _count: function (keys, values) {\n    return values.length;\n  },\n\n  _stats: function (keys, values) {\n    // no need to implement rereduce=true, because Pouch\n    // will never call it\n    function sumsqr(values) {\n      var _sumsqr = 0;\n      for (var i = 0, len = values.length; i < len; i++) {\n        var num = values[i];\n        _sumsqr += (num * num);\n      }\n      return _sumsqr;\n    }\n    return {\n      sum     : sum(values),\n      min     : Math.min.apply(null, values),\n      max     : Math.max.apply(null, values),\n      count   : values.length,\n      sumsqr : sumsqr(values)\n    };\n  }\n};\n\nfunction addHttpParam(paramName, opts, params, asJson) {\n  // add an http param from opts to params, optionally json-encoded\n  var val = opts[paramName];\n  if (typeof val !== 'undefined') {\n    if (asJson) {\n      val = encodeURIComponent(JSON.stringify(val));\n    }\n    params.push(paramName + '=' + val);\n  }\n}\n\nfunction coerceInteger(integerCandidate) {\n  if (typeof integerCandidate !== 'undefined') {\n    var asNumber = Number(integerCandidate);\n    // prevents e.g. '1foo' or '1.1' being coerced to 1\n    if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {\n      return asNumber;\n    } else {\n      return integerCandidate;\n    }\n  }\n}\n\nfunction coerceOptions(opts) {\n  opts.group_level = coerceInteger(opts.group_level);\n  opts.limit = coerceInteger(opts.limit);\n  opts.skip = coerceInteger(opts.skip);\n  return opts;\n}\n\nfunction checkPositiveInteger(number) {\n  if (number) {\n    if (typeof number !== 'number') {\n      return  new QueryParseError('Invalid value for integer: \"' +\n      number + '\"');\n    }\n    if (number < 0) {\n      return new QueryParseError('Invalid value for positive integer: ' +\n        '\"' + number + '\"');\n    }\n  }\n}\n\nfunction checkQueryParseError(options, fun) {\n  var startkeyName = options.descending ? 'endkey' : 'startkey';\n  var endkeyName = options.descending ? 'startkey' : 'endkey';\n\n  if (typeof options[startkeyName] !== 'undefined' &&\n    typeof options[endkeyName] !== 'undefined' &&\n    collate(options[startkeyName], options[endkeyName]) > 0) {\n    throw new QueryParseError('No rows can match your key range, ' +\n    'reverse your start_key and end_key or set {descending : true}');\n  } else if (fun.reduce && options.reduce !== false) {\n    if (options.include_docs) {\n      throw new QueryParseError('{include_docs:true} is invalid for reduce');\n    } else if (options.keys && options.keys.length > 1 &&\n        !options.group && !options.group_level) {\n      throw new QueryParseError('Multi-key fetches for reduce views must use ' +\n      '{group: true}');\n    }\n  }\n  ['group_level', 'limit', 'skip'].forEach(function (optionName) {\n    var error = checkPositiveInteger(options[optionName]);\n    if (error) {\n      throw error;\n    }\n  });\n}\n\nfunction httpQuery(db, fun, opts) {\n  // List of parameters to add to the PUT request\n  var params = [];\n  var body;\n  var method = 'GET';\n\n  // If opts.reduce exists and is defined, then add it to the list\n  // of parameters.\n  // If reduce=false then the results are that of only the map function\n  // not the final result of map and reduce.\n  addHttpParam('reduce', opts, params);\n  addHttpParam('include_docs', opts, params);\n  addHttpParam('attachments', opts, params);\n  addHttpParam('limit', opts, params);\n  addHttpParam('descending', opts, params);\n  addHttpParam('group', opts, params);\n  addHttpParam('group_level', opts, params);\n  addHttpParam('skip', opts, params);\n  addHttpParam('stale', opts, params);\n  addHttpParam('conflicts', opts, params);\n  addHttpParam('startkey', opts, params, true);\n  addHttpParam('start_key', opts, params, true);\n  addHttpParam('endkey', opts, params, true);\n  addHttpParam('end_key', opts, params, true);\n  addHttpParam('inclusive_end', opts, params);\n  addHttpParam('key', opts, params, true);\n\n  // Format the list of parameters into a valid URI query string\n  params = params.join('&');\n  params = params === '' ? '' : '?' + params;\n\n  // If keys are supplied, issue a POST to circumvent GET query string limits\n  // see http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options\n  if (typeof opts.keys !== 'undefined') {\n    var MAX_URL_LENGTH = 2000;\n    // according to http://stackoverflow.com/a/417184/680742,\n    // the de facto URL length limit is 2000 characters\n\n    var keysAsString =\n      'keys=' + encodeURIComponent(JSON.stringify(opts.keys));\n    if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {\n      // If the keys are short enough, do a GET. we do this to work around\n      // Safari not understanding 304s on POSTs (see pouchdb/pouchdb#1239)\n      params += (params[0] === '?' ? '&' : '?') + keysAsString;\n    } else {\n      method = 'POST';\n      if (typeof fun === 'string') {\n        body = {keys: opts.keys};\n      } else { // fun is {map : mapfun}, so append to this\n        fun.keys = opts.keys;\n      }\n    }\n  }\n\n  // We are referencing a query defined in the design doc\n  if (typeof fun === 'string') {\n    var parts = parseViewName(fun);\n    return db.request({\n      method: method,\n      url: '_design/' + parts[0] + '/_view/' + parts[1] + params,\n      body: body\n    }).then(postprocessAttachments(opts));\n  }\n\n  // We are using a temporary view, terrible for performance, good for testing\n  body = body || {};\n  Object.keys(fun).forEach(function (key) {\n    if (Array.isArray(fun[key])) {\n      body[key] = fun[key];\n    } else {\n      body[key] = fun[key].toString();\n    }\n  });\n  return db.request({\n    method: 'POST',\n    url: '_temp_view' + params,\n    body: body\n  }).then(postprocessAttachments(opts));\n}\n\n// custom adapters can define their own api._query\n// and override the default behavior\n/* istanbul ignore next */\nfunction customQuery(db, fun, opts) {\n  return new PouchPromise(function (resolve, reject) {\n    db._query(fun, opts, function (err, res) {\n      if (err) {\n        return reject(err);\n      }\n      resolve(res);\n    });\n  });\n}\n\n// custom adapters can define their own api._viewCleanup\n// and override the default behavior\n/* istanbul ignore next */\nfunction customViewCleanup(db) {\n  return new PouchPromise(function (resolve, reject) {\n    db._viewCleanup(function (err, res) {\n      if (err) {\n        return reject(err);\n      }\n      resolve(res);\n    });\n  });\n}\n\nfunction defaultsTo(value) {\n  return function (reason) {\n    /* istanbul ignore else */\n    if (reason.status === 404) {\n      return value;\n    } else {\n      throw reason;\n    }\n  };\n}\n\n// returns a promise for a list of docs to update, based on the input docId.\n// the order doesn't matter, because post-3.2.0, bulkDocs\n// is an atomic operation in all three adapters.\nfunction getDocsToPersist(docId, view, docIdsToChangesAndEmits) {\n  var metaDocId = '_local/doc_' + docId;\n  var defaultMetaDoc = {_id: metaDocId, keys: []};\n  var docData = docIdsToChangesAndEmits[docId];\n  var indexableKeysToKeyValues = docData.indexableKeysToKeyValues;\n  var changes = docData.changes;\n\n  function getMetaDoc() {\n    if (isGenOne(changes)) {\n      // generation 1, so we can safely assume initial state\n      // for performance reasons (avoids unnecessary GETs)\n      return PouchPromise.resolve(defaultMetaDoc);\n    }\n    return view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc));\n  }\n\n  function getKeyValueDocs(metaDoc) {\n    if (!metaDoc.keys.length) {\n      // no keys, no need for a lookup\n      return PouchPromise.resolve({rows: []});\n    }\n    return view.db.allDocs({\n      keys: metaDoc.keys,\n      include_docs: true\n    });\n  }\n\n  function processKvDocs(metaDoc, kvDocsRes) {\n    var kvDocs = [];\n    var oldKeysMap = {};\n\n    for (var i = 0, len = kvDocsRes.rows.length; i < len; i++) {\n      var row = kvDocsRes.rows[i];\n      var doc = row.doc;\n      if (!doc) { // deleted\n        continue;\n      }\n      kvDocs.push(doc);\n      oldKeysMap[doc._id] = true;\n      doc._deleted = !indexableKeysToKeyValues[doc._id];\n      if (!doc._deleted) {\n        var keyValue = indexableKeysToKeyValues[doc._id];\n        if ('value' in keyValue) {\n          doc.value = keyValue.value;\n        }\n      }\n    }\n\n    var newKeys = Object.keys(indexableKeysToKeyValues);\n    newKeys.forEach(function (key) {\n      if (!oldKeysMap[key]) {\n        // new doc\n        var kvDoc = {\n          _id: key\n        };\n        var keyValue = indexableKeysToKeyValues[key];\n        if ('value' in keyValue) {\n          kvDoc.value = keyValue.value;\n        }\n        kvDocs.push(kvDoc);\n      }\n    });\n    metaDoc.keys = uniq(newKeys.concat(metaDoc.keys));\n    kvDocs.push(metaDoc);\n\n    return kvDocs;\n  }\n\n  return getMetaDoc().then(function (metaDoc) {\n    return getKeyValueDocs(metaDoc).then(function (kvDocsRes) {\n      return processKvDocs(metaDoc, kvDocsRes);\n    });\n  });\n}\n\n// updates all emitted key/value docs and metaDocs in the mrview database\n// for the given batch of documents from the source database\nfunction saveKeyValues(view, docIdsToChangesAndEmits, seq) {\n  var seqDocId = '_local/lastSeq';\n  return view.db.get(seqDocId)\n  .catch(defaultsTo({_id: seqDocId, seq: 0}))\n  .then(function (lastSeqDoc) {\n    var docIds = Object.keys(docIdsToChangesAndEmits);\n    return PouchPromise.all(docIds.map(function (docId) {\n      return getDocsToPersist(docId, view, docIdsToChangesAndEmits);\n    })).then(function (listOfDocsToPersist) {\n      var docsToPersist = flatten(listOfDocsToPersist);\n      lastSeqDoc.seq = seq;\n      docsToPersist.push(lastSeqDoc);\n      // write all docs in a single operation, update the seq once\n      return view.db.bulkDocs({docs : docsToPersist});\n    });\n  });\n}\n\nfunction getQueue(view) {\n  var viewName = typeof view === 'string' ? view : view.name;\n  var queue = persistentQueues[viewName];\n  if (!queue) {\n    queue = persistentQueues[viewName] = new TaskQueue$1();\n  }\n  return queue;\n}\n\nfunction updateView(view) {\n  return sequentialize(getQueue(view), function () {\n    return updateViewInQueue(view);\n  })();\n}\n\nfunction updateViewInQueue(view) {\n  // bind the emit function once\n  var mapResults;\n  var doc;\n\n  function emit(key, value) {\n    var output = {id: doc._id, key: normalizeKey(key)};\n    // Don't explicitly store the value unless it's defined and non-null.\n    // This saves on storage space, because often people don't use it.\n    if (typeof value !== 'undefined' && value !== null) {\n      output.value = normalizeKey(value);\n    }\n    mapResults.push(output);\n  }\n\n  var mapFun;\n  // for temp_views one can use emit(doc, emit), see #38\n  if (typeof view.mapFun === \"function\" && view.mapFun.length === 2) {\n    var origMap = view.mapFun;\n    mapFun = function (doc) {\n      return origMap(doc, emit);\n    };\n  } else {\n    mapFun = evalfunc(view.mapFun.toString(), emit, sum, log$2, Array.isArray,\n      JSON.parse);\n  }\n\n  var currentSeq = view.seq || 0;\n\n  function processChange(docIdsToChangesAndEmits, seq) {\n    return function () {\n      return saveKeyValues(view, docIdsToChangesAndEmits, seq);\n    };\n  }\n\n  var queue = new TaskQueue$1();\n  // TODO(neojski): https://github.com/daleharvey/pouchdb/issues/1521\n\n  return new PouchPromise(function (resolve, reject) {\n\n    function complete() {\n      queue.finish().then(function () {\n        view.seq = currentSeq;\n        resolve();\n      });\n    }\n\n    function processNextBatch() {\n      view.sourceDB.changes({\n        conflicts: true,\n        include_docs: true,\n        style: 'all_docs',\n        since: currentSeq,\n        limit: CHANGES_BATCH_SIZE$1\n      }).on('complete', function (response) {\n        var results = response.results;\n        if (!results.length) {\n          return complete();\n        }\n        var docIdsToChangesAndEmits = {};\n        for (var i = 0, l = results.length; i < l; i++) {\n          var change = results[i];\n          if (change.doc._id[0] !== '_') {\n            mapResults = [];\n            doc = change.doc;\n\n            if (!doc._deleted) {\n              tryCode$1(view.sourceDB, mapFun, [doc]);\n            }\n            mapResults.sort(sortByKeyThenValue);\n\n            var indexableKeysToKeyValues = {};\n            var lastKey;\n            for (var j = 0, jl = mapResults.length; j < jl; j++) {\n              var obj = mapResults[j];\n              var complexKey = [obj.key, obj.id];\n              if (collate(obj.key, lastKey) === 0) {\n                complexKey.push(j); // dup key+id, so make it unique\n              }\n              var indexableKey = toIndexableString(complexKey);\n              indexableKeysToKeyValues[indexableKey] = obj;\n              lastKey = obj.key;\n            }\n            docIdsToChangesAndEmits[change.doc._id] = {\n              indexableKeysToKeyValues: indexableKeysToKeyValues,\n              changes: change.changes\n            };\n          }\n          currentSeq = change.seq;\n        }\n        queue.add(processChange(docIdsToChangesAndEmits, currentSeq));\n        if (results.length < CHANGES_BATCH_SIZE$1) {\n          return complete();\n        }\n        return processNextBatch();\n      }).on('error', onError);\n      /* istanbul ignore next */\n      function onError(err) {\n        reject(err);\n      }\n    }\n\n    processNextBatch();\n  });\n}\n\nfunction reduceView(view, results, options) {\n  if (options.group_level === 0) {\n    delete options.group_level;\n  }\n\n  var shouldGroup = options.group || options.group_level;\n\n  var reduceFun;\n  if (builtInReduce[view.reduceFun]) {\n    reduceFun = builtInReduce[view.reduceFun];\n  } else {\n    reduceFun = evalfunc(\n      view.reduceFun.toString(), null, sum, log$2, Array.isArray, JSON.parse);\n  }\n\n  var groups = [];\n  var lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY :\n    options.group_level;\n  results.forEach(function (e) {\n    var last = groups[groups.length - 1];\n    var groupKey = shouldGroup ? e.key : null;\n\n    // only set group_level for array keys\n    if (shouldGroup && Array.isArray(groupKey)) {\n      groupKey = groupKey.slice(0, lvl);\n    }\n\n    if (last && collate(last.groupKey, groupKey) === 0) {\n      last.keys.push([e.key, e.id]);\n      last.values.push(e.value);\n      return;\n    }\n    groups.push({\n      keys: [[e.key, e.id]],\n      values: [e.value],\n      groupKey: groupKey\n    });\n  });\n  results = [];\n  for (var i = 0, len = groups.length; i < len; i++) {\n    var e = groups[i];\n    var reduceTry = tryCode$1(view.sourceDB, reduceFun,\n      [e.keys, e.values, false]);\n    if (reduceTry.error && reduceTry.error instanceof BuiltInError) {\n      // CouchDB returns an error if a built-in errors out\n      throw reduceTry.error;\n    }\n    results.push({\n      // CouchDB just sets the value to null if a non-built-in errors out\n      value: reduceTry.error ? null : reduceTry.output,\n      key: e.groupKey\n    });\n  }\n  // no total_rows/offset when reducing\n  return {rows: sliceResults(results, options.limit, options.skip)};\n}\n\nfunction queryView(view, opts) {\n  return sequentialize(getQueue(view), function () {\n    return queryViewInQueue(view, opts);\n  })();\n}\n\nfunction queryViewInQueue(view, opts) {\n  var totalRows;\n  var shouldReduce = view.reduceFun && opts.reduce !== false;\n  var skip = opts.skip || 0;\n  if (typeof opts.keys !== 'undefined' && !opts.keys.length) {\n    // equivalent query\n    opts.limit = 0;\n    delete opts.keys;\n  }\n\n  function fetchFromView(viewOpts) {\n    viewOpts.include_docs = true;\n    return view.db.allDocs(viewOpts).then(function (res) {\n      totalRows = res.total_rows;\n      return res.rows.map(function (result) {\n\n        // implicit migration - in older versions of PouchDB,\n        // we explicitly stored the doc as {id: ..., key: ..., value: ...}\n        // this is tested in a migration test\n        /* istanbul ignore next */\n        if ('value' in result.doc && typeof result.doc.value === 'object' &&\n            result.doc.value !== null) {\n          var keys = Object.keys(result.doc.value).sort();\n          // this detection method is not perfect, but it's unlikely the user\n          // emitted a value which was an object with these 3 exact keys\n          var expectedKeys = ['id', 'key', 'value'];\n          if (!(keys < expectedKeys || keys > expectedKeys)) {\n            return result.doc.value;\n          }\n        }\n\n        var parsedKeyAndDocId = parseIndexableString(result.doc._id);\n        return {\n          key: parsedKeyAndDocId[0],\n          id: parsedKeyAndDocId[1],\n          value: ('value' in result.doc ? result.doc.value : null)\n        };\n      });\n    });\n  }\n\n  function onMapResultsReady(rows) {\n    var finalResults;\n    if (shouldReduce) {\n      finalResults = reduceView(view, rows, opts);\n    } else {\n      finalResults = {\n        total_rows: totalRows,\n        offset: skip,\n        rows: rows\n      };\n    }\n    if (opts.include_docs) {\n      var docIds = uniq(rows.map(rowToDocId));\n\n      return view.sourceDB.allDocs({\n        keys: docIds,\n        include_docs: true,\n        conflicts: opts.conflicts,\n        attachments: opts.attachments,\n        binary: opts.binary\n      }).then(function (allDocsRes) {\n        var docIdsToDocs = {};\n        allDocsRes.rows.forEach(function (row) {\n          if (row.doc) {\n            docIdsToDocs['$' + row.id] = row.doc;\n          }\n        });\n        rows.forEach(function (row) {\n          var docId = rowToDocId(row);\n          var doc = docIdsToDocs['$' + docId];\n          if (doc) {\n            row.doc = doc;\n          }\n        });\n        return finalResults;\n      });\n    } else {\n      return finalResults;\n    }\n  }\n\n  if (typeof opts.keys !== 'undefined') {\n    var keys = opts.keys;\n    var fetchPromises = keys.map(function (key) {\n      var viewOpts = {\n        startkey : toIndexableString([key]),\n        endkey   : toIndexableString([key, {}])\n      };\n      return fetchFromView(viewOpts);\n    });\n    return PouchPromise.all(fetchPromises).then(flatten).then(onMapResultsReady);\n  } else { // normal query, no 'keys'\n    var viewOpts = {\n      descending : opts.descending\n    };\n    if (opts.start_key) {\n        opts.startkey = opts.start_key;\n    }\n    if (opts.end_key) {\n        opts.endkey = opts.end_key;\n    }\n    if (typeof opts.startkey !== 'undefined') {\n      viewOpts.startkey = opts.descending ?\n        toIndexableString([opts.startkey, {}]) :\n        toIndexableString([opts.startkey]);\n    }\n    if (typeof opts.endkey !== 'undefined') {\n      var inclusiveEnd = opts.inclusive_end !== false;\n      if (opts.descending) {\n        inclusiveEnd = !inclusiveEnd;\n      }\n\n      viewOpts.endkey = toIndexableString(\n        inclusiveEnd ? [opts.endkey, {}] : [opts.endkey]);\n    }\n    if (typeof opts.key !== 'undefined') {\n      var keyStart = toIndexableString([opts.key]);\n      var keyEnd = toIndexableString([opts.key, {}]);\n      if (viewOpts.descending) {\n        viewOpts.endkey = keyStart;\n        viewOpts.startkey = keyEnd;\n      } else {\n        viewOpts.startkey = keyStart;\n        viewOpts.endkey = keyEnd;\n      }\n    }\n    if (!shouldReduce) {\n      if (typeof opts.limit === 'number') {\n        viewOpts.limit = opts.limit;\n      }\n      viewOpts.skip = skip;\n    }\n    return fetchFromView(viewOpts).then(onMapResultsReady);\n  }\n}\n\nfunction httpViewCleanup(db) {\n  return db.request({\n    method: 'POST',\n    url: '_view_cleanup'\n  });\n}\n\nfunction localViewCleanup(db) {\n  return db.get('_local/mrviews').then(function (metaDoc) {\n    var docsToViews = {};\n    Object.keys(metaDoc.views).forEach(function (fullViewName) {\n      var parts = parseViewName(fullViewName);\n      var designDocName = '_design/' + parts[0];\n      var viewName = parts[1];\n      docsToViews[designDocName] = docsToViews[designDocName] || {};\n      docsToViews[designDocName][viewName] = true;\n    });\n    var opts = {\n      keys : Object.keys(docsToViews),\n      include_docs : true\n    };\n    return db.allDocs(opts).then(function (res) {\n      var viewsToStatus = {};\n      res.rows.forEach(function (row) {\n        var ddocName = row.key.substring(8);\n        Object.keys(docsToViews[row.key]).forEach(function (viewName) {\n          var fullViewName = ddocName + '/' + viewName;\n          /* istanbul ignore if */\n          if (!metaDoc.views[fullViewName]) {\n            // new format, without slashes, to support PouchDB 2.2.0\n            // migration test in pouchdb's browser.migration.js verifies this\n            fullViewName = viewName;\n          }\n          var viewDBNames = Object.keys(metaDoc.views[fullViewName]);\n          // design doc deleted, or view function nonexistent\n          var statusIsGood = row.doc && row.doc.views &&\n            row.doc.views[viewName];\n          viewDBNames.forEach(function (viewDBName) {\n            viewsToStatus[viewDBName] =\n              viewsToStatus[viewDBName] || statusIsGood;\n          });\n        });\n      });\n      var dbsToDelete = Object.keys(viewsToStatus).filter(\n        function (viewDBName) { return !viewsToStatus[viewDBName]; });\n      var destroyPromises = dbsToDelete.map(function (viewDBName) {\n        return sequentialize(getQueue(viewDBName), function () {\n          return new db.constructor(viewDBName, db.__opts).destroy();\n        })();\n      });\n      return PouchPromise.all(destroyPromises).then(function () {\n        return {ok: true};\n      });\n    });\n  }, defaultsTo({ok: true}));\n}\n\nvar viewCleanup = callbackify(function () {\n  var db = this;\n  if (db.type() === 'http') {\n    return httpViewCleanup(db);\n  }\n  /* istanbul ignore next */\n  if (typeof db._viewCleanup === 'function') {\n    return customViewCleanup(db);\n  }\n  return localViewCleanup(db);\n});\n\nfunction queryPromised(db, fun, opts) {\n  if (db.type() === 'http') {\n    return httpQuery(db, fun, opts);\n  }\n\n  /* istanbul ignore next */\n  if (typeof db._query === 'function') {\n    return customQuery(db, fun, opts);\n  }\n\n  if (typeof fun !== 'string') {\n    // temp_view\n    checkQueryParseError(opts, fun);\n\n    var createViewOpts = {\n      db : db,\n      viewName : 'temp_view/temp_view',\n      map : fun.map,\n      reduce : fun.reduce,\n      temporary : true\n    };\n    tempViewQueue.add(function () {\n      return createView(createViewOpts).then(function (view) {\n        function cleanup() {\n          return view.db.destroy();\n        }\n        return fin(updateView(view).then(function () {\n          return queryView(view, opts);\n        }), cleanup);\n      });\n    });\n    return tempViewQueue.finish();\n  } else {\n    // persistent view\n    var fullViewName = fun;\n    var parts = parseViewName(fullViewName);\n    var designDocName = parts[0];\n    var viewName = parts[1];\n    return db.get('_design/' + designDocName).then(function (doc) {\n      var fun = doc.views && doc.views[viewName];\n\n      if (!fun || typeof fun.map !== 'string') {\n        throw new NotFoundError('ddoc ' + designDocName +\n        ' has no view named ' + viewName);\n      }\n      checkQueryParseError(opts, fun);\n\n      var createViewOpts = {\n        db : db,\n        viewName : fullViewName,\n        map : fun.map,\n        reduce : fun.reduce\n      };\n      return createView(createViewOpts).then(function (view) {\n        if (opts.stale === 'ok' || opts.stale === 'update_after') {\n          if (opts.stale === 'update_after') {\n            process.nextTick(function () {\n              updateView(view);\n            });\n          }\n          return queryView(view, opts);\n        } else { // stale not ok\n          return updateView(view).then(function () {\n            return queryView(view, opts);\n          });\n        }\n      });\n    });\n  }\n}\n\nvar query = function (fun, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  opts = opts ? coerceOptions(opts) : {};\n\n  if (typeof fun === 'function') {\n    fun = {map : fun};\n  }\n\n  var db = this;\n  var promise = PouchPromise.resolve().then(function () {\n    return queryPromised(db, fun, opts);\n  });\n  promisedCallback(promise, callback);\n  return promise;\n};\n\nfunction QueryParseError(message) {\n  this.status = 400;\n  this.name = 'query_parse_error';\n  this.message = message;\n  this.error = true;\n  try {\n    Error.captureStackTrace(this, QueryParseError);\n  } catch (e) {}\n}\n\ninherits(QueryParseError, Error);\n\nfunction NotFoundError(message) {\n  this.status = 404;\n  this.name = 'not_found';\n  this.message = message;\n  this.error = true;\n  try {\n    Error.captureStackTrace(this, NotFoundError);\n  } catch (e) {}\n}\n\ninherits(NotFoundError, Error);\n\nfunction BuiltInError(message) {\n  this.status = 500;\n  this.name = 'invalid_value';\n  this.message = message;\n  this.error = true;\n  try {\n    Error.captureStackTrace(this, BuiltInError);\n  } catch (e) {}\n}\n\ninherits(BuiltInError, Error);\n\nvar mapreduce = {\n  query: query,\n  viewCleanup: viewCleanup\n};\n\nfunction isGenOne$1(rev) {\n  return /^1-/.test(rev);\n}\n\nfunction fileHasChanged(localDoc, remoteDoc, filename) {\n  return !localDoc._attachments ||\n         !localDoc._attachments[filename] ||\n         localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;\n}\n\nfunction getDocAttachments(db, doc) {\n  var filenames = Object.keys(doc._attachments);\n  return PouchPromise.all(filenames.map(function (filename) {\n    return db.getAttachment(doc._id, filename, {rev: doc._rev});\n  }));\n}\n\nfunction getDocAttachmentsFromTargetOrSource(target, src, doc) {\n  var doCheckForLocalAttachments = src.type() === 'http' && target.type() !== 'http';\n  var filenames = Object.keys(doc._attachments);\n\n  if (!doCheckForLocalAttachments) {\n    return getDocAttachments(src, doc);\n  }\n\n  return target.get(doc._id).then(function (localDoc) {\n    return PouchPromise.all(filenames.map(function (filename) {\n      if (fileHasChanged(localDoc, doc, filename)) {\n        return src.getAttachment(doc._id, filename);\n      }\n\n      return target.getAttachment(localDoc._id, filename);\n    }));\n  }).catch(function (error) {\n    /* istanbul ignore if */\n    if (error.status !== 404) {\n      throw error;\n    }\n\n    return getDocAttachments(src, doc);\n  });\n}\n\nfunction createBulkGetOpts(diffs) {\n  var requests = [];\n  Object.keys(diffs).forEach(function (id) {\n    var missingRevs = diffs[id].missing;\n    missingRevs.forEach(function (missingRev) {\n      requests.push({\n        id: id,\n        rev: missingRev\n      });\n    });\n  });\n\n  return {\n    docs: requests,\n    revs: true\n  };\n}\n\n//\n// Fetch all the documents from the src as described in the \"diffs\",\n// which is a mapping of docs IDs to revisions. If the state ever\n// changes to \"cancelled\", then the returned promise will be rejected.\n// Else it will be resolved with a list of fetched documents.\n//\nfunction getDocs(src, target, diffs, state) {\n  diffs = clone(diffs); // we do not need to modify this\n\n  var resultDocs = [],\n      ok = true;\n\n  function getAllDocs() {\n\n    var bulkGetOpts = createBulkGetOpts(diffs);\n\n    if (!bulkGetOpts.docs.length) { // optimization: skip empty requests\n      return;\n    }\n\n    return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {\n      /* istanbul ignore if */\n      if (state.cancelled) {\n        throw new Error('cancelled');\n      }\n      return PouchPromise.all(bulkGetResponse.results.map(function (bulkGetInfo) {\n        return PouchPromise.all(bulkGetInfo.docs.map(function (doc) {\n          var remoteDoc = doc.ok;\n\n          if (doc.error) {\n            // when AUTO_COMPACTION is set, docs can be returned which look\n            // like this: {\"missing\":\"1-7c3ac256b693c462af8442f992b83696\"}\n            ok = false;\n          }\n\n          if (!remoteDoc || !remoteDoc._attachments) {\n            return remoteDoc;\n          }\n\n          return getDocAttachmentsFromTargetOrSource(target, src, remoteDoc).then(function (attachments) {\n            var filenames = Object.keys(remoteDoc._attachments);\n            attachments.forEach(function (attachment, i) {\n              var att = remoteDoc._attachments[filenames[i]];\n              delete att.stub;\n              delete att.length;\n              att.data = attachment;\n            });\n\n            return remoteDoc;\n          });\n        }));\n      }))\n\n      .then(function (results) {\n        resultDocs = resultDocs.concat(flatten(results).filter(Boolean));\n      });\n    });\n  }\n\n  function hasAttachments(doc) {\n    return doc._attachments && Object.keys(doc._attachments).length > 0;\n  }\n\n  function fetchRevisionOneDocs(ids) {\n    // Optimization: fetch gen-1 docs and attachments in\n    // a single request using _all_docs\n    return src.allDocs({\n      keys: ids,\n      include_docs: true\n    }).then(function (res) {\n      if (state.cancelled) {\n        throw new Error('cancelled');\n      }\n      res.rows.forEach(function (row) {\n        if (row.deleted || !row.doc || !isGenOne$1(row.value.rev) ||\n            hasAttachments(row.doc)) {\n          // if any of these conditions apply, we need to fetch using get()\n          return;\n        }\n\n        // the doc we got back from allDocs() is sufficient\n        resultDocs.push(row.doc);\n        delete diffs[row.id];\n      });\n    });\n  }\n\n  function getRevisionOneDocs() {\n    // filter out the generation 1 docs and get them\n    // leaving the non-generation one docs to be got otherwise\n    var ids = Object.keys(diffs).filter(function (id) {\n      var missing = diffs[id].missing;\n      return missing.length === 1 && isGenOne$1(missing[0]);\n    });\n    if (ids.length > 0) {\n      return fetchRevisionOneDocs(ids);\n    }\n  }\n\n  function returnResult() {\n    return { ok:ok, docs:resultDocs };\n  }\n\n  return PouchPromise.resolve()\n    .then(getRevisionOneDocs)\n    .then(getAllDocs)\n    .then(returnResult);\n}\n\nvar CHECKPOINT_VERSION = 1;\nvar REPLICATOR = \"pouchdb\";\n// This is an arbitrary number to limit the\n// amount of replication history we save in the checkpoint.\n// If we save too much, the checkpoing docs will become very big,\n// if we save fewer, we'll run a greater risk of having to\n// read all the changes from 0 when checkpoint PUTs fail\n// CouchDB 2.0 has a more involved history pruning,\n// but let's go for the simple version for now.\nvar CHECKPOINT_HISTORY_SIZE = 5;\nvar LOWEST_SEQ = 0;\n\nfunction updateCheckpoint(db, id, checkpoint, session, returnValue) {\n  return db.get(id).catch(function (err) {\n    if (err.status === 404) {\n      if (db.type() === 'http') {\n        explainError(\n          404, 'PouchDB is just checking if a remote checkpoint exists.'\n        );\n      }\n      return {\n        session_id: session,\n        _id: id,\n        history: [],\n        replicator: REPLICATOR,\n        version: CHECKPOINT_VERSION\n      };\n    }\n    throw err;\n  }).then(function (doc) {\n    if (returnValue.cancelled) {\n      return;\n    }\n\n    // if the checkpoint has not changed, do not update\n    if (doc.last_seq === checkpoint) {\n      return;\n    }\n\n    // Filter out current entry for this replication\n    doc.history = (doc.history || []).filter(function (item) {\n      return item.session_id !== session;\n    });\n\n    // Add the latest checkpoint to history\n    doc.history.unshift({\n      last_seq: checkpoint,\n      session_id: session\n    });\n\n    // Just take the last pieces in history, to\n    // avoid really big checkpoint docs.\n    // see comment on history size above\n    doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);\n\n    doc.version = CHECKPOINT_VERSION;\n    doc.replicator = REPLICATOR;\n\n    doc.session_id = session;\n    doc.last_seq = checkpoint;\n\n    return db.put(doc).catch(function (err) {\n      if (err.status === 409) {\n        // retry; someone is trying to write a checkpoint simultaneously\n        return updateCheckpoint(db, id, checkpoint, session, returnValue);\n      }\n      throw err;\n    });\n  });\n}\n\nfunction Checkpointer(src, target, id, returnValue) {\n  this.src = src;\n  this.target = target;\n  this.id = id;\n  this.returnValue = returnValue;\n}\n\nCheckpointer.prototype.writeCheckpoint = function (checkpoint, session) {\n  var self = this;\n  return this.updateTarget(checkpoint, session).then(function () {\n    return self.updateSource(checkpoint, session);\n  });\n};\n\nCheckpointer.prototype.updateTarget = function (checkpoint, session) {\n  return updateCheckpoint(this.target, this.id, checkpoint,\n    session, this.returnValue);\n};\n\nCheckpointer.prototype.updateSource = function (checkpoint, session) {\n  var self = this;\n  if (this.readOnlySource) {\n    return PouchPromise.resolve(true);\n  }\n  return updateCheckpoint(this.src, this.id, checkpoint,\n    session, this.returnValue)\n    .catch(function (err) {\n      if (isForbiddenError(err)) {\n        self.readOnlySource = true;\n        return true;\n      }\n      throw err;\n    });\n};\n\nvar comparisons = {\n  \"undefined\": function (targetDoc, sourceDoc) {\n    // This is the previous comparison function\n    if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) {\n      return sourceDoc.last_seq;\n    }\n    /* istanbul ignore next */\n    return 0;\n  },\n  \"1\": function (targetDoc, sourceDoc) {\n    // This is the comparison function ported from CouchDB\n    return compareReplicationLogs(sourceDoc, targetDoc).last_seq;\n  }\n};\n\nCheckpointer.prototype.getCheckpoint = function () {\n  var self = this;\n  return self.target.get(self.id).then(function (targetDoc) {\n    if (self.readOnlySource) {\n      return PouchPromise.resolve(targetDoc.last_seq);\n    }\n\n    return self.src.get(self.id).then(function (sourceDoc) {\n      // Since we can't migrate an old version doc to a new one\n      // (no session id), we just go with the lowest seq in this case\n      /* istanbul ignore if */\n      if (targetDoc.version !== sourceDoc.version) {\n        return LOWEST_SEQ;\n      }\n\n      var version;\n      if (targetDoc.version) {\n        version = targetDoc.version.toString();\n      } else {\n        version = \"undefined\";\n      }\n\n      if (version in comparisons) {\n        return comparisons[version](targetDoc, sourceDoc);\n      }\n      /* istanbul ignore next */\n      return LOWEST_SEQ;\n    }, function (err) {\n      if (err.status === 404 && targetDoc.last_seq) {\n        return self.src.put({\n          _id: self.id,\n          last_seq: LOWEST_SEQ\n        }).then(function () {\n          return LOWEST_SEQ;\n        }, function (err) {\n          if (isForbiddenError(err)) {\n            self.readOnlySource = true;\n            return targetDoc.last_seq;\n          }\n          /* istanbul ignore next */\n          return LOWEST_SEQ;\n        });\n      }\n      throw err;\n    });\n  }).catch(function (err) {\n    if (err.status !== 404) {\n      throw err;\n    }\n    return LOWEST_SEQ;\n  });\n};\n// This checkpoint comparison is ported from CouchDBs source\n// they come from here:\n// https://github.com/apache/couchdb-couch-replicator/blob/master/src/couch_replicator.erl#L863-L906\n\nfunction compareReplicationLogs(srcDoc, tgtDoc) {\n  if (srcDoc.session_id === tgtDoc.session_id) {\n    return {\n      last_seq: srcDoc.last_seq,\n      history: srcDoc.history\n    };\n  }\n\n  return compareReplicationHistory(srcDoc.history, tgtDoc.history);\n}\n\nfunction compareReplicationHistory(sourceHistory, targetHistory) {\n  // the erlang loop via function arguments is not so easy to repeat in JS\n  // therefore, doing this as recursion\n  var S = sourceHistory[0];\n  var sourceRest = sourceHistory.slice(1);\n  var T = targetHistory[0];\n  var targetRest = targetHistory.slice(1);\n\n  if (!S || targetHistory.length === 0) {\n    return {\n      last_seq: LOWEST_SEQ,\n      history: []\n    };\n  }\n\n  var sourceId = S.session_id;\n  /* istanbul ignore if */\n  if (hasSessionId(sourceId, targetHistory)) {\n    return {\n      last_seq: S.last_seq,\n      history: sourceHistory\n    };\n  }\n\n  var targetId = T.session_id;\n  if (hasSessionId(targetId, sourceRest)) {\n    return {\n      last_seq: T.last_seq,\n      history: targetRest\n    };\n  }\n\n  return compareReplicationHistory(sourceRest, targetRest);\n}\n\nfunction hasSessionId(sessionId, history) {\n  var props = history[0];\n  var rest = history.slice(1);\n\n  if (!sessionId || history.length === 0) {\n    return false;\n  }\n\n  if (sessionId === props.session_id) {\n    return true;\n  }\n\n  return hasSessionId(sessionId, rest);\n}\n\nfunction isForbiddenError(err) {\n  return typeof err.status === 'number' && Math.floor(err.status / 100) === 4;\n}\n\nvar STARTING_BACK_OFF = 0;\n\nfunction backOff(opts, returnValue, error, callback) {\n  if (opts.retry === false) {\n    returnValue.emit('error', error);\n    returnValue.removeAllListeners();\n    return;\n  }\n  if (typeof opts.back_off_function !== 'function') {\n    opts.back_off_function = defaultBackOff;\n  }\n  returnValue.emit('requestError', error);\n  if (returnValue.state === 'active' || returnValue.state === 'pending') {\n    returnValue.emit('paused', error);\n    returnValue.state = 'stopped';\n    var backOffSet = function backoffTimeSet() {\n      opts.current_back_off = STARTING_BACK_OFF;\n    };\n    var removeBackOffSetter = function removeBackOffTimeSet() {\n      returnValue.removeListener('active', backOffSet);\n    };\n    returnValue.once('paused', removeBackOffSetter);\n    returnValue.once('active', backOffSet);\n  }\n\n  opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;\n  opts.current_back_off = opts.back_off_function(opts.current_back_off);\n  setTimeout(callback, opts.current_back_off);\n}\n\nfunction sortObjectPropertiesByKey(queryParams) {\n  return Object.keys(queryParams).sort(collate).reduce(function (result, key) {\n    result[key] = queryParams[key];\n    return result;\n  }, {});\n}\n\n// Generate a unique id particular to this replication.\n// Not guaranteed to align perfectly with CouchDB's rep ids.\nfunction generateReplicationId(src, target, opts) {\n  var docIds = opts.doc_ids ? opts.doc_ids.sort(collate) : '';\n  var filterFun = opts.filter ? opts.filter.toString() : '';\n  var queryParams = '';\n  var filterViewName =  '';\n\n  if (opts.filter && opts.query_params) {\n    queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));\n  }\n\n  if (opts.filter && opts.filter === '_view') {\n    filterViewName = opts.view.toString();\n  }\n\n  return PouchPromise.all([src.id(), target.id()]).then(function (res) {\n    var queryData = res[0] + res[1] + filterFun + filterViewName +\n      queryParams + docIds;\n    return new PouchPromise(function (resolve) {\n      binaryMd5(queryData, resolve);\n    });\n  }).then(function (md5sum) {\n    // can't use straight-up md5 alphabet, because\n    // the char '/' is interpreted as being for attachments,\n    // and + is also not url-safe\n    md5sum = md5sum.replace(/\\//g, '.').replace(/\\+/g, '_');\n    return '_local/' + md5sum;\n  });\n}\n\nfunction replicate$1(src, target, opts, returnValue, result) {\n  var batches = [];               // list of batches to be processed\n  var currentBatch;               // the batch currently being processed\n  var pendingBatch = {\n    seq: 0,\n    changes: [],\n    docs: []\n  }; // next batch, not yet ready to be processed\n  var writingCheckpoint = false;  // true while checkpoint is being written\n  var changesCompleted = false;   // true when all changes received\n  var replicationCompleted = false; // true when replication has completed\n  var last_seq = 0;\n  var continuous = opts.continuous || opts.live || false;\n  var batch_size = opts.batch_size || 100;\n  var batches_limit = opts.batches_limit || 10;\n  var changesPending = false;     // true while src.changes is running\n  var doc_ids = opts.doc_ids;\n  var repId;\n  var checkpointer;\n  var changedDocs = [];\n  // Like couchdb, every replication gets a unique session id\n  var session = uuid();\n\n  result = result || {\n    ok: true,\n    start_time: new Date(),\n    docs_read: 0,\n    docs_written: 0,\n    doc_write_failures: 0,\n    errors: []\n  };\n\n  var changesOpts = {};\n  returnValue.ready(src, target);\n\n  function initCheckpointer() {\n    if (checkpointer) {\n      return PouchPromise.resolve();\n    }\n    return generateReplicationId(src, target, opts).then(function (res) {\n      repId = res;\n      checkpointer = new Checkpointer(src, target, repId, returnValue);\n    });\n  }\n\n  function writeDocs() {\n    changedDocs = [];\n\n    if (currentBatch.docs.length === 0) {\n      return;\n    }\n    var docs = currentBatch.docs;\n    var bulkOpts = {timeout: opts.timeout};\n    return target.bulkDocs({docs: docs, new_edits: false}, bulkOpts).then(function (res) {\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        throw new Error('cancelled');\n      }\n\n      // `res` doesn't include full documents (which live in `docs`), so we create a map of \n      // (id -> error), and check for errors while iterating over `docs`\n      var errorsById = Object.create(null);\n      res.forEach(function (res) {\n        if (res.error) {\n          errorsById[res.id] = res;\n        }\n      });\n\n      var errorsNo = Object.keys(errorsById).length;\n      result.doc_write_failures += errorsNo;\n      result.docs_written += docs.length - errorsNo;\n\n      docs.forEach(function (doc) {\n        var error = errorsById[doc._id];\n        if (error) {\n          result.errors.push(error);\n          if (error.name === 'unauthorized' || error.name === 'forbidden') {\n            returnValue.emit('denied', clone(error));\n          } else {\n            throw error;\n          }\n        } else {\n          changedDocs.push(doc);\n        }\n      });\n\n    }, function (err) {\n      result.doc_write_failures += docs.length;\n      throw err;\n    });\n  }\n\n  function finishBatch() {\n    if (currentBatch.error) {\n      throw new Error('There was a problem getting docs.');\n    }\n    result.last_seq = last_seq = currentBatch.seq;\n    var outResult = clone(result);\n    if (changedDocs.length) {\n      outResult.docs = changedDocs;\n      returnValue.emit('change', outResult);\n    }\n    writingCheckpoint = true;\n    return checkpointer.writeCheckpoint(currentBatch.seq,\n        session).then(function () {\n      writingCheckpoint = false;\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        throw new Error('cancelled');\n      }\n      currentBatch = undefined;\n      getChanges();\n    }).catch(function (err) {\n      onCheckpointError(err);\n      throw err;\n    });\n  }\n\n  function getDiffs() {\n    var diff = {};\n    currentBatch.changes.forEach(function (change) {\n      // Couchbase Sync Gateway emits these, but we can ignore them\n      /* istanbul ignore if */\n      if (change.id === \"_user/\") {\n        return;\n      }\n      diff[change.id] = change.changes.map(function (x) {\n        return x.rev;\n      });\n    });\n    return target.revsDiff(diff).then(function (diffs) {\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        throw new Error('cancelled');\n      }\n      // currentBatch.diffs elements are deleted as the documents are written\n      currentBatch.diffs = diffs;\n    });\n  }\n\n  function getBatchDocs() {\n    return getDocs(src, target, currentBatch.diffs, returnValue).then(function (got) {\n      currentBatch.error = !got.ok;\n      got.docs.forEach(function (doc) {\n        delete currentBatch.diffs[doc._id];\n        result.docs_read++;\n        currentBatch.docs.push(doc);\n      });\n    });\n  }\n\n  function startNextBatch() {\n    if (returnValue.cancelled || currentBatch) {\n      return;\n    }\n    if (batches.length === 0) {\n      processPendingBatch(true);\n      return;\n    }\n    currentBatch = batches.shift();\n    getDiffs()\n      .then(getBatchDocs)\n      .then(writeDocs)\n      .then(finishBatch)\n      .then(startNextBatch)\n      .catch(function (err) {\n        abortReplication('batch processing terminated with error', err);\n      });\n  }\n\n\n  function processPendingBatch(immediate) {\n    if (pendingBatch.changes.length === 0) {\n      if (batches.length === 0 && !currentBatch) {\n        if ((continuous && changesOpts.live) || changesCompleted) {\n          returnValue.state = 'pending';\n          returnValue.emit('paused');\n        }\n        if (changesCompleted) {\n          completeReplication();\n        }\n      }\n      return;\n    }\n    if (\n      immediate ||\n      changesCompleted ||\n      pendingBatch.changes.length >= batch_size\n    ) {\n      batches.push(pendingBatch);\n      pendingBatch = {\n        seq: 0,\n        changes: [],\n        docs: []\n      };\n      if (returnValue.state === 'pending' || returnValue.state === 'stopped') {\n        returnValue.state = 'active';\n        returnValue.emit('active');\n      }\n      startNextBatch();\n    }\n  }\n\n\n  function abortReplication(reason, err) {\n    if (replicationCompleted) {\n      return;\n    }\n    if (!err.message) {\n      err.message = reason;\n    }\n    result.ok = false;\n    result.status = 'aborting';\n    batches = [];\n    pendingBatch = {\n      seq: 0,\n      changes: [],\n      docs: []\n    };\n    completeReplication(err);\n  }\n\n\n  function completeReplication(fatalError) {\n    if (replicationCompleted) {\n      return;\n    }\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      result.status = 'cancelled';\n      if (writingCheckpoint) {\n        return;\n      }\n    }\n    result.status = result.status || 'complete';\n    result.end_time = new Date();\n    result.last_seq = last_seq;\n    replicationCompleted = true;\n\n    if (fatalError) {\n      fatalError.result = result;\n\n      if (fatalError.name === 'unauthorized' || fatalError.name === 'forbidden') {\n        returnValue.emit('error', fatalError);\n        returnValue.removeAllListeners();\n      } else {\n        backOff(opts, returnValue, fatalError, function () {\n          replicate$1(src, target, opts, returnValue);\n        });\n      }\n    } else {\n      returnValue.emit('complete', result);\n      returnValue.removeAllListeners();\n    }\n  }\n\n\n  function onChange(change) {\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      return completeReplication();\n    }\n    var filter = filterChange(opts)(change);\n    if (!filter) {\n      return;\n    }\n    pendingBatch.seq = change.seq;\n    pendingBatch.changes.push(change);\n    processPendingBatch(batches.length === 0 && changesOpts.live);\n  }\n\n\n  function onChangesComplete(changes) {\n    changesPending = false;\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      return completeReplication();\n    }\n\n    // if no results were returned then we're done,\n    // else fetch more\n    if (changes.results.length > 0) {\n      changesOpts.since = changes.last_seq;\n      getChanges();\n      processPendingBatch(true);\n    } else {\n\n      var complete = function () {\n        if (continuous) {\n          changesOpts.live = true;\n          getChanges();\n        } else {\n          changesCompleted = true;\n        }\n        processPendingBatch(true);\n      };\n\n      // update the checkpoint so we start from the right seq next time\n      if (!currentBatch && changes.results.length === 0) {\n        writingCheckpoint = true;\n        checkpointer.writeCheckpoint(changes.last_seq,\n            session).then(function () {\n          writingCheckpoint = false;\n          result.last_seq = last_seq = changes.last_seq;\n          complete();\n        })\n        .catch(onCheckpointError);\n      } else {\n        complete();\n      }\n    }\n  }\n\n\n  function onChangesError(err) {\n    changesPending = false;\n    /* istanbul ignore if */\n    if (returnValue.cancelled) {\n      return completeReplication();\n    }\n    abortReplication('changes rejected', err);\n  }\n\n\n  function getChanges() {\n    if (!(\n      !changesPending &&\n      !changesCompleted &&\n      batches.length < batches_limit\n      )) {\n      return;\n    }\n    changesPending = true;\n    function abortChanges() {\n      changes.cancel();\n    }\n    function removeListener() {\n      returnValue.removeListener('cancel', abortChanges);\n    }\n\n    if (returnValue._changes) { // remove old changes() and listeners\n      returnValue.removeListener('cancel', returnValue._abortChanges);\n      returnValue._changes.cancel();\n    }\n    returnValue.once('cancel', abortChanges);\n\n    var changes = src.changes(changesOpts)\n      .on('change', onChange);\n    changes.then(removeListener, removeListener);\n    changes.then(onChangesComplete)\n      .catch(onChangesError);\n\n    if (opts.retry) {\n      // save for later so we can cancel if necessary\n      returnValue._changes = changes;\n      returnValue._abortChanges = abortChanges;\n    }\n  }\n\n\n  function startChanges() {\n    initCheckpointer().then(function () {\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        return;\n      }\n      return checkpointer.getCheckpoint().then(function (checkpoint) {\n        last_seq = checkpoint;\n        changesOpts = {\n          since: last_seq,\n          limit: batch_size,\n          batch_size: batch_size,\n          style: 'all_docs',\n          doc_ids: doc_ids,\n          return_docs: true // required so we know when we're done\n        };\n        if (opts.filter) {\n          if (typeof opts.filter !== 'string') {\n            // required for the client-side filter in onChange\n            changesOpts.include_docs = true;\n          } else { // ddoc filter\n            changesOpts.filter = opts.filter;\n          }\n        }\n        if ('heartbeat' in opts) {\n          changesOpts.heartbeat = opts.heartbeat;\n        }\n        if ('timeout' in opts) {\n          changesOpts.timeout = opts.timeout;\n        }\n        if (opts.query_params) {\n          changesOpts.query_params = opts.query_params;\n        }\n        if (opts.view) {\n          changesOpts.view = opts.view;\n        }\n        getChanges();\n      });\n    }).catch(function (err) {\n      abortReplication('getCheckpoint rejected with ', err);\n    });\n  }\n\n  /* istanbul ignore next */\n  function onCheckpointError(err) {\n    writingCheckpoint = false;\n    abortReplication('writeCheckpoint completed with error', err);\n  }\n\n  /* istanbul ignore if */\n  if (returnValue.cancelled) { // cancelled immediately\n    completeReplication();\n    return;\n  }\n\n  if (!returnValue._addedListeners) {\n    returnValue.once('cancel', completeReplication);\n\n    if (typeof opts.complete === 'function') {\n      returnValue.once('error', opts.complete);\n      returnValue.once('complete', function (result) {\n        opts.complete(null, result);\n      });\n    }\n    returnValue._addedListeners = true;\n  }\n\n  if (typeof opts.since === 'undefined') {\n    startChanges();\n  } else {\n    initCheckpointer().then(function () {\n      writingCheckpoint = true;\n      return checkpointer.writeCheckpoint(opts.since, session);\n    }).then(function () {\n      writingCheckpoint = false;\n      /* istanbul ignore if */\n      if (returnValue.cancelled) {\n        completeReplication();\n        return;\n      }\n      last_seq = opts.since;\n      startChanges();\n    }).catch(onCheckpointError);\n  }\n}\n\n// We create a basic promise so the caller can cancel the replication possibly\n// before we have actually started listening to changes etc\ninherits(Replication, events.EventEmitter);\nfunction Replication() {\n  events.EventEmitter.call(this);\n  this.cancelled = false;\n  this.state = 'pending';\n  var self = this;\n  var promise = new PouchPromise(function (fulfill, reject) {\n    self.once('complete', fulfill);\n    self.once('error', reject);\n  });\n  self.then = function (resolve, reject) {\n    return promise.then(resolve, reject);\n  };\n  self.catch = function (reject) {\n    return promise.catch(reject);\n  };\n  // As we allow error handling via \"error\" event as well,\n  // put a stub in here so that rejecting never throws UnhandledError.\n  self.catch(function () {});\n}\n\nReplication.prototype.cancel = function () {\n  this.cancelled = true;\n  this.state = 'cancelled';\n  this.emit('cancel');\n};\n\nReplication.prototype.ready = function (src, target) {\n  var self = this;\n  if (self._readyCalled) {\n    return;\n  }\n  self._readyCalled = true;\n\n  function onDestroy() {\n    self.cancel();\n  }\n  src.once('destroyed', onDestroy);\n  target.once('destroyed', onDestroy);\n  function cleanup() {\n    src.removeListener('destroyed', onDestroy);\n    target.removeListener('destroyed', onDestroy);\n  }\n  self.once('complete', cleanup);\n};\n\nfunction toPouch(db, opts) {\n  var PouchConstructor = opts.PouchConstructor;\n  if (typeof db === 'string') {\n    return new PouchConstructor(db, opts);\n  } else {\n    return db;\n  }\n}\n\nfunction replicate(src, target, opts, callback) {\n\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  if (typeof opts === 'undefined') {\n    opts = {};\n  }\n\n  if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {\n    throw createError(BAD_REQUEST,\n                       \"`doc_ids` filter parameter is not a list.\");\n  }\n\n  opts.complete = callback;\n  opts = clone(opts);\n  opts.continuous = opts.continuous || opts.live;\n  opts.retry = ('retry' in opts) ? opts.retry : false;\n  /*jshint validthis:true */\n  opts.PouchConstructor = opts.PouchConstructor || this;\n  var replicateRet = new Replication(opts);\n  var srcPouch = toPouch(src, opts);\n  var targetPouch = toPouch(target, opts);\n  replicate$1(srcPouch, targetPouch, opts, replicateRet);\n  return replicateRet;\n}\n\ninherits(Sync, events.EventEmitter);\nfunction sync(src, target, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  if (typeof opts === 'undefined') {\n    opts = {};\n  }\n  opts = clone(opts);\n  /*jshint validthis:true */\n  opts.PouchConstructor = opts.PouchConstructor || this;\n  src = toPouch(src, opts);\n  target = toPouch(target, opts);\n  return new Sync(src, target, opts, callback);\n}\n\nfunction Sync(src, target, opts, callback) {\n  var self = this;\n  this.canceled = false;\n\n  var optsPush = opts.push ? jsExtend.extend({}, opts, opts.push) : opts;\n  var optsPull = opts.pull ? jsExtend.extend({}, opts, opts.pull) : opts;\n\n  this.push = replicate(src, target, optsPush);\n  this.pull = replicate(target, src, optsPull);\n\n  this.pushPaused = true;\n  this.pullPaused = true;\n\n  function pullChange(change) {\n    self.emit('change', {\n      direction: 'pull',\n      change: change\n    });\n  }\n  function pushChange(change) {\n    self.emit('change', {\n      direction: 'push',\n      change: change\n    });\n  }\n  function pushDenied(doc) {\n    self.emit('denied', {\n      direction: 'push',\n      doc: doc\n    });\n  }\n  function pullDenied(doc) {\n    self.emit('denied', {\n      direction: 'pull',\n      doc: doc\n    });\n  }\n  function pushPaused() {\n    self.pushPaused = true;\n    /* istanbul ignore if */\n    if (self.pullPaused) {\n      self.emit('paused');\n    }\n  }\n  function pullPaused() {\n    self.pullPaused = true;\n    /* istanbul ignore if */\n    if (self.pushPaused) {\n      self.emit('paused');\n    }\n  }\n  function pushActive() {\n    self.pushPaused = false;\n    /* istanbul ignore if */\n    if (self.pullPaused) {\n      self.emit('active', {\n        direction: 'push'\n      });\n    }\n  }\n  function pullActive() {\n    self.pullPaused = false;\n    /* istanbul ignore if */\n    if (self.pushPaused) {\n      self.emit('active', {\n        direction: 'pull'\n      });\n    }\n  }\n\n  var removed = {};\n\n  function removeAll(type) { // type is 'push' or 'pull'\n    return function (event, func) {\n      var isChange = event === 'change' &&\n        (func === pullChange || func === pushChange);\n      var isDenied = event === 'denied' &&\n        (func === pullDenied || func === pushDenied);\n      var isPaused = event === 'paused' &&\n        (func === pullPaused || func === pushPaused);\n      var isActive = event === 'active' &&\n        (func === pullActive || func === pushActive);\n\n      if (isChange || isDenied || isPaused || isActive) {\n        if (!(event in removed)) {\n          removed[event] = {};\n        }\n        removed[event][type] = true;\n        if (Object.keys(removed[event]).length === 2) {\n          // both push and pull have asked to be removed\n          self.removeAllListeners(event);\n        }\n      }\n    };\n  }\n\n  if (opts.live) {\n    this.push.on('complete', self.pull.cancel.bind(self.pull));\n    this.pull.on('complete', self.push.cancel.bind(self.push));\n  }\n\n  this.on('newListener', function (event) {\n    if (event === 'change') {\n      self.pull.on('change', pullChange);\n      self.push.on('change', pushChange);\n    } else if (event === 'denied') {\n      self.pull.on('denied', pullDenied);\n      self.push.on('denied', pushDenied);\n    } else if (event === 'active') {\n      self.pull.on('active', pullActive);\n      self.push.on('active', pushActive);\n    } else if (event === 'paused') {\n      self.pull.on('paused', pullPaused);\n      self.push.on('paused', pushPaused);\n    }\n  });\n\n  this.on('removeListener', function (event) {\n    if (event === 'change') {\n      self.pull.removeListener('change', pullChange);\n      self.push.removeListener('change', pushChange);\n    } else if (event === 'denied') {\n      self.pull.removeListener('denied', pullDenied);\n      self.push.removeListener('denied', pushDenied);\n    } else if (event === 'active') {\n      self.pull.removeListener('active', pullActive);\n      self.push.removeListener('active', pushActive);\n    } else if (event === 'paused') {\n      self.pull.removeListener('paused', pullPaused);\n      self.push.removeListener('paused', pushPaused);\n    }\n  });\n\n  this.pull.on('removeListener', removeAll('pull'));\n  this.push.on('removeListener', removeAll('push'));\n\n  var promise = PouchPromise.all([\n    this.push,\n    this.pull\n  ]).then(function (resp) {\n    var out = {\n      push: resp[0],\n      pull: resp[1]\n    };\n    self.emit('complete', out);\n    if (callback) {\n      callback(null, out);\n    }\n    self.removeAllListeners();\n    return out;\n  }, function (err) {\n    self.cancel();\n    if (callback) {\n      // if there's a callback, then the callback can receive\n      // the error event\n      callback(err);\n    } else {\n      // if there's no callback, then we're safe to emit an error\n      // event, which would otherwise throw an unhandled error\n      // due to 'error' being a special event in EventEmitters\n      self.emit('error', err);\n    }\n    self.removeAllListeners();\n    if (callback) {\n      // no sense throwing if we're already emitting an 'error' event\n      throw err;\n    }\n  });\n\n  this.then = function (success, err) {\n    return promise.then(success, err);\n  };\n\n  this.catch = function (err) {\n    return promise.catch(err);\n  };\n}\n\nSync.prototype.cancel = function () {\n  if (!this.canceled) {\n    this.canceled = true;\n    this.push.cancel();\n    this.pull.cancel();\n  }\n};\n\nfunction replication(PouchDB) {\n  PouchDB.replicate = replicate;\n  PouchDB.sync = sync;\n\n  Object.defineProperty(PouchDB.prototype, 'replicate', {\n    get: function () {\n      var self = this;\n      return {\n        from: function (other, opts, callback) {\n          return self.constructor.replicate(other, self, opts, callback);\n        },\n        to: function (other, opts, callback) {\n          return self.constructor.replicate(self, other, opts, callback);\n        }\n      };\n    }\n  });\n\n  PouchDB.prototype.sync = function (dbName, opts, callback) {\n    return this.constructor.sync(this, dbName, opts, callback);\n  };\n}\n\nPouchDB.plugin(IDBPouch)\n  .plugin(WebSqlPouch)\n  .plugin(HttpPouch$1)\n  .plugin(mapreduce)\n  .plugin(replication);\n\nmodule.exports = PouchDB;\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":18,\"argsarray\":1,\"debug\":5,\"es6-promise-pool\":7,\"events\":8,\"inherits\":11,\"js-extend\":13,\"lie\":14,\"scope-eval\":19,\"spark-md5\":20,\"vuvuzela\":21}],24:[function(require,module,exports){\n(function (process,global,Buffer){\n/* global PouchDB */\n/* jshint -W079 */\n'use strict';\n\nvar path = require('path');\nvar testUtils = {};\n\nfunction uniq(list) {\n  var map = {};\n  list.forEach(function (item) {\n    map[item] = true;\n  });\n  return Object.keys(map);\n}\n\ntestUtils.isCouchMaster = function () {\n  return 'SERVER' in testUtils.params() &&\n    testUtils.params().SERVER === 'couchdb-master';\n};\n\ntestUtils.isSyncGateway = function () {\n  return 'SERVER' in testUtils.params() &&\n    testUtils.params().SERVER === 'sync-gateway';\n};\n\ntestUtils.isExpressRouter = function () {\n  return 'SERVER' in testUtils.params() &&\n    testUtils.params().SERVER === 'pouchdb-express-router';\n};\n\ntestUtils.params = function () {\n  if (typeof process !== 'undefined' && !process.browser) {\n    return process.env;\n  }\n  var paramStr = document.location.search.slice(1);\n  return paramStr.split('&').reduce(function (acc, val) {\n    if (!val) {\n      return acc;\n    }\n    var tmp = val.split('=');\n    acc[tmp[0]] = decodeURIComponent(tmp[1]) || true;\n    return acc;\n  }, {});\n};\n\ntestUtils.couchHost = function () {\n  if (typeof window !== 'undefined' && window.cordova) {\n    // magic route to localhost on android emulator\n    return 'http://10.0.2.2:5984';\n  }\n\n  if (typeof window !== 'undefined' && window.COUCH_HOST) {\n    return window.COUCH_HOST;\n  }\n\n  if (typeof process !== 'undefined' && process.env.COUCH_HOST) {\n    return process.env.COUCH_HOST;\n  }\n\n  if ('couchHost' in testUtils.params()) {\n    return testUtils.params().couchHost;\n  }\n\n  return 'http://localhost:5984';\n};\n\ntestUtils.readBlob = function (blob, callback) {\n  if (typeof process !== 'undefined' && !process.browser) {\n    callback(blob.toString('binary'));\n  } else {\n    var reader = new FileReader();\n    reader.onloadend = function () {\n      \n      var binary = \"\";\n      var bytes = new Uint8Array(this.result || '');\n      var length = bytes.byteLength;\n      \n      for (var i = 0; i < length; i++) {\n        binary += String.fromCharCode(bytes[i]);\n      }\n      \n      callback(binary);\n    };\n    reader.readAsArrayBuffer(blob);\n  }\n};\n\ntestUtils.readBlobPromise = function (blob) {\n  return new testUtils.Promise(function (resolve) {\n    testUtils.readBlob(blob, resolve);\n  });\n};\n\ntestUtils.base64Blob = function (blob, callback) {\n  if (typeof process !== 'undefined' && !process.browser) {\n    callback(blob.toString('base64'));\n  } else {\n    testUtils.readBlob(blob, function (binary) {\n      callback(testUtils.btoa(binary));\n    });\n  }\n};\n\n// Prefix http adapter database names with their host and\n// node adapter ones with a db location\ntestUtils.adapterUrl = function (adapter, name) {\n  if (adapter === 'http') {\n    return testUtils.couchHost() + '/' + name;\n  }\n  return name;\n};\n\n// Delete specified databases\ntestUtils.cleanup = function (dbs, done) {\n  dbs = uniq(dbs);\n  var num = dbs.length;\n  var finished = function () {\n    if (--num === 0) {\n      done();\n    }\n  };\n\n  dbs.forEach(function (db) {\n    new PouchDB(db).destroy(finished, finished);\n  });\n};\n\n// Put doc after prevRev (so that doc is a child of prevDoc\n// in rev_tree). Doc must have _rev. If prevRev is not specified\n// just insert doc with correct _rev (new_edits=false!)\ntestUtils.putAfter = function (db, doc, prevRev, callback) {\n  var newDoc = testUtils.extend({}, doc);\n  if (!prevRev) {\n    db.put(newDoc, { new_edits: false }, callback);\n    return;\n  }\n  newDoc._revisions = {\n    start: +newDoc._rev.split('-')[0],\n    ids: [\n      newDoc._rev.split('-')[1],\n      prevRev.split('-')[1]\n    ]\n  };\n  db.put(newDoc, { new_edits: false }, callback);\n};\n\n// docs will be inserted one after another\n// starting from root\ntestUtils.putBranch = function (db, docs, callback) {\n  function insert(i) {\n    var doc = docs[i];\n    var prev = i > 0 ? docs[i - 1]._rev : null;\n    function next() {\n      if (i < docs.length - 1) {\n        insert(i + 1);\n      } else {\n        callback();\n      }\n    }\n    db.get(doc._id, { rev: doc._rev }, function (err) {\n      if (err) {\n        testUtils.putAfter(db, docs[i], prev, function () {\n          next();\n        });\n      } else {\n        next();\n      }\n    });\n  }\n  insert(0);\n};\n\ntestUtils.putTree = function (db, tree, callback) {\n  function insert(i) {\n    var branch = tree[i];\n    testUtils.putBranch(db, branch, function () {\n      if (i < tree.length - 1) {\n        insert(i + 1);\n      } else {\n        callback();\n      }\n    });\n  }\n  insert(0);\n};\n\ntestUtils.isCouchDB = function (cb) {\n  testUtils.ajax({url: testUtils.couchHost() + '/' }, function (err, res) {\n    cb('couchdb' in res);\n  });\n};\n\ntestUtils.writeDocs = function (db, docs, callback, res) {\n  if (!res) {\n    res = [];\n  }\n  if (!docs.length) {\n    return callback(null, res);\n  }\n  var doc = docs.shift();\n  db.put(doc, function (err, info) {\n    res.push(info);\n    testUtils.writeDocs(db, docs, callback, res);\n  });\n};\n\n// Borrowed from: http://stackoverflow.com/a/840849\ntestUtils.eliminateDuplicates = function (arr) {\n  var i, element, len = arr.length, out = [], obj = {};\n  for (i = 0; i < len; i++) {\n    obj[arr[i]] = 0;\n  }\n  for (element in obj) {\n    if (obj.hasOwnProperty(element)) {\n      out.push(element);\n    }\n  }\n  return out;\n};\n\n// Promise finally util similar to Q.finally\ntestUtils.fin = function (promise, cb) {\n  return promise.then(function (res) {\n    var promise2 = cb();\n    if (typeof promise2.then === 'function') {\n      return promise2.then(function () {\n        return res;\n      });\n    }\n    return res;\n  }, function (reason) {\n    var promise2 = cb();\n    if (typeof promise2.then === 'function') {\n      return promise2.then(function () {\n        throw reason;\n      });\n    }\n    throw reason;\n  });\n};\n\ntestUtils.promisify = function (fun, context) {\n  return function () {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args[i] = arguments[i];\n    }\n    return new testUtils.Promise(function (resolve, reject) {\n      args.push(function (err, res) {\n        if (err) {\n          return reject(err);\n        }\n        return resolve(res);\n      });\n      fun.apply(context, args);\n    });\n  };\n};\n\n// We need to use pouchdb-for-coverage here to ensure that e.g pouchdb-utils\n// and pouchdb-ajax don't get pulled in, because then our coverage tests\n// would complain that we're not using the \"whole\" thing.\nvar PouchForCoverage = require('../../packages/node_modules/pouchdb-for-coverage');\nvar pouchUtils = PouchForCoverage.utils;\ntestUtils.binaryStringToBlob = pouchUtils.binaryStringToBlobOrBuffer;\ntestUtils.btoa = pouchUtils.btoa;\ntestUtils.atob = pouchUtils.atob;\ntestUtils.Promise = pouchUtils.Promise;\ntestUtils.ajax = PouchForCoverage.ajax;\ntestUtils.uuid = pouchUtils.uuid;\ntestUtils.parseUri = pouchUtils.parseUri;\ntestUtils.errors = PouchForCoverage.Errors;\ntestUtils.extend = require('js-extend').extend;\n\ntestUtils.makeBlob = function (data, type) {\n  if (typeof process !== 'undefined' && !process.browser) {\n    return new Buffer(data, 'binary');\n  } else {\n    return pouchUtils.blob([data], {\n      type: (type || 'text/plain')\n    });\n  }\n};\n\ntestUtils.getUnHandledRejectionEventName = function () {\n  return typeof window !== 'undefined' ? 'unhandledrejection' :\n    'unhandledRejection';\n};\n\ntestUtils.addGlobalEventListener = function (eventName, listener) {\n  // The window test has to go first because the process test will pass\n  // in the browser's test environment\n  if (typeof window !== 'undefined' && window.addEventListener) {\n    return window.addEventListener(eventName, listener);\n  }\n\n  if (typeof process !== 'undefined') {\n    return process.on(eventName, listener);\n  }\n\n  return null;\n};\n\ntestUtils.addUnhandledRejectionListener = function (listener) {\n  return testUtils.addGlobalEventListener(\n    testUtils.getUnHandledRejectionEventName(), listener);\n};\n\ntestUtils.removeGlobalEventListener = function (eventName, listener) {\n  if (typeof process !== 'undefined') {\n    return process.removeListener(eventName, listener);\n  }\n\n  if (typeof window !== 'undefined' && window.removeEventListener) {\n    return window.removeEventListener(eventName, listener);\n  }\n\n  return null;\n};\n\ntestUtils.removeUnhandledRejectionListener = function (listener) {\n  return testUtils.removeGlobalEventListener(\n    testUtils.getUnHandledRejectionEventName(), listener);\n};\n\nif (typeof process !== 'undefined' && !process.browser) {\n  if (process.env.COVERAGE) {\n    global.PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');\n  } else { // no need to check for coverage\n    global.PouchDB = require('../../packages/node_modules/pouchdb');\n  }\n\n  if (process.env.LEVEL_ADAPTER || process.env.LEVEL_PREFIX) {\n    // test a special *down adapter and/or prefix\n    var defaults = {};\n\n    if (process.env.LEVEL_ADAPTER) {\n      defaults.db = require(process.env.LEVEL_ADAPTER);\n      console.log('Using client-side leveldown adapter: ' +\n        process.env.LEVEL_ADAPTER);\n    }\n    if (process.env.LEVEL_PREFIX) {\n      defaults.prefix = process.env.LEVEL_PREFIX;\n      console.log('Using client-side leveldown prefix: ' + defaults.prefix);\n    }\n    global.PouchDB = global.PouchDB.defaults(defaults);\n  } else if (process.env.AUTO_COMPACTION) {\n    // test autocompaction\n    global.PouchDB = global.PouchDB.defaults({\n      auto_compaction: true,\n      prefix: './tmp/_pouch_'\n    });\n  } else if (process.env.ADAPTER === 'websql') {\n    // test WebSQL in Node\n    // (the two strings are just to fool Browserify because sqlite3 fails\n    // in Node 0.11-0.12)\n    global.PouchDB.plugin(require('../../packages/node_modules/' +\n      'pouchdb-adapter-node-websql'));\n    global.PouchDB.preferredAdapters = ['websql', 'leveldb'];\n    global.PouchDB = global.PouchDB.defaults({\n      prefix: path.resolve('./tmp/_pouch_')\n    });\n  } else {\n    // test regular leveldown in node\n    global.PouchDB = global.PouchDB.defaults({\n      prefix: path.resolve('./tmp/_pouch_')\n    });\n  }\n\n  require('mkdirp').sync('./tmp');\n  module.exports = testUtils;\n} else {\n  window.testUtils = testUtils;\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {},require(\"buffer\").Buffer)\n},{\"../../packages/node_modules/pouchdb\":23,\"../../packages/node_modules/pouchdb-for-coverage\":22,\"_process\":18,\"buffer\":4,\"js-extend\":13,\"mkdirp\":15,\"path\":17}]},{},[24]);\n"
  },
  {
    "path": "test/pouchdb/integration/utils.js",
    "content": "/* global PouchDB */\n/* jshint -W079 */\n'use strict';\n\nvar path = require('path');\nvar testUtils = {};\n\nfunction uniq(list) {\n  var map = {};\n  list.forEach(function (item) {\n    map[item] = true;\n  });\n  return Object.keys(map);\n}\n\ntestUtils.isCouchMaster = function () {\n  return 'SERVER' in testUtils.params() &&\n    testUtils.params().SERVER === 'couchdb-master';\n};\n\ntestUtils.isSyncGateway = function () {\n  return 'SERVER' in testUtils.params() &&\n    testUtils.params().SERVER === 'sync-gateway';\n};\n\ntestUtils.isExpressRouter = function () {\n  return 'SERVER' in testUtils.params() &&\n    testUtils.params().SERVER === 'pouchdb-express-router';\n};\n\ntestUtils.params = function () {\n  if (typeof process !== 'undefined' && !process.browser) {\n    return process.env;\n  }\n  var paramStr = document.location.search.slice(1);\n  return paramStr.split('&').reduce(function (acc, val) {\n    if (!val) {\n      return acc;\n    }\n    var tmp = val.split('=');\n    acc[tmp[0]] = decodeURIComponent(tmp[1]) || true;\n    return acc;\n  }, {});\n};\n\ntestUtils.couchHost = function () {\n  if (typeof window !== 'undefined' && window.cordova) {\n    // magic route to localhost on android emulator\n    return 'http://10.0.2.2:5984';\n  }\n\n  if (typeof window !== 'undefined' && window.COUCH_HOST) {\n    return window.COUCH_HOST;\n  }\n\n  if (typeof process !== 'undefined' && process.env.COUCH_HOST) {\n    return process.env.COUCH_HOST;\n  }\n\n  if ('couchHost' in testUtils.params()) {\n    return testUtils.params().couchHost;\n  }\n\n  return 'http://localhost:5984';\n};\n\ntestUtils.readBlob = function (blob, callback) {\n  if (typeof process !== 'undefined' && !process.browser) {\n    callback(blob.toString('binary'));\n  } else {\n    var reader = new FileReader();\n    reader.onloadend = function () {\n      \n      var binary = \"\";\n      var bytes = new Uint8Array(this.result || '');\n      var length = bytes.byteLength;\n      \n      for (var i = 0; i < length; i++) {\n        binary += String.fromCharCode(bytes[i]);\n      }\n      \n      callback(binary);\n    };\n    reader.readAsArrayBuffer(blob);\n  }\n};\n\ntestUtils.readBlobPromise = function (blob) {\n  return new testUtils.Promise(function (resolve) {\n    testUtils.readBlob(blob, resolve);\n  });\n};\n\ntestUtils.base64Blob = function (blob, callback) {\n  if (typeof process !== 'undefined' && !process.browser) {\n    callback(blob.toString('base64'));\n  } else {\n    testUtils.readBlob(blob, function (binary) {\n      callback(testUtils.btoa(binary));\n    });\n  }\n};\n\n// Prefix http adapter database names with their host and\n// node adapter ones with a db location\ntestUtils.adapterUrl = function (adapter, name) {\n\n  // CouchDB master has problems with cycling databases rapidly\n  // so give tests seperate names\n  if (testUtils.isCouchMaster()) {\n    name += '_' + Date.now();\n  }\n\n  if (adapter === 'http') {\n    return testUtils.couchHost() + '/' + name;\n  }\n  return name;\n};\n\n// Delete specified databases\ntestUtils.cleanup = function (dbs, done) {\n  dbs = uniq(dbs);\n  var num = dbs.length;\n  var finished = function () {\n    if (--num === 0) {\n      done();\n    }\n  };\n\n  dbs.forEach(function (db) {\n    new PouchDB(db).destroy(finished, finished);\n  });\n};\n\n// Put doc after prevRev (so that doc is a child of prevDoc\n// in rev_tree). Doc must have _rev. If prevRev is not specified\n// just insert doc with correct _rev (new_edits=false!)\ntestUtils.putAfter = function (db, doc, prevRev, callback) {\n  var newDoc = testUtils.extend({}, doc);\n  if (!prevRev) {\n    db.put(newDoc, { new_edits: false }, callback);\n    return;\n  }\n  newDoc._revisions = {\n    start: +newDoc._rev.split('-')[0],\n    ids: [\n      newDoc._rev.split('-')[1],\n      prevRev.split('-')[1]\n    ]\n  };\n  db.put(newDoc, { new_edits: false }, callback);\n};\n\n// docs will be inserted one after another\n// starting from root\ntestUtils.putBranch = function (db, docs, callback) {\n  function insert(i) {\n    var doc = docs[i];\n    var prev = i > 0 ? docs[i - 1]._rev : null;\n    function next() {\n      if (i < docs.length - 1) {\n        insert(i + 1);\n      } else {\n        callback();\n      }\n    }\n    db.get(doc._id, { rev: doc._rev }, function (err) {\n      if (err) {\n        testUtils.putAfter(db, docs[i], prev, function () {\n          next();\n        });\n      } else {\n        next();\n      }\n    });\n  }\n  insert(0);\n};\n\ntestUtils.putTree = function (db, tree, callback) {\n  function insert(i) {\n    var branch = tree[i];\n    testUtils.putBranch(db, branch, function () {\n      if (i < tree.length - 1) {\n        insert(i + 1);\n      } else {\n        callback();\n      }\n    });\n  }\n  insert(0);\n};\n\ntestUtils.isCouchDB = function (cb) {\n  testUtils.ajax({url: testUtils.couchHost() + '/' }, function (err, res) {\n    cb('couchdb' in res);\n  });\n};\n\ntestUtils.writeDocs = function (db, docs, callback, res) {\n  if (!res) {\n    res = [];\n  }\n  if (!docs.length) {\n    return callback(null, res);\n  }\n  var doc = docs.shift();\n  db.put(doc, function (err, info) {\n    res.push(info);\n    testUtils.writeDocs(db, docs, callback, res);\n  });\n};\n\n// Borrowed from: http://stackoverflow.com/a/840849\ntestUtils.eliminateDuplicates = function (arr) {\n  var i, element, len = arr.length, out = [], obj = {};\n  for (i = 0; i < len; i++) {\n    obj[arr[i]] = 0;\n  }\n  for (element in obj) {\n    if (obj.hasOwnProperty(element)) {\n      out.push(element);\n    }\n  }\n  return out;\n};\n\n// Promise finally util similar to Q.finally\ntestUtils.fin = function (promise, cb) {\n  return promise.then(function (res) {\n    var promise2 = cb();\n    if (typeof promise2.then === 'function') {\n      return promise2.then(function () {\n        return res;\n      });\n    }\n    return res;\n  }, function (reason) {\n    var promise2 = cb();\n    if (typeof promise2.then === 'function') {\n      return promise2.then(function () {\n        throw reason;\n      });\n    }\n    throw reason;\n  });\n};\n\ntestUtils.promisify = function (fun, context) {\n  return function () {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args[i] = arguments[i];\n    }\n    return new testUtils.Promise(function (resolve, reject) {\n      args.push(function (err, res) {\n        if (err) {\n          return reject(err);\n        }\n        return resolve(res);\n      });\n      fun.apply(context, args);\n    });\n  };\n};\n\n// We need to use pouchdb-for-coverage here to ensure that e.g pouchdb-utils\n// and pouchdb-ajax don't get pulled in, because then our coverage tests\n// would complain that we're not using the \"whole\" thing.\nvar PouchForCoverage = require('./pouchdb-for-coverage.js');\nvar pouchUtils = PouchForCoverage.utils;\ntestUtils.binaryStringToBlob = pouchUtils.binaryStringToBlobOrBuffer;\ntestUtils.btoa = pouchUtils.btoa;\ntestUtils.atob = pouchUtils.atob;\ntestUtils.Promise = pouchUtils.Promise;\ntestUtils.ajax = PouchForCoverage.ajax;\ntestUtils.uuid = pouchUtils.uuid;\ntestUtils.parseUri = pouchUtils.parseUri;\ntestUtils.errors = PouchForCoverage.Errors;\ntestUtils.extend = pouchUtils.jsExtend;\n\ntestUtils.makeBlob = function (data, type) {\n  if (typeof process !== 'undefined' && !process.browser) {\n    return new Buffer(data, 'binary');\n  } else {\n    return pouchUtils.blob([data], {\n      type: (type || 'text/plain')\n    });\n  }\n};\n\ntestUtils.getUnHandledRejectionEventName = function () {\n  return typeof window !== 'undefined' ? 'unhandledrejection' :\n    'unhandledRejection';\n};\n\ntestUtils.addGlobalEventListener = function (eventName, listener) {\n  // The window test has to go first because the process test will pass\n  // in the browser's test environment\n  if (typeof window !== 'undefined' && window.addEventListener) {\n    return window.addEventListener(eventName, listener);\n  }\n\n  if (typeof process !== 'undefined') {\n    return process.on(eventName, listener);\n  }\n\n  return null;\n};\n\ntestUtils.addUnhandledRejectionListener = function (listener) {\n  return testUtils.addGlobalEventListener(\n    testUtils.getUnHandledRejectionEventName(), listener);\n};\n\ntestUtils.removeGlobalEventListener = function (eventName, listener) {\n  if (typeof process !== 'undefined') {\n    return process.removeListener(eventName, listener);\n  }\n\n  if (typeof window !== 'undefined' && window.removeEventListener) {\n    return window.removeEventListener(eventName, listener);\n  }\n\n  return null;\n};\n\ntestUtils.removeUnhandledRejectionListener = function (listener) {\n  return testUtils.removeGlobalEventListener(\n    testUtils.getUnHandledRejectionEventName(), listener);\n};\n\nif (typeof process !== 'undefined' && !process.browser) {\n  global.PouchDB = require('./pouchdb-for-coverage');\n  global.PouchDB = global.PouchDB.defaults({\n    prefix: path.resolve('./tmp/_pouch_')\n  });\n  require('mkdirp').sync('./tmp');\n  module.exports = testUtils;\n} else if (typeof window !== 'undefined') {\n  window.testUtils = testUtils;\n}\n"
  },
  {
    "path": "test/pouchdb/mapreduce/test.mapreduce.js",
    "content": "/* global sum */\n'use strict';\n\nvar adapters = ['local', 'http'];\n\nadapters.forEach(function (adapter) {\n\n  var viewTypes = ['persisted', 'temp'];\n  viewTypes.forEach(function (viewType) {\n    var suiteName = 'test.mapreduce.js-' + adapter + '-' + viewType;\n    var dbName = testUtils.adapterUrl(adapter, 'testdb');\n\n    tests(suiteName, dbName, adapter, viewType);\n  });\n});\n\nfunction tests(suiteName, dbName, dbType, viewType) {\n\n  describe(suiteName, function () {\n\n    var Promise;\n\n    var createView;\n    if (viewType === 'persisted') {\n      createView = function (db, viewObj) {\n        var storableViewObj = {\n          map : viewObj.map.toString()\n        };\n        if (viewObj.reduce) {\n          storableViewObj.reduce = viewObj.reduce.toString();\n        }\n        return new Promise(function (resolve, reject) {\n          db.put({\n            _id: '_design/theViewDoc',\n            views: {\n              'theView' : storableViewObj\n            }\n          }, function (err) {\n            if (err) {\n              reject(err);\n            } else {\n              resolve('theViewDoc/theView');\n            }\n          });\n        });\n      };\n    } else {\n      createView = function (db, viewObj) {\n        return new Promise(function (resolve) {\n          setTimeout(function () {\n            resolve(viewObj);\n          });\n        });\n      };\n    }\n\n    beforeEach(function () {\n      Promise = testUtils.Promise;\n      return new PouchDB(dbName).destroy();\n    });\n    afterEach(function () {\n      return new PouchDB(dbName).destroy();\n    });\n\n\n    it(\"Test basic view\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo, doc);\n        }\n      }).then(function (view) {\n        return db.bulkDocs({docs: [\n          {foo: 'bar'},\n          { _id: 'volatile', foo: 'baz' }\n        ]}).then(function () {\n          return db.get('volatile');\n        }).then(function (doc) {\n          return db.remove(doc);\n        }).then(function () {\n          return db.query(view, {include_docs: true, reduce: false});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'Dont include deleted documents');\n          res.total_rows.should.equal(1, 'Include total_rows property.');\n          res.rows.forEach(function (x) {\n            should.exist(x.id);\n            should.exist(x.key);\n            should.exist(x.value);\n            should.exist(x.value._rev);\n            should.exist(x.doc);\n            should.exist(x.doc._rev);\n          });\n        });\n      });\n    });\n\n    it(\"Test basic view, no emitted value\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo);\n        }\n      }).then(function (view) {\n        return db.bulkDocs({docs: [\n          {foo: 'bar'},\n          { _id: 'volatile', foo: 'baz' }\n        ]}).then(function () {\n          return db.get('volatile');\n        }).then(function (doc) {\n          return db.remove(doc);\n        }).then(function () {\n          return db.query(view, {include_docs: true, reduce: false});\n        }).then(function (res) {\n          res.rows.should.have.length(1,\n                                      'Dont include deleted documents');\n          res.total_rows.should.equal(1, 'Include total_rows property.');\n          res.rows.forEach(function (x) {\n            should.exist(x.id);\n            should.exist(x.key);\n            should.equal(x.value, null);\n            should.exist(x.doc);\n            should.exist(x.doc._rev);\n          });\n        });\n      });\n    });\n\n    if (dbType === 'local' && viewType === 'temp') {\n      // closures are not supported by worker-pouch\n      it.skip(\"with a closure\", function () {\n        var db = new PouchDB(dbName);\n        return db.bulkDocs({docs: [\n          {foo: 'bar'},\n          { _id: 'volatile', foo: 'baz' }\n        ]}).then(function () {\n          var queryFun = (function (test) {\n            return function (doc, emit) {\n              if (doc._id === test) {\n                emit(doc.foo);\n              }\n            };\n          }('volatile'));\n          return db.query(queryFun, {reduce: false});\n        }).should.become({\n          total_rows: 1,\n          offset: 0,\n          rows: [\n            {\n              id: 'volatile',\n              key: 'baz',\n              value: null\n            }\n          ]\n        });\n      });\n    }\n    if (viewType === 'temp') {\n\n      it('Test simultaneous temp views', function () {\n        var db = new PouchDB(dbName);\n        return db.put({_id: '0', foo: 1, bar: 2, baz: 3}).then(function () {\n          return Promise.all(['foo', 'bar', 'baz'].map(function (key, i) {\n            var fun = 'function(doc){emit(doc.' + key + ');}';\n            return db.query({map: fun}).then(function (res) {\n              res.rows.should.deep.equal([{\n                id: '0',\n                key: i + 1,\n                value: null\n              }]);\n            });\n          }));\n        });\n      });\n\n      it(\"Test passing just a function\", function () {\n        var db = new PouchDB(dbName);\n        return db.bulkDocs({docs: [\n          {foo: 'bar'},\n          { _id: 'volatile', foo: 'baz' }\n        ]}).then(function () {\n          return db.get('volatile');\n        }).then(function (doc) {\n          return db.remove(doc);\n        }).then(function () {\n          return db.query(function (doc) {\n            emit(doc.foo, doc);\n          }, {include_docs: true, reduce: false});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'Dont include deleted documents');\n          res.rows.forEach(function (x) {\n            should.exist(x.id);\n            should.exist(x.key);\n            should.exist(x.value);\n            should.exist(x.value._rev);\n            should.exist(x.doc);\n            should.exist(x.doc._rev);\n          });\n        });\n      });\n    }\n\n    it(\"Test opts.startkey/opts.endkey\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.key, doc);\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs: [\n          {key: 'key1'},\n          {key: 'key2'},\n          {key: 'key3'},\n          {key: 'key4'},\n          {key: 'key5'}\n        ]}).then(function () {\n          return db.query(queryFun, {reduce: false, startkey: 'key2'});\n        }).then(function (res) {\n          res.rows.should.have.length(4, 'Startkey is inclusive');\n          return db.query(queryFun, {reduce: false, endkey: 'key3'});\n        }).then(function (res) {\n          res.rows.should.have.length(3, 'Endkey is inclusive');\n          return db.query(queryFun, {\n            reduce: false,\n            startkey: 'key2',\n            endkey: 'key3'\n          });\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'Startkey and endkey together');\n          return db.query(queryFun, {\n            reduce: false,\n            startkey: 'key4',\n            endkey: 'key4'\n          });\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'Startkey=endkey');\n        });\n      });\n    });\n\n    it(\"#4154 opts.start_key/opts.end_key are synonyms\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.key, doc);\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs: [\n          {key: 'key1'},\n          {key: 'key2'},\n          {key: 'key3'},\n          {key: 'key4'},\n          {key: 'key5'}\n        ]}).then(function () {\n          return db.query(queryFun, {reduce: false, start_key: 'key2'});\n        }).then(function (res) {\n          res.rows.should.have.length(4, 'Startkey is inclusive');\n          return db.query(queryFun, {reduce: false, end_key: 'key3'});\n        }).then(function (res) {\n          res.rows.should.have.length(3, 'Endkey is inclusive');\n          return db.query(queryFun, {\n            reduce: false,\n            start_key: 'key2',\n            end_key: 'key3'\n          });\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'Startkey and endkey together');\n          return db.query(queryFun, {\n            reduce: false,\n            start_key: 'key4',\n            end_key: 'key4'\n          });\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'Startkey=endkey');\n        });\n      });\n    });\n\n    //TODO: split this to their own tests within a describe block\n    it(\"Test opts.inclusive_end = false\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.key, doc);\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs: [\n          {key: 'key1'},\n          {key: 'key2'},\n          {key: 'key3'},\n          {key: 'key4'},\n          {key: 'key4'},\n          {key: 'key5'}\n        ]}).then(function () {\n          return db.query(queryFun, {\n            reduce: false,\n            endkey: 'key4',\n            inclusive_end: false\n          });\n        }).then(function (resp) {\n          resp.rows.should.have.length(3, 'endkey=key4 without ' +\n                                       'inclusive end');\n          resp.rows[0].key.should.equal('key1');\n          resp.rows[2].key.should.equal('key3');\n        })\n          .then(function () {\n            return db.query(queryFun, {\n              reduce: false,\n              startkey: 'key3',\n              endkey: 'key4',\n              inclusive_end: false\n            });\n          }).then(function (resp) {\n            resp.rows.should.have.length(1, 'startkey=key3, endkey=key4 ' +\n                                         'without inclusive end');\n            resp.rows[0].key.should.equal('key3');\n          }).then(function () {\n            return db.query(queryFun, {\n              reduce: false,\n              startkey: 'key4',\n              endkey: 'key1',\n              descending: true,\n              inclusive_end: false\n            });\n          }).then(function (resp) {\n            resp.rows.should\n              .have.length(4, 'startkey=key4, endkey=key1 descending without ' +\n                           'inclusive end');\n            resp.rows[0].key.should.equal('key4');\n          });\n      });\n    });\n\n    it(\"Test opts.key\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.key, doc);\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs: [\n          {key: 'key1'},\n          {key: 'key2'},\n          {key: 'key3'},\n          {key: 'key3'}\n        ]}).then(function () {\n          return db.query(queryFun, {reduce: false, key: 'key2'});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'Doc with key');\n          return db.query(queryFun, {reduce: false, key: 'key3'});\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'Multiple docs with key');\n        });\n      });\n    });\n\n    it(\"Test basic view collation\", function () {\n\n      var values = [];\n\n      // special values sort before all other types\n      values.push(null);\n      values.push(false);\n      values.push(true);\n\n      // then numbers\n      values.push(1);\n      values.push(2);\n      values.push(3.0);\n      values.push(4);\n\n      // then text, case sensitive\n      // currently chrome uses ascii ordering and so wont handle caps properly\n      values.push(\"a\");\n      //values.push(\"A\");\n      values.push(\"aa\");\n      values.push(\"b\");\n      //values.push(\"B\");\n      values.push(\"ba\");\n      values.push(\"bb\");\n\n      // then arrays. compared element by element until different.\n      // Longer arrays sort after their prefixes\n      values.push([\"a\"]);\n      values.push([\"b\"]);\n      values.push([\"b\", \"c\"]);\n      values.push([\"b\", \"c\", \"a\"]);\n      values.push([\"b\", \"d\"]);\n      values.push([\"b\", \"d\", \"e\"]);\n\n      // then object, compares each key value in the list until different.\n      // larger objects sort after their subset objects.\n      values.push({a: 1});\n      values.push({a: 2});\n      values.push({b: 1});\n      values.push({b: 2});\n      values.push({b: 2, a: 1}); // Member order does matter for collation.\n      // CouchDB preserves member order\n      // but doesn't require that clients will.\n      // (this test might fail if used with a js engine\n      // that doesn't preserve order)\n      values.push({b: 2, c: 2});\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo);\n        }\n      }).then(function (queryFun) {\n\n        var docs = values.map(function (x, i) {\n          return {_id: (i).toString(), foo: x};\n        });\n        return db.bulkDocs({docs: docs}).then(function () {\n          return db.query(queryFun, {reduce: false});\n        }).then(function (res) {\n          res.rows.forEach(function (x, i) {\n            JSON.stringify(x.key).should.equal(JSON.stringify(values[i]),\n                                               'keys collate');\n          });\n          return db.query(queryFun, {descending: true, reduce: false});\n        }).then(function (res) {\n          res.rows.forEach(function (x, i) {\n            JSON.stringify(x.key).should.equal(JSON.stringify(\n              values[values.length - 1 - i]),\n                                               'keys collate descending');\n          });\n        });\n      });\n    });\n\n    it(\"Test joins\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          if (doc.doc_id) {\n            emit(doc._id, {_id: doc.doc_id});\n          }\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs: [\n          {_id: 'mydoc', foo: 'bar'},\n          { doc_id: 'mydoc' }\n        ]}).then(function () {\n          return db.query(queryFun, {include_docs: true, reduce: false});\n        }).then(function (res) {\n          should.exist(res.rows[0].doc);\n          return res.rows[0].doc._id;\n        });\n      }).should.become('mydoc', 'mydoc included');\n    });\n\n    it(\"No reduce function\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function () {\n          emit('key', 'val');\n        }\n      }).then(function (queryFun) {\n        return db.post({foo: 'bar'}).then(function () {\n          return db.query(queryFun);\n        });\n      }).should.be.fulfilled;\n    });\n\n    it(\"Query after db.close\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo, 'val');\n        }\n      }).then(function (queryFun) {\n        return db.put({_id: 'doc', foo: 'bar'}).then(function () {\n          return db.query(queryFun);\n        }).then(function (res) {\n          res.rows.should.deep.equal([\n            {\n              id: 'doc',\n              key: 'bar',\n              value: 'val'\n            }\n          ]);\n          return db.close();\n        }).then(function () {\n          db = new PouchDB(dbName);\n          return db.query(queryFun).then(function (res) {\n            res.rows.should.deep.equal([\n              {\n                id: 'doc',\n                key: 'bar',\n                value: 'val'\n              }\n            ]);\n          });\n        });\n      });\n    });\n\n    it(\"Built in _sum reduce function\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.val, 1);\n        },\n        reduce: \"_sum\"\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { val: 'bar' },\n            { val: 'bar' },\n            { val: 'baz' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, {reduce: true, group_level: 999});\n        }).then(function (resp) {\n          return resp.rows.map(function (row) {\n            return row.value;\n          });\n        });\n      }).should.become([2, 1]);\n    });\n\n    it(\"Built in _count reduce function\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.val, doc.val);\n        },\n        reduce: \"_count\"\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { val: 'bar' },\n            { val: 'bar' },\n            { val: 'baz' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, {reduce: true, group_level: 999});\n        }).then(function (resp) {\n          return resp.rows.map(function (row) {\n            return row.value;\n          });\n        });\n      }).should.become([2, 1]);\n    });\n\n    it(\"Built in _stats reduce function\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: \"function(doc){emit(doc.val, 1);}\",\n        reduce: \"_stats\"\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { val: 'bar' },\n            { val: 'bar' },\n            { val: 'baz' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, {reduce: true, group_level: 999});\n        }).then(function (res) {\n          return res.rows[0].value;\n        });\n      }).should.become({\n        sum: 2,\n        count: 2,\n        min: 1,\n        max: 1,\n        sumsqr: 2\n      });\n    });\n\n    it(\"Built in _stats reduce function should throw an error with a promise\",\n      function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: \"function(doc){emit(doc.val, 'lala');}\",\n        reduce: \"_stats\"\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { val: 'bar' },\n              { val: 'bar' },\n            { val: 'baz' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, {reduce: true, group_level: 999});\n        });\n      }).should.be.rejected;\n    });\n\n    it(\"Built in _sum reduce function should throw an error with a promise\",\n      function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: \"function(doc){emit(null, doc.val);}\",\n        reduce: \"_sum\"\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { val: 1 },\n            { val: 2 },\n            { val: 'baz' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, {reduce: true, group: true});\n        });\n      }).should.be.rejected;\n    });\n\n    it(\"Built in _sum reduce function with num arrays should throw an error\",\n      function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: \"function(doc){emit(null, doc.val);}\",\n        reduce: \"_sum\"\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { val: [1, 2, 3] },\n            { val: 2 },\n            { val: ['baz']}\n          ]\n        }).then(function () {\n          return db.query(queryFun, {reduce: true, group: true});\n        });\n      }).should.be.rejected;\n    });\n\n    it(\"Built in _sum can be used with lists of numbers\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: \"function(doc){emit(null, doc.val);}\",\n        reduce: \"_sum\"\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { _id: '1', val: 2 },\n            { _id: '2', val: [1, 2, 3, 4] },\n            { _id: '3', val: [3, 4] },\n            { _id: '4', val: 1 }\n          ]\n        }).then(function () {\n          return db.query(queryFun, {reduce: true, group: true});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [{\n            key : null,\n            value : [7, 6, 3, 4]\n          }]});\n        });\n      });\n    });\n\n    if (viewType === 'temp') {\n      it(\"No reduce function, passing just a function\", function () {\n        var db = new PouchDB(dbName);\n        return db.post({foo: 'bar'}).then(function () {\n          var queryFun = function () {\n            emit('key', 'val');\n          };\n          return db.query(queryFun);\n        }).should.be.fulfilled;\n      });\n    }\n\n    it('Query result should include _conflicts', function () {\n      var db2name = 'test2b' + Math.random();\n      var cleanup = function () {\n        return new PouchDB(db2name).destroy();\n      };\n      var doc1 = {_id: '1', foo: 'bar'};\n      var doc2 = {_id: '1', foo: 'baz'};\n      var db = new PouchDB(dbName);\n      return testUtils.fin(db.info().then(function () {\n        var remote = new PouchDB(db2name);\n        return remote.info().then(function () {\n          var replicate = testUtils.promisify(db.replicate.from, db.replicate);\n          return db.post(doc1).then(function () {\n            return remote.post(doc2);\n          }).then(function () {\n            return replicate(remote);\n          }).then(function () {\n            return db.query(function (doc) {\n              if (doc._conflicts) {\n                emit(doc._conflicts, null);\n              }\n            }, {include_docs : true, conflicts: true});\n          }).then(function (res) {\n            should.exist(res.rows[0].doc._conflicts);\n            return db.get(res.rows[0].doc._id, {conflicts: true});\n          }).then(function (res) {\n            should.exist(res._conflicts);\n          });\n        });\n      }), cleanup);\n    });\n\n    /* jshint maxlen:false */\n    var icons = [\n      \"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\"\n    ];\n\n    /* jshint maxlen:100 */\n\n    var iconDigests = [\n      \"md5-Mf8m9ehZnCXC717bPkqkCA==\",\n      \"md5-fdEZBYtnvr+nozYVDzzxpA==\",\n      \"md5-ImDARszfC+GA3Cv9TVW4HA==\",\n      \"md5-hBsgoz3ujHM4ioa72btwow==\",\n      \"md5-jDUyV6ySnTVANn2qq3332g==\"\n    ];\n\n    var iconLengths = [1047, 789, 967, 527, 1108];\n\n    it('#190 Query works with attachments=true', function () {\n\n      var db = new PouchDB(dbName);\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString(),\n          _attachments: {\n            'foo.png': {\n              data: icons[i],\n              content_type: 'image/png'\n            }\n          }\n        });\n      }\n      return db.bulkDocs(docs).then(function () {\n        return createView(db, {\n          map: function (doc) {\n            emit(doc._id);\n          }\n        });\n      }).then(function (queryFun) {\n        return db.query(queryFun, {\n          include_docs: true,\n          attachments: true\n        }).then(function (res) {\n          var attachments = res.rows.map(function (row) {\n            var doc = row.doc;\n            delete doc._attachments['foo.png'].revpos;\n            return doc._attachments;\n          });\n          attachments.should.deep.equal(icons.map(function (icon, i) {\n            return {\n              \"foo.png\": {\n                \"content_type\": \"image/png\",\n                \"data\": icon,\n                \"digest\": iconDigests[i]\n              }\n            };\n          }), 'works with attachments=true');\n          return db.query(queryFun, {include_docs: true});\n        }).then(function (res) {\n          var attachments = res.rows.map(function (row) {\n            var doc = row.doc;\n            delete doc._attachments['foo.png'].revpos;\n            return doc._attachments['foo.png'];\n          });\n          attachments.should.deep.equal(icons.map(function (icon, i) {\n            return {\n              \"content_type\": \"image/png\",\n              stub: true,\n              \"digest\": iconDigests[i],\n              length: iconLengths[i]\n            };\n          }), 'works with attachments=false');\n\n          return db.query(queryFun, {attachments: true});\n        }).then(function (res) {\n          res.rows.should.have.length(5);\n          res.rows.forEach(function (row) {\n            should.not.exist(row.doc, 'ignored if include_docs=false');\n          });\n        });\n      });\n    });\n\n    it('#2858 Query works with attachments=true, binary=true 1', function () {\n\n      // Need to avoid the cache to workaround\n      // https://issues.apache.org/jira/browse/COUCHDB-2880\n      var db = new PouchDB(dbName, {ajax: {cache: false}});\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString(),\n          _attachments: {\n            'foo.png': {\n              data: icons[i],\n              content_type: 'image/png'\n            }\n          }\n        });\n      }\n      return db.bulkDocs(docs).then(function () {\n        return createView(db, {\n          map: function (doc) {\n            emit(doc._id);\n          }\n        });\n      }).then(function (queryFun) {\n        return db.query(queryFun, {\n          include_docs: true,\n          attachments: true,\n          binary: true\n        }).then(function (res) {\n          res.rows.forEach(function (row) {\n            var doc = row.doc;\n            Object.keys(doc._attachments).forEach(function (attName) {\n              var att = doc._attachments[attName];\n              should.not.exist(att.stub);\n              att.data.should.not.be.a('string');\n            });\n          });\n        });\n      });\n    });\n\n    it('#2858 Query works with attachments=true, binary=true 2', function () {\n\n      // Need to avoid the cache to workaround\n      // https://issues.apache.org/jira/browse/COUCHDB-2880\n      var db = new PouchDB(dbName, {ajax: {cache: false}});\n      var docs = [];\n      for (var i = 0; i < 5; i++) {\n        docs.push({\n          _id: i.toString()\n        });\n      }\n      return db.bulkDocs(docs).then(function () {\n        return createView(db, {\n          map: function (doc) {\n            emit(doc._id);\n          }\n        });\n      }).then(function (queryFun) {\n        return db.query(queryFun, {\n          include_docs: true,\n          attachments: true,\n          binary: true\n        }).then(function (res) {\n          res.rows.forEach(function (row) {\n            var doc = row.doc;\n            should.not.exist(doc._attachments);\n          });\n        });\n      });\n    });\n\n    it('#242 conflicts at the root level', function () {\n      var db = new PouchDB(dbName);\n\n      return db.bulkDocs([\n        {\n          foo: '1',\n          _id: 'foo',\n          _rev: '1-w',\n          _revisions: {start: 1, ids: ['w']}\n        }\n      ], {new_edits: false}).then(function () {\n        return createView(db, {\n          map: function (doc) {\n            emit(doc.foo);\n          }\n        }).then(function (queryFun) {\n          return db.query(queryFun).then(function (res) {\n            res.rows[0].key.should.equal('1');\n            return db.bulkDocs([\n              {\n                foo: '2',\n                _id: 'foo',\n                _rev: '1-x',\n                _revisions: {start: 1, ids: ['x']}\n              }\n            ], {new_edits: false}).then(function () {\n              return db.query(queryFun);\n            }).then(function (res) {\n              res.rows[0].key.should.equal('2');\n              return db.bulkDocs([\n                {\n                  foo: '3',\n                  _id: 'foo',\n                  _rev: '1-y',\n                  _deleted: true,\n                  _revisions: {start: 1, ids: ['y']}\n                }\n              ], {new_edits: false});\n            }).then(function () {\n              return db.query(queryFun);\n            }).then(function (res) {\n              res.rows[0].key.should.equal('2');\n            });\n          });\n        });\n      });\n    });\n\n    it('#242 conflicts at the root+1 level', function () {\n      var db = new PouchDB(dbName);\n\n      return db.bulkDocs([\n        {\n          foo: '2',\n          _id: 'foo',\n          _rev: '1-x',\n          _revisions: {start: 1, ids: ['x']}\n        },\n        {\n          foo: '3',\n          _id: 'foo',\n          _rev: '2-y',\n          _deleted: true,\n          _revisions: {start: 2, ids: ['y', 'x']}\n        }\n\n      ], {new_edits: false}).then(function () {\n        return createView(db, {\n          map: function (doc) {\n            emit(doc.foo);\n          }\n        }).then(function (queryFun) {\n          return db.query(queryFun).then(function (res) {\n            res.rows.length.should.equal(0);\n            return db.bulkDocs([\n              {\n                foo: '1',\n                _id: 'foo',\n                _rev: '1-w',\n                _revisions: {start: 1, ids: ['w']}\n              }\n            ], {new_edits: false}).then(function () {\n              return db.query(queryFun);\n            }).then(function (res) {\n              res.rows[0].key.should.equal('1');\n              return db.bulkDocs([\n                {\n                  foo: '4',\n                  _id: 'foo',\n                  _rev: '1-z',\n                  _revisions: {start: 1, ids: ['z']}\n                }\n              ], {new_edits: false});\n            }).then(function () {\n              return db.query(queryFun);\n            }).then(function (res) {\n              res.rows[0].key.should.equal('4');\n            });\n          });\n        });\n      });\n    });\n\n    it('Views should include _conflicts', function () {\n      var db2name = 'test2' + Math.random();\n      var cleanup = function () {\n        return new PouchDB(db2name).destroy();\n      };\n      var doc1 = {_id: '1', foo: 'bar'};\n      var doc2 = {_id: '1', foo: 'baz'};\n      var db = new PouchDB(dbName);\n      return testUtils.fin(db.info().then(function () {\n        var remote = new PouchDB(db2name);\n        return remote.info().then(function () {\n          return createView(db, {\n            map : function (doc) {\n              emit(doc._id, !!doc._conflicts);\n            }\n          }).then(function (queryFun) {\n            var replicate = testUtils.promisify(db.replicate.from, db.replicate);\n            return db.post(doc1).then(function () {\n              return remote.post(doc2);\n            }).then(function () {\n              return replicate(remote);\n            }).then(function () {\n              return db.get(doc1._id, {conflicts: true});\n            }).then(function (res) {\n              should.exist(res._conflicts);\n              return db.query(queryFun);\n            }).then(function (res) {\n              res.rows[0].value.should.equal(true);\n            });\n          });\n        });\n      }), cleanup);\n    });\n\n    it(\"Test view querying with limit option\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          if (doc.foo === 'bar') {\n            emit(doc.foo);\n          }\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { foo: 'bar' },\n            { foo: 'bar' },\n            { foo: 'baz' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, { limit: 1 });\n        }).then(function (res) {\n          res.total_rows.should.equal(2, 'Correctly returns total rows');\n          res.rows.should.have.length(1, 'Correctly limits returned rows');\n        });\n      });\n    });\n\n    it(\"Test view querying with custom reduce function\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo);\n        },\n        reduce: function (keys) {\n          return keys.map(function (keyId) {\n            var key = keyId[0];\n            // var id = keyId[1];\n            return key.join('');\n          });\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { foo: ['foo', 'bar'] },\n            { foo: ['foo', 'bar'] },\n            { foo: ['foo', 'bar', 'baz'] },\n            { foo: ['baz'] },\n            { foo: ['baz', 'bar'] }\n          ]\n        }).then(function () {\n          return db.query(queryFun, { reduce: true });\n        }).then(function (res) {\n          // We're using `chai.assert` here because the usual `chai.should()`\n          // object extension magic won't work when executing functions in a\n          // sandbox using node's `vm` module.\n          // c.f. https://stackoverflow.com/a/16273649/680742\n          assert.lengthOf(res.rows, 1, 'Correctly reduced returned rows');\n          assert.isNull(res.rows[0].key, 'Correct, non-existing key');\n          assert.lengthOf(res.rows[0].value, 5);\n          assert.include(res.rows[0].value, 'foobarbaz');\n          assert.include(res.rows[0].value, 'foobar'); // twice\n          assert.include(res.rows[0].value, 'bazbar');\n          assert.include(res.rows[0].value, 'baz');\n          return db.query(queryFun, { group_level: 1, reduce: true });\n        }).then(function (res) {\n          // We're using `chai.assert` here because the usual `chai.should()`\n          // object extension magic won't work when executing functions in a\n          // sandbox using node's `vm` module.\n          // c.f. https://stackoverflow.com/a/16273649/680742\n          assert.lengthOf(res.rows, 2, 'Correctly group reduced rows');\n          assert.deepEqual(res.rows[0].key, ['baz']);\n          assert.lengthOf(res.rows[0].value, 2);\n          assert.include(res.rows[0].value, 'bazbar');\n          assert.include(res.rows[0].value, 'baz');\n          assert.deepEqual(res.rows[1].key, ['foo']);\n          assert.lengthOf(res.rows[1].value, 3);\n          assert.include(res.rows[1].value, 'foobarbaz');\n          assert.include(res.rows[1].value, 'foobar'); // twice\n        });\n      });\n    });\n\n    it(\"Test view querying with group_level option and reduce\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo);\n        },\n        reduce: '_count'\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { foo: ['foo', 'bar'] },\n            { foo: ['foo', 'bar'] },\n            { foo: ['foo', 'bar', 'baz'] },\n            { foo: ['baz'] },\n            { foo: ['baz', 'bar'] }\n          ]\n        }).then(function () {\n          return db.query(queryFun, { group_level: 1, reduce: true});\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'Correctly group returned rows');\n          res.rows[0].key.should.deep.equal(['baz']);\n          res.rows[0].value.should.equal(2);\n          res.rows[1].key.should.deep.equal(['foo']);\n          res.rows[1].value.should.equal(3);\n          return db.query(queryFun, { group_level: 999, reduce: true});\n        }).then(function (res) {\n          res.rows.should.have.length(4, 'Correctly group returned rows');\n          res.rows[2].key.should.deep.equal(['foo', 'bar']);\n          res.rows[2].value.should.equal(2);\n          return db.query(queryFun, { group_level: '999', reduce: true});\n        }).then(function (res) {\n          res.rows.should.have.length(4, 'Correctly group returned rows');\n          res.rows[2].key.should.deep.equal(['foo', 'bar']);\n          res.rows[2].value.should.equal(2);\n          return db.query(queryFun, { group_level: 0, reduce: true});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'Correctly group returned rows');\n          res.rows[0].value.should.equal(5);\n        });\n      });\n    });\n\n    it(\"Test view querying with invalid group_level options\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo);\n        },\n        reduce: '_count'\n      }).then(function (queryFun) {\n        return db.query(queryFun, {group_level: -1, reduce: true})\n            .then(function (res) {\n          res.should.not.exist('expected error on invalid group_level');\n        }).catch(function (err) {\n          err.status.should.equal(400);\n          err.message.should.be.a('string');\n          return db.query(queryFun, { group_level: 'exact', reduce: true});\n        }).then(function (res) {\n          res.should.not.exist('expected error on invalid group_level');\n        }).catch(function (err) {\n          err.status.should.equal(400);\n          err.message.should.be.a('string');\n        });\n      });\n    });\n\n    it(\"Test view querying with limit option and reduce\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo);\n        },\n        reduce: '_count'\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { foo: 'bar' },\n            { foo: 'bar' },\n            { foo: 'baz' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, { limit: 1, group: true, reduce: true});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'Correctly limits returned rows');\n          res.rows[0].key.should.equal('bar');\n          res.rows[0].value.should.equal(2);\n        }).then(function () {\n          return db.query(queryFun, { limit: '1', group: true, reduce: true});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'Correctly limits returned rows');\n          res.rows[0].key.should.equal('bar');\n          res.rows[0].value.should.equal(2);\n        });\n      });\n    });\n\n    it(\"Test view querying with invalid limit option and reduce\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo);\n        },\n        reduce: '_count'\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { foo: 'bar' },\n            { foo: 'bar' },\n            { foo: 'baz' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, { limit: -1, group: true, reduce: true});\n        }).then(function (res) {\n          res.should.not.exist('expected error on invalid group_level');\n        }).catch(function (err) {\n          err.status.should.equal(400);\n          err.message.should.be.a('string');\n          return db.query(queryFun, { limit: '1a', group: true, reduce: true});\n        }).then(function (res) {\n          res.should.not.exist('expected error on invalid group_level');\n        }).catch(function (err) {\n          err.status.should.equal(400);\n          err.message.should.be.a('string');\n        });\n      });\n    });\n\n    it('Test unsafe object usage (#244)', function () {\n      var db = new PouchDB(dbName);\n      return db.bulkDocs([\n        {_id: 'constructor'}\n      ]).then(function (res) {\n        var rev = res[0].rev;\n        return createView(db, {\n          map: function (doc) {\n            emit(doc._id);\n          }\n        }).then(function (queryFun) {\n          return db.query(queryFun, {include_docs: true}).then(function (res) {\n            res.rows.should.deep.equal([\n              {\n                \"key\": \"constructor\",\n                \"id\": \"constructor\",\n                \"value\": null,\n                \"doc\": {\n                  \"_id\": \"constructor\",\n                  \"_rev\": rev\n                }\n              }\n            ]);\n            return db.bulkDocs([\n              {_id: 'constructor', _rev: rev}\n            ]);\n          }).then(function (res) {\n            rev = res[0].rev;\n            return db.query(queryFun, {include_docs: true});\n          }).then(function (res) {\n            res.rows.should.deep.equal([\n              {\n                \"key\": \"constructor\",\n                \"id\": \"constructor\",\n                \"value\": null,\n                \"doc\": {\n                  \"_id\": \"constructor\",\n                  \"_rev\": rev\n                }\n              }\n            ]);\n            return db.bulkDocs([\n              {_id: 'constructor', _rev: rev, _deleted: true}\n            ]);\n          }).then(function (res) {\n            rev = res[0].rev;\n            return db.query(queryFun, {include_docs: true});\n          }).then(function (res) {\n            res.rows.should.deep.equal([]);\n          });\n        });\n      });\n    });\n\n    it(\"Test view querying with a skip option and reduce\", function () {\n      var qf;\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo);\n        },\n        reduce: '_count'\n      }).then(function (queryFun) {\n        qf = queryFun;\n        return db.bulkDocs({\n          docs: [\n            { foo: 'bar' },\n            { foo: 'bar' },\n            { foo: 'baz' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, {skip: 1, group: true, reduce: true});\n        });\n      }).then(function (res) {\n        res.rows.should.have.length(1, 'Correctly limits returned rows');\n        res.rows[0].key.should.equal('baz');\n        res.rows[0].value.should.equal(1);\n      }).then(function () {\n        return db.query(qf, {skip: '1', group: true, reduce: true});\n      }).then(function (res) {\n        res.rows.should.have.length(1, 'Correctly limits returned rows');\n        res.rows[0].key.should.equal('baz');\n        res.rows[0].value.should.equal(1);\n      });\n    });\n\n    it(\"Test view querying with invalid skip option and reduce\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo);\n        },\n        reduce: '_count'\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { foo: 'bar' },\n            { foo: 'bar' },\n            { foo: 'baz' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, { skip: -1, group: true, reduce: true});\n        }).then(function (res) {\n          res.should.not.exist('expected error on invalid group_level');\n        }).catch(function (err) {\n          err.status.should.equal(400);\n          err.message.should.be.a('string');\n          return db.query(queryFun, { skip: '1a', group: true, reduce: true});\n        }).then(function (res) {\n          res.should.not.exist('expected error on invalid group_level');\n        }).catch(function (err) {\n          err.status.should.equal(400);\n          err.message.should.be.a('string');\n        });\n      });\n    });\n\n    it(\"Special document member _doc_id_rev should never leak outside\",\n      function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          if (doc.foo === 'bar') {\n            emit(doc.foo);\n          }\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { foo: 'bar' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, { include_docs: true });\n        }).then(function (res) {\n          should.not.exist(res.rows[0].doc._doc_id_rev, '_doc_id_rev is leaking but should not');\n        });\n      });\n    });\n\n    it('multiple view creations and cleanups', function () {\n      var db = new PouchDB(dbName);\n      var map = function (doc) {\n        emit(doc.num);\n      };\n      function createView(name) {\n        var storableViewObj = {\n          map: map.toString()\n        };\n        return  db.put({\n          _id: '_design/' + name,\n          views: {\n            theView: storableViewObj\n          }\n        });\n      }\n      return db.bulkDocs({\n        docs: [\n          {_id: 'test1'}\n        ]\n      }).then(function () {\n        function sequence(name) {\n          return createView(name).then(function () {\n            return db.query(name + '/theView').then(function () {\n              return db.viewCleanup();\n            });\n          });\n        }\n        var attempts = [];\n        var numAttempts = 10;\n        for (var i = 0; i < numAttempts; i++) {\n          attempts.push(sequence('test' + i));\n        }\n        return Promise.all(attempts).then(function () {\n          var keys = [];\n          for (var i = 0; i < numAttempts; i++) {\n            keys.push('_design/test' + i);\n          }\n          return db.allDocs({keys : keys, include_docs : true});\n        }).then(function (res) {\n          var docs = res.rows.map(function (row) {\n            row.doc._deleted = true;\n            return row.doc;\n          });\n          return db.bulkDocs({docs : docs});\n        }).then(function () {\n          return db.viewCleanup();\n        }).then(function (res) {\n          res.ok.should.equal(true);\n        });\n      });\n    });\n\n    it('If reduce function returns 0, resulting value should not be null', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo);\n        },\n        reduce: function () {\n          return 0;\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { foo: 'bar' }\n          ]\n        }).then(function () {\n          return db.query(queryFun).then(function (data) {\n            should.exist(data.rows[0].value);\n          });\n        });\n      });\n    });\n\n    it('Testing skip with a view', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.foo);\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({\n          docs: [\n            { foo: 'bar' },\n            { foo: 'baz' },\n            { foo: 'baf' }\n          ]\n        }).then(function () {\n          return db.query(queryFun, {skip: 1});\n        }).then(function (data) {\n          data.rows.should.have.length(2);\n          data.offset.should.equal(1);\n          data.total_rows.should.equal(3);\n        });\n      });\n    });\n\n    it('Map documents on 0/null/undefined/empty string', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.num);\n        }\n      }).then(function (mapFunction) {\n        var docs = [\n          {_id: '0', num: 0},\n          {_id: '1', num: 1},\n          {_id: 'undef' /* num is undefined */},\n          {_id: 'null', num: null},\n          {_id: 'empty', num: ''},\n          {_id: 'nan', num: NaN},\n          {_id: 'inf', num: Infinity},\n          {_id: 'neginf', num: -Infinity}\n        ];\n        return db.bulkDocs({docs: docs}).then(function () {\n          return db.query(mapFunction, {key: 0});\n        }).then(function (data) {\n          data.rows.should.have.length(1);\n          data.rows[0].id.should.equal('0');\n\n          return db.query(mapFunction, {key: ''});\n        }).then(function (data) {\n          data.rows.should.have.length(1);\n          data.rows[0].id.should.equal('empty');\n\n          return db.query(mapFunction, {key: undefined});\n        }).then(function (data) {\n          data.rows.should.have.length(8); // everything\n\n          // keys that should all resolve to null\n          var emptyKeys = [null, NaN, Infinity, -Infinity];\n          return Promise.all(emptyKeys.map(function (emptyKey) {\n            return db.query(mapFunction, {key: emptyKey}).then(function (data) {\n              data.rows.map(function (row) {\n                return row.id;\n              }).should.deep.equal(['inf', 'nan', 'neginf', 'null', 'undef']);\n            });\n          }));\n        });\n      });\n    });\n\n    it('Testing query with keys', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.field);\n        }\n      }).then(function (queryFun) {\n        var opts = {include_docs: true};\n        return db.bulkDocs({\n          docs: [\n            {_id: 'doc_0', field: 0},\n            {_id: 'doc_1', field: 1},\n            {_id: 'doc_2', field: 2},\n            {_id: 'doc_empty', field: ''},\n            {_id: 'doc_null', field: null},\n            {_id: 'doc_undefined' /* field undefined */},\n            {_id: 'doc_foo', field: 'foo'}\n          ]\n        }).then(function () {\n          return db.query(queryFun, opts);\n        }).then(function (data) {\n          data.rows.should.have.length(7, 'returns all docs');\n          opts.keys = [];\n          return db.query(queryFun, opts);\n        }).then(function (data) {\n          data.rows.should.have.length(0, 'returns 0 docs');\n\n          opts.keys = [0];\n          return db.query(queryFun, opts);\n        }).then(function (data) {\n          data.rows.should.have.length(1, 'returns one doc');\n          data.rows[0].doc._id.should.equal('doc_0');\n\n          opts.keys = [2, 'foo', 1, 0, null, ''];\n          return db.query(queryFun, opts);\n        }).then(function (data) {\n          // check that the returned ordering fits opts.keys\n          data.rows.should.have.length(7, 'returns 7 docs in correct order');\n          data.rows[0].doc._id.should.equal('doc_2');\n          data.rows[1].doc._id.should.equal('doc_foo');\n          data.rows[2].doc._id.should.equal('doc_1');\n          data.rows[3].doc._id.should.equal('doc_0');\n          data.rows[4].doc._id.should.equal('doc_null');\n          data.rows[5].doc._id.should.equal('doc_undefined');\n          data.rows[6].doc._id.should.equal('doc_empty');\n\n          opts.keys = [3, 1, 4, 2];\n          return db.query(queryFun, opts);\n        }).then(function (data) {\n          // nonexistent keys just give us holes in the list\n          data.rows.should.have.length(2, 'returns 2 non-empty docs');\n          data.rows[0].key.should.equal(1);\n          data.rows[0].doc._id.should.equal('doc_1');\n          data.rows[1].key.should.equal(2);\n          data.rows[1].doc._id.should.equal('doc_2');\n\n          opts.keys = [2, 1, 2, 0, 2, 1];\n          return db.query(queryFun, opts);\n        }).then(function (data) {\n          // with duplicates, we return multiple docs\n          data.rows.should.have.length(6, 'returns 6 docs with duplicates');\n          data.rows[0].doc._id.should.equal('doc_2');\n          data.rows[1].doc._id.should.equal('doc_1');\n          data.rows[2].doc._id.should.equal('doc_2');\n          data.rows[3].doc._id.should.equal('doc_0');\n          data.rows[4].doc._id.should.equal('doc_2');\n          data.rows[5].doc._id.should.equal('doc_1');\n\n          opts.keys = [2, 1, 2, 3, 2];\n          return db.query(queryFun, opts);\n        }).then(function (data) {\n          // duplicates and unknowns at the same time, for maximum weirdness\n          data.rows.should.have.length(4, 'returns 2 docs with duplicates/unknowns');\n          data.rows[0].doc._id.should.equal('doc_2');\n          data.rows[1].doc._id.should.equal('doc_1');\n          data.rows[2].doc._id.should.equal('doc_2');\n          data.rows[3].doc._id.should.equal('doc_2');\n\n          opts.keys = [3];\n          return db.query(queryFun, opts);\n        }).then(function (data) {\n          data.rows.should.have.length(0, 'returns 0 doc due to unknown key');\n\n          opts.include_docs = false;\n          opts.keys = [3, 2];\n          return db.query(queryFun, opts);\n        }).then(function (data) {\n          data.rows.should.have.length(1, 'returns 1 doc due to unknown key');\n          data.rows[0].id.should.equal('doc_2');\n          should.not.exist(data.rows[0].doc, 'no doc, since include_docs=false');\n        });\n      });\n    });\n\n    it('Testing query with multiple keys, multiple docs', function () {\n      function ids(row) {\n        return row.id;\n      }\n      var opts = {keys: [0, 1, 2]};\n      var spec;\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.field1);\n          emit(doc.field2);\n        }\n      }).then(function (mapFunction) {\n        return db.bulkDocs({\n          docs: [\n            {_id: '0', field1: 0},\n            {_id: '1a', field1: 1},\n            {_id: '1b', field1: 1},\n            {_id: '1c', field1: 1},\n            {_id: '2+3', field1: 2, field2: 3},\n            {_id: '4+5', field1: 4, field2: 5},\n            {_id: '3+5', field1: 3, field2: 5},\n            {_id: '3+4', field1: 3, field2: 4}\n          ]\n        }).then(function () {\n          spec = ['0', '1a', '1b', '1c', '2+3'];\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(spec);\n\n          opts.keys = [3, 5, 4, 3];\n          spec = ['2+3', '3+4', '3+5', '3+5', '4+5', '3+4', '4+5', '2+3', '3+4', '3+5'];\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(spec);\n        });\n      });\n    });\n\n    it('Testing multiple emissions (issue #14)', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.foo);\n          emit(doc.bar);\n          emit(doc.foo);\n          emit(doc.bar, 'multiple values!');\n          emit(doc.bar, 'crayon!');\n        }\n      }).then(function (mapFunction) {\n        return db.bulkDocs({\n          docs: [\n            {_id: 'doc1', foo : 'foo', bar : 'bar'},\n            {_id: 'doc2', foo : 'foo', bar : 'bar'}\n          ]\n        }).then(function () {\n          var opts = {keys: ['foo', 'bar']};\n\n          return db.query(mapFunction, opts);\n        });\n      }).then(function (data) {\n        data.rows.should.have.length(10);\n\n        data.rows[0].key.should.equal('foo');\n        data.rows[0].id.should.equal('doc1');\n        data.rows[1].key.should.equal('foo');\n        data.rows[1].id.should.equal('doc1');\n\n        data.rows[2].key.should.equal('foo');\n        data.rows[2].id.should.equal('doc2');\n        data.rows[3].key.should.equal('foo');\n        data.rows[3].id.should.equal('doc2');\n\n        data.rows[4].key.should.equal('bar');\n        data.rows[4].id.should.equal('doc1');\n        should.not.exist(data.rows[4].value);\n        data.rows[5].key.should.equal('bar');\n        data.rows[5].id.should.equal('doc1');\n        data.rows[5].value.should.equal('crayon!');\n        data.rows[6].key.should.equal('bar');\n        data.rows[6].id.should.equal('doc1');\n        data.rows[6].value.should.equal('multiple values!');\n\n        data.rows[7].key.should.equal('bar');\n        data.rows[7].id.should.equal('doc2');\n        should.not.exist(data.rows[7].value);\n        data.rows[8].key.should.equal('bar');\n        data.rows[8].id.should.equal('doc2');\n        data.rows[8].value.should.equal('crayon!');\n        data.rows[9].key.should.equal('bar');\n        data.rows[9].id.should.equal('doc2');\n        data.rows[9].value.should.equal('multiple values!');\n      });\n    });\n\n    it('Testing multiple emissions (complex keys)', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function () {\n          emit(['a'], 1);\n          emit(['b'], 3);\n          emit(['a'], 2);\n        }\n      }).then(function (mapFunction) {\n        return db.bulkDocs({\n          docs: [\n            {_id: 'doc1', foo: 'foo', bar: 'bar'}\n          ]\n        }).then(function () {\n          return db.query(mapFunction);\n        });\n      }).then(function (data) {\n        data.rows.should.have.length(3);\n        data.rows[0].key.should.eql(['a']);\n        data.rows[0].value.should.equal(1);\n        data.rows[1].key.should.eql(['a']);\n        data.rows[1].value.should.equal(2);\n        data.rows[2].key.should.eql(['b']);\n        data.rows[2].value.should.equal(3);\n      });\n    });\n\n    it('Testing empty startkeys and endkeys', function () {\n      var opts = {startkey: null, endkey: ''};\n      function ids(row) {\n        return row.id;\n      }\n      var spec;\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.field);\n        }\n      }).then(function (mapFunction) {\n        return db.bulkDocs({\n          docs: [\n            {_id: 'doc_empty', field: ''},\n            {_id: 'doc_null', field: null},\n            {_id: 'doc_undefined' /* field undefined */},\n            {_id: 'doc_foo', field: 'foo'}\n          ]\n        }).then(function () {\n          spec = ['doc_null', 'doc_undefined', 'doc_empty'];\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(spec);\n\n          opts = {startkey: '', endkey: 'foo'};\n          spec = ['doc_empty', 'doc_foo'];\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(spec);\n\n          opts = {startkey: null, endkey: null};\n          spec = ['doc_null', 'doc_undefined'];\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(spec);\n\n          opts.descending = true;\n          spec.reverse();\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(spec);\n        });\n      });\n    });\n\n    it('#238 later non-winning revisions', function () {\n      var db = new PouchDB(dbName);\n\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.name);\n        }\n      }).then(function (mapFun) {\n        return db.bulkDocs([{\n          _id: 'doc',\n          name: 'zoot',\n          _rev: '2-x',\n          _revisions: {\n            start: 2,\n            ids: ['x', 'y']\n          }\n        }], {new_edits: false}).then(function () {\n          return db.query(mapFun);\n        }).then(function (res) {\n          res.rows.should.have.length(1);\n          res.rows[0].id.should.equal('doc');\n          res.rows[0].key.should.equal('zoot');\n          return db.bulkDocs([{\n            _id: 'doc',\n            name: 'suit',\n            _rev: '2-w',\n            _revisions: {\n              start: 2,\n              ids: ['w', 'y']\n            }\n          }], {new_edits: false});\n        }).then(function () {\n          return db.query(mapFun);\n        }).then(function (res) {\n          res.rows.should.have.length(1);\n          res.rows[0].id.should.equal('doc');\n          res.rows[0].key.should.equal('zoot');\n        });\n      });\n    });\n\n    it('#238 later non-winning deleted revisions', function () {\n      var db = new PouchDB(dbName);\n\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.name);\n        }\n      }).then(function (mapFun) {\n        return db.bulkDocs([{\n          _id: 'doc',\n          name: 'zoot',\n          _rev: '2-x',\n          _revisions: {\n            start: 2,\n            ids: ['x', 'y']\n          }\n        }], {new_edits: false}).then(function () {\n          return db.query(mapFun);\n        }).then(function (res) {\n          res.rows.should.have.length(1);\n          res.rows[0].id.should.equal('doc');\n          res.rows[0].key.should.equal('zoot');\n          return db.bulkDocs([{\n            _id: 'doc',\n            name: 'suit',\n            _deleted: true,\n            _rev: '2-z',\n            _revisions: {\n              start: 2,\n              ids: ['z', 'y']\n            }\n          }], {new_edits: false});\n        }).then(function () {\n          return db.query(mapFun);\n        }).then(function (res) {\n          res.rows.should.have.length(1);\n          res.rows[0].id.should.equal('doc');\n          res.rows[0].key.should.equal('zoot');\n        });\n      });\n    });\n\n    it('#238 query with conflicts', function () {\n      var db = new PouchDB(dbName);\n\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.name);\n        }\n      }).then(function (mapFun) {\n        return db.bulkDocs([\n\n          {\n            _id: 'doc',\n            name: 'zab',\n            _rev: '2-y',\n            _revisions: {\n              start: 1,\n              ids: ['y']\n            }\n          }, {\n            _id: 'doc',\n            name: 'zoot',\n            _rev: '2-x',\n            _revisions: {\n              start: 2,\n              ids: ['x', 'y']\n            }\n          }\n        ], {new_edits: false}).then(function () {\n          return db.query(mapFun);\n        }).then(function (res) {\n          res.rows.should.have.length(1);\n          res.rows[0].id.should.equal('doc');\n          res.rows[0].key.should.equal('zoot');\n          return db.bulkDocs([\n            {\n              _id: 'doc',\n              name: 'suit',\n              _rev: '2-w',\n              _revisions: {\n                start: 2,\n                ids: ['w', 'y']\n              }\n            }, {\n              _id: 'doc',\n              name: 'zorb',\n              _rev: '2-z',\n              _revisions: {\n                start: 2,\n                ids: ['z', 'y']\n              }\n            }\n          ], {new_edits: false});\n        }).then(function () {\n          return db.query(mapFun);\n        }).then(function (res) {\n          res.rows.should.have.length(1);\n          res.rows[0].id.should.equal('doc');\n          res.rows[0].key.should.equal('zorb');\n        });\n      });\n    });\n\n    it('Testing ordering with startkey/endkey/key', function () {\n      var opts = {startkey: '1', endkey: '4'};\n      function ids(row) {\n        return row.id;\n      }\n      var spec;\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.field, null);\n        }\n      }).then(function (mapFunction) {\n        return db.bulkDocs({\n          docs: [\n            {_id: 'h', field: '4'},\n            {_id: 'a', field: '1'},\n            {_id: 'e', field: '2'},\n            {_id: 'c', field: '1'},\n            {_id: 'f', field: '3'},\n            {_id: 'g', field: '4'},\n            {_id: 'd', field: '2'},\n            {_id: 'b', field: '1'}\n          ]\n        }).then(function () {\n          spec = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(spec);\n\n          opts = {key: '1'};\n          spec = ['a', 'b', 'c'];\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(spec);\n\n          opts = {key: '2'};\n          spec = ['d', 'e'];\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(spec);\n\n          opts.descending = true;\n          spec.reverse();\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(spec, 'reverse order');\n        });\n      });\n    });\n\n    it('opts.keys should work with complex keys', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.foo, doc.foo);\n        }\n      }).then(function (mapFunction) {\n        var keys = [\n          {key: 'missing'},\n          ['test', 1],\n          {key1: 'value1'},\n          ['missing'],\n          [0, 0]\n        ];\n        return db.bulkDocs({\n          docs: [\n            {foo: {key2: 'value2'}},\n            {foo: {key1: 'value1'}},\n            {foo: [0, 0]},\n            {foo: ['test', 1]},\n            {foo: [0, false]}\n          ]\n        }).then(function () {\n          var opts = {keys: keys};\n          return db.query(mapFunction, opts);\n        }).then(function (data) {\n          data.rows.should.have.length(3);\n          data.rows[0].value.should.deep.equal(keys[1]);\n          data.rows[1].value.should.deep.equal(keys[2]);\n          data.rows[2].value.should.deep.equal(keys[4]);\n        });\n      });\n    });\n\n    it('Testing ordering with dates', function () {\n      function ids(row) {\n        return row.id;\n      }\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.date, null);\n        }\n      }).then(function (mapFunction) {\n        return db.bulkDocs({\n          docs: [\n            {_id: '1969', date: '1969 was when Space Oddity hit'},\n            {_id: '1971', date : new Date('1971-12-17T00:00:00.000Z')}, // Hunky Dory was released\n            {_id: '1972', date: '1972 was when Ziggy landed on Earth'},\n            {_id: '1977', date: new Date('1977-01-14T00:00:00.000Z')}, // Low was released\n            {_id: '1985', date: '1985+ is better left unmentioned'}\n          ]\n        }).then(function () {\n          return db.query(mapFunction);\n        }).then(function (data) {\n          data.rows.map(ids).should.deep.equal(['1969', '1971', '1972', '1977', '1985']);\n        });\n      });\n    });\n\n    it('should work with a joined doc', function () {\n      function change(row) {\n        return [row.key, row.doc._id, row.doc.val];\n      }\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          if (doc.join) {\n            emit(doc.color, {_id : doc.join});\n          }\n        }\n      }).then(function (mapFunction) {\n        return db.bulkDocs({\n          docs: [\n            {_id: 'a', join: 'b', color: 'green'},\n            {_id: 'b', val: 'c'},\n            {_id: 'd', join: 'f', color: 'red'}\n          ]\n        }).then(function () {\n          return db.query(mapFunction, {include_docs: true});\n        }).then(function (resp) {\n          return change(resp.rows[0]).should.deep.equal(['green', 'b', 'c']);\n        });\n      });\n    });\n\n    it('should query correctly with a variety of criteria', function () {\n      var db = new PouchDB(dbName);\n\n      return createView(db, {\n        map : function (doc) {\n          emit(doc._id);\n        }\n      }).then(function (mapFun) {\n\n        var docs = [\n          {_id : '0'},\n          {_id : '1'},\n          {_id : '2'},\n          {_id : '3'},\n          {_id : '4'},\n          {_id : '5'},\n          {_id : '6'},\n          {_id : '7'},\n          {_id : '8'},\n          {_id : '9'}\n        ];\n        return db.bulkDocs({docs : docs}).then(function (res) {\n          docs[3]._deleted = true;\n          docs[7]._deleted = true;\n          docs[3]._rev = res[3].rev;\n          docs[7]._rev = res[7].rev;\n          return db.remove(docs[3]);\n        }).then(function () {\n          return db.remove(docs[7]);\n        }).then(function () {\n          return db.query(mapFun, {});\n        }).then(function (res) {\n          res.rows.should.have.length(8, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : '5'});\n        }).then(function (res) {\n          res.rows.should.have.length(4, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : '5', skip : 2, limit : 10});\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : '5', descending : true, skip : 1});\n        }).then(function (res) {\n          res.rows.should.have.length(4, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : '5', endkey : 'z'});\n        }).then(function (res) {\n          res.rows.should.have.length(4, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : '5', endkey : '5'});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : '5', endkey : '4', descending : true});\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : '3', endkey : '7', descending : false});\n        }).then(function (res) {\n          res.rows.should.have.length(3, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : '7', endkey : '3', descending : true});\n        }).then(function (res) {\n          res.rows.should.have.length(3, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : '', endkey : '0'});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {keys : ['0', '1', '3']});\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {keys : ['0', '1', '0', '2', '1', '1']});\n        }).then(function (res) {\n          res.rows.should.have.length(6, 'correctly return rows');\n          res.rows.map(function (row) { return row.key; }).should.deep.equal(\n            ['0', '1', '0', '2', '1', '1']);\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {keys : []});\n        }).then(function (res) {\n          res.rows.should.have.length(0, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {keys : ['7']});\n        }).then(function (res) {\n          res.rows.should.have.length(0, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {key : '3'});\n        }).then(function (res) {\n          res.rows.should.have.length(0, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {key : '2'});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n          return db.query(mapFun, {key : 'z'});\n        }).then(function (res) {\n          res.rows.should.have.length(0, 'correctly return rows');\n          res.total_rows.should.equal(8, 'correctly return total_rows');\n\n          return db.query(mapFun, {startkey : '5', endkey : '4'}).then(function (res) {\n            res.should.not.exist('expected error on reversed start/endkey');\n          }).catch(function (err) {\n            err.status.should.equal(400);\n            err.message.should.be.a('string');\n          });\n        });\n      });\n    });\n\n    it('should query correctly with skip/limit and multiple keys/values', function () {\n      var db = new PouchDB(dbName);\n      var docs = {\n        docs: [\n          {_id: 'doc1', foo : 'foo', bar : 'bar'},\n          {_id: 'doc2', foo : 'foo', bar : 'bar'}\n        ]\n      };\n      var getValues = function (res) {\n        return res.value;\n      };\n      var getIds = function (res) {\n        return res.id;\n      };\n\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.foo, 'fooValue');\n          emit(doc.foo);\n          emit(doc.bar);\n          emit(doc.bar, 'crayon!');\n          emit(doc.bar, 'multiple values!');\n          emit(doc.bar, 'crayon!');\n        }\n      }).then(function (mapFun) {\n\n        return db.bulkDocs(docs).then(function () {\n          return db.query(mapFun, {});\n        }).then(function (res) {\n          res.rows.should.have.length(12, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          res.rows.map(getValues).should.deep.equal(\n            [null, 'crayon!', 'crayon!', 'multiple values!',\n              null, 'crayon!', 'crayon!', 'multiple values!',\n              null, 'fooValue', null, 'fooValue']);\n          res.rows.map(getIds).should.deep.equal(\n            ['doc1', 'doc1', 'doc1', 'doc1',\n              'doc2', 'doc2', 'doc2', 'doc2',\n              'doc1', 'doc1', 'doc2', 'doc2']);\n          return db.query(mapFun, {startkey : 'foo'});\n        }).then(function (res) {\n          res.rows.should.have.length(4, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          res.rows.map(getValues).should.deep.equal(\n            [null, 'fooValue', null, 'fooValue']);\n          res.rows.map(getIds).should.deep.equal(\n            ['doc1', 'doc1', 'doc2', 'doc2']);\n          return db.query(mapFun, {startkey : 'foo', endkey : 'foo'});\n        }).then(function (res) {\n          res.rows.should.have.length(4, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : 'bar', endkey : 'bar'});\n        }).then(function (res) {\n          res.rows.should.have.length(8, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : 'foo', limit : 1});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          res.rows.map(getValues).should.deep.equal([null]);\n          res.rows.map(getIds).should.deep.equal(['doc1']);\n          return db.query(mapFun, {startkey : 'foo', limit : 2});\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : 'foo', limit : 1000});\n        }).then(function (res) {\n          res.rows.should.have.length(4, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : 'foo', skip : 1});\n        }).then(function (res) {\n          res.rows.should.have.length(3, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : 'foo', skip : 3, limit : 0});\n        }).then(function (res) {\n          res.rows.should.have.length(0, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : 'foo', skip : 3, limit : 1});\n        }).then(function (res) {\n          res.rows.should.have.length(1, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          res.rows.map(getValues).should.deep.equal(['fooValue']);\n          res.rows.map(getIds).should.deep.equal(['doc2']);\n          return db.query(mapFun, {startkey : 'quux', skip : 3, limit : 1});\n        }).then(function (res) {\n          res.rows.should.have.length(0, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n          return db.query(mapFun, {startkey : 'bar', limit : 2});\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'correctly return rows');\n          res.total_rows.should.equal(12, 'correctly return total_rows');\n        });\n      });\n    });\n\n    it('should query correctly with undefined key/values', function () {\n      var db = new PouchDB(dbName);\n      var docs = {\n        docs: [\n          {_id: 'doc1'},\n          {_id: 'doc2'}\n        ]\n      };\n      return createView(db, {\n        map : function () {\n          emit();\n        }\n      }).then(function (mapFun) {\n        return db.bulkDocs(docs).then(function () {\n          return db.query(mapFun, {});\n        }).then(function (res) {\n          res.total_rows.should.equal(2, 'correctly return total_rows');\n          res.rows.should.deep.equal([\n            {\n              key : null,\n              value : null,\n              id : 'doc1'\n            },\n            {\n              key : null,\n              value : null,\n              id : 'doc2'\n            }\n          ]);\n        });\n      });\n    });\n\n    it('should query correctly with no docs', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function () {\n          emit();\n        }\n      }).then(function (queryFun) {\n        return db.query(queryFun).then(function (res) {\n          res.total_rows.should.equal(0, 'total_rows');\n          res.offset.should.equal(0);\n          res.rows.should.deep.equal([]);\n        });\n      });\n    });\n\n    it('should query correctly with no emits', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function () {\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs : [\n          {_id : 'foo'},\n          {_id : 'bar'}\n        ]}).then(function () {\n          return db.query(queryFun).then(function (res) {\n            res.total_rows.should.equal(0, 'total_rows');\n            res.offset.should.equal(0);\n            res.rows.should.deep.equal([]);\n          });\n        });\n      });\n    });\n\n    it('should correctly return results when reducing or not reducing', function () {\n\n      function keyValues(row) {\n        return { key: row.key, value: row.value };\n      }\n      function keys(row) {\n        return row.key;\n      }\n      function values(row) {\n        return row.value;\n      }\n      function docIds(row) {\n        return row.doc._id;\n      }\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.name);\n        },\n        reduce : '_count'\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs : [\n          {name : 'foo', _id : '1'},\n          {name : 'bar', _id : '2'},\n          {name : 'foo', _id : '3'},\n          {name : 'quux', _id : '4'},\n          {name : 'foo', _id : '5'},\n          {name : 'foo', _id : '6'},\n          {name : 'foo', _id : '7'}\n\n        ]}).then(function () {\n          return db.query(queryFun);\n        }).then(function (res) {\n          Object.keys(res.rows[0]).sort().should.deep.equal(['key', 'value'],\n                                                            'object only have 2 keys');\n          should.not.exist(res.total_rows, 'no total_rows1');\n          should.not.exist(res.offset, 'no offset1');\n          res.rows.map(keyValues).should.deep.equal([\n            {\n              key   : null,\n              value : 7\n            }\n          ]);\n          return db.query(queryFun, {group : true});\n        }).then(function (res) {\n          Object.keys(res.rows[0]).sort().should.deep.equal(['key', 'value'],\n                                                            'object only have 2 keys');\n          should.not.exist(res.total_rows, 'no total_rows2');\n          should.not.exist(res.offset, 'no offset2');\n          res.rows.map(keyValues).should.deep.equal([\n            {\n              key : 'bar',\n              value : 1\n            },\n            {\n              key : 'foo',\n              value : 5\n            },\n            {\n              key : 'quux',\n              value : 1\n            }\n          ]);\n          return db.query(queryFun, {reduce : false});\n        }).then(function (res) {\n          Object.keys(res.rows[0]).sort().should.deep.equal(['id', 'key', 'value'],\n                                                            'object only have 3 keys');\n          res.total_rows.should.equal(7, 'total_rows1');\n          res.offset.should.equal(0, 'offset1');\n          res.rows.map(keys).should.deep.equal([\n            'bar', 'foo', 'foo', 'foo', 'foo', 'foo', 'quux'\n          ]);\n          res.rows.map(values).should.deep.equal([\n            null, null, null, null, null, null, null\n          ]);\n          return db.query(queryFun, {reduce : false, skip : 3});\n        }).then(function (res) {\n          Object.keys(res.rows[0]).sort().should.deep.equal(['id', 'key', 'value'],\n                                                            'object only have 3 keys');\n          res.total_rows.should.equal(7, 'total_rows2');\n          res.offset.should.equal(3, 'offset2');\n          res.rows.map(keys).should.deep.equal([\n            'foo', 'foo', 'foo', 'quux'\n          ]);\n          return db.query(queryFun, {reduce : false, include_docs : true});\n        }).then(function (res) {\n          Object.keys(res.rows[0]).sort().should.deep.equal(['doc', 'id', 'key', 'value'],\n                                                            'object only have 4 keys');\n          res.total_rows.should.equal(7, 'total_rows3');\n          res.offset.should.equal(0, 'offset3');\n          res.rows.map(keys).should.deep.equal([\n            'bar', 'foo', 'foo', 'foo', 'foo', 'foo', 'quux'\n          ]);\n          res.rows.map(values).should.deep.equal([\n            null, null, null, null, null, null, null\n          ]);\n          res.rows.map(docIds).should.deep.equal([\n            '2', '1', '3', '5', '6', '7', '4'\n          ]);\n          return db.query(queryFun, {include_docs : true}).then(function (res) {\n            should.not.exist(res);\n          }).catch(function (err) {\n            err.status.should.equal(400);\n            err.message.should.be.a('string');\n            // include_docs is invalid for reduce\n          });\n        });\n      });\n    });\n\n    it('should query correctly after replicating and other ddoc', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.name);\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs: [{name: 'foobar'}]}).then(function () {\n          return db.query(queryFun);\n        }).then(function (res) {\n          res.rows.map(function (x) {return x.key; }).should.deep.equal([\n            'foobar'\n          ], 'test db before replicating');\n          var db2 = new PouchDB('local-other');\n          return db.replicate.to(db2).then(function () {\n            return db.query(queryFun);\n          }).then(function (res) {\n            res.rows.map(function (x) {return x.key; }).should.deep.equal([\n              'foobar'\n            ], 'test db after replicating');\n            return db.put({_id: '_design/other_ddoc', views: {\n              map: \"function(doc) { emit(doc._id); }\"\n            }});\n          }).then(function () {\n            // the random ddoc adds a single change that we don't\n            // care about. testing this increases our coverage\n            return db.query(queryFun);\n          }).then(function (res) {\n            res.rows.map(function (x) {return x.key; }).should.deep.equal([\n              'foobar'\n            ], 'test db after adding random ddoc');\n            return db2.query(queryFun);\n          }).then(function (res) {\n            res.rows.map(function (x) {return x.key; }).should.deep.equal([\n              'foobar'\n            ], 'test db2');\n          }).catch(function (err) {\n            return new PouchDB('local-other').destroy().then(function () {\n              throw err;\n            });\n          }).then(function () {\n            return new PouchDB('local-other').destroy();\n          });\n        });\n      });\n    });\n\n    it('should query correctly after many edits', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.name, doc.likes);\n        }\n      }).then(function (queryFun) {\n        var docs = [\n          { _id: '1', name: 'leonardo' },\n          { _id: '2', name: 'michelangelo' },\n          { _id: '3', name: 'donatello' },\n          { _id: '4', name: 'rafael' },\n          { _id: '5', name: 'april o\\'neil' },\n          { _id: '6', name: 'splinter' },\n          { _id: '7', name: 'shredder' },\n          { _id: '8', name: 'krang' },\n          { _id: '9', name: 'rocksteady' },\n          { _id: 'a', name: 'bebop' },\n          { _id: 'b', name: 'casey jones' },\n          { _id: 'c', name: 'casey jones' },\n          { _id: 'd', name: 'baxter stockman' },\n          { _id: 'e', name: 'general chaos' },\n          { _id: 'f', name: 'rahzar' },\n          { _id: 'g', name: 'tokka' },\n          { _id: 'h', name: 'usagi yojimbo' },\n          { _id: 'i', name: 'rat king' },\n          { _id: 'j', name: 'metalhead' },\n          { _id: 'k', name: 'slash' },\n          { _id: 'l', name: 'ace duck' }\n        ];\n\n        for (var i = 0; i < 100; i++) {\n          docs.push({\n            _id: 'z-' + (i + 1000), // for correct string ordering\n            name: 'random foot soldier #' + i\n          });\n        }\n\n        function update(res, docFun) {\n          for (var i  = 0; i < res.length; i++) {\n            docs[i]._rev = res[i].rev;\n            docFun(docs[i]);\n          }\n          return db.bulkDocs({docs : docs});\n        }\n        return db.bulkDocs({docs : docs}).then(function (res) {\n          return update(res, function (doc) { doc.likes = 'pizza'; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc.knows = 'kung fu'; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc.likes = 'fighting'; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc._deleted = true; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc._deleted = false; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc.name = doc.name + '1'; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc.name = doc.name + '2'; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc.name = 'nameless'; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc._deleted = true; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc.likes = 'turtles'; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc._deleted = false; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc.whatever = 'quux'; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc.stuff = 'baz'; });\n        }).then(function (res) {\n          return update(res, function (doc) { doc.things = 'foo'; });\n        }).then(function () {\n          return db.query(queryFun);\n        }).then(function (res) {\n          res.total_rows.should.equal(docs.length, 'expected total_rows');\n          res.rows.map(function (row) {\n            return [row.id, row.key, row.value];\n          }).should.deep.equal(docs.map(function (doc) {\n            return [doc._id, 'nameless', 'turtles'];\n          }), 'key values match');\n        });\n      });\n    });\n\n    it('should query correctly with staggered seqs', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.name);\n        }\n      }).then(function (queryFun) {\n        var docs = [];\n\n        for (var i = 0; i < 200; i++) {\n          docs.push({\n            _id: 'doc-' + (i + 1000), // for correct string ordering\n            name: 'gen1'\n          });\n        }\n        return db.bulkDocs({docs: docs}).then(function (infos) {\n          docs.forEach(function (doc, i) {\n            doc._rev = infos[i].rev;\n            doc.name = 'gen2';\n          });\n          docs.reverse();\n          return db.bulkDocs({docs: docs});\n        }).then(function (infos) {\n          docs.forEach(function (doc, i) {\n            doc._rev = infos[i].rev;\n            doc.name = 'gen-3';\n          });\n          docs.reverse();\n          return db.bulkDocs({docs: docs});\n        }).then(function (infos) {\n          docs.forEach(function (doc, i) {\n            doc._rev = infos[i].rev;\n            doc.name = 'gen-4-odd';\n          });\n          var docsToUpdate = docs.filter(function (doc, i) {\n            return i % 2 === 1;\n          });\n          docsToUpdate.reverse();\n          return db.bulkDocs({docs: docsToUpdate});\n        }).then(function () {\n          return db.query(queryFun);\n        }).then(function (res) {\n          var expected = docs.map(function (doc, i) {\n            var key = i % 2 === 1 ? 'gen-4-odd' : 'gen-3';\n            return {key: key, id: doc._id, value: null};\n          });\n          expected.sort(function (a, b) {\n            if (a.key !== b.key) {\n              return a.key < b.key ? -1 : 1;\n            }\n            return a.id < b.id ? -1 : 1;\n          });\n          res.rows.should.deep.equal(expected);\n        });\n      });\n    });\n\n    it('should handle removes/undeletes/updates', function () {\n      var theDoc = {name : 'bar', _id : '1'};\n\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.name);\n        }\n      }).then(function (queryFun) {\n        return db.put(theDoc).then(function (info) {\n          theDoc._rev = info.rev;\n          return db.query(queryFun);\n        }).then(function (res) {\n          res.rows.length.should.equal(1);\n          theDoc._deleted = true;\n          return db.post(theDoc);\n        }).then(function (info) {\n          theDoc._rev = info.rev;\n          return db.query(queryFun);\n        }).then(function (res) {\n          res.rows.length.should.equal(0);\n          theDoc._deleted = false;\n          return db.post(theDoc);\n        }).then(function (info) {\n          theDoc._rev = info.rev;\n          return db.query(queryFun);\n        }).then(function (res) {\n          res.rows.length.should.equal(1);\n          theDoc.name = 'foo';\n          return db.post(theDoc);\n        }).then(function (info) {\n          theDoc._rev = info.rev;\n          return db.query(queryFun);\n        }).then(function (res) {\n          res.rows.length.should.equal(1);\n          res.rows[0].key.should.equal('foo');\n          theDoc._deleted = true;\n          return db.post(theDoc);\n        }).then(function (info) {\n          theDoc._rev = info.rev;\n          return db.query(queryFun);\n        }).then(function (res) {\n          res.rows.length.should.equal(0);\n        });\n      });\n    });\n\n    it('should return error when multi-key fetch & group=false', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) { emit(doc._id); },\n        reduce: '_sum'\n      }).then(function (queryFun) {\n        var keys = ['1', '2'];\n        var opts = {\n          keys: keys,\n          group: false\n        };\n        return db.query(queryFun, opts).then(function (res) {\n          should.not.exist(res);\n        }).catch(function (err) {\n          err.status.should.equal(400);\n          opts = {keys: keys};\n          return db.query(queryFun, opts).then(function (res) {\n            should.not.exist(res);\n          }).catch(function (err) {\n            err.status.should.equal(400);\n            opts = {keys: keys, reduce : false};\n            return db.query(queryFun, opts).then(function () {\n              opts = {keys: keys, group: true};\n              return db.query(queryFun, opts);\n            });\n          });\n        });\n      });\n    });\n\n    it('should handle user errors in map functions', function () {\n      var db = new PouchDB(dbName);\n      var err;\n      db.on('error', function (e) { err = e; });\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.nonexistent.foo);\n        }\n      }).then(function (queryFun) {\n        return db.put({name : 'bar', _id : '1'}).then(function () {\n          return db.query(queryFun);\n        }).then(function (res) {\n          res.rows.should.have.length(0);\n          if (dbType === 'local') {\n            should.exist(err);\n          }\n        });\n      });\n    });\n\n    it('should handle user errors in reduce functions', function () {\n      var db = new PouchDB(dbName);\n      var err;\n      db.on('error', function (e) { err = e; });\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.name);\n        },\n        reduce : function (keys) {\n          return keys[0].foo.bar;\n        }\n      }).then(function (queryFun) {\n        return db.put({name : 'bar', _id : '1'}).then(function () {\n          return db.query(queryFun, {group: true});\n        }).then(function (res) {\n          res.rows.map(function (row) {return row.key; }).should.deep.equal(['bar']);\n          return db.query(queryFun, {reduce: false});\n        }).then(function (res) {\n          res.rows.map(function (row) {return row.key; }).should.deep.equal(['bar']);\n          if (dbType === 'local') {\n            should.exist(err);\n          }\n        });\n      });\n    });\n\n    it('should handle reduce returning undefined', function () {\n      var db = new PouchDB(dbName);\n      var err;\n      db.on('error', function (e) { err = e; });\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.name);\n        },\n        reduce : function () {\n        }\n      }).then(function (queryFun) {\n        return db.put({name : 'bar', _id : '1'}).then(function () {\n          return db.query(queryFun, {group: true});\n        }).then(function (res) {\n          res.rows.map(function (row) {return row.key; }).should.deep.equal(['bar']);\n          return db.query(queryFun, {reduce: false});\n        }).then(function (res) {\n          res.rows.map(function (row) {return row.key; }).should.deep.equal(['bar']);\n          should.not.exist(err);\n        });\n      });\n    });\n\n    it('should properly query custom reduce functions', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.name, doc.count);\n        },\n        reduce : function (keys, values, rereduce) {\n          // calculate the average count per name\n          if (!rereduce) {\n            var result = {\n              sum : sum(values),\n              count : values.length\n            };\n            result.average = result.sum / result.count;\n            return result;\n          } else {\n            var thisSum = sum(values.map(function (value) {return value.sum; }));\n            var thisCount = sum(values.map(function (value) {return value.count; }));\n            return {\n              sum : thisSum,\n              count : thisCount,\n              average : (thisSum / thisCount)\n            };\n          }\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs : [\n          {name : 'foo', count : 1},\n          {name : 'bar', count : 7},\n          {name : 'foo', count : 3},\n          {name : 'quux', count : 3},\n          {name : 'foo', count : 3},\n          {name : 'foo', count : 0},\n          {name : 'foo', count : 4},\n          {name : 'baz', count : 3},\n          {name : 'baz', count : 0},\n          {name : 'baz', count : 2}\n        ]}).then(function () {\n          return db.query(queryFun, {group : true});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n            {\n              key : 'bar',\n              value : { sum: 7, count: 1, average : 7}\n            },\n            {\n              key : 'baz',\n              value : { sum: 5, count: 3, average: (5 / 3) }\n            },\n            {\n              key : 'foo',\n              value : { sum: 11, count: 5, average: (11 / 5) }\n            },\n            {\n              key : 'quux',\n              value : { sum: 3, count: 1, average: 3 }\n            }\n          ]}, 'all');\n          return db.query(queryFun, {group : false});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n            {\n              key : null,\n              value : { sum: 26, count: 10, average: 2.6 }\n            }\n          ]}, 'group=false');\n          return db.query(queryFun, {group : true, startkey : 'bar', endkey : 'baz', skip : 1});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n            {\n              key : 'baz',\n              value : { sum: 5, count: 3, average: (5 / 3) }\n            }\n          ]}, 'bar-baz skip 1');\n          return db.query(queryFun, {group : true, endkey : 'baz'});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n            {\n              key : 'bar',\n              value : { sum: 7, count: 1, average : 7}\n            },\n            {\n              key : 'baz',\n              value : { sum: 5, count: 3, average: (5 / 3) }\n            }\n          ]}, '-baz');\n          return db.query(queryFun, {group : true, startkey : 'foo'});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n            {\n              key : 'foo',\n              value : { sum: 11, count: 5, average: (11 / 5) }\n            },\n            {\n              key : 'quux',\n              value : { sum: 3, count: 1, average: 3 }\n            }\n          ]}, 'foo-');\n          return db.query(queryFun, {group : true, startkey : 'foo', descending : true});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n            {\n              key : 'foo',\n              value : { sum: 11, count: 5, average: (11 / 5) }\n            },\n            {\n              key : 'baz',\n              value : { sum: 5, count: 3, average: (5 / 3) }\n            },\n            {\n              key : 'bar',\n              value : { sum: 7, count: 1, average : 7}\n            }\n          ]}, 'foo- descending=true');\n          return db.query(queryFun, {group : true, startkey : 'quux', skip : 1});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n          ]}, 'quux skip 1');\n          return db.query(queryFun, {group : true, startkey : 'quux', limit : 0});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n          ]}, 'quux limit 0');\n          return db.query(queryFun, {group : true, startkey : 'bar', endkey : 'baz'});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n            {\n              key : 'bar',\n              value : { sum: 7, count: 1, average : 7}\n            },\n            {\n              key : 'baz',\n              value : { sum: 5, count: 3, average: (5 / 3) }\n            }\n          ]}, 'bar-baz');\n          return db.query(queryFun, {group : true, keys : ['bar', 'baz'], limit : 1});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n            {\n              key : 'bar',\n              value : { sum: 7, count: 1, average : 7}\n            }\n          ]}, 'bar & baz');\n          return db.query(queryFun, {group : true, keys : ['bar', 'baz'], limit : 0});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n          ]}, 'bar & baz limit 0');\n          return db.query(queryFun, {group : true, key : 'bar', limit : 0});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n          ]}, 'key=bar limit 0');\n          return db.query(queryFun, {group : true, key : 'bar'});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n            {\n              key : 'bar',\n              value : { sum: 7, count: 1, average : 7}\n            }\n          ]}, 'key=bar');\n          return db.query(queryFun, {group : true, key : 'zork'});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n          ]}, 'zork');\n          return db.query(queryFun, {group : true, keys : []});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n          ]}, 'keys=[]');\n          return db.query(queryFun, {group : true, key : null});\n        }).then(function (res) {\n          res.should.deep.equal({rows : [\n          ]}, 'key=null');\n        });\n      });\n    });\n\n    it('should handle many doc changes', function () {\n\n      var docs = [{_id: '0'}, {_id : '1'}, {_id: '2'}];\n\n      var keySets = [\n        [1],\n        [2, 3],\n        [4],\n        [5],\n        [6, 7, 3],\n        [],\n        [2, 3],\n        [1, 2],\n        [],\n        [9],\n        [9, 3, 2, 1]\n      ];\n\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          doc.keys.forEach(function (key) {\n            emit(key);\n          });\n        }\n      }).then(function (mapFun) {\n        return db.bulkDocs({docs : docs}).then(function () {\n          var tasks = keySets.map(function (keys, i) {\n            return function () {\n              var expectedResponseKeys = [];\n              return db.allDocs({\n                keys : ['0', '1', '2'],\n                include_docs: true\n              }).then(function (res) {\n                docs = res.rows.map(function (x) { return x.doc; });\n                docs.forEach(function (doc, j) {\n                  doc.keys = keySets[(i + j) % keySets.length];\n                  doc.keys.forEach(function (key) {\n                    expectedResponseKeys.push(key);\n                  });\n                });\n                expectedResponseKeys.sort();\n                return db.bulkDocs({docs: docs});\n              }).then(function () {\n                return db.query(mapFun);\n              }).then(function (res) {\n                var actualKeys = res.rows.map(function (x) {\n                  return x.key;\n                });\n                actualKeys.should.deep.equal(expectedResponseKeys);\n              });\n            };\n          });\n          var chain = tasks.shift()();\n          function getNext() {\n            var task = tasks.shift();\n            return task && function () {\n              return task().then(getNext());\n            };\n          }\n          return chain.then(getNext());\n        });\n      });\n    });\n\n    it('should handle many doc changes', function () {\n\n      var docs = [{_id: '0'}, {_id : '1'}, {_id: '2'}];\n\n      var keySets = [\n        [1],\n        [2, 3],\n        [4],\n        [5],\n        [6, 7, 3],\n        [],\n        [2, 3],\n        [1, 2],\n        [],\n        [9],\n        [9, 3, 2, 1]\n      ];\n\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          doc.keys.forEach(function (key) {\n            emit(key);\n          });\n        }\n      }).then(function (mapFun) {\n        return db.bulkDocs({docs : docs}).then(function () {\n          var tasks = keySets.map(function (keys, i) {\n            return function () {\n              var expectedResponseKeys = [];\n              return db.allDocs({\n                keys : ['0', '1', '2'],\n                include_docs: true\n              }).then(function (res) {\n                docs = res.rows.map(function (x) { return x.doc; });\n                docs.forEach(function (doc, j) {\n                  doc.keys = keySets[(i + j) % keySets.length];\n                  doc.keys.forEach(function (key) {\n                    expectedResponseKeys.push(key);\n                  });\n                });\n                expectedResponseKeys.sort(function (a, b) {\n                  return a - b;\n                });\n                return db.bulkDocs({docs: docs});\n              }).then(function () {\n                return db.query(mapFun);\n              }).then(function (res) {\n                var actualKeys = res.rows.map(function (x) {\n                  return x.key;\n                });\n                actualKeys.should.deep.equal(expectedResponseKeys);\n              });\n            };\n          });\n          function getNext() {\n            var task = tasks.shift();\n            if (task) {\n              return task().then(getNext);\n            }\n          }\n          return getNext();\n        });\n      });\n    });\n\n    it('should work with post', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) { emit(doc._id); }.toString()\n      }).then(function (mapFun) {\n        return db.bulkDocs({docs: [{_id : 'bazbazbazb'}]}).then(function () {\n          var i = 300;\n          var keys = [];\n          while (i--) {\n            keys.push('bazbazbazb');\n          }\n          return db.query(mapFun, {keys: keys}).then(function (resp) {\n            resp.total_rows.should.equal(1);\n            resp.rows.should.have.length(300);\n            return resp.rows.every(function (row) {\n              return row.id === 'bazbazbazb' && row.key === 'bazbazbazb';\n            });\n          });\n        }).should.become(true);\n      });\n    });\n\n    it(\"should accept trailing ';' in a map definition (#178)\", function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: \"function(doc){};\\n\"\n      }).then(function (queryFun) {\n        return db.query(queryFun);\n      }).should.become({\n        offset: 0,\n        rows: [],\n        total_rows: 0\n      });\n    });\n\n    it('should throw a 404 when no funcs found in ddoc (#181)', function () {\n      var db = new PouchDB(dbName);\n      return db.put({\n        _id: '_design/test'\n      }).then(function () {\n        return db.query('test/unexisting');\n      }).then(function () {\n        //shouldn't happen\n        true.should.equal(false);\n      }).catch(function (err) {\n        err.status.should.equal(404);\n      });\n    });\n\n    it('should continue indexing when map eval fails (#214)', function () {\n      var db = new PouchDB(dbName);\n      var err;\n      db.on('error', function (e) {\n        err = e;\n      });\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo.bar, doc);\n        }\n      }).then(function (view) {\n        return db.bulkDocs({docs: [\n          {\n            foo: {\n              bar: \"foobar\"\n            }\n          },\n          { notfoo: \"thisWillThrow\" },\n          {\n            foo: {\n              bar: \"otherFoobar\"\n            }\n          }\n        ]}).then(function () {\n          return db.query(view);\n        }).then(function (res) {\n          if (dbType === 'local') {\n            should.exist(err);\n          }\n          res.rows.should.have.length(2, 'Ignore the wrongly formatted doc');\n          return db.query(view);\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'Ignore the wrongly formatted doc');\n        });\n\n      });\n    });\n\n    it('should continue indexing when map eval fails, ' +\n        'even without a listener (#214)', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map: function (doc) {\n          emit(doc.foo.bar, doc);\n        }\n      }).then(function (view) {\n        return db.bulkDocs({docs: [\n          {\n            foo: {\n              bar: \"foobar\"\n            }\n          },\n          { notfoo: \"thisWillThrow\" },\n          {\n            foo: {\n              bar: \"otherFoobar\"\n            }\n          }\n        ]}).then(function () {\n          return db.query(view);\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'Ignore the wrongly formatted doc');\n          return db.query(view);\n        }).then(function (res) {\n          res.rows.should.have.length(2, 'Ignore the wrongly formatted doc');\n        });\n\n      });\n    });\n\n    it('should update the emitted value', function () {\n      var db = new PouchDB(dbName);\n      var docs = [];\n      for (var i = 0; i < 300; i++) {\n        docs.push({\n          _id: i.toString(),\n          name: 'foo',\n          count: 1\n        });\n      }\n\n      return createView(db, {\n        map: \"function(doc){emit(doc.name, doc.count);};\\n\"\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs: docs}).then(function (res) {\n          for (var i = 0; i < res.length; i++) {\n            docs[i]._rev = res[i].rev;\n          }\n          return db.query(queryFun);\n        }).then(function (res) {\n          var values = res.rows.map(function (x) { return x.value; });\n          values.should.have.length(docs.length);\n          values[0].should.equal(1);\n          docs.forEach(function (doc) {\n            doc.count = 2;\n          });\n          return db.bulkDocs({docs: docs});\n        }).then(function () {\n          return db.query(queryFun);\n        }).then(function (res) {\n          var values = res.rows.map(function (x) { return x.value; });\n          values.should.have.length(docs.length);\n          values[0].should.equal(2);\n        });\n      });\n    });\n  });\n}\n"
  },
  {
    "path": "test/pouchdb/mapreduce/test.persisted.js",
    "content": "'use strict';\n\nvar adapters = ['local', 'http'];\n\nadapters.forEach(function (adapter) {\n\n  var suiteName = 'test.persisted.js-' + adapter;\n  var dbName = testUtils.adapterUrl(adapter, 'testdb');\n\n  tests(suiteName, dbName, adapter);\n});\n\nfunction tests(suiteName, dbName, dbType) {\n\n  describe(suiteName, function () {\n\n    var Promise;\n\n    function setTimeoutPromise(time) {\n      return new Promise(function (resolve) {\n        setTimeout(function () { resolve(true); }, time);\n      });\n    }\n\n    function createView(db, viewObj) {\n      var storableViewObj = {\n        map : viewObj.map.toString()\n      };\n      if (viewObj.reduce) {\n        storableViewObj.reduce = viewObj.reduce.toString();\n      }\n      return new Promise(function (resolve, reject) {\n        db.put({\n          _id: '_design/theViewDoc',\n          views: {\n            'theView' : storableViewObj\n          }\n        }, function (err) {\n          if (err) {\n            reject(err);\n          } else {\n            resolve('theViewDoc/theView');\n          }\n        });\n      });\n    }\n\n    beforeEach(function () {\n      Promise = testUtils.Promise;\n      return new PouchDB(dbName).destroy();\n    });\n    afterEach(function () {\n      return new PouchDB(dbName).destroy();\n    });\n\n    it('Test destroyed event on auxiliary db', function () {\n      var db = new PouchDB(dbName);\n      var rev;\n      return db.put({\n        _id: '_design/name',\n        views: {\n          name: {\n            map: function (doc) {\n              emit(doc.name);\n            }.toString()\n          }\n        }\n      }).then(function (res) {\n        rev = res.rev;\n        return db.bulkDocs([\n          {_id: 'foo', name: 'foo', title: 'yo'},\n          {_id: 'baz', name: 'bar', title: 'hey'},\n          {_id: 'bar', name: 'baz', title: 'wuzzup'}\n        ]);\n      }).then(function () {\n        return db.query('name');\n      }).then(function () {\n        return db.remove('_design/name', rev);\n      }).then(function () {\n        return db.viewCleanup();\n      }).then(function () {\n        return db.put({\n          _id: '_design/title',\n          views: {\n            title: {\n              map: function (doc) {\n                emit(doc.title);\n              }.toString()\n            }\n          }\n        });\n      }).then(function (res) {\n        rev = res.rev;\n      }).then(function () {\n        return db.query('title');\n      }).then(function () {\n        return db.remove('_design/title', rev);\n      }).then(function () {\n        return db.viewCleanup();\n      }).then(function () {\n        var views = ['name', 'title'];\n        return testUtils.Promise.all(views.map(function (view) {\n          return db.query(view).then(function () {\n            throw new Error('expected an error');\n          }, function (err) {\n            should.exist(err);\n          });\n        }));\n      }).then(function () {\n        return db.put({\n          _id: '_design/name',\n          views: {\n            name: {\n              map: function (doc) {\n                emit(doc.name);\n              }.toString()\n            }\n          }\n        }).then(function (res) {\n          rev = res.rev;\n          return db.query('name');\n        }).then(function (res) {\n          res.rows.map(function (row) {\n            return [row.id, row.key];\n          }).should.deep.equal([\n              ['baz', 'bar'],\n              ['bar', 'baz'],\n              ['foo', 'foo']\n            ]);\n        });\n      });\n    });\n\n    it('Returns ok for viewCleanup on empty db', function () {\n      var db = new PouchDB(dbName);\n      return db.viewCleanup().then(function (res) {\n        res.ok.should.equal(true);\n      });\n    });\n\n    it('Returns ok for viewCleanup on empty db, callback style', function () {\n      var db = new PouchDB(dbName);\n      return new Promise(function (resolve, reject) {\n        db.viewCleanup(function (err, res) {\n          if (err) {\n            return reject(err);\n          }\n          resolve(res);\n        });\n      }).then(function (res) {\n        res.ok.should.equal(true);\n      });\n    });\n\n    it('Returns ok for viewCleanup after modifying view', function () {\n      var db = new PouchDB(dbName);\n      var ddoc = {\n        _id: '_design/myview',\n        views: {\n          myview: {\n            map: function (doc) {\n              emit(doc.firstName);\n            }.toString()\n          }\n        }\n      };\n      var doc = {\n        _id: 'foo',\n        firstName: 'Foobar',\n        lastName: 'Bazman'\n      };\n      return db.bulkDocs({docs: [ddoc, doc]}).then(function (info) {\n        ddoc._rev = info[0].rev;\n        return db.query('myview');\n      }).then(function (res) {\n        res.rows.should.deep.equal([\n          {id: 'foo', key: 'Foobar', value: null}\n        ]);\n        ddoc.views.myview.map = function (doc) {\n          emit(doc.lastName);\n        }.toString();\n        return db.put(ddoc);\n      }).then(function () {\n        return db.query('myview');\n      }).then(function (res) {\n        res.rows.should.deep.equal([\n          {id: 'foo', key: 'Bazman', value: null}\n        ]);\n        return db.viewCleanup();\n      });\n    });\n\n    it('Return ok for viewCleanup after modding view, old format', function () {\n      var db = new PouchDB(dbName);\n      var ddoc = {\n        _id: '_design/myddoc',\n        views: {\n          myview: {\n            map: function (doc) {\n              emit(doc.firstName);\n            }.toString()\n          }\n        }\n      };\n      var doc = {\n        _id: 'foo',\n        firstName: 'Foobar',\n        lastName: 'Bazman'\n      };\n      return db.bulkDocs({docs: [ddoc, doc]}).then(function (info) {\n        ddoc._rev = info[0].rev;\n        return db.query('myddoc/myview');\n      }).then(function (res) {\n        res.rows.should.deep.equal([\n          {id: 'foo', key: 'Foobar', value: null}\n        ]);\n        ddoc.views.myview.map = function (doc) {\n          emit(doc.lastName);\n        }.toString();\n        return db.put(ddoc);\n      }).then(function () {\n        return db.query('myddoc/myview');\n      }).then(function (res) {\n        res.rows.should.deep.equal([\n          {id: 'foo', key: 'Bazman', value: null}\n        ]);\n        return db.viewCleanup();\n      });\n    });\n\n    it(\"Query non existing view returns error\", function () {\n      var db = new PouchDB(dbName);\n      var doc = {\n        _id: '_design/barbar',\n        views: {\n          scores: {\n            map: 'function(doc) { if (doc.score) { emit(null, doc.score); } }'\n          }\n        }\n      };\n      return db.post(doc).then(function () {\n        return db.query('barbar/dontExist', {key: 'bar'});\n      }).should.be.rejected;\n    });\n\n    it('many simultaneous persisted views', function () {\n      this.timeout(120000);\n      var db = new PouchDB(dbName);\n\n      var views = [];\n      var doc = {_id: 'foo'};\n      for (var i = 0; i < 20; i++) {\n        views.push('foo_' + i);\n        doc['foo_' + i] = 'bar_' + i;\n      }\n\n      return db.put(doc).then(function () {\n        return Promise.all(views.map(function (_, i) {\n          var fun = \"function (doc) { emit(doc.foo_\" + i + \");}\";\n\n          var ddocId = 'theViewDoc_' + i;\n          var ddoc = {\n            _id: '_design/' + ddocId,\n            views: {\n              theView : {map: fun}\n            }\n          };\n\n          return db.put(ddoc).then(function (res) {\n            ddoc._rev = res.rev;\n            return db.query(ddocId + '/theView');\n          }).then(function (res) {\n            res.rows.should.have.length(1);\n            res.rows[0].key.should.equal('bar_' + i);\n            res.rows[0].id.should.equal('foo');\n            return db.remove(ddoc);\n          }).then(function () {\n            return db.viewCleanup();\n          }).then(function () {\n            return db.query(ddocId + '/theView').then(function () {\n              throw new Error('view should have been deleted');\n            }, function (err) {\n              should.exist(err);\n            });\n          });\n        }));\n      });\n    });\n\n    it('should error with a callback', function (done) {\n      var db = new PouchDB(dbName);\n      db.query('fake/thing', function (err) {\n        should.exist(err);\n        done();\n      });\n    });\n\n    it('should query correctly when stale', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.name);\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs : [\n          {name : 'bar', _id : '1'},\n          {name : 'foo', _id : '2'}\n        ]}).then(function () {\n          return db.query(queryFun, {stale : 'ok'});\n        }).then(function (res) {\n          res.total_rows.should.be.within(0, 2);\n          res.offset.should.equal(0);\n          res.rows.length.should.be.within(0, 2);\n          return db.query(queryFun, {stale : 'update_after'});\n        }).then(function (res) {\n          res.total_rows.should.be.within(0, 2);\n          res.rows.length.should.be.within(0, 2);\n          return setTimeoutPromise(5);\n        }).then(function () {\n          return db.query(queryFun, {stale : 'ok'});\n        }).then(function (res) {\n          res.total_rows.should.equal(2);\n          res.rows.length.should.equal(2);\n          return db.get('2');\n        }).then(function (doc2) {\n          return db.remove(doc2);\n        }).then(function () {\n          return db.query(queryFun, {stale : 'ok', include_docs : true});\n        }).then(function (res) {\n          res.total_rows.should.be.within(1, 2);\n          res.rows.length.should.be.within(1, 2);\n          if (res.rows.length === 2) {\n            res.rows[1].key.should.equal('foo');\n            should.not.exist(res.rows[1].doc,\n                             'should not throw if doc removed');\n          }\n          return db.query(queryFun);\n        }).then(function (res) {\n          res.total_rows.should.equal(1, 'equals1-1');\n          res.rows.length.should.equal(1, 'equals1-2');\n          return db.get('1');\n        }).then(function (doc1) {\n          doc1.name = 'baz';\n          return db.post(doc1);\n        }).then(function () {\n          return db.query(queryFun, {stale : 'update_after'});\n        }).then(function (res) {\n          res.rows.length.should.equal(1);\n          ['baz', 'bar'].indexOf(res.rows[0].key).should.be\n            .above(-1, 'key might be stale, thats ok');\n          return setTimeoutPromise(1000);\n        }).then(function () {\n          return db.query(queryFun, {stale : 'ok'});\n        }).then(function (res) {\n          res.rows.length.should.equal(1);\n          res.rows[0].key.should.equal('baz');\n        });\n      });\n    });\n\n    it('should query correctly with stale update_after', function () {\n      var pouch = new PouchDB(dbName);\n\n      return createView(pouch, {map: function (doc) {\n        emit(doc.foo);\n      }}).then(function (queryFun) {\n        var docs = [];\n\n        for (var i = 0; i < 10; i++) {\n          docs.push({foo: 'bar'});\n        }\n\n        return pouch.bulkDocs(docs).then(function () {\n          return pouch.query(queryFun, {stale: 'update_after'});\n        }).then(function (res) {\n          res.rows.should.have.length(0, 'query() returned immediately');\n          return setTimeoutPromise(1000);\n        }).then(function () {\n          return pouch.query(queryFun, {stale: 'ok'});\n        }).then(function (res) {\n          res.rows.should.have.length(10, 'index was built in background');\n        });\n      });\n    });\n\n    it('should delete duplicate indexes', function () {\n      var docs = [];\n      for (var i = 0; i < 10; i++) {\n        docs.push(\n          {\n            _id : '_design/view' + i,\n            views : {\n              view : {\n                map : \"function(doc){emit('foo');}\"\n              }\n            }\n          }\n        );\n      }\n      var db = new PouchDB(dbName);\n      return db.bulkDocs({docs : docs}).then(function (responses) {\n        var tasks = [];\n        for (var i = 0; i < docs.length; i++) {\n          /* jshint loopfunc:true */\n          docs[i]._rev = responses[i].rev;\n          tasks.push(db.query('view' + i + '/view'));\n        }\n        return Promise.all(tasks);\n      }).then(function () {\n        docs.forEach(function (doc) {\n          doc._deleted = true;\n        });\n        return db.bulkDocs({docs : docs});\n      }).then(function () {\n        return db.viewCleanup();\n      });\n    });\n\n    if (dbType === 'local' &&\n        // can't test this in Node due to the vm\n        (typeof process === 'undefined' || process.browser)) {\n      // this is not possible to test in worker-pouch, so we skip it\n      it.skip('issue 4967 map() called twice', function () {\n        var db = new PouchDB(dbName);\n        var globalObj = (typeof process !== 'undefined' && !process.browser) ?\n          global : window;\n        globalObj.__mapreduce_called = {};\n        var docs = Array.apply(null, Array(5)).map(function (_, i) {\n          return {\n            _id: 'doc_' + i,\n            data: Math.random().toString(36).substr(2)\n          };\n        }).concat({\n          _id: '_design/test',\n          views: {\n            test: {\n              map: (function (doc) {\n                /* global __mapreduce_called */\n                __mapreduce_called[doc._id] = __mapreduce_called[doc._id] || 0;\n                __mapreduce_called[doc._id]++;\n                emit(doc.data, 1);\n              }).toString()\n            }\n          }\n        });\n        return db.bulkDocs(docs).then(function () {\n          return Promise.all([\n            db.query('test', {}),\n            db.query('test', {})\n          ]);\n        }).then(function () {\n          globalObj.__mapreduce_called.should.deep.equal({\n            doc_0 : 1,\n            doc_1 : 1,\n            doc_2 : 1,\n            doc_3 : 1,\n            doc_4 : 1\n          });\n          delete globalObj.__mapreduce_called;\n        });\n      });\n    }\n\n    it('should handle user errors in design doc names', function () {\n      var db = new PouchDB(dbName);\n      return db.put({\n        _id : '_design/theViewDoc'\n      }).then(function () {\n        return db.query('foo/bar');\n      }).then(function (res) {\n        should.not.exist(res);\n      }).catch(function (err) {\n        err.status.should.equal(404);\n        return db.put(\n          {_id : '_design/void', views : {1 : null}}\n        ).then(function () {\n          return db.query('void/1');\n        }).then(function (res) {\n          should.not.exist(res);\n        }).catch(function (err) {\n          err.status.should.be.a('number');\n          // this might throw due to erroneous ddoc, but that's ok\n          return db.viewCleanup().catch(function (err) {\n            err.status.should.equal(500);\n          });\n        });\n      });\n    });\n\n    it('should allow the user to create many design docs', function () {\n      function getKey(row) {\n        return row.key;\n      }\n      var db = new PouchDB(dbName);\n      return db.put({\n        _id : '_design/foo',\n        views : {\n          byId : { map : function (doc) { emit(doc._id); }.toString()},\n          byField : { map : function (doc) { emit(doc.field); }.toString()}\n        }\n      }).then(function () {\n        return db.put({_id : 'myDoc', field : 'myField'});\n      }).then(function () {\n        return db.query('foo/byId');\n      }).then(function (res) {\n        res.rows.map(getKey).should.deep.equal(['myDoc']);\n        return db.put({\n          _id : '_design/bar',\n          views : {\n            byId : {map : function (doc) { emit(doc._id); }.toString()}\n          }\n        });\n      }).then(function () {\n        return db.query('bar/byId');\n      }).then(function (res) {\n        res.rows.map(getKey).should.deep.equal(['myDoc']);\n      }).then(function () {\n        return db.viewCleanup();\n      }).then(function () {\n        return db.query('foo/byId');\n      }).then(function (res) {\n        res.rows.map(getKey).should.deep.equal(['myDoc']);\n        return db.query('foo/byField');\n      }).then(function (res) {\n        res.rows.map(getKey).should.deep.equal(['myField']);\n        return db.query('bar/byId');\n      }).then(function (res) {\n        res.rows.map(getKey).should.deep.equal(['myDoc']);\n        return db.get('_design/bar');\n      }).then(function (barDoc) {\n        return db.remove(barDoc);\n      }).then(function () {\n        return db.get('_design/foo');\n      }).then(function (fooDoc) {\n        delete fooDoc.views.byField;\n        return db.put(fooDoc);\n      }).then(function () {\n        return db.query('foo/byId');\n      }).then(function (res) {\n        res.rows.map(getKey).should.deep.equal(['myDoc']);\n        return db.viewCleanup();\n      }).then(function () {\n        return db.query('foo/byId');\n      }).then(function (res) {\n        res.rows.map(getKey).should.deep.equal(['myDoc']);\n        return db.query('foo/byField').then(function (res) {\n          should.not.exist(res);\n        }).catch(function (err) {\n          err.status.should.equal(404);\n          return db.query('bar/byId').then(function (res) {\n            should.not.exist(res);\n          }).catch(function (err) {\n            err.status.should.equal(404);\n            return db.get('_design/foo').then(function (fooDoc) {\n              return db.remove(fooDoc).then(function () {\n                return db.viewCleanup();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('should allow view names without slashes', function () {\n      var ddocRev;\n      var db = new PouchDB(dbName);\n      return db.put({\n        _id : '_design/foo',\n        views : {\n          foo : { map : function (doc) { emit(doc._id); }.toString()}\n        }\n      }).then(function (info) {\n        ddocRev = info.rev;\n        return db.bulkDocs({docs : [{_id : 'baz'}, {_id : 'bar'}]});\n      }).then(function () {\n        return db.query('foo');\n      }).then(function (res) {\n        res.rows[0].key.should.equal('bar');\n        res.rows[1].key.should.equal('baz');\n        return db.remove({_id : '_design/foo', _rev : ddocRev});\n      });\n    });\n\n    it('test 304s in Safari (issue 69)', function () {\n      var db = new PouchDB(dbName);\n      return createView(db, {\n        map : function (doc) {\n          emit(doc.name);\n        }\n      }).then(function (queryFun) {\n        return db.bulkDocs({docs : [\n          {name : 'foo'}\n        ]}).then(function () {\n          return db.query(queryFun, {keys : ['foo']});\n        }).then(function (res) {\n          res.rows.should.have.length(1);\n          return db.query(queryFun, {keys : ['foo']});\n        }).then(function (res) {\n          res.rows.should.have.length(1);\n          return db.query(queryFun, {keys : ['foo']});\n        }).then(function (res) {\n          res.rows.should.have.length(1);\n        });\n      });\n    });\n\n    var isNode = typeof window === 'undefined';\n    if (dbType === 'local' && isNode) {\n      it.skip('#239 test memdown db', function () {\n        var destroyedDBs = [];\n        PouchDB.on('destroyed', function (db) {\n          destroyedDBs.push(db);\n        });\n\n        // make sure prefixed DBs are tied to regular DBs\n        var db = new PouchDB(dbName, {db: require('memdown')});\n        return testUtils.fin(createView(db, {\n          map: function (doc) {\n            emit(doc.name);\n          }\n        }).then(function (queryFun) {\n          return db.post({name: 'foo'}).then(function () {\n            return db.query(queryFun);\n          }).then(function (res) {\n            res.rows.should.have.length(1);\n            res.rows[0].key.should.equal('foo');\n            var ddocId = '_design/' + queryFun.split('/')[0];\n            return db.get(ddocId);\n          }).then(function (ddoc) {\n            return db.remove(ddoc);\n          }).then(function () {\n            return db.viewCleanup();\n          });\n        }), function () {\n          return db.destroy().then(function () {\n            var chain = Promise.resolve();\n            // for each of the supposedly destroyed DBs,\n            // check that there isn't a normal DB hanging around\n            destroyedDBs.forEach(function (dbName) {\n              chain = chain.then(function () {\n                var db = new PouchDB(dbName);\n                var promise = db.info().then(function (info) {\n                  info.update_seq.should.equal(0);\n                });\n                return testUtils.fin(promise, function () {\n                  return db.destroy();\n                });\n              });\n            });\n            return chain;\n          }).then(function () {\n            PouchDB.removeAllListeners('destroyed');\n          });\n        });\n      });\n\n      it('#239 test prefixed db', function () {\n        var destroyedDBs = [];\n        PouchDB.on('destroyed', function (db) {\n          destroyedDBs.push(db);\n        });\n\n        // make sure prefixed DBs are tied to regular DBs\n        require('mkdirp').sync('./myprefix_./tmp/'); // TODO: bit hacky\n        var db = new PouchDB(dbName, {prefix: './myprefix_'});\n        return testUtils.fin(createView(db, {\n          map: function (doc) {\n            emit(doc.name);\n          }\n        }).then(function (queryFun) {\n          return db.post({name: 'foo'}).then(function () {\n            return db.query(queryFun);\n          }).then(function (res) {\n            res.rows.should.have.length(1);\n            res.rows[0].key.should.equal('foo');\n            var ddocId = '_design/' + queryFun.split('/')[0];\n            return db.get(ddocId);\n          }).then(function (ddoc) {\n            return db.remove(ddoc);\n          }).then(function () {\n            return db.viewCleanup();\n          });\n        }), function () {\n          return db.destroy().then(function () {\n            var chain = Promise.resolve();\n            // for each of the supposedly destroyed DBs,\n            // check that there isn't a normal DB hanging around\n            destroyedDBs.forEach(function (dbName) {\n              chain = chain.then(function () {\n                var db = new PouchDB(dbName);\n                var promise = db.info().then(function (info) {\n                  info.update_seq.should.equal(0);\n                });\n                return testUtils.fin(promise, function () {\n                  return db.destroy();\n                });\n              });\n            });\n            return chain;\n          }).then(function () {\n            PouchDB.removeAllListeners('destroyed');\n          });\n        });\n      });\n    }\n\n  });\n}\n"
  },
  {
    "path": "test/pouchdb/mapreduce/test.views.js",
    "content": "/*jshint expr:true */\n'use strict';\n\nvar adapters = [\n  ['local', 'http']\n];\n\nadapters.forEach(function (adapters) {\n  describe('test.views.js-' + adapters[0] + '-' + adapters[1], function () {\n\n    var dbs = {};\n\n    beforeEach(function (done) {\n      dbs.name = testUtils.adapterUrl(adapters[0], 'testdb');\n      dbs.remote = testUtils.adapterUrl(adapters[1], 'test_repl_remote');\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n    after(function (done) {\n      testUtils.cleanup([dbs.name, dbs.remote], done);\n    });\n\n\n    it('Test basic view', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { foo: 'bar' },\n          {\n            _id: 'volatile',\n            foo: 'baz'\n          }\n        ]\n      }, {}, function () {\n        var queryFun = {\n          map: function (doc) {\n            emit(doc.foo, doc);\n          }\n        };\n        db.get('volatile', function (_, doc) {\n          db.remove(doc, function () {\n            db.query(queryFun, {\n              include_docs: true,\n              reduce: false\n            }, function (_, res) {\n              res.rows.should.have.length(1, 'Dont include deleted documents');\n              res.total_rows.should.equal(1, 'Include total_rows property.');\n              res.rows.forEach(function (x) {\n                should.exist(x.id);\n                should.exist(x.key);\n                should.exist(x.value._rev);\n                should.exist(x.doc._rev);\n              });\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Test passing just a function', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { foo: 'bar' },\n          {\n            _id: 'volatile',\n            foo: 'baz'\n          }\n        ]\n      }, {}, function () {\n        var queryFun = function (doc) {\n          emit(doc.foo, doc);\n        };\n        db.get('volatile', function (_, doc) {\n          db.remove(doc, function () {\n            db.query(queryFun, {\n              include_docs: true,\n              reduce: false\n            }, function (_, res) {\n              res.rows.should.have.length(1, 'Dont include deleted documents');\n              res.rows.forEach(function (x) {\n                should.exist(x.id);\n                should.exist(x.key);\n                should.exist(x.value._rev);\n                should.exist(x.doc._rev);\n              });\n              done();\n            });\n          });\n        });\n      });\n    });\n\n    it('Test opts.startkey/opts.endkey', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { key: 'key1' },\n          { key: 'key2' },\n          { key: 'key3' },\n          { key: 'key4' },\n          { key: 'key5' }\n        ]\n      }, {}, function () {\n        var queryFun = {\n          map: function (doc) {\n            emit(doc.key, doc);\n          }\n        };\n        db.query(queryFun, {\n          reduce: false,\n          startkey: 'key2'\n        }, function (_, res) {\n          res.rows.should.have.length(4, 'Startkey is inclusive');\n          db.query(queryFun, {\n            reduce: false,\n            endkey: 'key3'\n          }, function (_, res) {\n            res.rows.should.have.length(3, 'Endkey is inclusive');\n            db.query(queryFun, {\n              reduce: false,\n              startkey: 'key2',\n              endkey: 'key3'\n            }, function (_, res) {\n              res.rows.should.have.length(2, 'Startkey and endkey together');\n              db.query(queryFun, {\n                reduce: false,\n                startkey: 'key4',\n                endkey: 'key4'\n              }, function (_, res) {\n                res.rows.should.have.length(1, 'Startkey=endkey');\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Test opts.key', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { key: 'key1' },\n          { key: 'key2' },\n          { key: 'key3' },\n          { key: 'key3' }\n        ]\n      }, {}, function () {\n        var queryFun = {\n          map: function (doc) {\n            emit(doc.key, doc);\n          }\n        };\n        db.query(queryFun, {\n          reduce: false,\n          key: 'key2'\n        }, function (_, res) {\n          res.rows.should.have.length(1, 'Doc with key');\n          db.query(queryFun, {\n            reduce: false,\n            key: 'key3'\n          }, function (_, res) {\n            res.rows.should.have.length(2, 'Multiple docs with key');\n            done();\n          });\n        });\n      });\n    });\n\n    it.skip('Test basic view collation', function (done) {\n      var values = [];\n      // special values sort before all other types\n      values.push(null);\n      values.push(false);\n      values.push(true);\n      // then numbers\n      values.push(1);\n      values.push(2);\n      values.push(3);\n      values.push(4);\n      // then text, case sensitive\n      // currently chrome uses ascii ordering and so wont handle \n      // capitals properly\n      values.push('a');\n      //values.push(\"A\");\n      values.push('aa');\n      values.push('b');\n      //values.push(\"B\");\n      values.push('ba');\n      values.push('bb');\n      // then arrays. compared element by element until different.\n      // Longer arrays sort after their prefixes\n      values.push(['a']);\n      values.push(['b']);\n      values.push([\n        'b',\n        'c'\n      ]);\n      values.push([\n        'b',\n        'c',\n        'a'\n      ]);\n      values.push([\n        'b',\n        'd'\n      ]);\n      values.push([\n        'b',\n        'd',\n        'e'\n      ]);\n      // then object, compares each key value in the list until different.\n      // larger objects sort after their subset objects.\n      values.push({ a: 1 });\n      values.push({ a: 2 });\n      values.push({ b: 1 });\n      values.push({ b: 2 });\n      values.push({\n        b: 2,\n        a: 1\n      });\n      // Member order does matter for collation.\n      // CouchDB preserves member order\n      // but doesn't require that clients will.\n      // (this test might fail if used with a js engine\n      // that doesn't preserve order)\n      values.push({\n        b: 2,\n        c: 2\n      });\n      var db = new PouchDB(dbs.name);\n      var docs = values.map(function (x, i) {\n        return {\n          _id: i.toString(),\n          foo: x\n        };\n      });\n      db.bulkDocs({ docs: docs }, {}, function (err) {\n        var queryFun = {\n          map: function (doc) {\n            emit(doc.foo, null);\n          }\n        };\n        if (err) {\n          done(err);\n        }\n        db.query(queryFun, { reduce: false }, function (err, res) {\n          if (err) {\n            done(err);\n          }\n          res.rows.forEach(function (x, i) {\n            x.key.should.deep.equal(values[i], 'keys collate');\n          });\n          db.query(queryFun, {\n            descending: true,\n            reduce: false\n          }, function (err, res) {\n            if (err) {\n              done(err);\n            }\n            res.rows.forEach(function (x, i) {\n              x.key.should.deep\n                .equal(values[values.length - 1 - i],\n                       'keys collate descending');\n            });\n            done();\n          });\n        });\n      });\n    });\n\n    it('Test joins', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          {\n            _id: 'mydoc',\n            foo: 'bar'\n          },\n          { doc_id: 'mydoc' }\n        ]\n      }, {}, function () {\n        var queryFun = {\n          map: function (doc) {\n            if (doc.doc_id) {\n              emit(doc._id, { _id: doc.doc_id });\n            }\n          }\n        };\n        db.query(queryFun, {\n          include_docs: true,\n          reduce: false\n        }, function (_, res) {\n          should.exist(res.rows[0].doc);\n          res.rows[0].doc._id.should.equal('mydoc', 'mydoc included');\n          done();\n        });\n      });\n    });\n\n    it('No reduce function', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ foo: 'bar' }, function () {\n        var queryFun = {\n          map: function () {\n            emit('key', 'val');\n          }\n        };\n        db.query(queryFun, function () {\n          done();\n        });\n      });\n    });\n\n    it('Built in _sum reduce function', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { val: 'bar' },\n          { val: 'bar' },\n          { val: 'baz' }\n        ]\n      }, null, function () {\n        var queryFun = {\n          map: function (doc) {\n            emit(doc.val, 1);\n          },\n          reduce: '_sum'\n        };\n        db.query(queryFun, {\n          reduce: true,\n          group_level: 999\n        }, function (err, res) {\n          res.rows.should.have.length(2);\n          res.rows[0].value.should.equal(2);\n          res.rows[1].value.should.equal(1);\n          done();\n        });\n      });\n    });\n\n    it('Built in _count reduce function', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { val: 'bar' },\n          { val: 'bar' },\n          { val: 'baz' }\n        ]\n      }, null, function () {\n        var queryFun = {\n          map: function (doc) {\n            emit(doc.val, doc.val);\n          },\n          reduce: '_count'\n        };\n        db.query(queryFun, {\n          reduce: true,\n          group_level: 999\n        }, function (err, res) {\n          res.rows.should.have.length(2);\n          res.rows[0].value.should.equal(2);\n          res.rows[1].value.should.equal(1);\n          done();\n        });\n      });\n    });\n\n    it('Built in _stats reduce function', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { val: 'bar' },\n          { val: 'bar' },\n          { val: 'baz' }\n        ]\n      }, null, function () {\n        var queryFun = {\n          map: function (doc) {\n            emit(doc.val, 1);\n          },\n          reduce: '_stats'\n        };\n        db.query(queryFun, {\n          reduce: true,\n          group_level: 999\n        }, function (err, res) {\n          var stats = res.rows[0].value;\n          stats.sum.should.equal(2);\n          stats.count.should.equal(2);\n          stats.min.should.equal(1);\n          stats.max.should.equal(1);\n          stats.sumsqr.should.equal(2);\n          done();\n        });\n      });\n    });\n\n    it('No reduce function, passing just a  function', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.post({ foo: 'bar' }, function () {\n        var queryFun = function () {\n          emit('key', 'val');\n        };\n        db.query(queryFun, function () {\n          done();\n        });\n      });\n    });\n\n    it('Views should include _conflicts', function (done) {\n      var doc1 = {\n        _id: '1',\n        foo: 'bar'\n      };\n      var doc2 = {\n        _id: '1',\n        foo: 'baz'\n      };\n      var queryFun = function (doc) {\n        emit(doc._id, !!doc._conflicts);\n      };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.post(doc1, function () {\n        remote.post(doc2, function () {\n          db.replicate.from(remote, function () {\n            db.get(doc1._id, { conflicts: true }, function (err, res) {\n              should.exist(res._conflicts);\n              db.query(queryFun, function (err, res) {\n                should.exist(res.rows[0].value);\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Map only documents with _conflicts (#1000)', function (done) {\n      var docs1 = [\n        {\n          _id: '1',\n          foo: 'bar'\n        },\n        {\n          _id: '2',\n          name: 'two'\n        }\n      ];\n      var doc2 = {\n        _id: '1',\n        foo: 'baz'\n      };\n      var queryFun = function (doc) {\n        if (doc._conflicts) {\n          emit(doc._id, doc._conflicts);\n        }\n      };\n      var db = new PouchDB(dbs.name);\n      var remote = new PouchDB(dbs.remote);\n      db.bulkDocs({ docs: docs1 }, function (err, res) {\n        var revId1 = res[0].rev;\n        remote.post(doc2, function (err, res) {\n          var revId2 = res.rev;\n          db.replicate.from(remote, function () {\n            db.get(docs1[0]._id, { conflicts: true }, function (err, res) {\n              var winner = res._rev;\n              var looser = winner === revId1 ? revId2 : revId1;\n              should.exist(res._conflicts);\n              db.query(queryFun, function (err, res) {\n                res.rows.should.have.length(1, 'One doc with conflicts');\n                res.rows[0].key.should\n                  .equal('1', 'Correct document with conflicts.');\n                res.rows[0].value.should.deep\n                  .equal([looser], 'Correct conflicts included.');\n                done();\n              });\n            });\n          });\n        });\n      });\n    });\n\n    it('Test view querying with limit option', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { foo: 'bar' },\n          { foo: 'bar' },\n          { foo: 'baz' }\n        ]\n      }, null, function () {\n        db.query(function (doc) {\n          if (doc.foo === 'bar') {\n            emit(doc.foo);\n          }\n        }, { limit: 1 }, function (err, res) {\n          res.total_rows.should.equal(2, 'Correctly returns total rows');\n          res.rows.should.have.length(1, 'Correctly limits returned rows');\n          done();\n        });\n      });\n    });\n\n    it('Query non existing view returns error', function (done) {\n      var db = new PouchDB(dbs.name);\n      var doc = {\n        _id: '_design/barbar',\n        views:\n          { scores:\n            { map: 'function (doc) { if (doc.score) ' +\n                   '{ emit(null, doc.score); } }' } }\n      };\n      db.post(doc, function () {\n        db.query('barbar/dontExist', { key: 'bar' }, function (err) {\n          if (!err.name) {\n            err.name = err.error;\n            err.message = err.reason;\n          }\n          err.name.should.be.a('string');\n          err.message.should.be.a('string');\n          done();\n        });\n      });\n    });\n\n    it('Special document member _doc_id_rev', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: [{ foo: 'bar' }] }, null, function () {\n        db.query(function (doc) {\n          if (doc.foo === 'bar') {\n            emit(doc.foo);\n          }\n        }, { include_docs: true }, function (err, res) {\n          should.not.exist(res.rows[0].doc._doc_id_rev);\n          done();\n        });\n      });\n    });\n\n    it('If reduce function returns 0', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({ docs: [{ foo: 'bar' }] }, null, function () {\n        db.query({\n          map: function (doc) {\n            emit(doc.foo);\n          },\n          reduce: function () {\n            return 0;\n          }\n        }, function (err, data) {\n          should.not.equal(data.rows[0].value, null, 'value is null');\n          done();\n        });\n      });\n    });\n\n    it('Testing skip with a view', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { foo: 'bar' },\n          { foo: 'baz' },\n          { foo: 'baf' }\n        ]\n      }, null, function () {\n        db.query(function (doc) {\n          emit(doc.foo, null);\n        }, { skip: 1 }, function (err, data) {\n          should.not.exist(err);\n          data.rows.should.have.length(2);\n          done();\n        });\n      });\n    });\n\n    it('Testing skip with allDocs', function (done) {\n      var db = new PouchDB(dbs.name);\n      db.bulkDocs({\n        docs: [\n          { foo: 'bar' },\n          { foo: 'baz' },\n          { foo: 'baf' }\n        ]\n      }, null, function () {\n        db.allDocs({ skip: 1 }, function (err, data) {\n          should.not.exist(err);\n          data.rows.should.have.length(2);\n          done();\n        });\n      });\n    });\n\n    it('Destroy view when db created with {name: foo}', function () {\n      var db = new PouchDB({name: dbs.name});\n      var doc = {\n        _id: '_design/index',\n        views: {\n          index:\n          { map: 'function (doc) { emit(doc._id); }' }\n        }\n      };\n      return db.put(doc).then(function () {\n        return db.query('index');\n      }).then(function () {\n        return db.destroy();\n      });\n    });\n\n    it('Map documents on 0/null/undefined/empty string', function (done) {\n      var db = new PouchDB(dbs.name);\n      var docs = [\n        {\n          _id: 'doc0',\n          num: 0\n        },\n        {\n          _id: 'doc1',\n          num: 1\n        },\n        { _id: 'doc2' },\n        {\n          _id: 'doc3',\n          num: null\n        },\n        {\n          _id: 'doc4',\n          num: ''\n        }\n      ];\n      db.bulkDocs({ docs: docs }, function () {\n        var mapFunction = function (doc) {\n          emit(doc.num, null);\n        };\n        db.query(mapFunction, {\n          key: 0,\n          include_docs: true\n        }, function (err, data) {\n          data.rows.should.have.length(1);\n          data.rows[0].doc._id.should.equal('doc0');\n        });\n        db.query(mapFunction, {\n          key: null,\n          include_docs: true\n        }, function (err, data) {\n          data.rows.should.have.length(2);\n          data.rows[0].doc._id.should.equal('doc2');\n          data.rows[1].doc._id.should.equal('doc3');\n        });\n        db.query(mapFunction, {\n          key: '',\n          include_docs: true\n        }, function (err, data) {\n          data.rows.should.have.length(1);\n          data.rows[0].doc._id.should.equal('doc4');\n        });\n        db.query(mapFunction, {\n          key: undefined,\n          include_docs: true\n        }, function (err, data) {\n          data.rows.should.have.length(5);\n          // everything\n          done();\n        });\n      });\n    });\n    if (typeof window === 'undefined' && !process.browser) {\n      var fs = require('fs');\n      it(\"destroy using prototype\", function () {\n        var db = new PouchDB(dbs.name + 1);\n        var doc = {\n          _id: '_design/barbar',\n          views: {\n            scores: {\n              map: function (doc) {\n                if (doc.score) {\n                  emit(null, doc.score);\n                }\n              }.toString(),\n              reduce: '_sum'\n            }\n          }\n        };\n        return db.bulkDocs([doc, {score: 3}, {score: 5}]).then(function () {\n          return db.query('barbar/scores');\n        }).then(function (a) {\n          a.rows[0].value.should.equal(8);\n          return db.destroy();\n        }).then(function () {\n          fs.readdirSync('./tmp').should.have.length(0);\n        });\n      });\n    }\n  });\n});\n"
  },
  {
    "path": "test/test.js",
    "content": "/*jshint expr:true */\n'use strict';\n\nvar SocketPouch = require('../lib/client');\n\nwindow.PouchDB = require('pouchdb')\n  .plugin(require('pouchdb-legacy-utils'));\n\nwindow.PouchDB.adapter('socket', SocketPouch);\nwindow.PouchDB.preferredAdapters = ['socket'];\n\nwindow.PouchDB = window.PouchDB.defaults({\n  url: 'ws://localhost:8080'\n});"
  },
  {
    "path": "test/webrunner.js",
    "content": "/* global mocha: true */\n\n(function () {\n  'use strict';\n  var runner = mocha.run();\n  window.results = {\n    browser: navigator.userAgent,\n    lastPassed: '',\n    passed: 0,\n    failed: 0,\n    failures: []\n  };\n\n  runner.on('pass', function (e) {\n    window.results.lastPassed = e.title;\n    window.results.passed++;\n  });\n\n  runner.on('fail', function (e) {\n    window.results.failed++;\n    window.results.failures.push({\n      title: e.title,\n      message: e.err.message,\n      stack: e.err.stack\n    });\n  });\n\n  runner.on('end', function () {\n    window.results.completed = true;\n    window.results.passed++;\n  });\n})();\n\n\n"
  }
]